@tomtom-org/maps-sdk 0.46.2 → 0.46.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{indexedMagnitudes as e,iconToTrafficIncidentCategory as t,generateId as i,generateTomTomHeaders as r,poiCategoriesToID as s,bboxFromCoordsArray as a,bboxCenter as o,TomTomConfig as n,formatDuration as l,getPosition as c,formatDistance as h,mergeFromGlobal as u}from"@tomtom-org/maps-sdk/core";import{isNil as d,remove as p,isEmpty as _,omit as y,isEqual as f,omitBy as m}from"lodash-es";import{setWorkerCount as A,Map as g,getRTLTextPluginStatus as E,setRTLTextPlugin as I}from"maplibre-gl";import{version as R}from"maplibre-gl/package.json";import{mask as T,difference as L,featureCollection as S,bearing as O}from"@turf/turf";const N=["road_category","road_subcategory","relative_speed","left_hand_traffic","road_closure","absolute_speed","part_of_two_way_road","openlr","display_class"],b=e=>{const{properties:t}=e;return{id:e.id,type:e.type,geometry:e.geometry,properties:{roadCategory:t?.road_category,leftHandTraffic:Boolean(t?.left_hand_traffic),roadClosure:Boolean(t?.road_closure),relativeSpeed:t?.relative_speed,...t?.road_subcategory&&{roadSubcategory:t.road_subcategory},...t?.absolute_speed&&{absoluteSpeed:t.absolute_speed},...t?.part_of_two_way_road&&{partOfTwoWayRoad:Boolean(t.part_of_two_way_road)},...t?.openlr&&{openlr:t.openlr},...t?.display_class&&{displayClass:t.display_class}}}},C=["icon_category","left_hand_traffic","magnitude_of_delay","road_category","road_subcategory","id","description","delay","part_of_two_way_road","start_time","end_time","probability_of_occurrence","number_of_reports","last_report_time","average_speed_kmph","openlr","time_validity","display_class"],v={other:0,accident:1,fog:2,danger:3,rain:4,frost:5,jam:6,"lane-closed":7,"road-closed":8,roadworks:9,wind:10,flooding:11,"animals-on-road":12,"narrow-lanes":13,"broken-down-vehicle":14},w=r=>{const{properties:s}=r;return{id:r.id,type:r.type,geometry:r.geometry,properties:{id:s.id??i(),description:s?.description_0??"",category:t(s?.icon_category_0),magnitudeOfDelay:e[s?.magnitude_of_delay],roadCategory:s?.road_category,roadSubcategory:s?.road_subcategory,leftHandTraffic:Boolean(s?.left_hand_traffic),...s?.delay&&{delayInSeconds:s.delay},...s?.part_of_two_way_road&&{partOfTwoWayRoad:Boolean(s.part_of_two_way_road)},...s?.start_time&&{startTime:new Date(s.start_time)},...s?.end_time&&{endTime:new Date(s.end_time)},...s?.probability_of_occurrence&&{probabilityOfOccurrence:s.probability_of_occurrence},...s?.number_of_reports&&{numberOfReports:s.number_of_reports},...s?.last_report_time&&{lastReportTime:new Date(s.last_report_time)},...s?.average_speed_kmph&&{averageSpeedKmph:s.average_speed_kmph},...s?.openlr&&{openlr:s.openlr},...s?.time_validity&&{timeValidity:s.time_validity},...s?.display_class&&{displayClass:s.display_class},...s?.point_type&&{pointType:s.point_type}}}},M=e=>new Error(`Trying to ${e} while it is not in the map style. Did you exclude it when loading the map?`),D=()=>"undefined"!=typeof document&&"undefined"!=typeof DOMParser&&"undefined"!=typeof btoa,P=e=>{if(!D())return;const t=document.createElement("img");return t.src=`data:image/svg+xml;base64,${btoa((new XMLSerializer).serializeToString(e))}`,t},U=e=>(new DOMParser).parseFromString(e,"image/svg+xml").documentElement,x=e=>{const t=U('<svg xmlns="http://www.w3.org/2000/svg" width="120" height="140">\n <path id="background" d="M63.95 137.516c6.556-12.737 19.098-21.09 30.828-29.388C110.046 97.324 120 79.603 120 59.574 120 26.671 93.138 0 60 0S0 26.671 0 59.574c0 20.029 9.954 37.75 25.22 48.55 11.734 8.302 24.274 16.652 30.83 29.388 1.706 3.316 6.194 3.316 7.9 0z"\n fill="#1988cf"/>\n <path id="outline" d="M91.298 103.272C105.052 93.544 114 77.596 114 59.574c0-29.61-24.176-53.617-54-53.617S6 29.964 6 59.574c0 18.022 8.95 33.97 22.7 43.698l2.27 1.601c10.172 7.153 21.922 15.423 29.03 27.416 7.104-11.993 18.858-20.259 29.03-27.416l2.268-1.601zm1.468 6.274c-11.13 7.845-22.632 15.957-28.816 27.966-1.706 3.316-6.194 3.316-7.9 0-6.182-12.009-17.686-20.121-28.816-27.966l-2.016-1.422C9.954 97.324 0 79.603 0 59.574 0 26.671 26.862 0 60 0s60 26.671 60 59.574c0 20.029-9.954 37.75-25.222 48.55l-2.016 1.422z"\n fill-opacity=".3"/>\n</svg>\n');return e?.fillColor&&t.querySelector("#background")?.setAttribute("fill",e.fillColor),e?.outlineColor&&t.querySelector("#outline")?.setAttribute("fill",e.outlineColor),void 0!==e?.outlineOpacity&&t.querySelector("#outline")?.setAttribute("fill-opacity",e.outlineOpacity.toString()),t};const F=e=>(function(e){if(d(e))throw new Error(`${e} must not be null/undefined. Something went wrong with its initialization.`)}(e),e);class H{constructor(e,t,i){this.id=e,this.spec=t,this.runtimeSource=i}ensureAddedToMap(e){this.runtimeSource||(!e.getSource(this.id)&&this.spec&&e.addSource(this.id,this.spec),this.runtimeSource=e.getSource(this.id))}}class W{constructor(e,t,i){this.map=e,this.source=t,this._layerSpecs=i,this._updateSourceAndLayerIDs()}isAnyLayerVisible(e){return this.getLayerSpecs(e).some(e=>this.isLayerVisible(e))}areAllLayersVisible(e){return this.getLayerSpecs(e).every(e=>this.isLayerVisible(e))}getLayerSpecs(e){return e?this._layerSpecs.filter(e):this._layerSpecs}_updateSourceAndLayerIDs(){this._sourceAndLayerIDs={sourceID:this.source.id,layerIDs:this._layerSpecs.map(e=>e.id)}}isLayerVisible(e){return"none"!==this.map.getLayoutProperty(e.id,"visibility")}setLayersVisible(e,t){for(const i of this.getLayerSpecs(t))this.map.setLayoutProperty(i.id,"visibility",e?"visible":"none",{validate:!1})}get sourceAndLayerIDs(){return this._sourceAndLayerIDs}equalSourceAndLayerIDs(e){return this.sourceAndLayerIDs.sourceID===e.sourceAndLayerIDs.sourceID&&this.sourceAndLayerIDs.layerIDs.length===e.sourceAndLayerIDs.layerIDs.length&&this.sourceAndLayerIDs.layerIDs.every((t,i)=>t===e.sourceAndLayerIDs.layerIDs[i])}}const G=(e,t)=>e.getStyle().layers.filter(e=>t.includes(e?.source));class B extends W{constructor(e,t,i){let r=G(e,[t.id]);i&&(r=r.filter(i)),super(e,new H(t.id,e.getStyle().sources[t.id],t),r)}}class k extends W{constructor(e,t,i,r){super(e,new H(t,i),r.map(e=>({...e,source:t})))}ensureLayersAddedToMap(){for(const e of this._layerSpecs)this.map.getLayer(e.id)||this.map.addLayer(e,e.beforeID)}ensureAddedToMapWithVisibility(e,t){this.source.ensureAddedToMap(this.map),t&&(this.ensureLayersAddedToMap(),this.setLayersVisible(e))}}const V={type:"FeatureCollection",features:[]};class Y extends k{constructor(e,t,i,r=!0){super(e,t,{type:"geojson",data:V,promoteId:"id"},i),this.shownFeatures=V,this.ensureAddedToMapWithVisibility(!1,r)}show(e){this.shownFeatures=e,F(this.source.runtimeSource).setData(e),this.setLayersVisible(!!e.features.length)}clear(){this.show(V)}findFeature(e){return"index"in e?this.shownFeatures.features[e.index]:"id"in e?this.shownFeatures.features.find(t=>t.id===e.id):void 0}putEventState(e){if("put"===(e.mode??"put"))for(const i of this.shownFeatures.features)i.properties?.eventState===e.state&&delete i.properties.eventState;const t=this.findFeature(e);t&&(t.properties={...t.properties,eventState:e.state}),!1!==e.show&&this.show(this.shownFeatures)}cleanEventState(e){const t=this.findFeature(e);t?.properties?.eventState&&(delete t?.properties?.eventState,!1!==e?.show&&this.show(this.shownFeatures))}cleanEventStates(e){let t=!1;for(const i of this.shownFeatures.features)e?.states&&!e.states.includes(i.properties?.eventState)||(delete i.properties?.eventState,t=!0);!1!==e?.show&&t&&this.show(this.shownFeatures)}}const z=async e=>{e.mapReady||(await e.mapLibreMap.once("styledata"),await z(e))},K=e=>{for(const i of e)if(i&&Object.keys(i.properties).length)for(const e in i.properties)if("string"==typeof i.properties[e])try{i.properties[e]=JSON.parse(i.properties[e])}catch(t){}},$=(e,t,i)=>{const r=e.id;e.maxzoom===t.maxzoom&&e.minzoom===t.minzoom||i.setLayerZoomRange(r,e.minzoom??i.getMinZoom(),e.maxzoom??i.getMaxZoom()),i.setFilter(r,e.filter,{validate:!1});for(const s of Object.keys(t.layout??[]))e.layout?.[s]||i.setLayoutProperty(r,s,void 0,{validate:!1});for(const s of Object.keys(t.paint??[]))e.paint?.[s]||i.setPaintProperty(r,s,void 0,{validate:!1});for(const[s,a]of Object.entries(e.paint??[]))i.setPaintProperty(r,s,a,{validate:!1});for(const[s,a]of Object.entries(e.layout??[]))i.setLayoutProperty(r,s,a,{validate:!1})},j=(e,t,i)=>{e.forEach((e,r)=>$(e,t[r],i))},q=(e,t)=>{const i=/* @__PURE__ */new Set,r=e=>{t.getLayer(e.id)||t.addLayer({...e,layout:{...e.layout,visibility:"none"}},e.beforeID),i.add(e.id)},s={};for(e.forEach(e=>{e.beforeID?i.has(e.beforeID)||t.getLayer(e.beforeID)?(i.add(e.beforeID),r(e)):s[e.beforeID]?s[e.beforeID].push(e):s[e.beforeID]=[e]:r(e)});Object.keys(s).length>0;){const e=Object.keys(s).filter(e=>i.has(e));if(!e.length)return void console.error(`Some layers cannot be added. Check for non-existing layers, or circular beforeID dependencies for the following: ${JSON.stringify(Object.keys(s))}`);e.forEach(e=>{s[e].forEach(e=>r(e)),delete s[e]})}},X=(e,t)=>{switch(typeof e){case"undefined":return{type:"standard",include:[t]};case"string":return{type:"standard",id:e,include:[t]};default:if("standard"===e.type)return e.include?{...e,include:[...e.include,t]}:{...e,include:[t]};throw(e=>new Error(`Trying to add style module ${e} to the custom style!`))(t)}},Z=async(e,t,i)=>{if(!e.mapLibreMap.getSource(t)){const r=e.mapLibreMap;r.isStyleLoaded()||await r.once("idle"),e.setStyle(X(e.getStyle(),i)),await(async(e,t)=>{e.mapLibreMap.getSource(t)&&e.mapLibreMap.isSourceLoaded(t)||await e.mapLibreMap.once("sourcedata")})(e,t),await r.once("styledata");for(const e of G(r,[t]))r.setLayoutProperty(e.id,"visibility","none",{validate:!1});await r.once("styledata")}},J=async(e,t,i,r,s)=>{if(!i)return void console.warn(`addOrUpdateImage called with empty image for ID ${t}`);const a=e=>{r.hasImage(t)||r.addImage(t,e,s)},o=e=>{e.complete?e.naturalWidth>0?a(e):console.warn(`Failed to load image for ID ${t}`):(e.onload=()=>a(e),e.onerror=()=>console.warn(`Failed to load image for ID ${t}`))};if("string"==typeof i)if(i.includes("<svg")){o(P(U(i)))}else a((await r.loadImage(i)).data);else o(i)},Q=e=>{switch(e){case"standardDark":case"drivingDark":case"monoDark":case"satellite":return"dark";default:return"light"}},ee=e=>{if("string"==typeof e)return Q(e);const t=e;return t?.id?Q(t.id):"light"};class te{constructor(e,t,i){this._initializing=!0,this.moduleReady=!1,this.sourceType=e,this.tomtomMap=t,this.eventsProxy=t._eventsProxy,this.mapLibreMap=t.mapLibreMap,this.initSourcesWithLayers(i),this.applyConfig(i),this.tomtomMap.addStyleChangeHandler({onStyleAboutToChange:()=>{this.moduleReady=!1},onStyleChanged:()=>this.restoreDataAndConfig()}),this._initializing=!1}initSourcesWithLayers(e,t){this.moduleReady=!1,this.sourcesWithLayers=this._initSourcesWithLayers(e,t),this._sourceAndLayerIDs=Object.fromEntries(Object.entries(this.sourcesWithLayers).map(([e,t])=>[e,t.sourceAndLayerIDs])),t&&this.eventsProxy.updateIfRegistered(this.sourcesWithLayers),this.tomtomMap.mapReady&&(this.moduleReady=!0)}async waitUntilModuleReady(){await z(this.tomtomMap),this.moduleReady||await new Promise(e=>{const t=setInterval(()=>{this.tomtomMap.mapReady&&this.moduleReady&&(clearInterval(t),e())},200)})}applyConfig(e){this.config=this._applyConfig(e)}resetConfig(){this.applyConfig(void 0)}async restoreDataAndConfig(){this.moduleReady=!1,"geojson"===this.sourceType?requestAnimationFrame(()=>{this.restoreDataAndConfigImpl()}):this.restoreDataAndConfigImpl()}restoreDataAndConfigImpl(){this.initSourcesWithLayers(this.config,!0),this._applyConfig(this.config)}getConfig(){return this.config&&{...this.config}}get sourceAndLayerIDs(){return this._sourceAndLayerIDs}}class ie{constructor(e,t,i,r){this.eventProxy=e,this.sourceWithLayers=t,this.config=i,this.mapping=r}on(e,t){if(this.mapping){const i=this.mapping;this.eventProxy.addEventHandler(this.sourceWithLayers,(e,...r)=>t(i(e),...r),e,this.config)}else this.eventProxy.addEventHandler(this.sourceWithLayers,t,e,this.config)}off(e){this.eventProxy.remove(this.sourceWithLayers,e)}}class re{constructor(){this.interactiveLayerIDs=[],this.handlers={},this.findHandlers=(e,t,i)=>t&&i&&e.flatMap(e=>{const r=this.handlers[t]?.[e];return 1===r?.length?r:this.handlers[t]?.[e]?.filter(e=>e.layerIDs.includes(i))||[]})||[]}ensureInteractiveLayerIDsAdded(e){e._layerSpecs.forEach(e=>{this.interactiveLayerIDs.includes(e.id)||this.interactiveLayerIDs.push(e.id)})}addEventHandler(e,t,i,r){this.ensureInteractiveLayerIDsAdded(e);const s=e.source.id;this.handlers[s]||(this.handlers[s]={[i]:[]}),this.handlers[s][i]??=[],this.handlers[s][i]?.push({sourceWithLayers:e,layerIDs:e._layerSpecs.map(e=>e.id),fn:t,config:r})}remove(e,t){const i=this.handlers[e.source.id]?.[t];i&&(p(i,t=>{return i=e._layerSpecs,t.layerIDs.every((e,t)=>e===i[t].id);var i}),i.length||(delete this.handlers[e.source.id]?.[t],_(this.handlers[e.source.id])&&delete this.handlers[e.source.id]));for(const r of e._layerSpecs)p(this.interactiveLayerIDs,e=>r.id===e)}removeAll(){this.interactiveLayerIDs=[],this.handlers={}}hasSourceID(e){return!!this.handlers[e]}updateIfRegistered(e){for(const t of Object.values(e)){const e=this.handlers[t.source.id];if(e)for(const i of Object.values(e))for(const e of i)t.equalSourceAndLayerIDs(e.sourceWithLayers)&&(e.sourceWithLayers=t)}}}const se=e=>"click"===e||"contextmenu"===e,ae=(e,t,i,r="updateInProps")=>{const{feature:s,index:a}=((e,t)=>{for(let i=0;i<e.length;i++){const r=e[i];if(r.id===t)return{feature:r,index:i}}})(i,t)||{};if(s&&(!se(s.properties?.eventState)||se(e))){const t={...s,properties:"updateInProps"===r?{...s?.properties,eventState:e}:y(s?.properties,"eventState")};return i.splice(a,1,t),a}},oe=(e,t,i)=>{const r=[...i.shownFeatures.features],s=ae(e,t.id,r,"removeFromProps");d(s)||i.show({...i.shownFeatures,features:r})},ne=(e,t,i,r,s)=>{if(t&&r instanceof Y){const n=[...r.shownFeatures.features],l=ae(e,t.id,n);return!i||(o=t,(a=i)&&o&&a.id===o.id)||(s===r?ae(e,i.id,n,"removeFromProps"):s instanceof Y&&oe(e,i,s)),r.show({...r.shownFeatures,features:n}),{feature:n[l],index:l}}var a,o;return i&&s instanceof Y&&oe(e,i,s),{feature:t}},le={precisionMode:"box",paddingBoxPx:5,cursorOnHover:"pointer",cursorOnMouseDown:"grabbing",cursorOnMap:"default",longHoverDelayAfterMapMoveMS:800,longHoverDelayOnStillMapMS:300};class ce extends re{constructor(e,t={}){super(),this.enabled=!0,this.firstDelayedHoverSinceMapMove=!0,this.map=e,this.mapCanvas=e.getCanvas(),this.config={...le,...t},this.mapCanvas.style.cursor=this.config.cursorOnMap,this.lastCursorStyle=this.config.cursorOnMap,this.listenToEvents()}listenToEvents(){this.map.on("mousemove",e=>this.onMouseMove(e)),this.map.on("movestart",()=>this.onMouseStart()),this.map.on("mouseout",()=>this.onMouseOut()),this.map.on("mouseover",e=>this.onMouseMove(e)),this.map.on("mousedown",()=>this.onMouseDown()),this.map.on("mouseup",()=>this.onMouseUp()),this.map.on("click",e=>this.onMapClick("click",e)),this.map.on("contextmenu",e=>this.onMapClick("contextmenu",e))}enable(e){this.enabled=e,e||this.clearLongHoverTimeout()}toPaddedBounds(e){const t=this.config.paddingBoxPx;return[[e.x-t,e.y+t],[e.x+t,e.y-t]]}isEnabled(){return this.enabled&&!this.map.isMoving()}getRenderedFeatures(e){if(!this.interactiveLayerIDs.length)return[];const t={layers:this.interactiveLayerIDs,validate:!1},i=this.config.precisionMode,r="point-then-box"===i||"point"===i?this.map.queryRenderedFeatures(e,t):[];return r.length||"point"===i?r:this.map.queryRenderedFeatures(this.toPaddedBounds(e),t)}clearLongHoverTimeout(){window.clearTimeout(this.longHoverTimeoutHandlerID)}restartLongHoverTimeout(){this.clearLongHoverTimeout(),this.longHoverTimeoutHandlerID=window.setTimeout(()=>this.handleLongHoverTimeout(),this.firstDelayedHoverSinceMapMove?this.config.longHoverDelayAfterMapMoveMS:this.config.longHoverDelayOnStillMapMS)}handleLongHoverTimeout(){if(this.firstDelayedHoverSinceMapMove=!1,this.hoveringSourceWithLayers){const e=ne("long-hover",this.hoveringFeature,void 0,this.hoveringSourceWithLayers,void 0);this.findHandlers(["long-hover"],this.hoveringFeature?.source,this.hoveringFeature?.layer.id).forEach(t=>t.fn(e.feature,this.hoveringLngLat,this.hoveringFeatures,this.hoveringSourceWithLayers))}}onMouseStart(){this.firstDelayedHoverSinceMapMove=!0,this.clearLongHoverTimeout()}onMouseOut(){this.clearLongHoverTimeout()}onMouseDown(){this.lastCursorStyle=this.mapCanvas.style.cursor,this.mapCanvas.style.cursor=this.config.cursorOnMouseDown}onMouseUp(){this.mapCanvas.style.cursor=this.lastCursorStyle}onMouseMove(e){if(!this.isEnabled())return;this.hoveringFeatures=this.getRenderedFeatures(e.point),K(this.hoveringFeatures);const[t]=this.hoveringFeatures;if(t&&!this.hasSourceID(t.source))return;const{hoverChanged:i,mouseInMotionOverHoveredFeature:r}=((e,t,i,r)=>{if(t){if(!r)return{hoverChanged:!0};if(t.id&&t.id!==r.id||t.properties.id&&t.properties.id!==r.properties.id||t.source!==r.source||t.layer.id!==r.layer.id)return{hoverChanged:!0};if(i&&(e.x-i.x!=0||e.y-i.y!=0))return{mouseInMotionOverHoveredFeature:!0}}else if(r)return{hoverChanged:!0};return{}})(e.point,t,this.hoveringPoint,this.hoveringFeature);if(i||r){this.hoveringLngLat=e.lngLat,this.hoveringPoint=e.point;const s=this.hoveringFeature;this.hoveringFeature=t;const a=this.hoveringSourceWithLayers,o=this.findHandlers(["hover","hover-move","long-hover","click","contextmenu"],t?.source,t?.layer.id)?.[0];if(this.hoveringSourceWithLayers=o?.sourceWithLayers,i){this.updateHoverCursor(o?.config);const i=ne("hover",this.hoveringFeature,s,this.hoveringSourceWithLayers,a),r=this.findHandlers(["hover"],t?.source,t?.layer.id);for(const t of r)t.fn(i.feature,e.lngLat,this.hoveringFeatures,this.hoveringSourceWithLayers)}if(r){const t=this.findHandlers(["hover-move"],this.hoveringFeature?.source,this.hoveringFeature?.layer.id);for(const i of t)i.fn(this.hoveringFeature,e.lngLat,this.hoveringFeatures,this.hoveringSourceWithLayers)}this.restartLongHoverTimeout()}}updateHoverCursor(e){this.hoveringFeature?this.mapCanvas.style.cursor=e?.cursorOnHover??this.config.cursorOnHover:this.mapCanvas.style.cursor=this.config.cursorOnMap}onMapClick(e,t){if(!this.isEnabled())return;const i=this.getRenderedFeatures(t.point);K(i);const r=this.lastClickedFeature;this.lastClickedFeature=i[0];const s=this.lastClickedSourceWithLayers,a=this.findHandlers([e],this.lastClickedFeature?.source,this.lastClickedFeature?.layer.id);this.lastClickedSourceWithLayers=a?.[0]?.sourceWithLayers;const o=ne(e,this.lastClickedFeature,r,this.lastClickedSourceWithLayers,s);for(const n of a)n.fn(o.feature,t.lngLat,i,this.lastClickedSourceWithLayers)}}const he={country:"Places - Country name",lowestPlaceLabel:"Places - Village / Hamlet",poi:"POI",lowestLabel:"Borders - Treaty label",lowestRoadLine:"Tunnel - Railway outline",lowestBuilding:"Buildings - Underground"},ue="vectorTiles",de="hillshade",pe="vectorTiles",_e="vectorTilesIncidents",ye="vectorTilesFlow",fe=["POI","POI - Micro"],me={NATIVE_RESERVATION:"aboriginal_land",AIRPORT:"airport",AMUSEMENT_PARK:"amusement_park",ATM:"atm",CASH_DISPENSER:"atm",BANK:"bank",BAR:"bar",BEACH:"beach_resort",ACCESS_GATEWAY:"border_control",FRONTIER_CROSSING:"border_control",BUS_STOP:"bus_station",CAFE:"cafe",CAFE_PUB:"cafe",CAMPING_GROUND:"camping_ground",RENT_A_CAR_FACILITY:"car_rental",CASINO:"casino_and_gambling",CEMETERY:"cemetery",ELECTRIC_VEHICLE_STATION:"charging_location",CINEMA:"cinema",MOVIE_THEATER:"cinema",HEALTH_CARE_SERVICE:"clinic",CLOTHING_SHOP:"clothing_shop",COFFEE_SHOP:"coffee_shop",COLLEGE_OR_UNIVERSITY:"college_or_university",COLLEGE_UNIVERSITY:"college_or_university",AGRICULTURE:"commercial_area",BUSINESS_PARK:"commercial_area",COMMERCIAL_BUILDING:"commercial_area",COMPANY:"commercial_area",RESIDENTIAL_ACCOMMODATION:"commercial_area",EXHIBITION_CONVENTION_CENTER:"conference_center",CLUB_ASSOCIATION:"consumer_service",PUBLIC_AMENITY:"consumer_service",WELFARE_ORGANIZATION:"consumer_service",COURTHOUSE:"courthouse",COMMUNITY_CENTER:"cultural_center",CULTURAL_CENTER:"cultural_center",DENTIST:"dentist",DEPARTMENT_STORE:"department_store",DOCTOR:"doctor",EMERGENCY_MEDICAL_SERVICE:"emergency_ward_entrance",EMERGENCY_ROOM:"emergency_ward_entrance",FAST_FOOD:"fast_food",FERRY_TERMINAL:"ferry_terminal",FIRE_STATION_BRIGADE:"fire_station",FITNESS_CLUB_CENTER:"fitness_center",WINERY:"food_and_drinks_shop",CURRENCY_EXCHANGE:"foreign_exchange",EXCHANGE:"foreign_exchange",FUEL_FACILITIES:"fuel_station",GAS_STATION:"fuel_station",PETROL_STATION:"fuel_station",GOLD_EXCHANGE:"gold_exchange",GOLF_COURSE:"golf_course",EMBASSY:"government_office",GOVERNMENT_OFFICE:"government_office",HELIPAD_HELICOPTER_LANDING:"heliport_or_helipad",HISTORIC_SITE:"historic_site",HOLIDAY_RENTAL:"holiday_home",VACATION_RENTAL:"holiday_home",GENERAL_HOSPITAL_AND_POLYCLINIC:"hospital",HOSPITAL:"hospital",HOSPITAL_POLYCLINIC:"hospital",HOTEL_MOTEL:"hotel_or_motel",ICE_SKATING_RINK:"ice_rink",INDUSTRIAL_BUILDING:"industrial_area",PORT_WAREHOUSE_FACILITY:"industrial_area",PRIMARY_RESOURCE_UTILITY:"industrial_area",GEOGRAPHIC_FEATURE:"landmark",SHOPPING_CENTER:"mall",MANUFACTURING_FACILITY:"manufacturing_facility",MARINA:"marina",MARKET:"marketplace",MEDIA_FACILITY:"media_facility",MOUNTAIN_PASS:"mountain_pass",MUSEUM:"museum",NON_GOVERNMENTAL_ORGANIZATION:"ngo_office",CONCERT_HALL:"nightlife",ENTERTAINMENT:"nightlife",NIGHTLIFE:"nightlife",PARK_RECREATION_AREA:"park_and_recreation_area",TRAILS:"park_and_recreation_area",TRAIL_SYSTEM:"park_and_recreation_area",LEISURE_CENTER:"park_and_recreation_facility",WATER_SPORT:"park_and_recreation_facility",OPEN_PARKING_AREA:"parking_facility",PARKING_GARAGE:"parking_facility",PHARMACY:"pharmacy",POLICE_STATION:"police_station",POST_OFFICE:"post_office",PRISON_CORRECTIONAL_FACILITY:"prison",PROTECTED_AREA:"protected_land",PUB:"pub",LIBRARY:"public_library",PUBLIC_TRANSPORT_STOP:"public_transport_stop",RAILWAY_STATION:"railway_station",CHURCH:"religious_site",GURUDWARA:"religious_site",MOSQUE:"religious_site",PAGODA:"religious_site",PLACE_OF_WORSHIP:"religious_site",SYNAGOG:"religious_site",TEMPLE:"religious_site",RENT_A_CAR_PARKING:"rental_car_parking",RESEARCH_FACILITY:"research_facility",REST_AREA:"rest_and_service_area",RESTAURANT:"restaurant",RESTAURANT_AREA:"restaurant",SCHOOL:"school_or_kindergarten",SHOP:"shop_or_store",ADVENTURE_SPORTS_FACILITY:"sport_facility",ADVENTURE_SPORTS_VENUE:"sport_facility",SPORTS_CENTER:"sport_facility",TENNIS_COURT:"sport_facility",STADIUM:"stadium",SUPERMARKETS_HYPERMARKETS:"supermarket",SWIMMING_POOL:"swimming_pool",TAXI_STAND:"taxi_stand",OPERA_HOUSE:"theater",THEATER:"theater",TOLL_GATE:"toll_booth",IMPORTANT_TOURIST_ATTRACTION:"tourist_attraction",TOURIST_ATTRACTION:"tourist_attraction",TOURIST_INFORMATION_OFFICE:"tourist_information",TRUCK_STOP:"truck_stop",AUTOMOTIVE_DEALER:"vehicle_dealer",MOTORING_ORGANIZATION_OFFICE:"vehicle_inspection",TRAFFIC_CONTROL_DEPARTMENT:"vehicle_inspection",TRAFFIC_SERVICE_CENTER:"vehicle_inspection",TRANSPORT_AUTHORITY_VEHICLE_REGISTRATION:"vehicle_inspection",REPAIR_FACILITY:"vehicle_repair",CAR_WASH:"vehicle_wash",VETERINARIAN:"veterinary",HILL:"viewpoint",MOUNTAIN_PEAK:"viewpoint",SCENIC_PANORAMIC_VIEW:"viewpoint",WEIGH_STATION:"weighbridge",AQUATIC_ZOO:"zoo_or_aquarium",ARBORETA_BOTANICAL_GARDENS:"zoo_or_aquarium",ZOOS_ARBORETA_BOTANICAL_GARDEN:"zoo_or_aquarium"},Ae={...me,AIRFIELD:"airport",AIRLINE_ACCESS:"airport",PRIVATE_AIRPORT:"airport",PUBLIC_AIRPORT:"airport",ANIMAL_SHELTER:"animal_shelter",DIVERSIFIED_FINANCIALS:"bank",COCKTAIL_BAR:"bar",BEACH_CLUB:"beach_resort",SECURED_ENTRANCE:"border_control",INTERNET_CAFE:"cafe",CAFETERIA:"cafeteria",CARAVAN_SITE:"camping_ground",RECREATIONAL_CAMPING_GROUND:"camping_ground",REST_CAMP:"camping_ground",MAUSOLEUM_GRAVE:"cemetery",CHILD_CARE_FACILITY:"childcare",PRE_SCHOOL:"childcare",DRIVE_IN_MOVIES:"cinema",CHILDRENS_CLOTHES:"clothing_shop",MENS_CLOTHING:"clothing_shop",SPECIALTY_CLOTHING_SHOP:"clothing_shop",WOMENS_CLOTHING:"clothing_shop",JUNIOR_COLLEGE_COMMUNITY_COLLEGE:"college_or_university",COMEDY_CLUB:"comedy_club",ADVERTISING_COMPANY:"commercial_area",AGRICULTURAL_BUSINESS:"commercial_area",AGRICULTURAL_TECHNOLOGY:"commercial_area",AIRLINE_COMPANY:"commercial_area",APARTMENT_RENTAL:"commercial_area",AUTOMOBILE_COMPANY:"commercial_area",BUILDING:"commercial_area",BUSINESS_SERVICES:"commercial_area",BUS_CHARTER_COMPANY:"commercial_area",CABLE_TELEPHONE_COMPANY:"commercial_area",CLEANING_SERVICES:"commercial_area",COMPUTER_DATA_SERVICES:"commercial_area",CONSTRUCTION_COMPANY:"commercial_area",DELIVERY_SERVICE:"commercial_area",ELECTRONICS_COMPANY:"commercial_area",EQUIPMENT_RENTAL:"commercial_area",FARM:"commercial_area",FLATS_APARTMENT_COMPLEX:"commercial_area",HORTICULTURE:"commercial_area",IMPORT_EXPORT_AND_DISTRIBUTION:"commercial_area",INSURANCE_COMPANY:"commercial_area",INVESTMENT_ADVISOR:"commercial_area",LEGAL_SERVICES:"commercial_area",MINING_COMPANY:"commercial_area",MOVING_STORAGE_COMPANY:"commercial_area",OIL_NATURAL_GAS:"commercial_area",PHARMACEUTICAL_COMPANY:"commercial_area",PRIMARY_PRODUCER:"commercial_area",PUBLISHING_TECHNOLOGIES:"commercial_area",REAL_ESTATE_AGENT:"commercial_area",REAL_ESTATE_COMPANY:"commercial_area",RETIREMENT_COMMUNITY:"commercial_area",SERVICE_COMPANY:"commercial_area",SOFTWARE_COMPANY:"commercial_area",TAX_SERVICES:"commercial_area",TELECOMMUNICATIONS:"commercial_area",TRANSPORT_COMPANY:"commercial_area",TRAVEL_AGENT:"commercial_area",WEDDING_SERVICES:"commercial_area",PUBLIC_CALL_BOX:"consumer_service",PUBLIC_TOILET:"consumer_service",GENERAL_PRACTITIONER:"doctor",SPECIALIST:"doctor",AMBULANCE_UNIT:"emergency_ward_entrance",ROAD_RESCUE:"emergency_ward_entrance",MICROBREWERY:"food_and_drinks_shop",BATTLEFIELD:"historic_site",MEMORIAL:"historic_site",BUNGALOW_RENTAL:"holiday_home",CHALET_RENTAL:"holiday_home",COTTAGE_RENTAL:"holiday_home",VILLA_RENTAL:"holiday_home",HORSE_RIDING_CENTER:"horse_riding",BLOOD_BANK:"hospital",HOSPITAL_FOR_WOMEN_AND_CHILDREN:"hospital",HOSPITAL_OF_CHINESE_MEDICINE:"hospital",SPECIAL_HOSPITAL:"hospital",B_B_GUEST_HOUSE:"hotel_or_motel",CABINS_LODGES:"hotel_or_motel",HOSTEL:"hotel_or_motel",HOTEL:"hotel_or_motel",MOTEL:"hotel_or_motel",RESORT:"hotel_or_motel",ICE_CREAM_PARLOR:"ice_cream_shop",ICE_HOCKEY_ARENA:"ice_rink",CHEMICAL_COMPANY:"industrial_area",MECHANICAL_ENGINEERING:"industrial_area",QUARRY:"industrial_area",YOGURT_JUICE_BAR:"juice_bar",ARCH:"landmark",BAY:"landmark",BRIDGE:"landmark",CAPE:"landmark",COVE:"landmark",DAM:"landmark",DUNE:"landmark",ISLAND:"landmark",LOCALE:"landmark",MARSH:"landmark",MONUMENT:"landmark",OASIS:"landmark",OBSERVATORY:"landmark",PARKWAY:"landmark",PLAIN_FLAT:"landmark",PLATEAU:"landmark",RAPIDS:"landmark",REEF:"landmark",RESERVOIR:"landmark",RIVER_CROSSING:"landmark",ROCKS:"landmark",STATUE:"landmark",TOWER:"landmark",TUNNEL:"landmark",VALLEY:"landmark",WATER_HOLE:"landmark",WELL:"landmark",AUTOMOBILE_MANUFACTURING:"manufacturing_facility",MANUFACTURING_COMPANY:"manufacturing_facility",FARMERS_MARKET:"marketplace",FOOD_MARKET:"marketplace",INFORMAL_MARKET:"marketplace",PUBLIC_MARKET:"marketplace",MILITARY_AIRPORT:"military_airfield",FUNERAL_SERVICE_MORTUARIES:"mourning_facility",AMUSEMENT_PLACE:"nightlife",BETTING_STATION:"nightlife",CABARET_THEATER:"nightlife",DISCO_CLUB:"nightlife",FAIRGROUND:"nightlife",JAZZ_CLUB:"nightlife",KARAOKE_CLUB:"nightlife",MUSIC_CENTER:"nightlife",ADVENTURE_VEHICLE_TRAIL:"park_and_recreation_area",FISHING_HUNTING_AREA:"park_and_recreation_area",FOREST_AREA:"park_and_recreation_area",HIKING_TRAIL:"park_and_recreation_area",HISTORICAL_PARK:"park_and_recreation_area",HORSE_RIDING_TRAIL:"park_and_recreation_area",MOUNTAIN_BIKE_TRAIL:"park_and_recreation_area",PARK:"park_and_recreation_area",PICNIC_AREA:"park_and_recreation_area",RECREATION_AREA:"park_and_recreation_area",ROCK_CLIMBING_TRAIL:"park_and_recreation_area",WILDERNESS_AREA:"park_and_recreation_area",OPEN_CAR_PARKING_AREA:"parking_facility",BEAUTY_SALON:"personal_care_service",HAIRDRESSER:"personal_care_service",NAIL_SALON:"personal_care_service",PERSONAL_CARE_FACILITY:"personal_care_service",PERSONAL_SERVICE:"personal_care_service",SAUNA_SOLARIUM_MASSAGE:"personal_care_service",DRUG_STORE:"pharmacy",MARIJUANA_DISPENSARY:"pharmacy",MEDICINAL_MARIJUANA_DISPENSARY:"pharmacy",RECREATIONAL_MARIJUANA_DISPENSARY:"pharmacy",PLANETARIUM:"planetarium",COURIER_DROP_BOX:"post_depot",BUS_LINES:"public_transport_stop",PASSENGER_TRANSPORT_TICKET_OFFICE:"public_transport_stop",STREETCAR_STOP:"public_transport_stop",SUBWAY_STATION:"public_transport_stop",INTERNATIONAL_RAILROAD_STATION:"railway_station",NATIONAL_RAILROAD_STATION:"railway_station",STATION_ACCESS:"railway_station",URBAN_STATION:"railway_station",AFGHAN_RESTAURANT:"restaurant",AFRICAN_RESTAURANT:"restaurant",AMERICAN_RESTAURANT:"restaurant",ARABIAN_RESTAURANT:"restaurant",ARMENIAN_RESTAURANT:"restaurant",ASIAN_RESTAURANT:"restaurant",AUSTRALIAN_RESTAURANT:"restaurant",AUSTRIAN_RESTAURANT:"restaurant",BANQUET_ROOMS:"restaurant",BARBECUE_RESTAURANT:"restaurant",BASQUE_RESTAURANT:"restaurant",BELGIAN_RESTAURANT:"restaurant",BISTRO:"restaurant",BOLIVIAN_RESTAURANT:"restaurant",BRAZILIAN_RESTAURANT:"restaurant",BRITISH_RESTAURANT:"restaurant",BUFFET_RESTAURANT:"restaurant",BULGARIAN_RESTAURANT:"restaurant",BURMESE_RESTAURANT:"restaurant",CALIFORNIAN_RESTAURANT:"restaurant",CAMBODIAN_RESTAURANT:"restaurant",CANADIAN_RESTAURANT:"restaurant",CARIBBEAN_RESTAURANT:"restaurant",CATERING_SERVICES:"restaurant",CHICKEN_RESTAURANT:"restaurant",CHINESE_RESTAURANT:"restaurant",COLOMBIAN_RESTAURANT:"restaurant",CORSICAN_RESTAURANT:"restaurant",CREOLE_RESTAURANT:"restaurant",CREPERIE:"restaurant",CUBAN_RESTAURANT:"restaurant",CZECH_RESTAURANT:"restaurant",DANISH_RESTAURANT:"restaurant",DINNER_THEATER:"restaurant",DONGBEI_RESTAURANT:"restaurant",DOUGHNUT_RESTAURANT:"restaurant",DUTCH_RESTAURANT:"restaurant",EGYPTIAN_RESTAURANT:"restaurant",ENGLISH_RESTAURANT:"restaurant",ETHIOPIAN_RESTAURANT:"restaurant",FINNISH_RESTAURANT:"restaurant",FONDUE_RESTAURANT:"restaurant",FRENCH_RESTAURANT:"restaurant",FUSION_RESTAURANT:"restaurant",GERMAN_RESTAURANT:"restaurant",GREEK_RESTAURANT:"restaurant",GRILL_RESTAURANT:"restaurant",HAMBURGER_RESTAURANT:"restaurant",HAWAIIAN_RESTAURANT:"restaurant",HOT_POT_RESTAURANT:"restaurant",HUNAN_RESTAURANT:"restaurant",HUNGARIAN_RESTAURANT:"restaurant",INDIAN_RESTAURANT:"restaurant",INDONESIAN_RESTAURANT:"restaurant",INTERNATIONAL_RESTAURANT:"restaurant",IRANIAN_RESTAURANT:"restaurant",IRISH_RESTAURANT:"restaurant",ISRAELI_RESTAURANT:"restaurant",ITALIAN_RESTAURANT:"restaurant",JAMAICAN_RESTAURANT:"restaurant",JAPANESE_RESTAURANT:"restaurant",JEWISH_RESTAURANT:"restaurant",KOREAN_RESTAURANT:"restaurant",KOSHER_RESTAURANT:"restaurant",LATIN_AMERICAN_RESTAURANT:"restaurant",LEBANESE_RESTAURANT:"restaurant",MEDITERRANEAN_RESTAURANT:"restaurant",MEXICAN_RESTAURANT:"restaurant",MIDDLE_EASTERN_RESTAURANT:"restaurant",MONGOLIAN_RESTAURANT:"restaurant",MOROCCAN_RESTAURANT:"restaurant",NEPALESE_RESTAURANT:"restaurant",NORWEGIAN_RESTAURANT:"restaurant",ORGANIC_FOOD_RESTAURANT:"restaurant",ORIENTAL_RESTAURANT:"restaurant",PAKISTANI_RESTAURANT:"restaurant",PERUVIAN_RESTAURANT:"restaurant",PHILIPPINE_RESTAURANT:"restaurant",PIZZERIA:"restaurant",POLISH_RESTAURANT:"restaurant",POLYNESIAN_RESTAURANT:"restaurant",PORTUGUESE_RESTAURANT:"restaurant",PUB_FOOD:"restaurant",RUSSIAN_RESTAURANT:"restaurant",SALAD_BAR:"restaurant",SANDWICH_RESTAURANT:"restaurant",SCANDINAVIAN_RESTAURANT:"restaurant",SEAFOOD:"restaurant",SHANDONG_RESTAURANT:"restaurant",SICHUAN_RESTAURANT:"restaurant",SNACKS_RESTAURANT:"restaurant",SOUL_FOOD:"restaurant",SOUP_RESTAURANT:"restaurant",SPANISH_RESTAURANT:"restaurant",STEAK_HOUSE:"restaurant",SUSHI_RESTAURANT:"restaurant",SWEDISH_RESTAURANT:"restaurant",SWISS_RESTAURANT:"restaurant",SYRIAN_RESTAURANT:"restaurant",TAIWANESE_RESTAURANT:"restaurant",TAKEOUT_FOOD:"restaurant",TAPAS_RESTAURANT:"restaurant",TEPPANYAKI_RESTAURANT:"restaurant",THAI_RESTAURANT:"restaurant",TIBETAN_RESTAURANT:"restaurant",TUNISIAN_RESTAURANT:"restaurant",TURKISH_RESTAURANT:"restaurant",VEGETARIAN_RESTAURANT:"restaurant",VENEZUELAN_RESTAURANT:"restaurant",VIETNAMESE_RESTAURANT:"restaurant",WESTERN_RESTAURANT:"restaurant",ART_SCHOOL:"school_or_kindergarten",DANCE_STUDIO_SCHOOL:"school_or_kindergarten",DRIVING_SCHOOL:"school_or_kindergarten",HIGH_SCHOOL:"school_or_kindergarten",LANGUAGE_SCHOOL:"school_or_kindergarten",MIDDLE_SCHOOL:"school_or_kindergarten",PRIMARY_SCHOOL:"school_or_kindergarten",SENIOR_HIGH_SCHOOL:"school_or_kindergarten",VOCATIONAL_SCHOOL:"school_or_kindergarten",AGRICULTURAL_SUPPLIES:"shop_or_store",ANTIQUE_ART_SHOP:"shop_or_store",BAGS_LEATHERWEAR:"shop_or_store",BAKERY:"shop_or_store",BEAUTY_SUPPLIES:"shop_or_store",BOATING_EQUIPMENT_ACCESSORIES:"shop_or_store",BOOK_SHOP:"shop_or_store",BUTCHER:"shop_or_store",CAMERAS_PHOTOGRAPHY:"shop_or_store",CARPET_FLOOR_COVERINGS:"shop_or_store",CHRISTMAS_HOLIDAY_SHOP:"shop_or_store",COMPUTER_COMPUTER_SUPPLIES:"shop_or_store",CONSTRUCTION_MATERIAL_EQUIPMENT:"shop_or_store",CONSUMER_ELECTRONICS:"shop_or_store",CONVENIENCE_STORE:"shop_or_store",CURTAINS_TEXTILES:"shop_or_store",C_DS_DVD_VIDEOS:"shop_or_store",DELICATESSEN:"shop_or_store",DO_IT_YOURSELF_CENTERS:"shop_or_store",DRIVE_THROUGH_BOTTLE_SHOP:"shop_or_store",DRY_CLEANER:"shop_or_store",ELECTRICAL_APPLIANCES_SHOP:"shop_or_store",FACTORY_OUTLET:"shop_or_store",FISHMONGER:"shop_or_store",FLORISTS:"shop_or_store",FOOTWEAR_SHOE_REPAIRS:"shop_or_store",FURNITURE_HOME_FURNISHINGS:"shop_or_store",GARDEN_CENTERS_SERVICES:"shop_or_store",GIFTS_CARDS_NOVELTIES_SOUVENIRS:"shop_or_store",GLASSWARE_CERAMIC_SHOP:"shop_or_store",GLASS_WINDOWS_STORE:"shop_or_store",GREENGROCER:"shop_or_store",GROCERY_STORE:"shop_or_store",HARDWARE_STORE:"shop_or_store",HOBBY_SHOP:"shop_or_store",HOUSE_GARDEN_FURNITURE_FITTINGS:"shop_or_store",JEWELRY_CLOCKS_WATCHES:"shop_or_store",KITCHENS_BATHROOMS:"shop_or_store",LAUNDRY:"shop_or_store",LIGHTING_SHOPS:"shop_or_store",LOCAL_SPECIALITIES_SHOP:"shop_or_store",LOTTERY_SHOP:"shop_or_store",MEDICAL_SUPPLIES_EQUIPMENT:"shop_or_store",MOBILE_PHONE_SHOP:"shop_or_store",MUSIC_INSTRUMENTS_STORE:"shop_or_store",NEWSAGENTS_TOBACCONISTS:"shop_or_store",OFFICE_EQUIPMENT:"shop_or_store",OPTICIAN:"shop_or_store",OTHER_FOOD_SHOPS:"shop_or_store",PAINTING_DECORATING:"shop_or_store",PAWN_SHOP:"shop_or_store",PET_SUPPLIES:"shop_or_store",PHOTOCOPY_SHOP:"shop_or_store",PHOTO_LAB_DEVELOPMENT:"shop_or_store",RECYCLING_SHOP:"shop_or_store",RETAIL_OUTLET:"shop_or_store",SECURITY_PRODUCTS:"shop_or_store",SHOPPING_SERVICE:"shop_or_store",SPECIALTY_FOODS:"shop_or_store",SPORTS_EQUIPMENT_CLOTHING:"shop_or_store",TAILOR_SHOP:"shop_or_store",TOYS_GAMES_SHOP:"shop_or_store",VARIETY_STORE:"shop_or_store",VIDEO_RENTAL_SHOP:"shop_or_store",WHOLESALE_CLUB:"shop_or_store",WINE_SPIRITS:"shop_or_store",ATHLETICS_TRACK:"sport_facility",BASEBALL_PARK:"sport_facility",BASKETBALL_ARENA:"sport_facility",BOWLING_CENTER:"sport_facility",CRICKET_GROUND:"sport_facility",HOCKEY_CLUB:"sport_facility",HORSE_RACING_TRACK:"sport_facility",RACE_TRACK:"sport_facility",RUGBY_GROUND:"sport_facility",SNOOKER_POOL_BILLIARD:"sport_facility",THEMATIC_SPORT_CENTER:"sport_facility",FOOTBALL_STADIUM:"stadium",MOTOR_RACING_STADIUM:"stadium",MULTI_PURPOSE_STADIUM:"stadium",NETBALL_STADIUM:"stadium",SOCCER_STADIUM:"stadium",STOCK_EXCHANGE:"stock_exchange",TAXI_LIMOUSINE_SHUTTLE_SERVICE:"taxi_stand",TEA_HOUSE:"tea_house",AMPHITHEATER:"theater",CAVE:"tourist_attraction",MINERAL_HOT_SPRINGS:"tourist_attraction",NATURAL_TOURIST_ATTRACTION:"tourist_attraction",BOAT_LAUNCHING_RAMP:"transport_access",HARBOR:"transport_access",YACHT_BASIN:"transport_access",ATV_DEALER:"vehicle_dealer",BOAT_DEALER:"vehicle_dealer",BUS_DEALER:"vehicle_dealer",CAR_DEALER:"vehicle_dealer",MOTORCYCLE_DEALER:"vehicle_dealer",RECREATIONAL_VEHICLE_DEALER:"vehicle_dealer",TRUCK_DEALER:"vehicle_dealer",VAN_DEALER:"vehicle_dealer",ROAD_TRAFFIC_CONTROL_CENTER:"vehicle_inspection",BODYSHOP:"vehicle_repair",CAR_GLASS_REPLACEMENT_SHOP:"vehicle_repair",CAR_REPAIR_AND_SERVICE:"vehicle_repair",HOME_APPLIANCE_REPAIR:"vehicle_repair",MOTORCYCLE_REPAIR:"vehicle_repair",REPAIR_SHOP:"vehicle_repair",TIRE_SERVICE:"vehicle_repair",TRUCK_REPAIR_AND_SERVICE:"vehicle_repair",ANIMAL_SERVICES:"veterinary",RIDGE:"viewpoint",OTHER_WINTER_SPORT:"winter_sports",SKI_RESORT:"winter_sports",WILDLIFE_PARK:"zoo_or_aquarium",ZOO:"zoo_or_aquarium"},ge=e=>Ae[e],Ee="Noto-Bold",Ie=.8,Re="title",Te="iconID",Le=.7,Se=1.4,Oe="default_place",Ne={"icon-image":["get",Te],"icon-anchor":"bottom","icon-size":["interpolate",["linear"],["zoom"],8,.6,22,Ie],"icon-allow-overlap":!0,"icon-padding":0},be={"icon-translate":[0,5],"icon-translate-anchor":"viewport"},Ce={"text-optional":!0,"text-font":[Ee],"text-field":["get",Re],"text-justify":"auto","text-variable-anchor":["top","left","right"],"text-variable-anchor-offset":["top",[0,Le],"left",[Se,-1.4],"right",[-1.4,-1.4]],"text-size":["interpolate",["linear"],["zoom"],10,14,18,16],"text-padding":5},ve={"text-color":"#333333","text-halo-color":"#FFFFFF","text-halo-width":["interpolate",["linear"],["zoom"],6,1,10,1.5],"text-translate-anchor":"viewport"},we={type:"symbol",layout:{...Ne,...Ce},paint:{...be,...ve}},Me=(e,t)=>`${e}-${t}`,De=(e,t)=>{if(!e)return;const i=(e=>{try{if("string"==typeof e){if(e.includes("<svg")){const t=U(e),i=t.getAttribute("viewBox");if(i){const e=i.split(/\s+/);if(4===e.length)return{width:Number.parseFloat(e[2]),height:Number.parseFloat(e[3])}}const r=t.getAttribute("width"),s=t.getAttribute("height");if(r&&s)return{width:Number.parseFloat(r),height:Number.parseFloat(s)}}return null}return e.complete&&e.naturalWidth>0?{width:e.naturalWidth,height:e.naturalHeight}:null}catch(t){return console.warn("Failed to extract image dimensions:",t),null}})(e);if(!i)return;if("base-map"===t){return{heightScale:i.height/54,widthScale:i.width/54}}return{heightScale:i.height/140,widthScale:i.width/120}},Pe=e=>Boolean(e&&"availability"in e&&e.availability),Ue=e=>{const t=e.properties.poi?.categories?.[0];return"ELECTRIC_VEHICLE_STATION"===t&&Pe(e.properties.chargingPark)},xe=e=>{const t=e.properties.chargingPark;if(Pe(t)){const e=t.availability.chargingPointAvailability,i=e.statusCounts.Available??0;return{availableCount:i,totalCount:e.count,ratio:i/e.count}}},Fe=(e,t)=>`${e}/${t}`,He=e=>{const t=xe(e);return t?.ratio??0},We=e=>["case",[">=",["get","evAvailabilityRatio"],e?.threshold??0],"green","red"],Ge=(e,t,i,r)=>{const s=void 0!==r;return{top:s?[0,r]:[0,e],left:s?[r,i]:[t,i],right:s?[-r,i]:[-t,i]}},Be=(e,t,i,r)=>{const s=(e=>{if(!e)return Ie;if("number"==typeof e)return e;if(Array.isArray(e)){const t=e.at(-1);if("number"==typeof t)return t}return Ie})(e)/Ie,a="base-map"===i;if(a&&void 0!==r)return{"text-offset":[r,r]};const o=Se*s,n=Ge(Le*s,o,a?0:-o,r),l=["top",n.top,"left",n.left,"right",n.right];if(0===t.size)return{"text-variable-anchor-offset":l};const c=["case"];for(const[h,u]of t.entries()){const e=(a?1.4:Le)*u.heightScale,t=Se*u.widthScale,i=Ge(e,t,a?0:-t,r);c.push(["==",["get",Te],h],["literal",["top",i.top,"left",i.left,"right",i.right]])}return c.push(["literal",l]),{"text-variable-anchor-offset":c}},ke=(e,t,i,r,s)=>{const a=t?.text,o=t?.layers?.[i],n=s&&s.size>0,l={...e.layout};(n||void 0!==a?.offset)&&(delete l["text-offset"],delete l["text-variable-anchor-offset"],delete l["text-radial-offset"]);const c={...l,...o?.layout,...a?.size&&{"text-size":a.size},...a?.font&&{"text-font":a.font},"text-field":r};if(n||void 0!==a?.offset){const i=e.layout?.["icon-size"],r=s??/* @__PURE__ */new Map;Object.assign(c,Be(i,r,t?.theme,a?.offset))}return c},Ve=(e,t,i,r)=>{const s=t?.text,a=t?.layers?.[i],{textColor:o,haloColor:n}=(e=>({textColor:"dark"===e?"#FFFFFF":"#333333",haloColor:"dark"===e?"#333333":"#FFFFFF"}))(r);return{...e.paint,...!s?.color&&{"text-color":o},...!s?.haloColor&&{"text-halo-color":n},...s?.color&&{"text-color":s.color},...s?.haloColor&&{"text-halo-color":s.haloColor},...s?.haloWidth&&{"text-halo-width":s.haloWidth},...a?.paint}},Ye=["in",["get","eventState"],["literal",["click","contextmenu"]]],ze=e=>JSON.parse(JSON.stringify(e)?.replaceAll("name",Re)),Ke=["has","eventState"],$e="#3f9cd9",je={...we,filter:["!",Ke]},qe={...we,filter:Ke,layout:{...we.layout,"icon-size":["interpolate",["linear"],["zoom"],8,.8,22,1],"text-allow-overlap":!0},paint:{...we.paint,"text-color":$e}},Xe=(e,t,i,r,s)=>{const a=t?.text,o=t?.layers?.[i],n=((e,t)=>t?["case",["has","evAvailabilityText"],["format",["get",Re],{},"\n",{},["get","evAvailabilityText"],{"font-scale":1.1,"text-color":We(e?.evAvailability)}],["get",Re]]:["get",Re])(t,!0===t?.evAvailability?.enabled),l=a?.title&&"function"!=typeof a?.title?a.title:n;return{...e,layout:ke(e,t,i,l,s),paint:Ve(e,t,i,r),...o}},Ze=(e,t,i,r)=>{const s=((e,t)=>{const i=/* @__PURE__ */new Map,r=e?.icon?.categoryIcons??[];for(const s of r)if(s.image){const r=De(s.image,e?.theme);if(void 0!==r){const e=Me(s.id,t);if(i.set(e,r),s.availabilityLevel){const e=Me(`${s.id}-${s.availabilityLevel}`,t);i.set(e,r)}}}return i})(e,r);let a,o;if("base-map"===e?.theme){const e=(e=>{const t=e.getStyle().layers.find(e=>"POI"===e.id)||{},i=t.layout?.["text-size"];return{filter:["!",Ye],type:"symbol",paint:t.paint,layout:{...t.layout,"text-field":["get",Re],"icon-image":["get",Te],...i&&{"text-size":ze(i)}}}})(t);a=e,o={...e,filter:Ke,layout:{...e.layout,"text-allow-overlap":!0},paint:{...e.paint,"text-color":$e}}}else a=je,o=qe;return{main:Xe(a,e,"main",i,s),selected:Xe(o,e,"selected",i,s),...e?.layers?.additional}},Je=e=>{if(D())return P(x(e))},Qe=/* @__PURE__ */new Set([7339002,8099002,7369004,7321003,7376006,9362003,9362004,9160004,9376007,7315015,9376006,9376002,7315078,7315149,9376005,7372003,9352045,9352032,9361048,9902003,9378005,7383004,9910004,7320002,9362016,7320003,9362025,9942002,9942003,7380005,9663003,9361021,9379009,9379004,7315147,9376003,9160002,9160003,9352008,9361006,7389004,9910006]),et=e=>e.properties.poi?.name??e.properties.address.freeformAddress,tt=(e,t,i)=>{if("pin"===t){return(e=>{if(e)return Qe.has(e)?e.toString():e.toString().substring(0,4)})(s[e])??i}{const t=ge(e);return t?`poi-${t}`:i}},it=(e,t,i={})=>{const r=i.theme??"pin",s=Me(Oe,t),a=i.icon?.mapping;if(a)return"imageID"===a.to?a.fn(e):tt(a.fn(e),r,s);const o=e.properties.poi?.categories?.[0],n=((e,t,i,r,s)=>{if(!r.evAvailability?.enabled||!Ue(e))return;const a=He(e)>=(r.evAvailability.threshold??.3)?"available":"occupied",o=r.icon?.categoryIcons&&r.icon.categoryIcons.length>0,n=r.icon?.categoryIcons?.find(e=>e.id===t&&e.availabilityLevel===a);return n?Me(`${n.id}-${a}`,i):o||"pin"!==s?void 0:`7309-${a}`})(e,o,t,i,r);if(n)return n;const l=i.icon?.categoryIcons?.find(e=>e.id===o);return l?Me(l.id,t):tt(o,r,s)},rt=e=>{const t=e.properties.poi?.categories?.[0];return t&&ge(t)},st=e=>Array.isArray(e)?{type:"FeatureCollection",features:e}:"Feature"===e.type?{type:"FeatureCollection",features:[e]}:e,at=(e,t,i)=>{if(!0!==t?.enabled)return e;let r=!1,s=!1;for(const a of i.features){if("ELECTRIC_VEHICLE_STATION"===a.properties.poi?.categories?.[0]&&(r=!0,Ue(a))){s=!0;break}}return r&&!s&&console.warn("PlacesModule: evAvailability is enabled but no availability data found. Did you call getPlacesWithEVAvailability()?"),{...e,evAvailabilityText:e=>Ue(e)?((e,t)=>{const i=xe(e);return i?(t?.formatText??Fe)(i.availableCount,i.totalCount):""})(e,t):"",evAvailabilityRatio:e=>Ue(e)?He(e):0}},ot=(e,t,r={})=>{const s=st(e),a=!0===r.evAvailability?.enabled?at(r.extraFeatureProps,r.evAvailability,s):r.extraFeatureProps;return{...s,features:s.features.map(e=>{const s="function"==typeof r?.text?.title?r?.text?.title(e):et(e),o=a?Object.fromEntries(Object.entries(a).map(([t,i])=>[t,"function"==typeof i?i(e):i])):{},n=e.id??i();return{...e,id:n,geometry:{...e.geometry,bbox:e.bbox},properties:{...e.properties,id:n,title:s,iconID:it(e,t,r),..."base-map"===r?.theme&&{category:rt(e)},...o}}})}},nt=class e extends te{static async get(t,i){return await z(t),new e(t,i)}constructor(e,t){super("geojson",e,t)}_initSourcesWithLayers(t,i){return i||(e.lastInstanceIndex++,this.instanceIndex=e.lastInstanceIndex,this.sourceID=`places-${this.instanceIndex}`,this.layerIDPrefix=this.sourceID,this.defaultPlaceIconID=Me(Oe,this.instanceIndex)),this.layerSpecs=this.buildLayerSpecs(t),{places:new Y(this.mapLibreMap,this.sourceID,[this.layerSpecs.main,this.layerSpecs.selected])}}buildLayerSpecs(e){const t=Ze(e,this.tomtomMap.mapLibreMap,this.tomtomMap.styleLightDarkTheme,this.instanceIndex);return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,{...t,id:`${this.layerIDPrefix}-${e}`}]))}_applyConfig(e){return this.updateLayersAndData(e),e}restoreDataAndConfigImpl(){const e=this.sourcesWithLayers.places.shownFeatures;this.initSourcesWithLayers(this.config,!0),this.config&&this._applyConfig(this.config),this.show(e)}applyTheme(e){this.applyConfigPart({theme:e})}applyIconConfig(e){this.applyConfigPart({icon:e})}applyTextConfig(e){this.applyConfigPart({text:e})}applyConfigPart(e){const t={...this.config,...e};this.updateLayersAndData(t),this.config=t}applyExtraFeatureProps(e){const t={...this.config,extraFeatureProps:e};this.updateData(t),this.config=t}updateLayersAndData(e){this.setupImages(e);const t=this.buildLayerSpecs(e),i=[t.main,t.selected],r=[this.layerSpecs.main,this.layerSpecs.selected];j(i,r,this.mapLibreMap),this.layerSpecs=t,this.updateData(e)}setupImages(e){if(e?.icon){for(const t of e.icon.categoryIcons??[]){const e=t.availabilityLevel?`${t.id}-${t.availabilityLevel}`:t.id;J(0,Me(e,this.instanceIndex),t.image,this.mapLibreMap,{pixelRatio:t.pixelRatio??2})}e.icon.default&&(e.icon.default.image&&J(0,this.defaultPlaceIconID,e.icon.default.image.image,this.mapLibreMap,{pixelRatio:e.icon.default.image.pixelRatio??2}),e.icon.default.style&&J(0,this.defaultPlaceIconID,Je(e.icon.default.style),this.mapLibreMap,{pixelRatio:2}))}else J(0,this.defaultPlaceIconID,Je(),this.mapLibreMap,{pixelRatio:2})}updateData(e){this.sourcesWithLayers.places.source.runtimeSource?.setData(ot(this.sourcesWithLayers.places.shownFeatures,this.instanceIndex,e))}async show(e){await this.waitUntilModuleReady(),this.sourcesWithLayers.places.show(ot(e,this.instanceIndex,this.config))}async clear(){await this.waitUntilModuleReady(),this.sourcesWithLayers.places.clear()}getShown(){return{places:this.sourcesWithLayers.places.shownFeatures}}putEventState(e){this.sourcesWithLayers.places.putEventState(e)}cleanEventState(e){this.sourcesWithLayers.places.cleanEventState(e)}cleanEventStates(e){this.sourcesWithLayers.places.cleanEventStates(e)}get events(){return new ie(this.eventsProxy,this.sourcesWithLayers.places,this.config?.events)}};nt.lastInstanceIndex=-1;let lt=nt;const ct=e=>{if(!0===e||!1===e)return!0;if(!Array.isArray(e)||0===e.length)return!1;switch(e[0]){case"has":return e.length>=2&&"$id"!==e[1]&&"$type"!==e[1];case"in":return e.length>=3&&("string"!=typeof e[1]||Array.isArray(e[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==e.length||Array.isArray(e[1])||Array.isArray(e[2]);case"any":case"all":for(const t of e.slice(1))if(!ct(t)&&"boolean"!=typeof t)return!1;return!0;default:return!0}},ht=e=>e?.length?1===e.length?e[0]:{expression:["any",...e.map(e=>e?.expression)],legacy:["any",...e.map(e=>e?.legacy)]}:null,ut=(e,t)=>{return t?["all",e[(i=t,ct(i)?"expression":"legacy")],t]:e.expression;var i},dt=(e,t,i)=>{if(1===i.length){const r="only"===t?"==":"!=";return{expression:[r,["get",e],i[0]],legacy:[r,e,i[0]]}}const r=["in",["get",e],["literal",i]];return"only"===t?{expression:r,legacy:["in",e,...i]}:{expression:["!",r],legacy:["!in",e,...i]}},pt=(e,t,i)=>dt(e,t.show,i?t.values.map(i):t.values),_t={FOOD_DRINKS_GROUP:["RESTAURANT","FAST_FOOD","CAFE_PUB","PUB","WINERY","PUB_FOOD","SOUL_FOOD","DELICATESSEN"],SHOPPING_GROUP:["SHOP","SHOPPING_CENTER","CLOTHING_SHOP","MARKET","FOOD_MARKET","SUPERMARKETS_HYPERMARKETS","DEPARTMENT_STORE","CONVENIENCE_STORE","GROCERY_STORE","HARDWARE_STORE","ELECTRICAL_APPLIANCES_SHOP"],TRANSPORTATION_GROUP:["AIRPORT","FERRY_TERMINAL","HELIPAD_HELICOPTER_LANDING","PUBLIC_TRANSPORT_STOP","RAILWAY_STATION","BUS_STOP","TAXI_STAND"],HEALTH_GROUP:["DOCTOR","EMERGENCY_MEDICAL_SERVICE","EMERGENCY_ROOM","HEALTH_CARE_SERVICE","HOSPITAL","HOSPITAL_POLYCLINIC","PHARMACY","DENTIST","WELFARE_ORGANIZATION"],PARKING_GROUP:["PARKING_GARAGE","OPEN_PARKING_AREA"],HOLIDAY_TOURISM_GROUP:["AMUSEMENT_PARK","BEACH","HOLIDAY_RENTAL","GEOGRAPHIC_FEATURE","IMPORTANT_TOURIST_ATTRACTION","LEISURE_CENTER","MOUNTAIN_PASS","MOUNTAIN_PEAK","MUSEUM","SCENIC_PANORAMIC_VIEW","TOURIST_INFORMATION_OFFICE"],EV_CHARGING_STATIONS_GROUP:["ELECTRIC_VEHICLE_STATION"],GAS_STATIONS_GROUP:["GAS_STATION","PETROL_STATION"],ACCOMMODATION_GROUP:["CAMPING_GROUND","HOTEL_MOTEL","HOLIDAY_RENTAL"],ENTERTAINMENT_GROUP:["CINEMA","THEATER","MOVIE_THEATER","NIGHTLIFE","CONCERT_HALL","ENTERTAINMENT","CLUB_ASSOCIATION","CASINO"],SPORTS_LEISURE_GROUP:["SPORTS_CENTER","WATER_SPORT","SWIMMING_POOL","GOLF_COURSE","STADIUM","BEACH","ICE_SKATING_RINK","LEISURE_CENTER","MOUNTAIN_PASS","MOUNTAIN_PEAK"],EDUCATION_GROUP:["SCHOOL","COLLEGE_UNIVERSITY","LIBRARY","CULTURAL_CENTER"],GOVERNMENT_GROUP:["GOVERNMENT_OFFICE","COURTHOUSE","EMBASSY","FIRE_STATION_BRIGADE","POLICE_STATION"]},yt=e=>{const{properties:t}=e;return{id:e.id,type:e.type,geometry:e.geometry,properties:{id:String(t?.id),name:t?.name,category:t?.category,group:t?.group,priority:t?.priority}}},ft=e=>{const t=[];return e.forEach(e=>{e in _t?t.push(..._t[e].map(ge)):t.push(ge(e))}),[...new Set(t)]};class mt extends te{static async get(e,t){return await z(e),new mt(e,t)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const e=this.mapLibreMap.getSource(ue);if(!e)throw M(`init ${mt.name} with source ID ${ue}`);const t=new B(this.mapLibreMap,e,e=>fe.includes(e.id)),i=t.sourceAndLayerIDs.layerIDs[0];return this.mapLibreMap.getLayer(i)&&(this.originalFilter=this.mapLibreMap.getFilter(i)),{poi:t}}_applyConfig(e){return e&&!d(e.visible)?this.setVisible(e.visible):this._initializing||this.isVisible()||this.setVisible(!0),this.filterCategories(e?.filters?.categories),e}isVisible(){return this.sourcesWithLayers.poi.isAnyLayerVisible()}setVisible(e){this.config={...this.config,visible:e},this.tomtomMap.mapReady&&this.sourcesWithLayers.poi.setLayersVisible(e)}filterCategories(e){if(e){if(this.tomtomMap.mapReady){const t=dt("category",e.show,ft(e.values));this.mapLibreMap.setFilter("POI",ut(t,this.originalFilter))}this.config={...this.config,filters:{categories:e}}}else this.categoriesFilter&&(this.config={...this.config,filters:{categories:{show:"all_except",values:[]}}},this.tomtomMap.mapReady&&this.mapLibreMap.setFilter("POI",this.originalFilter));this.categoriesFilter=e}getShown(){return{poi:this.mapLibreMap.queryRenderedFeatures({layers:this.sourcesWithLayers.poi.sourceAndLayerIDs.layerIDs,validate:!1}).map(yt)}}get events(){return new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.poi,this.config?.events,yt)}}const At={land:{layerIDMatches:["lulc"],layerTypes:["fill"]},borders:{layerIDMatches:["borders"],layerTypes:["line"]},water:{layerIDMatches:["water"],layerTypes:["fill","line"]},buildings2D:{layerIDMatches:["building"],layerTypes:["fill","line"]},buildings3D:{layerIDMatches:["building"],layerTypes:["fill-extrusion"]},houseNumbers:{layerIDMatches:["house number"],layerTypes:["symbol"]},roadLines:{layerIDMatches:["road","tunnel","bridge","surface"],layerTypes:["fill","line"]},roadLabels:{layerIDMatches:["road","tunnel","bridge","surface"],layerTypes:["symbol"]},roadShields:{layerIDMatches:["shield"],layerTypes:["symbol"]},placeLabels:{layerIDMatches:["places"],layerTypes:["symbol"]},smallerTownLabels:{layerIDMatches:["town","village","neighbourhood"],layerTypes:["symbol"]},cityLabels:{layerIDMatches:["city","capital"],layerTypes:["symbol"]},capitalLabels:{layerIDMatches:["capital"],layerTypes:["symbol"]},stateLabels:{layerIDMatches:["state"],layerTypes:["symbol"]},countryLabels:{layerIDMatches:["places - country"],layerTypes:["symbol"]}},gt=(e,t)=>{const i=At[e];return i.layerIDMatches.some(e=>t.id.toLowerCase().includes(e))&&i.layerTypes.includes(t.type)},Et=e=>t=>(!e||((e,t)=>{const i=t?.mode,r=t?.names;if(i&&r?.length){if("include"===i)return r.some(t=>gt(t,e));if("exclude"===i)return!r.some(t=>gt(t,e))}return!0})(t,e))&&!fe.includes(t.id);class It extends te{static async get(e,t){return await z(e),new It(e,t)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(e){const t=this.mapLibreMap.getSource(pe);if(!t)throw M(`init ${It.name} with source ID ${pe}`);return{vectorTiles:new B(this.mapLibreMap,t,Et(e?.layerGroupsFilter))}}_applyConfig(e){return e&&!d(e.visible)?this.setVisible(e.visible):this._initializing||this.isVisible()||this.setVisible(!0),e?.layerGroupsVisibility&&this.setVisible(e.layerGroupsVisibility.visible,{layerGroups:e.layerGroupsVisibility}),this.config||e?{...this.config,...e}:void 0}isVisible(){return this.sourcesWithLayers.vectorTiles.isAnyLayerVisible()}setVisible(e,t){t?.layerGroups?this.config={...this.config,layerGroupsVisibility:{...t.layerGroups,visible:e}}:(delete this.config?.layerGroupsVisibility,this.config={...this.config,visible:e}),this.tomtomMap.mapReady&&this.sourcesWithLayers.vectorTiles.setLayersVisible(e,t?.layerGroups&&(e=>{const t=e.mode,i=e.names;return"include"===t?e=>i.some(t=>gt(t,e)):"exclude"===t?e=>!i.some(t=>gt(t,e)):(console.error("Unrecognized layer group mode:",t),()=>!0)})(t.layerGroups))}get events(){return new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.vectorTiles,this.config?.events)}}const Rt=["land","water","borders","buildings2D","buildings3D","houseNumbers","roadLines","roadLabels","roadShields","placeLabels","smallerTownLabels","cityLabels","capitalLabels","stateLabels","countryLabels"],Tt="#0A3653",Lt="#555555",St="#333333",Ot="#FFFFFF",Nt={type:"fill",paint:{"fill-color":["coalesce",["get","color"],Tt],"fill-opacity":["case",["==",["get","theme"],"outline"],0,.15],"fill-antialias":!1}},bt={type:"line",paint:{"line-color":["case",["==",["get","theme"],"outline"],["coalesce",["get","color"],Lt],["coalesce",["get","color"],Tt]],"line-opacity":["case",["==",["get","theme"],"outline"],.9,1],"line-width":["case",["==",["get","theme"],"outline"],5,2]}},Ct=(e,t,i)=>{const r=i?.colorConfig,s=i?.lineConfig;return[{...Nt,id:e,paint:{...Nt.paint,...!d(r?.fillOpacity)&&{"fill-opacity":r?.fillOpacity},...r?.fillColor&&{"fill-color":["get","color"]}}},{...bt,id:t,paint:{...bt.paint,...!d(s?.lineColor)&&{"line-color":s?.lineColor},...!d(s?.lineWidth)&&{"line-width":s?.lineWidth},...!d(s?.lineOpacity)&&{"line-opacity":s?.lineOpacity}}}]},vt=(e,t)=>{const i=t?.textConfig;return{type:"symbol",id:e,layout:{"text-field":["get","title"],...i?.textField&&{"text-field":i.textField},"text-padding":5,"text-size":15,"text-font":[Ee],"symbol-placement":"point"},paint:{"text-color":St,"text-halo-color":Ot,"text-halo-width":["interpolate",["linear"],["zoom"],6,1,10,1.5],"text-translate-anchor":"viewport"}}},wt=(e,t)=>{const i=t?.lineLabelConfig;return{type:"symbol",id:e,minzoom:i?.minZoom??3,layout:{"text-field":["get","title"],"symbol-placement":"line","text-size":i?.textSize??15,"text-font":[Ee],"symbol-spacing":i?.symbolSpacing??200,"text-keep-upright":!0,"text-offset":i?.textOffset??[0,1]},paint:{"text-color":i?.textColor??St,"text-halo-color":i?.textHaloColor??Ot,"text-halo-width":i?.textHaloWidth??2,...!d(i?.textOpacity)&&{"text-opacity":i?.textOpacity}}}},Mt={warm:["#793F0D","#AC703D","#C38E63","#E49969","#E5AE86","#EEC5A9","#6E7649","#9D9754","#C7C397","#B4A851","#DFD27C","#E7E3B5","#846D74","#B7A6AD","#D3C9CE"],browns:["#edc4b3","#e6b8a2","#deab90","#d69f7e","#cd9777","#c38e70","#b07d62","#9d6b53","#8a5a44","#774936"],cold:["#344464","#548ca4","#549cac","#2c445c","#a4ccd4","#acbccc","#b4c4d4","#acd4cc","#5c8ca4"],fadedBlues:["#152033","#1d2d44","#2e455d","#3e5c76","#4c6884","#597491","#67809e","#6e86a5","#7b91ad","#879bb4"],blues:["#03045e","#023e8a","#0077b6","#0096c7","#00b4d8","#48cae4","#90e0ef","#ade8f4","#caf0f8"],greens:["#004b23","#006400","#007200","#008000","#38b000","#70e000","#9ef01a","#ccff33"],fadedGreenToBlue:["#d9ed92","#b5e48c","#99d98c","#76c893","#52b69a","#34a0a4","#168aad","#1a759f","#1e6091","#184e77"],blueToRed:["#033270","#1368aa","#4091c9","#9dcee2","#fedfd4","#f29479","#f26a4f","#ef3c2d","#cb1b16","#65010c"],greenToYellow:["#007f5f","#2b9348","#55a630","#80b918","#aacc00","#bfd200","#d4d700","#dddf00","#eeef20","#ffff3f"],pastel:["#fec5bb","#fcd5ce","#fae1dd","#f8edeb","#e8e8e4","#d8e2dc","#ece4db","#ffe5d9","#ffd7ba","#fec89a"],retro:["#f94144","#f3722c","#f8961e","#f9844a","#f9c74f","#90be6d","#43aa8b","#4d908e","#577590","#277da1"],contrastRetro:["#001219","#005f73","#0a9396","#94d2bd","#e9d8a6","#ee9b00","#ca6702","#bb3e03","#ae2012","#9b2226"],fadedRainbow:["#ffadad","#ffd6a5","#fdffb6","#caffbf","#9bf6ff","#a0c4ff","#bdb2ff","#ffc6ff","#fffffc"],pastelRainbow:["#54478c","#2c699a","#048ba8","#0db39e","#16db93","#83e377","#b9e769","#efea5a","#f1c453","#f29e4c"]},Dt=Object.keys(Mt),Pt=(e,t={})=>({...e,features:e.features.map((e,r)=>{const s=(e.properties??{}).theme??t.theme,a="inverted"===s?(e=>{const t=T(e);return{...e,geometry:t.geometry}})(e):e,o=a.properties??{},n=o.title??((e,t)=>t.textConfig?.textField?t.textConfig.textField:e.properties?.address?.freeformAddress)(a,t),l=o.color??((e,t)=>{const i=e?.colorConfig?.fillColor;if("string"==typeof i&&Mt[i]){const e=Mt[i];return e[t%e.length]}return i})(t,r);return{...a,properties:{...a.properties,...s&&{theme:s},...n&&{title:n},...l&&{color:l},id:o.id??i()}}})}),Ut=e=>{const t=e.features.map(e=>{let t;if(e.properties?.placeCoordinates)t=e.properties?.placeCoordinates;else if("MultiPolygon"===e.geometry.type){const i=(e=>e.flat().reduce((e,t)=>t.length>e.length?t:e,[]))(e.geometry.coordinates),r=a(i);t=r&&o(r)||null}else t=e.geometry.coordinates.flat();const r=e.id??e.properties?.id??i();return{type:"Feature",id:r,geometry:{type:"Point",coordinates:t},properties:{...e.properties,id:r}}});return{type:"FeatureCollection",bbox:e.bbox,features:t}},xt=class e extends te{constructor(e,t){super("geojson",e,t),this.lineLabelLayerSpecs=null,this.lastRawInput=null}static async get(t,i){return await z(t),new e(t,i)}_initSourcesWithLayers(t,i){if(!i){e.lastInstanceIndex++,this.sourceID=`geometry-${e.lastInstanceIndex}`,this.titleSourceID=`geometryTitle-${e.lastInstanceIndex}`;const t=`geometry-${e.lastInstanceIndex}`;this.fillLayerID=`${t}_Fill`,this.outlineLayerID=`${t}_Outline`,this.lineLabelLayerID=`${t}_LineLabel`,this.titleLayerID=`${t}_Title`}const[r,s]=Ct(this.fillLayerID,this.outlineLayerID,t),a=vt(this.titleLayerID,t);this.titleLayerSpecs=a,this.geometryFillLayerSpecs=r,this.geometryOutlineLayerSpecs=s;const o=void 0===t?.lineLabelConfig?null:wt(this.lineLabelLayerID,t);return this.lineLabelLayerSpecs=o,{geometry:new Y(this.mapLibreMap,this.sourceID,[{...r},{...s},...o?[o]:[]]),geometryLabel:new Y(this.mapLibreMap,this.titleSourceID,[a])}}_applyConfig(e){return(e?.textConfig||e?.colorConfig||e?.lineConfig)&&this.updateLayerAndData(e),e?.beforeLayerConfig&&this.moveBeforeLayer(e.beforeLayerConfig),e}moveBeforeLayerID(e){for(const t of this.sourcesWithLayers.geometry.sourceAndLayerIDs.layerIDs)this.mapLibreMap.moveLayer(t,e)}moveBeforeLayer(e){this.config={...this.config,beforeLayerConfig:e},this.moveBeforeLayerID("top"===e?this.titleLayerID:he[e])}applyTextConfig(e){const t={...this.config,textConfig:e};this.updateLayerAndData(t),this.sourcesWithLayers.geometryLabel.show(Ut(this.sourcesWithLayers.geometry.shownFeatures)),this.config=t}updateLayerAndData(e){const[t,i]=Ct(this.fillLayerID,this.outlineLayerID,e),r=vt(this.titleLayerID,e);if($(t,this.geometryFillLayerSpecs,this.mapLibreMap),$(i,this.geometryOutlineLayerSpecs,this.mapLibreMap),$(r,this.titleLayerSpecs,this.mapLibreMap),this.geometryFillLayerSpecs=t,this.geometryOutlineLayerSpecs=i,this.titleLayerSpecs=r,this.lineLabelLayerSpecs){const t=wt(this.lineLabelLayerID,e);$(t,this.lineLabelLayerSpecs,this.mapLibreMap),this.lineLabelLayerSpecs=t}}restoreDataAndConfigImpl(){const e=this.lastRawInput;this.initSourcesWithLayers(this.config,!0),this.config&&this._applyConfig(this.config),e&&this.show(e)}async show(e){await this.waitUntilModuleReady(),this.lastRawInput=e;const{transformFeaturesForDisplay:t}=this.config??{},i=t?t(e):e,r=this.sourcesWithLayers.geometry;r.show(Pt(i,this.config)),this.sourcesWithLayers.geometryLabel.show(Ut(r.shownFeatures))}async clear(){await this.waitUntilModuleReady(),this.sourcesWithLayers.geometry.clear(),this.sourcesWithLayers.geometryLabel.clear()}getShown(){return{geometry:this.sourcesWithLayers.geometry.shownFeatures,geometryLabel:this.sourcesWithLayers.geometryLabel.shownFeatures}}get events(){return new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.geometry,this.config?.events)}};xt.lastInstanceIndex=-1;let Ft=xt;const Ht={timeMinutes:"min",distanceKM:"km",remainingChargeCPT:"% remaining",spentChargePCT:"% spent",spentFuelLiters:"L"},Wt=(e,t,i="filled")=>{const r=e.map((e,r)=>({...e,properties:{...e.properties,title:t[r],theme:i}}));return"inverted"===i?(e=>[...e.map((t,i)=>{const r=0===i?T(t):L(S([e[i-1],t])),{title:s,theme:a,...o}=t.properties??{};return{...t,geometry:r?.geometry??t.geometry,properties:o}}),...e.map(e=>({...e,id:void 0,properties:{...e.properties,theme:"filled"}}))])(r):r},Gt=(e,t="filled",i)=>{const r=e.features,s=r.map((e,t)=>{if(i)return i(e,t);const r=e.properties?.budget;return void 0!==r?.value&&r?.type?`${r.value} ${Ht[r.type]??r.type}`:String(t+1)});return{type:"FeatureCollection",...e.bbox&&{bbox:e.bbox},features:Wt(r,s,t)}},Bt=(e="fadedRainbow",t="lowestLabel")=>({beforeLayerConfig:t,lineConfig:{lineWidth:["case",["==",["get","theme"],"outline"],5,1],lineColor:["case",["==",["get","theme"],"outline"],["coalesce",["get","color"],Lt],"grey"],lineOpacity:["case",["==",["get","theme"],"outline"],.9,1]},colorConfig:{fillColor:e,fillOpacity:["case",["==",["get","theme"],"outline"],0,.6]},lineLabelConfig:{}}),kt=(e="fadedRainbow",t,i,r)=>{const s=Bt(e,i),a=e=>Gt(e,t,r);return"inverted"!==t?{...s,transformFeaturesForDisplay:a}:{...s,lineConfig:{...s.lineConfig,lineOpacity:["case",["==",["get","theme"],"filled"],1,0]},colorConfig:{...s.colorConfig,fillOpacity:["case",["==",["get","theme"],"filled"],0,.6]},lineLabelConfig:{textOpacity:["case",["==",["get","theme"],"filled"],1,0],textOffset:["case",["==",["get","theme"],"filled"],["literal",[0,-1]],["literal",[0,1]]]},transformFeaturesForDisplay:a}},Vt=["filled","outline","inverted"];class Yt extends te{static async get(e,t){return await z(e),await Z(e,de,"hillshade"),new Yt(e,t)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const e=this.mapLibreMap.getSource(de);if(!e)throw M(`init ${Yt.name} with source ID ${de}`);return{hillshade:new B(this.mapLibreMap,e)}}_applyConfig(e){return this.setVisible(e?.visible??!1),e}setVisible(e){this.config={...this.config,visible:e},this.tomtomMap.mapReady&&this.sourcesWithLayers.hillshade.setLayersVisible(e)}isVisible(){return this.sourcesWithLayers.hillshade.isAnyLayerVisible()}get events(){return new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.hillshade,this.config?.events)}}const zt=["standardLight","standardDark","drivingLight","drivingDark","monoLight","monoDark","satellite"],Kt=["trafficIncidents","trafficFlow","hillshade"],$t="#36A8F0",jt="#105287",qt="#ABAFB3",Xt="#3C4956",Zt="#727C85",Jt=["interpolate",["linear"],["zoom"],1,3,5,4,10,7,18,10],Qt=["==",["get","routeState"],"selected"],ei=["==",["get","routeState"],"deselected"],ti="#AD0000",ii="#FB2D09",ri="#f58240",si="#000000",ai=e=>!1===e?.visible?"":e?.title??["format",["get","title"],"\n",["get","chargingPower"]," • ",["get","chargingDuration"]],oi=e=>({...we,filter:Qt,minzoom:4,layout:{...we.layout,"text-field":ai(e?.text)},paint:{...we.paint}}),ni={filter:Qt,minzoom:16},li={...ni,type:"line",layout:{"line-cap":"round"}},ci={...li,paint:{"line-width":["interpolate",["linear"],["zoom"],16,14,22,20],"line-color":"grey"}},hi={...li,paint:{"line-width":["interpolate",["linear"],["zoom"],16,12,22,17],"line-color":"white"}},ui="instruction-arrow",di={...ni,type:"symbol",layout:{"icon-allow-overlap":!0,"icon-image":ui,"icon-rotation-alignment":"map","icon-rotate":["get","lastPointBearingDegrees"],"icon-size":["interpolate",["linear"],["zoom"],16,1,22,2]}},pi={filter:Qt,type:"line",layout:{"line-join":"round"},paint:{"line-width":Jt,"line-color":"#6dc4ed"}},_i={filter:Qt,type:"symbol",minzoom:6,maxzoom:16.5,layout:{"symbol-placement":"point","symbol-avoid-edges":!0,"icon-image":"poi-ferry_terminal","icon-size":["interpolate",["linear"],["zoom"],6,.8,16.5,1],"icon-ignore-placement":!0}},yi={type:"line",layout:{"line-join":"round","line-cap":"round","line-sort-key":["get","index"]}},fi=["interpolate",["linear"],["zoom"],1,5,5,6,10,10,18,14],mi={...yi,filter:ei,paint:{"line-color":Xt,"line-width":fi}},Ai={...yi,filter:ei,paint:{"line-color":qt,"line-width":Jt}},gi={...yi,filter:Qt,paint:{"line-color":jt,"line-width":fi}},Ei={type:"symbol",layout:{"symbol-placement":"line","icon-image":"roads-arrow-white","icon-rotate":180}},Ii="selected-route-summary-popup",Ri="deselected-route-summary-popup",Ti={filter:Qt,type:"line",layout:{"line-join":"round","line-cap":"round"},paint:{"line-width":["interpolate",["linear"],["zoom"],1,9,5,11,10,15,18,20],"line-color":"#BEBFFA"}},Li={filter:Qt,type:"symbol",minzoom:4,layout:{"symbol-placement":"point","symbol-avoid-edges":!0,"icon-image":"poi-toll_plaza","icon-size":["interpolate",["linear"],["zoom"],4,.8,16.5,1]}},Si=["interpolate",["linear"],["zoom"],1,2,5,3,10,4,18,6],Oi={type:"line",layout:{"line-cap":"round"},paint:{"line-width":Si,"line-color":["match",["get","magnitudeOfDelay"],"minor","#FFC105","moderate",ii,"major",ti,"#C7D2D8"]}},Ni={type:"line",filter:["in",["get","magnitudeOfDelay"],["literal",["unknown","indefinite"]]],layout:{"line-join":"round"},paint:{"line-width":Si,"line-color":["match",["get","magnitudeOfDelay"],"unknown","rgba(190, 39, 27, 1)","rgba(137, 150, 168, 1)"],"line-dasharray":[1.5,1]}},bi=["match",["get","magnitudeOfDelay"],"minor",ri,"moderate",ii,"major",ti,"indefinite","#666666",si],Ci={filter:Qt,type:"symbol",minzoom:6,layout:{"symbol-placement":"point","symbol-avoid-edges":!0,"icon-ignore-placement":!0}},vi={...Ci,filter:["all",["has","jamIconID"],Ci.filter],layout:{...Ci.layout,"icon-image":["get","jamIconID"],"icon-anchor":"bottom-left","text-anchor":"bottom-left","text-field":["get","title"],"text-font":[Ee],"text-offset":[3.9,-1.4],"text-size":13},paint:{...Ci.paint,"text-color":bi,"text-halo-color":"#FFFFFF","text-halo-width":1}},wi={...Ci,filter:["all",["has","causeIconID"],Ci.filter],layout:{...Ci.layout,"icon-image":["get","causeIconID"],"icon-anchor":"bottom-right"},paint:{...Ci.paint}},Mi={filter:Qt,type:"line",layout:{"line-join":"round"},paint:{"line-width":Jt,"line-color":"#000000","line-opacity":.3}},Di={filter:Qt,type:"line",layout:{"line-join":"round"},paint:{"line-color":jt,"line-width":Jt}},Pi={filter:Qt,type:"line",layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":$t,"line-width":["interpolate",["linear"],["zoom"],1,2,5,3,10,5,18,7],"line-dasharray":[0,1.5]}},Ui="traffic-clear",xi="traffic-major",Fi="traffic-moderate",Hi="traffic-minor",Wi=["has","formattedTraffic"],Gi=e=>{const t=void 0!==e?Me(Ii,e):Ii,i=void 0!==e?Me(Ri,e):Ri,r=void 0!==e?Me(Ui,e):Ui,s=void 0!==e?Me(xi,e):xi,a=void 0!==e?Me(Fi,e):Fi,o=void 0!==e?Me(Hi,e):Hi;return{type:"symbol",layout:{"icon-image":["case",Qt,t,i],"symbol-placement":"point","icon-rotation-alignment":"viewport","text-rotation-alignment":"viewport","symbol-sort-key":["case",Qt,0,1],"icon-text-fit":"both","icon-text-fit-padding":[10,5,5,10],"text-font":["Noto-Medium"],"text-size":13,"icon-padding":0,"text-justify":"left","text-line-height":1.5,"text-field":["format",["get","formattedDuration"],{"text-font":["literal",[Ee]],"text-color":["case",Qt,"black",Zt]},["concat","\t\t",["get","formattedDistance"]],{"text-color":Zt},["case",Wi,"\n",""],{},["image",["case",Wi,["match",["get","magnitudeOfDelay"],"major",s,"moderate",a,"minor",o,r],""]],{},["case",Wi,["concat"," ",["get","formattedTraffic"]],""],{"text-font":["literal",[Ee]],"text-color":bi}]},paint:{"icon-translate":[0,-35],"text-translate":[0,-35]}}},Bi=Gi(),ki="start",Vi="middle",Yi="finish",zi="indexType",Ki="stopDisplayIndex",$i="waypointStart",ji="waypointStop",qi="waypointSoft",Xi="waypointFinish",Zi={"text-field":["get",Ki],"text-font":[Ee],"text-size":["interpolate",["linear"],["zoom"],13,14,18,16],"text-offset":[0,-1.6],"icon-anchor":["case",["all",["==",["get",zi],Vi],["!",["has",Ki]]],"center","bottom"],"text-allow-overlap":!0},Ji={type:"symbol",paint:{...be,"text-color":"#ffffff"},layout:{...Ne,...Zi,"symbol-sort-key":["case",["==",["get",Te],qi],0,["abs",["-",["get","index"],1e3]]]}},Qi={type:"symbol",paint:{...ve,"text-color":"black","text-halo-width":1.5,"text-halo-color":"#ffffff"},layout:{...Ce,"text-anchor":"top","text-offset":[0,.4]}},er=(e,t)=>e&&t&&(e.startsWith("route")||e.startsWith("waypoint"))?`${t}-${e}`:e,tr=(e,t)=>e&&t?Object.fromEntries(Object.entries(e).map(([e,i])=>[e,i?.beforeID?{...i,beforeID:er(i.beforeID,t)}:i])):e,ir=(e,t)=>e&&void 0!==t?`${e}-${t}`:e,rr=(e={},t,i)=>{const r=e.layers,s=r?.sections,a=e.theme?.mainColor;return{mainLines:{routeLineArrows:{...Ei,beforeID:he.lowestLabel,...r?.mainLines?.routeLineArrows},routeLine:{...(o={color:a},{...yi,filter:Qt,paint:{"line-color":o?.color??$t,"line-width":Jt}}),beforeID:er("routeIncidentBackgroundLine",t),...r?.mainLines?.routeLine},routeOutline:{...gi,beforeID:er("routeLine",t),...r?.mainLines?.routeOutline},routeDeselectedLine:{...Ai,beforeID:er("routeOutline",t),...r?.mainLines?.routeDeselectedLine},routeDeselectedOutline:{...mi,beforeID:er("routeDeselectedLine",t),...r?.mainLines?.routeDeselectedOutline},...tr(r?.mainLines?.additional,t)},waypoints:{routeWaypointSymbol:{...Ji,beforeID:er("routeSummaryBubbleSymbol",t),...r?.waypoints?.routeWaypointSymbol},routeWaypointLabel:{...Qi,beforeID:er("routeWaypointSymbol",t),...r?.waypoints?.routeWaypointLabel},...tr(r?.waypoints?.additional,t)},chargingStops:{routeChargingStopSymbol:{...oi(e.chargingStops),beforeID:er("routeWaypointSymbol",t),...r?.chargingStops?.routeChargingStopSymbol},...tr(r?.chargingStops?.additional,t)},sections:{incident:{routeIncidentJamSymbol:{...vi,beforeID:er("routeChargingStopSymbol",t),...s?.incident?.routeIncidentJamSymbol},routeIncidentCauseSymbol:{...wi,beforeID:er("routeChargingStopSymbol",t),...s?.incident?.routeIncidentCauseSymbol},routeIncidentBackgroundLine:{...Oi,beforeID:er("routeIncidentDashedLine",t),...s?.incident?.routeIncidentBackgroundLine},routeIncidentDashedLine:{...Ni,beforeID:er("routeTunnelLine",t),...s?.incident?.routeIncidentDashedLine},...tr(s?.incident?.additional,t)},ferry:{routeFerryLine:{...pi,beforeID:er("routeLineArrows",t),...s?.ferry?.routeFerryLine},routeFerrySymbol:{..._i,beforeID:er("routeIncidentJamSymbol",t),...s?.ferry?.routeFerrySymbol},...tr(s?.ferry?.additional,t)},tollRoad:{routeTollRoadOutline:{...Ti,beforeID:er("routeDeselectedOutline",t),...s?.tollRoad?.routeTollRoadOutline},routeTollRoadSymbol:{...Li,beforeID:er("routeChargingStopSymbol",t),...s?.tollRoad?.routeTollRoadSymbol},...tr(s?.tollRoad?.additional,t)},tunnel:{routeTunnelLine:{...Mi,beforeID:er("routeLineArrows",t),...s?.tunnel?.routeTunnelLine},...tr(s?.tunnel?.additional,t)},vehicleRestricted:{routeVehicleRestrictedBackgroundLine:{...Di,beforeID:er("routeVehicleRestrictedForegroundLine",t),...s?.vehicleRestricted?.routeVehicleRestrictedBackgroundLine},routeVehicleRestrictedForegroundLine:{...Pi,beforeID:he.lowestLabel,...s?.vehicleRestricted?.routeVehicleRestrictedForegroundLine},...tr(s?.vehicleRestricted?.additional,t)}},instructionLines:{routeInstructionLine:{...hi,beforeID:he.lowestLabel,...r?.instructionLines?.routeInstructionLine},routeInstructionOutline:{...ci,beforeID:er("routeInstructionLine",t),...r?.instructionLines?.routeInstructionOutline},...tr(r?.instructionLines?.additional,t)},instructionArrows:{routeInstructionArrowSymbol:{...di,beforeID:er("routeInstructionLine",t),...void 0!==i&&{layout:{...di.layout,"icon-image":ir(di.layout?.["icon-image"],i)}},...r?.instructionArrows?.routeInstructionArrowSymbol},...tr(r?.instructionArrows?.additional,t)},summaryBubbles:{routeSummaryBubbleSymbol:{...void 0!==i?Gi(i):Bi,...r?.summaryBubbles?.routeSummaryBubbleSymbol},...tr(r?.summaryBubbles?.additional,t)}};var o},sr=rr();let ar;D()&&(ar=P(U('<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">\n <path d="M1.562 40.569L25 1.562l23.438 39.007L25 27.566 1.562 40.569z" fill="#fff"/>\n <path d="M25.369.107c.782.429.506.167.917.682l23.438 39.007c.79 1.316-.671 2.829-2.014 2.085L25 29.281l-22.71 12.6c-1.343.744-2.804-.769-2.014-2.085L23.714.789c.461-.694.9-.682 1.656-.682zM25 1.562L1.562 40.569 25 27.566l23.438 13.003L25 1.562z"\n fill="gray"/>\n</svg>\n')));const or=e=>{if(!D())return;const t=U('<svg xmlns="http://www.w3.org/2000/svg" width="160" height="65">\n <g filter="url(#A)">\n <rect id="pin" x="81.899" y="47" width="10" height="10" rx="2" transform="rotate(45 81.899 47)"/>\n <rect id="bubble" x="10" y="10" width="140" height="45" rx="12"/>\n </g>\n <defs>\n <filter id="A">\n <feDropShadow dx="0" dy="2" stdDeviation="4" flood-opacity=".3"/>\n </filter>\n </defs>\n</svg>\n');return t.querySelector("#bubble")?.setAttribute("fill",e),t.querySelector("#pin")?.setAttribute("fill",e),P(t)},nr={pixelRatio:2,stretchX:[[20,45],[100,130]],stretchY:[[20,35]],content:[10,10,130,45]},lr=e=>{if(!D())return;const t=U('<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">\n <g id="main">\n <path fill-rule="evenodd"\n d="M11.389 4H9.025a.86.86 0 0 0-.517.173l-.001-.001a.5.5 0 0 1-.464.059l-.028-.011a.5.5 0 0 1-.129-.83A1.86 1.86 0 0 1 9.025 3h2.364a2 2 0 0 1 1.789 1.106l1.02 2.04c.471.176.802.63.802 1.156v.803c0 .543 0 .815-.071 1.038a1.5 1.5 0 0 1-.914.953c-.219.08-.491.092-1.034.114l-1.481.062v-.166-.803a2.23 2.23 0 0 0-1.055-1.897l-.74-1.479 2.326.033h.955l-.703-1.406A1 1 0 0 0 11.389 4zM12 8.4a1 1 0 1 1 2 0 .5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5z"/>\n <path d="M11.833 11.115c0-.109.089-.198.198-.198h1.979c.109 0 .198.089.198.198 0 .328-.266.594-.594.594h-1.187c-.328 0-.594-.266-.594-.594z"/>\n <path fill-rule="evenodd"\n d="M1.802 8.146C1.331 8.321 1 8.776 1 9.302v.803c0 .543 0 .815.071 1.038a1.5 1.5 0 0 0 .914.953c.219.08.491.092 1.034.114l2.731.114 2.731-.114c.543-.023.814-.034 1.034-.114a1.5 1.5 0 0 0 .914-.953c.071-.223.071-.494.071-1.038v-.803c0-.526-.331-.98-.802-1.156l-1.02-2.04A2 2 0 0 0 6.889 5H4.611a2 2 0 0 0-1.789 1.106l-1.02 2.04zM6.889 6H4.611a1 1 0 0 0-.894.553l-.703 1.406h.955 3.563.955l-.703-1.406A1 1 0 0 0 6.889 6zM2 10.4a1 1 0 1 1 2 0 .5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zm6.5-1a1 1 0 0 0-1 1 .5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5 1 1 0 0 0-1-1z"/>\n <path d="M1.792 13.115c0-.109.089-.198.198-.198h1.979c.109 0 .198.089.198.198 0 .328-.266.594-.594.594H2.385c-.328 0-.594-.266-.594-.594zm5.739-.198c-.109 0-.198.089-.198.198 0 .328.266.594.594.594h1.188c.328 0 .594-.266.594-.594 0-.109-.089-.198-.198-.198h-1.98z"/>\n </g>\n</svg>\n'),i=t.querySelector("#main");return i.setAttribute("transform","scale(2)"),i.setAttribute("fill",e),P(t)},cr=(e,t)=>{if(!D())return;const i=x(t);return e&&i.appendChild(e),P(i)},hr=(e={},t)=>Object.entries(e).map(([e,i])=>({...i,id:t?`${t}-${e}`:e})),ur=(e={},t)=>({mainLines:hr(e.mainLines,t),waypoints:hr(e.waypoints,t),chargingStops:hr(e?.chargingStops,t),ferries:hr(e.sections?.ferry,t),incidents:hr(e.sections?.incident,t),tollRoads:hr(e.sections?.tollRoad,t),tunnels:hr(e.sections?.tunnel,t),vehicleRestricted:hr(e.sections?.vehicleRestricted,t),instructionLines:hr(e.instructionLines,t),instructionArrows:hr(e.instructionArrows,t),summaryBubbles:hr(e.summaryBubbles,t)}),dr=(e,t,i)=>{const r=n.instance.get().displayUnits,s=e?.displayUnits;return{...e,...s?{}:{displayUnits:r},layers:rr(e,t,i)}},pr=(e,t)=>{const i=t?.chargingStops?.icon;if(i?.mapping){const t=i.mapping;switch(t.basedOn){case"chargingSpeed":if(e.properties.chargingConnectionInfo?.chargingSpeed)return t.value[e.properties.chargingConnectionInfo?.chargingSpeed];break;case"custom":return t.fn(e)}}return"7309"},_r=e=>{const t=e.properties;return t.chargingParkName??t.chargingParkOperatorName},yr=(e,t)=>{const r=[];if(!1!==t?.chargingStops?.visible)for(const s of e.features)for(const e of s.properties.sections.leg){const a=e.summary.chargingInformationAtEndOfLeg;if(a){const e=a.properties;r.push({...a,properties:{...a.properties,id:a.properties.chargingParkId??i(),iconID:pr(a,t),title:_r(a),chargingPower:`${e.chargingConnectionInfo?.chargingPowerInkW} kW`,chargingDuration:l(e.chargingTimeInSeconds,t?.displayUnits?.time),routeState:s.properties.routeState}})}}return{type:"FeatureCollection",features:r}},fr=e=>e.categories.includes("jam"),mr=e=>{const t=(e=>{if(fr(e))return l(e.delayInSeconds)})(e),i=((e,t)=>fr(e)?`traffic-jam-${e.magnitudeOfDelay??"unknown"}-${(e=>e?.length?e.length<6?"small":e.length<8?"medium":"large":"collapsed")(t)}`:null)(e,t),r=(e=>{switch(e.categories.find(e=>"jam"!==e)){case"accident":return"traffic-incidents-accident";case"roadworks":return"traffic-incidents-roadworks";case"road-closed":return"traffic-incidents-road_closed";case"danger":case"animals-on-road":return"traffic-incidents-danger";case"broken-down-vehicle":return"traffic-incidents-broken_down_vehicle";case"lane-closed":case"narrow-lanes":return"traffic-incidents-lane_closed";case"wind":return"traffic-incidents-wind";case"fog":return"traffic-incidents-fog";case"rain":return"traffic-incidents-rain";case"frost":return"traffic-incidents-frost";case"flooding":return"traffic-incidents-flooding";default:return null}})(e);return{...e,...i&&{jamIconID:i},...r&&{causeIconID:r},...t&&{title:t}}},Ar=(e,t,i)=>{if(e.properties.radiusMeters)return void 0!==i?Me(qi,i):qi;let r;switch(t){case"start":r=$i;break;case"finish":r=Xi;break;default:r=ji}return void 0!==i?Me(r,i):r},gr=(e,t,r)=>{let s=-1;return{type:"FeatureCollection",features:e.map((a,o)=>{if(!a)return s++,null;const n=(e=>{return Array.isArray(e)?{type:"Feature",geometry:{type:"Point",coordinates:e},properties:{}}:"Point"===e.type?{type:"Feature",geometry:t=e,properties:{},...t.bbox&&{bbox:t.bbox}}:e;var t})(a),l=((e,t)=>0===e?ki:e<t-1?Vi:Yi)(o,e.length),h=(e=>!e.properties.radiusMeters)(n);h&&s++;const u=(e=>{const t=e?.properties;return t?.poi?.name??t?.address?.freeformAddress??void 0})(n),d=n.id??i();return{...n,..."main-when-available"===t?.entryPoints&&{geometry:{type:"Point",coordinates:c(n,{useEntryPoint:"main-when-available"})}},id:d,properties:{...n.properties,id:d,index:o,indexType:l,...u&&{title:u},iconID:Ar(n,l,r),...h&&l===Vi&&{stopDisplayIndex:s}}}}).filter(e=>e)}},Er=(e,t,r)=>({type:"FeatureCollection",features:e.features.flatMap(e=>((e,t,r)=>e.properties.sections[t]?.map(t=>{const s=t.id??i();return{type:"Feature",id:s,geometry:{type:"LineString",coordinates:e.geometry.coordinates.slice(t.startPointIndex,t.endPointIndex+1)},properties:{...r?r(t,e.properties):t,routeState:e.properties.routeState,routeIndex:e.properties.index,id:s}}})||[])(e,t,r))}),Ir=(e,t)=>{return t.show((i=e,r=t.shownFeatures,{...r,features:r.features.map(e=>({...e,properties:{...e.properties,routeState:i.features[e.properties.routeIndex||0].properties.routeState}}))}));var i,r},Rr=(e,t=0)=>{const r="features"in e?e:{type:"FeatureCollection",features:[e]};return{...r,features:r.features.map((e,r)=>{const s=e.id??i();return{...e,id:s,properties:{...e.properties,id:s,routeState:r===t?"selected":"deselected"}}})}},Tr=(e,t)=>e.some(e=>e.magnitudeOfDelay===t),Lr=(e,t)=>({type:"FeatureCollection",features:e.features.map(e=>{const r=e.properties.summary,s=e.geometry.coordinates,a=l(r.trafficDelayInSeconds,t?.time),o=(e=>{const t=e.properties.sections.traffic;if(t?.length)return Tr(t,"major")?"major":Tr(t,"moderate")?"moderate":Tr(t,"minor")?"minor":void 0})(e),n=e.id??i();return{type:"Feature",id:n,geometry:{type:"Point",coordinates:s[Math.round(s.length/2)]},properties:{id:n,routeIndex:e.properties.index,routeState:e.properties.routeState,formattedDistance:h(r.lengthInMeters,t?.distance),...o&&{magnitudeOfDelay:o},...a&&{formattedTraffic:a},formattedDuration:l(r.travelTimeInSeconds,t?.time)}}})}),Sr=class e extends te{static async get(t,i){return await z(t),new e(t,i)}constructor(e,t){super("geojson",e,t)}createSourcesWithLayers(e){const t=Me("routes",this.instanceIndex);return{mainLines:new Y(this.mapLibreMap,`${t}-mainLines`,e.mainLines,!1),waypoints:new Y(this.mapLibreMap,`${t}-waypoints`,e.waypoints,!1),incidents:new Y(this.mapLibreMap,`${t}-incidents`,e.incidents,!1),ferries:new Y(this.mapLibreMap,`${t}-ferries`,e.ferries,!1),chargingStops:new Y(this.mapLibreMap,`${t}-chargingStops`,e.chargingStops,!1),tollRoads:new Y(this.mapLibreMap,`${t}-tollRoads`,e.tollRoads,!1),tunnels:new Y(this.mapLibreMap,`${t}-tunnels`,e.tunnels,!1),vehicleRestricted:new Y(this.mapLibreMap,`${t}-vehicleRestricted`,e.vehicleRestricted,!1),instructionLines:new Y(this.mapLibreMap,`${t}-instructionLines`,e.instructionLines,!1),instructionArrows:new Y(this.mapLibreMap,`${t}-instructionArrows`,e.instructionArrows,!1),summaryBubbles:new Y(this.mapLibreMap,`${t}-summaryBubbles`,e.summaryBubbles,!1)}}_initSourcesWithLayers(t,i){i||(e.lastInstanceIndex++,this.instanceIndex=e.lastInstanceIndex,this.layerIDPrefix=Me("routes",this.instanceIndex)),this.layersSpecs=ur(dr(t,this.layerIDPrefix,this.instanceIndex).layers,this.layerIDPrefix);const r=this.createSourcesWithLayers(this.layersSpecs);q(Object.values(r).flatMap(e=>e._layerSpecs),this.mapLibreMap);const s={fillColor:t?.theme?.mainColor,...t?.waypoints?.icon?.style},a={pixelRatio:2},o=Me($i,this.instanceIndex),n=Me(ji,this.instanceIndex),l=Me(qi,this.instanceIndex),c=Me(Xi,this.instanceIndex),h=Me(ui,this.instanceIndex),u=Me(Ii,this.instanceIndex),d=Me(Ri,this.instanceIndex),p=Me(Ui,this.instanceIndex),_=Me(xi,this.instanceIndex),y=Me(Fi,this.instanceIndex),f=Me(Hi,this.instanceIndex);this.addImageIfNotExisting(o,(e=>{if(D())return cr(U('<svg xmlns="http://www.w3.org/2000/svg" width="120" height="140">\n <path d="M63.734 86.383c-1.404.026-2.78-.393-3.93-1.197s-2.01-1.949-2.46-3.271l-3.15-9.339c-1.093-3.403-3.748-6.089-7.154-7.238L37.5 62.21c-2.742-.902-4.567-3.477-4.5-6.345-.058-2.874 1.761-5.457 4.5-6.388l36-11.886c2.461-.88 5.213-.27 7.062 1.567s2.466 4.571 1.578 7.015L70.17 81.918c-.938 2.719-3.54 4.526-6.436 4.469h0z"\n fill="#f4f5f6"/>\n</svg>\n'),e)})(s),a),this.addImageIfNotExisting(n,cr(void 0,s),a),this.addImageIfNotExisting(l,(()=>{if(D())return P(U('<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">\n <circle id="circle" cx="16" cy="16" r="12" fill="white" stroke="#105287" stroke-width="4"/>\n</svg>\n'))})(),a),this.addImageIfNotExisting(c,(e=>{if(D())return cr(U('<svg xmlns="http://www.w3.org/2000/svg" width="120" height="140">\n <path d="M33 83.404a2.99 2.99 0 0 1-3-2.978V44.681a2.99 2.99 0 1 1 6 0v35.745a2.99 2.99 0 0 1-3 2.978zm48-38.723H39v17.872h42V44.681zm3.878 37.851a3.02 3.02 0 0 0 4.244 0c.561-.559.878-1.317.878-2.106V44.681a2.99 2.99 0 1 0-6 0v35.745c0 .789.317 1.547.878 2.106z"\n fill="#f4f5f6"/>\n</svg>\n'),e)})(s),a),this.addImageIfNotExisting(h,ar,a),this.addImageIfNotExisting(u,or("white"),nr),this.addImageIfNotExisting(d,or("#EEEEEE"),nr),this.addImageIfNotExisting(p,lr(si),a),this.addImageIfNotExisting(_,lr(ti),a),this.addImageIfNotExisting(y,lr(ii),a),this.addImageIfNotExisting(f,lr(ri),a);for(const e of t?.chargingStops?.icon?.customIcons??[])this.addImageIfNotExisting(e.id,e.image,{pixelRatio:e.pixelRatio??2});return r}_applyConfig(e){const t=dr(e,this.layerIDPrefix,this.instanceIndex);if(this.config){const e=ur(t.layers,this.layerIDPrefix);Object.keys(e).forEach(t=>{const i=t;((e,t,i,r)=>{const s=e.reduce((e,t)=>({...e,[t.id]:t}),{}),a=t.reduce((e,t)=>({...e,[t.id]:t}),{}),o=[],n=[],l=[],c=[];Object.keys(s).forEach(e=>{a[e]?(l.push(s[e]),c.push(a[e])):o.push(e)}),Object.keys(a).forEach(e=>{s[e]||n.push(e)});const h=i._layerSpecs;n.forEach(e=>{r.removeLayer(e);for(let t=0;t<h.length;t++)if(h[t].id===e){h.splice(t,1);break}}),o.forEach(e=>{const t={...s[e],source:i.source.id};h.push(t)}),i._updateSourceAndLayerIDs(),j(l,c,r)})(e[i],this.layersSpecs[i],this.sourcesWithLayers[i],this.mapLibreMap)});const i=Object.values(this.sourcesWithLayers);q(i.flatMap(e=>e._layerSpecs),this.mapLibreMap),i.forEach(e=>e.setLayersVisible(!!e.shownFeatures.features.length)),this.layersSpecs=e}const i=!1!==t.summaryBubbles?.visible,r=!f(this.config?.summaryBubbles?.visible,t.summaryBubbles?.visible),s=!f(this.config?.displayUnits,t.displayUnits),a=this.sourcesWithLayers.summaryBubbles.shownFeatures.features.length>0,o=this.sourcesWithLayers.mainLines.shownFeatures.features.length>0;return!i&&r?this.sourcesWithLayers.summaryBubbles.clear():i&&(r&&o||s&&a)&&this.sourcesWithLayers.summaryBubbles.show(Lr(this.sourcesWithLayers.mainLines.shownFeatures,t.displayUnits)),t}restoreDataAndConfigImpl(){const e=Object.entries(this.sourcesWithLayers).map(e=>({[e[0]]:e[1].shownFeatures})).reduce((e,t)=>({...e,...t}),{});this.initSourcesWithLayers(this.config,!0),this._applyConfig(this.config);for(const t of Object.keys(e))this.sourcesWithLayers[t].show(e[t])}addImageIfNotExisting(e,t,i){J(0,e,t,this.mapLibreMap,i)}async showRoutes(e,t){const r=Rr(e,t?.selectedIndex);await this.waitUntilModuleReady(),this.sourcesWithLayers.mainLines.show(r),this.sourcesWithLayers.vehicleRestricted.show(Er(r,"vehicleRestricted")),this.sourcesWithLayers.incidents.show(Er(r,"traffic",mr)),this.sourcesWithLayers.chargingStops.show(yr(r,this.config)),this.sourcesWithLayers.ferries.show(Er(r,"ferry")),this.sourcesWithLayers.tunnels.show(Er(r,"tunnel")),this.sourcesWithLayers.tollRoads.show(Er(r,"toll")),this.sourcesWithLayers.instructionLines.show((e=>({type:"FeatureCollection",features:e.features.flatMap((e,t)=>e.properties.guidance?.instructions?.filter(e=>e.routePath?.length).map(r=>({type:"Feature",geometry:{type:"LineString",coordinates:r.routePath.map(e=>e.point)},properties:{...r,id:i(),routeIndex:t,routeState:e.properties.routeState}}))||[])}))(r)),this.sourcesWithLayers.instructionArrows.show((e=>({type:"FeatureCollection",features:e.features.flatMap((e,t)=>e.properties.guidance?.instructions?.filter(e=>e.routePath?.length&&e.routePath.length>1).map(r=>{const s=[r.routePath[r.routePath.length-2]?.point,r.routePath[r.routePath.length-1]?.point];return{type:"Feature",geometry:{type:"Point",coordinates:s[1]},properties:{...r,id:i(),routeIndex:t,routeState:e.properties.routeState,lastPointBearingDegrees:O(s[0],s[1])}}})||[])}))(r)),!1!==this.config?.summaryBubbles?.visible?this.sourcesWithLayers.summaryBubbles.show(Lr(r,this.config?.displayUnits)):this.sourcesWithLayers.summaryBubbles.clear()}async clearRoutes(){await this.waitUntilModuleReady();for(const e of Object.keys(this.sourcesWithLayers))"waypoints"!==e&&this.sourcesWithLayers[e].clear()}async selectRoute(e){const t=Rr(this.sourcesWithLayers.mainLines.shownFeatures,e);await this.waitUntilModuleReady(),this.sourcesWithLayers.mainLines.show(t),this.sourcesWithLayers.chargingStops.show(yr(t,this.config)),Ir(t,this.sourcesWithLayers.vehicleRestricted),Ir(t,this.sourcesWithLayers.incidents),Ir(t,this.sourcesWithLayers.ferries),Ir(t,this.sourcesWithLayers.tollRoads),Ir(t,this.sourcesWithLayers.tunnels),Ir(t,this.sourcesWithLayers.instructionLines),Ir(t,this.sourcesWithLayers.instructionArrows),Ir(t,this.sourcesWithLayers.summaryBubbles)}async showWaypoints(e){const t=Array.isArray(e)?gr(e,this.config?.waypoints,this.instanceIndex):gr(e.features,this.config?.waypoints,this.instanceIndex);await this.waitUntilModuleReady(),this.sourcesWithLayers.waypoints.show(t)}async clearWaypoints(){await this.waitUntilModuleReady(),this.sourcesWithLayers.waypoints.clear()}getShown(){return{mainLines:this.sourcesWithLayers.mainLines.shownFeatures,waypoints:this.sourcesWithLayers.waypoints.shownFeatures,incidents:this.sourcesWithLayers.incidents.shownFeatures,ferries:this.sourcesWithLayers.ferries.shownFeatures,chargingStops:this.sourcesWithLayers.chargingStops.shownFeatures,tollRoads:this.sourcesWithLayers.tollRoads.shownFeatures,tunnels:this.sourcesWithLayers.tunnels.shownFeatures,vehicleRestricted:this.sourcesWithLayers.vehicleRestricted.shownFeatures,instructionLines:this.sourcesWithLayers.instructionLines.shownFeatures,instructionArrows:this.sourcesWithLayers.instructionArrows.shownFeatures,summaryBubbles:this.sourcesWithLayers.summaryBubbles.shownFeatures}}get events(){return{mainLines:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.mainLines,this.config?.events),waypoints:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.waypoints,this.config?.events),chargingStops:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.chargingStops,this.config?.events),summaryBubbles:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.summaryBubbles,this.config?.events),incidents:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.incidents,this.config?.events),vehicleRestricted:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.vehicleRestricted,this.config?.events),ferries:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.ferries,this.config?.events),tollRoads:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.tollRoads,this.config?.events),tunnels:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.tunnels,this.config?.events),instructionLines:new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.instructionLines,this.config?.events)}}getLayerToRenderLinesUnder(){return he.lowestLabel}};Sr.lastInstanceIndex=-1;let Or=Sr;const Nr="standardLight",br={standardLight:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_light"},standardDark:{trafficIncidents:"incidents_dark",trafficFlow:"flow_relative-dark",hillshade:"hillshade_dark"},drivingLight:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_light"},drivingDark:{trafficIncidents:"incidents_dark",trafficFlow:"flow_relative-dark",hillshade:"hillshade_dark"},monoLight:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_mono-light"},monoDark:{trafficIncidents:"incidents_dark",trafficFlow:"flow_relative-dark",hillshade:"hillshade_mono-dark"},satellite:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_satellite"}},Cr=e=>`\${baseURL}/maps/orbis/assets/styles/\${version}/style.json?&apiVersion=1&key=\${apiKey}&map=${e}`,vr={standardLight:Cr("basic_street-light"),standardDark:Cr("basic_street-dark"),drivingLight:Cr("basic_street-light-driving"),drivingDark:Cr("basic_street-dark-driving"),monoLight:Cr("basic_mono-light"),monoDark:Cr("basic_mono-dark"),satellite:Cr("basic_street-satellite")},wr=(e,t,i)=>{const r=e.id??Nr,s=new URL(vr[r].replace("${baseURL}",t).replace("${version}",e.version??"0.6.0-0").replace("${apiKey}",i));for(const a of e.include??Kt)s.searchParams.append(a,br[r][a]);return s.toString()},Mr=e=>{const t=e.style,i=e.commonBaseURL,r=e.apiKey;return"string"==typeof t?wr({id:t},i,r):"standard"===t?.type?wr(t,i,r):"custom"===t?.type&&t?.url?((e,t)=>{const i=new URL(e);return i.searchParams.has("key")?console.warn("The style URL is coming with an API key parameter which takes priority. If you want to use the SDK configured API key, remove the key param from the style URL"):i.searchParams.set("key",t),i.toString()})(t.url,r):"custom"===t?.type&&t?.json?t.json:wr({id:Nr},i,r)};class Dr{constructor(e){var t,i;this.mapReady=!1,this.styleChangeHandlers=[],this.setStyle=(e,t={keepState:!0})=>{this.mapReady=!1;for(const s of this.styleChangeHandlers)try{s.onStyleAboutToChange?.()}catch(r){console.error(r)}const i=t.keepState?((e,t)=>t&&"object"==typeof t&&"standard"===t.type&&t.include&&("string"==typeof e||"standard"===e.type&&!e.include)?{type:"standard",id:"string"==typeof e?e:e.id,include:t.include}:e)(e,this._params.style):e;this._params={...this._params,style:i},this.styleLightDarkTheme=ee(i),this.mapLibreMap.once("styledata",()=>{!this.mapReady&&f(i,this._params.style)&&this.handleStyleData(t.keepState||!0)}),this.mapLibreMap.setStyle(Mr(this._params),{validate:!1})},this.getStyle=()=>this._params.style,this._params=u(e),void 0===this._params.style&&(this._params={...this._params,style:Nr}),this.styleLightDarkTheme=ee(this._params.style),this.ensureMapLibreCSSLoaded(),A(4),this.mapLibreMap=new g({validateStyle:!1,maxTileCacheZoomLevels:22,cancelPendingTileRequestsWhileZooming:!1,...(t=this._params).mapLibre,style:Mr(t),attributionControl:{compact:!1},transformRequest:(i=t,(e,t)=>{if(e.includes("tomtom.com")){if("Image"===t)return{url:e};const s=new URL(e);return s.pathname.includes("incidents")?s.searchParams.set("tags",`${C.join(",")}`):s.pathname.includes("flow")&&s.searchParams.set("tags",`${N.join(",")}`),{url:s.toString(),headers:{...r(i)}}}return{url:e}})}),this.mapLibreMap.once("styledata",()=>{this.handleStyleData(!1)}),this._eventsProxy=new ce(this.mapLibreMap,this._params?.events),this.loadRTLTextPlugin()}loadRTLTextPlugin(){setTimeout(()=>{["deferred","loaded"].includes(E())||I("https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.3.0/dist/mapbox-gl-rtl-text.js",!0).catch(e=>console.error("Something went wrong when setting RTL plugin",e))})}ensureMapLibreCSSLoaded(){if("undefined"==typeof document)return;if(Array.from(document.querySelectorAll('link[rel="stylesheet"], style')).some(e=>e.textContent?.includes(".maplibregl-map")))return;const e=document.createElement("link");e.rel="stylesheet",e.href=`https://unpkg.com/maplibre-gl@${R}/dist/maplibre-gl.css`,document.head.appendChild(e)}_setLanguage(e){this._params={...this._params,language:e};const t=e?.includes("-")?e.split("-")[0]:e;this.mapLibreMap.getStyle().layers.forEach(e=>{if("symbol"===e.type&&(e=>{const t=e.layout?.["text-field"]??"";return!!t&&("{name}"===t||2===t.length&&"name"===t[1]||3===t.length&&Array.isArray(t[1])&&"string"==typeof t[1][1]&&t[1][1].includes("name_")&&Array.isArray(t[2])&&t[2].includes("name"))})(e)){const i=t?["coalesce",["get",`name_${t}`],["get","name"]]:["get","name"];this.mapLibreMap.setLayoutProperty(e.id,"text-field",i,{validate:!1})}})}setLanguage(e){this.mapReady?this._setLanguage(e):this.mapLibreMap.once("styledata",()=>this.setLanguage(e))}getBBox(){return this.mapLibreMap.getBounds().toArray().flat()}handleStyleData(e){for(const i of G(this.mapLibreMap,[_e,ye,de]))this.mapLibreMap.setLayoutProperty(i.id,"visibility","none",{validate:!1});if((async(e,t)=>{t.setSprite(`${e.commonBaseURL}/maps/orbis/assets/sprites/2.*/sprite?key=${e.apiKey}&poi=poi_${ee(e.style)}&apiVersion=1&apiChannel=preview`,{validate:!1})})(this._params,this.mapLibreMap),this._params.language&&this._setLanguage(this._params.language),this.mapReady=!0,e)for(const i of this.styleChangeHandlers)try{i.onStyleChanged?.()}catch(t){console.error(t)}}addStyleChangeHandler(e){this.styleChangeHandlers.push(e)}}const Pr=(e,t)=>e.length?1===e.length?{expression:e[0],legacy:t[0]}:{expression:["all",...e],legacy:["all",...t]}:null,Ur=(e,t,i)=>{e&&(t.push(e.expression),i.push(e.legacy))},xr=(e,t,i,r)=>{e&&Ur(pt(t,e),i,r)},Fr=(e,t,i)=>{xr(e.roadCategories,"road_category",t,i),xr(e.roadSubCategories,"road_subcategory",t,i)},Hr=t=>{const i=[],r=[];if(Fr(t,i,r),t.incidentCategories){const e=pt("icon_category_0",t.incidentCategories,e=>v[e]);Ur(e,i,r)}if(t.magnitudes){const s=pt("magnitude_of_delay",t.magnitudes,t=>e.indexOf(t));Ur(s,i,r)}return t.delays&&Ur((e=>{const t=[],i=[];if(e.mustHaveDelay&&e.minDelayMinutes){const r=60*e.minDelayMinutes;t.push([">=",["get","delay"],r]),i.push([">=","delay",r])}else if(e.mustHaveDelay)t.push([">",["get","delay"],0]),i.push([">","delay",0]);else if(e.minDelayMinutes){const r=60*e.minDelayMinutes;t.push(["any",["!",["has","delay"]],["==",["get","delay"],0],[">=",["get","delay"],r]]),i.push(["any",["!has","delay"],["==","delay",0],[">=","delay",r]])}return Pr(t,i)})(t.delays),i,r),Pr(i,r)},Wr=e=>{if(!e?.any?.length)return null;const t=e.any.map(Hr).filter(e=>!d(e));return ht(t)},Gr=e=>{const t=[],i=[];if(Fr(e,t,i),e.showRoadClosures){const r="only"===e.showRoadClosures?"==":"!=";t.push([r,["get","road_closure"],!0]),i.push([r,"road_closure",!0])}return Pr(t,i)},Br=(e,t,i,r)=>{for(const s of t)i.setFilter(s.id,e?ut(e,r[s.id]):r[s.id])};class kr extends te{static async get(e,t){return await z(e),await Z(e,ye,"trafficFlow"),new kr(e,t)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const e=this.mapLibreMap.getSource(ye);if(!e)throw M(`init ${kr.name} with source ID ${ye}`);this.originalFilters={};for(const t of this.getLayers())this.originalFilters[t.id]=t.filter;return{trafficFlow:new B(this.mapLibreMap,e)}}_applyConfig(e){return this.setVisible(e?.visible??!1),this._filter(e?.filters,!1),e}getLayers(){return G(this.tomtomMap.mapLibreMap,[ye])}filter(e){this._filter(e)}_filter(e,t=!0){if(this.tomtomMap.mapReady)if(e?.any?.length){const t=(e=>{if(!e?.any?.length)return null;const t=e.any.map(Gr).filter(e=>!d(e));return ht(t)})(e);t&&Br(t,this.getLayers(),this.mapLibreMap,this.originalFilters)}else this.config?.filters?.any?.length&&Br(void 0,this.getLayers(),this.mapLibreMap,this.originalFilters);t&&(this.config=m({...this.config,filters:e},d))}setVisible(e){this.config={...this.config,visible:e},this.tomtomMap.mapReady&&this.sourcesWithLayers.trafficFlow.setLayersVisible(e)}isVisible(){return this.sourcesWithLayers.trafficFlow.isAnyLayerVisible()}getShown(){return{trafficFlow:this.mapLibreMap.queryRenderedFeatures({layers:this.sourcesWithLayers.trafficFlow.sourceAndLayerIDs.layerIDs,validate:!1}).map(b)}}get events(){return new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.trafficFlow,this.config?.events,b)}}class Vr extends te{static async get(e,t){return await z(e),await Z(e,_e,"trafficIncidents"),new Vr(e,t)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const e=this.mapLibreMap.getSource(_e);if(!e)throw M(`init ${Vr.name} with source ID ${_e}`);this.originalFilters={};for(const t of this.getLayers())this.originalFilters[t.id]=t.filter;return{trafficIncidents:new B(this.mapLibreMap,e)}}_applyConfig(e){return this._setVisible(e?.visible??!1,{updateConfig:!1}),d(e?.icons?.visible)||this.setIconsVisible(e.icons.visible),this._filter(e?.filters,e?.icons?.filters,!1),e}filter(e,t){this._filter(e,t)}_filter(e,t,i=!0){if(this.tomtomMap.mapReady){if(e?.any?.length){const i=Wr(e);if(i){const e=t?this.getNonSymbolLayers():this.getLayers();Br(i,e,this.mapLibreMap,this.originalFilters)}}else this.config?.filters?.any?.length&&Br(void 0,this.getLayers(),this.mapLibreMap,this.originalFilters);if(t?.any?.length){const e=Wr(t);e&&Br(e,this.getSymbolLayers(),this.mapLibreMap,this.originalFilters)}}i&&(this.config=m({...this.config,filters:e,icons:{...this.config?.icons,filters:t}},d))}getLayers(){return G(this.tomtomMap.mapLibreMap,[_e])}getSymbolLayers(){return this.getLayers().filter(e=>"symbol"===e.type)}getNonSymbolLayers(){return this.getLayers().filter(e=>"symbol"!=e.type)}setIconsVisible(e){this.config={...this.config,icons:{...this.config?.icons,visible:e}},this.tomtomMap.mapReady&&this.sourcesWithLayers.trafficIncidents.setLayersVisible(e,e=>"symbol"===e.type)}setVisible(e){this._setVisible(e)}_setVisible(e,t){(t?.updateConfig??!0)&&(delete this.config?.icons?.visible,this.config={...m({...this.config},_),visible:e}),this.tomtomMap.mapReady&&this.sourcesWithLayers.trafficIncidents.setLayersVisible(e)}isVisible(){return this.sourcesWithLayers.trafficIncidents.isAnyLayerVisible()}anyIconLayersVisible(){return!!this.sourcesWithLayers.trafficIncidents?.isAnyLayerVisible(e=>"symbol"===e.type)}getShown(){return{trafficIncidents:this.mapLibreMap.queryRenderedFeatures({layers:this.sourcesWithLayers.trafficIncidents.sourceAndLayerIDs.layerIDs,validate:!1}).map(w)}}get events(){return new ie(this.tomtomMap._eventsProxy,this.sourcesWithLayers.trafficIncidents,this.config?.events,w)}}const Yr=["motorway","motorway_link","trunk","trunk_link","primary","primary_link","secondary","secondary_link","tertiary","tertiary_link","street","service","track"],zr=["unclassified","residential","living_street"],Kr=["parking","driveway","alley"],$r=(e,t)=>({left:e.left-t.left,top:e.top-t.top,right:e.right-t.left,bottom:e.bottom-t.top}),jr=(e,t,i)=>e.right<=0||e.left>=t||e.bottom<=0||e.top>=i,qr=(e,t,i,r)=>{e.top<=i-e.bottom?t.top=Math.max(t.top,e.bottom+r):t.bottom=Math.min(t.bottom,e.top-r)},Xr=(e,t,i,r)=>{e.left<=i-e.right?t.left=Math.max(t.left,e.right+r):t.right=Math.min(t.right,e.left-r)},Zr=(e,t,i,r,s)=>{const a=((e,t,i)=>({left:Math.max(0,e.left),top:Math.max(0,e.top),right:Math.min(t,e.right),bottom:Math.min(i,e.bottom)}))(e,i,r),o=e.left<=0&&e.right>=i,n=e.top<=0&&e.bottom>=r;if(o&&!n)return void qr(a,t,r,s);if(n&&!o)return void Xr(a,t,i,s);const l=e.left<=0,c=e.right>=i,h=e.top<=0,u=e.bottom>=r;!l&&!c||h||u?!h&&!u||l||c?((e,t,i,r,s)=>{const a=e.left,o=i-e.right,n=e.top,l=r-e.bottom,c=Math.min(a,o,n,l);c===a?t.left=Math.max(t.left,e.right+s):c===o?t.right=Math.min(t.right,e.left-s):c===n?t.top=Math.max(t.top,e.bottom+s):t.bottom=Math.min(t.bottom,e.top-s)})(a,t,i,r,s):Xr(a,t,i,s):qr(a,t,r,s)},Jr=e=>"string"==typeof e?document.querySelector(e):e,Qr=e=>"mapLibreMap"in e?e.mapLibreMap:e,es=(e,t,i)=>{const r=Qr(e).getContainer().getBoundingClientRect(),{width:s,height:a}=r,o={left:i,top:i,right:s-i,bottom:a-i};for(const n of t){const e=Jr(n);if(!e)continue;const t=e.getBoundingClientRect(),l=$r(t,r);jr(l,s,a)||Zr(l,o,s,a,i)}return o.left>=o.right||o.top>=o.bottom?null:{visibleAreaBounds:o,mapWidthPX:s,mapHeightPX:a}},ts=e=>{const{map:t,surroundingElements:i,paddingPX:r=0}=e,s=es(t,i,r);if(!s)return null;const{visibleAreaBounds:a}=s,o=Qr(t),n=o.unproject([a.left,a.bottom]),l=o.unproject([a.right,a.top]);return[n.lng,n.lat,l.lng,l.lat]},is=e=>{const{map:t,surroundingElements:i}=e,r=ts({map:t,surroundingElements:i});if(!r)return null;const[s,a,o,n]=r;return[(s+o)/2,(a+n)/2]},rs=e=>{const{map:t,toBeContainedBBox:i,surroundingElements:r,paddingPX:s=0}=e,a=es(t,r,s);if(!a)return null;const{visibleAreaBounds:o,mapWidthPX:n,mapHeightPX:l}=a,c=o.left/n,h=o.right/n,u=o.top/l,d=h-c,p=o.bottom/l-u,[_,y,f,m]=i,A=(f-_)/d,g=(m-y)/p,E=_-c*A,I=m+u*g;return[E,I-g,E+A,I]};export{te as AbstractMapModule,W as AbstractSourceWithLayers,k as AddedSourceWithLayers,pe as BASE_MAP_SOURCE_ID,It as BaseMapModule,qt as DESELECTED_FOREGROUND_COLOR,Xt as DESELECTED_OUTLINE_COLOR,ei as DESELECTED_ROUTE_FILTER,Zt as DESELECTED_SECONDARY_COLOR,ie as EventsModule,ce as EventsProxy,Yi as FINISH_INDEX,Y as GeoJSONSourceWithLayers,Ft as GeometriesModule,de as HILLSHADE_SOURCE_ID,Yt as HillshadeModule,zi as INDEX_TYPE,ti as MAJOR_DELAY_COLOR,Vi as MIDDLE_INDEX,ri as MINOR_DELAY_LABEL_COLOR,ii as MODERATE_DELAY_COLOR,ue as POI_SOURCE_ID,mt as POIsModule,lt as PlacesModule,$t as ROUTE_LINE_FOREGROUND_COLOR,Jt as ROUTE_LINE_FOREGROUND_WIDTH,jt as ROUTE_LINE_OUTLINE_COLOR,Or as RoutingModule,Qt as SELECTED_ROUTE_FILTER,ki as START_INDEX,Ki as STOP_DISPLAY_INDEX,B as StyleSourceWithLayers,ye as TRAFFIC_FLOW_SOURCE_ID,_e as TRAFFIC_INCIDENTS_SOURCE_ID,Dr as TomTomMap,H as TomTomMapSource,kr as TrafficFlowModule,Vr as TrafficIncidentsModule,si as UNKNOWN_DELAY_COLOR,Rt as baseMapLayerGroupNames,et as buildPlaceTitle,Wt as buildReachableRangeFeatures,rr as buildRoutingLayers,rs as calculateFittingBBox,ts as calculatePaddedBBox,is as calculatePaddedCenter,Dt as colorPaletteIDs,Mt as colorPalettes,sr as defaultRoutingLayers,G as filterLayersBySources,Vt as geometryThemes,it as getIconIDForPlace,rt as getPOILayerCategoryForPlace,ft as getStyleCategories,me as mapDisplayPoiCategoryMappings,he as mapStyleLayerIDs,_t as poiCategoryGroups,fe as poiLayerIDs,ot as preparePlacesForDisplay,Gt as prepareReachableRangesForDisplay,kt as reachableRangeGeometryConfig,Yr as roadCategories,Kr as serviceRoadSubCategories,zt as standardStyleIDs,zr as streetRoadSubCategories,Kt as styleModules,Bt as themedGeometryConfig,ge as toBaseMapPOICategory,st as toPlaces};
2
- //# sourceMappingURL=map.es.js.map
1
+ import{isEmpty as e,isEqual as t,isNil as i,omit as r,omitBy as s,remove as a}from"lodash-es";import{TomTomConfig as o,bboxCenter as n,bboxFromCoordsArray as l,formatDistance as c,formatDuration as h,generateId as u,generateTomTomHeaders as d,getPosition as p,iconToTrafficIncidentCategory as _,indexedMagnitudes as y,mergeFromGlobal as f,poiCategoriesToID as m}from"@tomtom-org/maps-sdk/core";import{bearing as A,difference as g,featureCollection as E,mask as I}from"@turf/turf";import{Map as R,getRTLTextPluginStatus as T,setRTLTextPlugin as L,setWorkerCount as S}from"maplibre-gl";import{version as O}from"maplibre-gl/package.json";var N=["road_category","road_subcategory","relative_speed","left_hand_traffic","road_closure","absolute_speed","part_of_two_way_road","openlr","display_class"],b=e=>{const{properties:t}=e;return{id:e.id,type:e.type,geometry:e.geometry,properties:{roadCategory:t?.road_category,leftHandTraffic:Boolean(t?.left_hand_traffic),roadClosure:Boolean(t?.road_closure),relativeSpeed:t?.relative_speed,...t?.road_subcategory&&{roadSubcategory:t.road_subcategory},...t?.absolute_speed&&{absoluteSpeed:t.absolute_speed},...t?.part_of_two_way_road&&{partOfTwoWayRoad:Boolean(t.part_of_two_way_road)},...t?.openlr&&{openlr:t.openlr},...t?.display_class&&{displayClass:t.display_class}}}},C=["icon_category","left_hand_traffic","magnitude_of_delay","road_category","road_subcategory","id","description","delay","part_of_two_way_road","start_time","end_time","probability_of_occurrence","number_of_reports","last_report_time","average_speed_kmph","openlr","time_validity","display_class"],v={other:0,accident:1,fog:2,danger:3,rain:4,frost:5,jam:6,"lane-closed":7,"road-closed":8,roadworks:9,wind:10,flooding:11,"animals-on-road":12,"narrow-lanes":13,"broken-down-vehicle":14},w=e=>{const{properties:t}=e;return{id:e.id,type:e.type,geometry:e.geometry,properties:{id:t.id??u(),description:t?.description_0??"",category:_(t?.icon_category_0),magnitudeOfDelay:y[t?.magnitude_of_delay],roadCategory:t?.road_category,roadSubcategory:t?.road_subcategory,leftHandTraffic:Boolean(t?.left_hand_traffic),...t?.delay&&{delayInSeconds:t.delay},...t?.part_of_two_way_road&&{partOfTwoWayRoad:Boolean(t.part_of_two_way_road)},...t?.start_time&&{startTime:new Date(t.start_time)},...t?.end_time&&{endTime:new Date(t.end_time)},...t?.probability_of_occurrence&&{probabilityOfOccurrence:t.probability_of_occurrence},...t?.number_of_reports&&{numberOfReports:t.number_of_reports},...t?.last_report_time&&{lastReportTime:new Date(t.last_report_time)},...t?.average_speed_kmph&&{averageSpeedKmph:t.average_speed_kmph},...t?.openlr&&{openlr:t.openlr},...t?.time_validity&&{timeValidity:t.time_validity},...t?.display_class&&{displayClass:t.display_class},...t?.point_type&&{pointType:t.point_type}}}},M=e=>/* @__PURE__ */new Error(`Trying to ${e} while it is not in the map style. Did you exclude it when loading the map?`),D=()=>"undefined"!=typeof document&&"undefined"!=typeof DOMParser&&"undefined"!=typeof btoa,P=e=>{if(!D())return;const t=document.createElement("img");return t.src=`data:image/svg+xml;base64,${btoa((new XMLSerializer).serializeToString(e))}`,t},U=e=>(new DOMParser).parseFromString(e,"image/svg+xml").documentElement,x=e=>{const t=U('<svg xmlns="http://www.w3.org/2000/svg" width="120" height="140">\n <path id="background" d="M63.95 137.516c6.556-12.737 19.098-21.09 30.828-29.388C110.046 97.324 120 79.603 120 59.574 120 26.671 93.138 0 60 0S0 26.671 0 59.574c0 20.029 9.954 37.75 25.22 48.55 11.734 8.302 24.274 16.652 30.83 29.388 1.706 3.316 6.194 3.316 7.9 0z"\n fill="#1988cf"/>\n <path id="outline" d="M91.298 103.272C105.052 93.544 114 77.596 114 59.574c0-29.61-24.176-53.617-54-53.617S6 29.964 6 59.574c0 18.022 8.95 33.97 22.7 43.698l2.27 1.601c10.172 7.153 21.922 15.423 29.03 27.416 7.104-11.993 18.858-20.259 29.03-27.416l2.268-1.601zm1.468 6.274c-11.13 7.845-22.632 15.957-28.816 27.966-1.706 3.316-6.194 3.316-7.9 0-6.182-12.009-17.686-20.121-28.816-27.966l-2.016-1.422C9.954 97.324 0 79.603 0 59.574 0 26.671 26.862 0 60 0s60 26.671 60 59.574c0 20.029-9.954 37.75-25.222 48.55l-2.016 1.422z"\n fill-opacity=".3"/>\n</svg>\n');return e?.fillColor&&t.querySelector("#background")?.setAttribute("fill",e.fillColor),e?.outlineColor&&t.querySelector("#outline")?.setAttribute("fill",e.outlineColor),void 0!==e?.outlineOpacity&&t.querySelector("#outline")?.setAttribute("fill-opacity",e.outlineOpacity.toString()),t};var F,H=e=>(function(e){if(i(e))throw new Error(`${e} must not be null/undefined. Something went wrong with its initialization.`)}(e),e),W=class{constructor(e,t,i){this.id=e,this.spec=t,this.runtimeSource=i}ensureAddedToMap(e){this.runtimeSource||(!e.getSource(this.id)&&this.spec&&e.addSource(this.id,this.spec),this.runtimeSource=e.getSource(this.id))}},G=class{constructor(e,t,i){this.map=e,this.source=t,this._layerSpecs=i,this._updateSourceAndLayerIDs()}isAnyLayerVisible(e){return this.getLayerSpecs(e).some(e=>this.isLayerVisible(e))}areAllLayersVisible(e){return this.getLayerSpecs(e).every(e=>this.isLayerVisible(e))}getLayerSpecs(e){return e?this._layerSpecs.filter(e):this._layerSpecs}_updateSourceAndLayerIDs(){this._sourceAndLayerIDs={sourceID:this.source.id,layerIDs:this._layerSpecs.map(e=>e.id)}}isLayerVisible(e){return"none"!==this.map.getLayoutProperty(e.id,"visibility")}setLayersVisible(e,t){for(const i of this.getLayerSpecs(t))this.map.setLayoutProperty(i.id,"visibility",e?"visible":"none",{validate:!1})}get sourceAndLayerIDs(){return this._sourceAndLayerIDs}equalSourceAndLayerIDs(e){return this.sourceAndLayerIDs.sourceID===e.sourceAndLayerIDs.sourceID&&this.sourceAndLayerIDs.layerIDs.length===e.sourceAndLayerIDs.layerIDs.length&&this.sourceAndLayerIDs.layerIDs.every((t,i)=>t===e.sourceAndLayerIDs.layerIDs[i])}},B=(e,t)=>e.getStyle().layers.filter(e=>t.includes(e?.source)),k=class extends G{constructor(e,t,i){let r=B(e,[t.id]);i&&(r=r.filter(i)),super(e,new W(t.id,e.getStyle().sources[t.id],t),r)}},V=class extends G{constructor(e,t,i,r){super(e,new W(t,i),r.map(e=>({...e,source:t})))}ensureLayersAddedToMap(){for(const e of this._layerSpecs)this.map.getLayer(e.id)||this.map.addLayer(e,e.beforeID)}ensureAddedToMapWithVisibility(e,t){this.source.ensureAddedToMap(this.map),t&&(this.ensureLayersAddedToMap(),this.setLayersVisible(e))}},Y={type:"FeatureCollection",features:[]},z=class extends V{constructor(e,t,i,r=!0){super(e,t,{type:"geojson",data:Y,promoteId:"id"},i),this.shownFeatures=Y,this.ensureAddedToMapWithVisibility(!1,r)}show(e){this.shownFeatures=e,H(this.source.runtimeSource).setData(e),this.setLayersVisible(!!e.features.length)}clear(){this.show(Y)}findFeature(e){return"index"in e?this.shownFeatures.features[e.index]:"id"in e?this.shownFeatures.features.find(t=>t.id===e.id):void 0}putEventState(e){if("put"===(e.mode??"put"))for(const i of this.shownFeatures.features)i.properties?.eventState===e.state&&delete i.properties.eventState;const t=this.findFeature(e);t&&(t.properties={...t.properties,eventState:e.state}),!1!==e.show&&this.show(this.shownFeatures)}cleanEventState(e){const t=this.findFeature(e);t?.properties?.eventState&&(delete t?.properties?.eventState,!1!==e?.show&&this.show(this.shownFeatures))}cleanEventStates(e){let t=!1;for(const i of this.shownFeatures.features)e?.states&&!e.states.includes(i.properties?.eventState)||(delete i.properties?.eventState,t=!0);!1!==e?.show&&t&&this.show(this.shownFeatures)}},K=async e=>{e.mapReady||(await e.mapLibreMap.once("styledata"),await K(e))},$=e=>{for(const i of e)if(i&&Object.keys(i.properties).length)for(const e in i.properties)if("string"==typeof i.properties[e])try{i.properties[e]=JSON.parse(i.properties[e])}catch(t){}},j=(e,t,i)=>{const r=e.id;e.maxzoom===t.maxzoom&&e.minzoom===t.minzoom||i.setLayerZoomRange(r,e.minzoom??i.getMinZoom(),e.maxzoom??i.getMaxZoom()),i.setFilter(r,e.filter,{validate:!1});for(const s of Object.keys(t.layout??[]))e.layout?.[s]||i.setLayoutProperty(r,s,void 0,{validate:!1});for(const s of Object.keys(t.paint??[]))e.paint?.[s]||i.setPaintProperty(r,s,void 0,{validate:!1});for(const[s,a]of Object.entries(e.paint??[]))i.setPaintProperty(r,s,a,{validate:!1});for(const[s,a]of Object.entries(e.layout??[]))i.setLayoutProperty(r,s,a,{validate:!1})},q=(e,t,i)=>{e.forEach((e,r)=>j(e,t[r],i))},X=(e,t)=>{const i=/* @__PURE__ */new Set,r=e=>{t.getLayer(e.id)||t.addLayer({...e,layout:{...e.layout,visibility:"none"}},e.beforeID),i.add(e.id)},s={};for(e.forEach(e=>{e.beforeID?i.has(e.beforeID)||t.getLayer(e.beforeID)?(i.add(e.beforeID),r(e)):s[e.beforeID]?s[e.beforeID].push(e):s[e.beforeID]=[e]:r(e)});Object.keys(s).length>0;){const e=Object.keys(s).filter(e=>i.has(e));if(!e.length)return void console.error(`Some layers cannot be added. Check for non-existing layers, or circular beforeID dependencies for the following: ${JSON.stringify(Object.keys(s))}`);e.forEach(e=>{s[e].forEach(e=>r(e)),delete s[e]})}},Z=(e,t)=>{switch(typeof e){case"undefined":return{type:"standard",include:[t]};case"string":return{type:"standard",id:e,include:[t]};default:if("standard"===e.type)return e.include?{...e,include:[...e.include,t]}:{...e,include:[t]};throw(e=>/* @__PURE__ */new Error(`Trying to add style module ${e} to the custom style!`))(t)}},J=async(e,t,i)=>{if(!e.mapLibreMap.getSource(t)){const r=e.mapLibreMap;r.isStyleLoaded()||await r.once("idle"),e.setStyle(Z(e.getStyle(),i)),await(async(e,t)=>{e.mapLibreMap.getSource(t)&&e.mapLibreMap.isSourceLoaded(t)||await e.mapLibreMap.once("sourcedata")})(e,t),await r.once("styledata");for(const e of B(r,[t]))r.setLayoutProperty(e.id,"visibility","none",{validate:!1});await r.once("styledata")}},Q=async(e,t,i,r,s)=>{if(!i)return void console.warn(`addOrUpdateImage called with empty image for ID ${t}`);const a=i=>{const a=r.hasImage(t);a&&"add-or-update"==e?r.updateImage(t,i):a||r.addImage(t,i,s)},o=e=>{e.complete?e.naturalWidth>0?a(e):console.warn(`Failed to load image for ID ${t}`):(e.onload=()=>a(e),e.onerror=()=>console.warn(`Failed to load image for ID ${t}`))};"string"==typeof i?i.includes("<svg")?o(P(U(i))):a((await r.loadImage(i)).data):o(i)},ee=e=>{switch(e){case"standardDark":case"drivingDark":case"monoDark":case"satellite":return"dark";default:return"light"}},te=e=>{if("string"==typeof e)return ee(e);const t=e;return t?.id?ee(t.id):"light"},ie=class{constructor(e,t,i){this._initializing=!0,this.moduleReady=!1,this.sourceType=e,this.tomtomMap=t,this.eventsProxy=t._eventsProxy,this.mapLibreMap=t.mapLibreMap,this.initSourcesWithLayers(i),this.applyConfig(i),this.tomtomMap.addStyleChangeHandler({onStyleAboutToChange:()=>{this.moduleReady=!1},onStyleChanged:()=>this.restoreDataAndConfig()}),this._initializing=!1}initSourcesWithLayers(e,t){this.moduleReady=!1,this.sourcesWithLayers=this._initSourcesWithLayers(e,t),this._sourceAndLayerIDs=Object.fromEntries(Object.entries(this.sourcesWithLayers).map(([e,t])=>[e,t.sourceAndLayerIDs])),t&&this.eventsProxy.updateIfRegistered(this.sourcesWithLayers),this.tomtomMap.mapReady&&(this.moduleReady=!0)}async waitUntilModuleReady(){await K(this.tomtomMap),this.moduleReady||await new Promise(e=>{const t=setInterval(()=>{this.tomtomMap.mapReady&&this.moduleReady&&(clearInterval(t),e())},200)})}applyConfig(e){this.config=this._applyConfig(e)}resetConfig(){this.applyConfig(void 0)}async restoreDataAndConfig(){this.moduleReady=!1,"geojson"===this.sourceType?requestAnimationFrame(()=>{this.restoreDataAndConfigImpl()}):this.restoreDataAndConfigImpl()}restoreDataAndConfigImpl(){this.initSourcesWithLayers(this.config,!0),this._applyConfig(this.config)}getConfig(){return this.config&&{...this.config}}get sourceAndLayerIDs(){return this._sourceAndLayerIDs}},re=class{constructor(e,t,i,r){this.eventProxy=e,this.sourceWithLayers=t,this.config=i,this.mapping=r}on(e,t){if(this.mapping){const i=this.mapping;this.eventProxy.addEventHandler(this.sourceWithLayers,(e,...r)=>t(i(e),...r),e,this.config)}else this.eventProxy.addEventHandler(this.sourceWithLayers,t,e,this.config)}off(e){this.eventProxy.remove(this.sourceWithLayers,e)}},se=class{constructor(){this.interactiveLayerIDs=[],this.handlers={},this.findHandlers=(e,t,i)=>t&&i&&e.flatMap(e=>{const r=this.handlers[t]?.[e];return 1===r?.length?r:this.handlers[t]?.[e]?.filter(e=>e.layerIDs.includes(i))||[]})||[]}ensureInteractiveLayerIDsAdded(e){e._layerSpecs.forEach(e=>{this.interactiveLayerIDs.includes(e.id)||this.interactiveLayerIDs.push(e.id)})}addEventHandler(e,t,i,r){this.ensureInteractiveLayerIDsAdded(e);const s=e.source.id;this.handlers[s]||(this.handlers[s]={[i]:[]}),this.handlers[s][i]??=[],this.handlers[s][i]?.push({sourceWithLayers:e,layerIDs:e._layerSpecs.map(e=>e.id),fn:t,config:r})}remove(t,i){const r=this.handlers[t.source.id]?.[i];r&&(a(r,e=>{return i=t._layerSpecs,e.layerIDs.every((e,t)=>e===i[t].id);var i}),r.length||(delete this.handlers[t.source.id]?.[i],e(this.handlers[t.source.id])&&delete this.handlers[t.source.id]));for(const e of t._layerSpecs)a(this.interactiveLayerIDs,t=>e.id===t)}removeAll(){this.interactiveLayerIDs=[],this.handlers={}}hasSourceID(e){return!!this.handlers[e]}updateIfRegistered(e){for(const t of Object.values(e)){const e=this.handlers[t.source.id];if(e)for(const i of Object.values(e))for(const e of i)t.equalSourceAndLayerIDs(e.sourceWithLayers)&&(e.sourceWithLayers=t)}}},ae=e=>"click"===e||"contextmenu"===e,oe=(e,t,i,s="updateInProps")=>{const{feature:a,index:o}=((e,t)=>{for(let i=0;i<e.length;i++){const r=e[i];if(r.id===t)return{feature:r,index:i}}})(i,t)||{};if(a&&(!ae(a.properties?.eventState)||ae(e))){const t={...a,properties:"updateInProps"===s?{...a?.properties,eventState:e}:r(a?.properties,"eventState")};return i.splice(o,1,t),o}},ne=(e,t,r)=>{const s=[...r.shownFeatures.features];i(oe(e,t.id,s,"removeFromProps"))||r.show({...r.shownFeatures,features:s})},le=(e,t,i,r,s)=>{if(t&&r instanceof z){const n=[...r.shownFeatures.features],l=oe(e,t.id,n);return!i||(o=t,(a=i)&&o&&a.id===o.id)||(s===r?oe(e,i.id,n,"removeFromProps"):s instanceof z&&ne(e,i,s)),r.show({...r.shownFeatures,features:n}),{feature:n[l],index:l}}var a,o;return i&&s instanceof z&&ne(e,i,s),{feature:t}},ce={precisionMode:"box",paddingBoxPx:5,cursorOnHover:"pointer",cursorOnMouseDown:"grabbing",cursorOnMap:"default",longHoverDelayAfterMapMoveMS:800,longHoverDelayOnStillMapMS:300},he=class extends se{constructor(e,t={}){super(),this.enabled=!0,this.firstDelayedHoverSinceMapMove=!0,this.map=e,this.mapCanvas=e.getCanvas(),this.config={...ce,...t},this.mapCanvas.style.cursor=this.config.cursorOnMap,this.lastCursorStyle=this.config.cursorOnMap,this.listenToEvents()}listenToEvents(){this.map.on("mousemove",e=>this.onMouseMove(e)),this.map.on("movestart",()=>this.onMouseStart()),this.map.on("mouseout",()=>this.onMouseOut()),this.map.on("mouseover",e=>this.onMouseMove(e)),this.map.on("mousedown",()=>this.onMouseDown()),this.map.on("mouseup",()=>this.onMouseUp()),this.map.on("click",e=>this.onMapClick("click",e)),this.map.on("contextmenu",e=>this.onMapClick("contextmenu",e))}enable(e){this.enabled=e,e||this.clearLongHoverTimeout()}toPaddedBounds(e){const t=this.config.paddingBoxPx;return[[e.x-t,e.y+t],[e.x+t,e.y-t]]}isEnabled(){return this.enabled&&!this.map.isMoving()}getRenderedFeatures(e){if(!this.interactiveLayerIDs.length)return[];const t={layers:this.interactiveLayerIDs,validate:!1},i=this.config.precisionMode,r="point-then-box"===i||"point"===i?this.map.queryRenderedFeatures(e,t):[];return r.length||"point"===i?r:this.map.queryRenderedFeatures(this.toPaddedBounds(e),t)}clearLongHoverTimeout(){window.clearTimeout(this.longHoverTimeoutHandlerID)}restartLongHoverTimeout(){this.clearLongHoverTimeout(),this.longHoverTimeoutHandlerID=window.setTimeout(()=>this.handleLongHoverTimeout(),this.firstDelayedHoverSinceMapMove?this.config.longHoverDelayAfterMapMoveMS:this.config.longHoverDelayOnStillMapMS)}handleLongHoverTimeout(){if(this.firstDelayedHoverSinceMapMove=!1,this.hoveringSourceWithLayers){const e=le("long-hover",this.hoveringFeature,void 0,this.hoveringSourceWithLayers,void 0);this.findHandlers(["long-hover"],this.hoveringFeature?.source,this.hoveringFeature?.layer.id).forEach(t=>t.fn(e.feature,this.hoveringLngLat,this.hoveringFeatures,this.hoveringSourceWithLayers))}}onMouseStart(){this.firstDelayedHoverSinceMapMove=!0,this.clearLongHoverTimeout()}onMouseOut(){this.clearLongHoverTimeout()}onMouseDown(){this.lastCursorStyle=this.mapCanvas.style.cursor,this.mapCanvas.style.cursor=this.config.cursorOnMouseDown}onMouseUp(){this.mapCanvas.style.cursor=this.lastCursorStyle}onMouseMove(e){if(!this.isEnabled())return;this.hoveringFeatures=this.getRenderedFeatures(e.point),$(this.hoveringFeatures);const[t]=this.hoveringFeatures;if(t&&!this.hasSourceID(t.source))return;const{hoverChanged:i,mouseInMotionOverHoveredFeature:r}=((e,t,i,r)=>{if(t){if(!r)return{hoverChanged:!0};if(t.id&&t.id!==r.id||t.properties.id&&t.properties.id!==r.properties.id||t.source!==r.source||t.layer.id!==r.layer.id)return{hoverChanged:!0};if(i&&(e.x-i.x!=0||e.y-i.y!=0))return{mouseInMotionOverHoveredFeature:!0}}else if(r)return{hoverChanged:!0};return{}})(e.point,t,this.hoveringPoint,this.hoveringFeature);if(i||r){this.hoveringLngLat=e.lngLat,this.hoveringPoint=e.point;const s=this.hoveringFeature;this.hoveringFeature=t;const a=this.hoveringSourceWithLayers,o=this.findHandlers(["hover","hover-move","long-hover","click","contextmenu"],t?.source,t?.layer.id)?.[0];if(this.hoveringSourceWithLayers=o?.sourceWithLayers,i){this.updateHoverCursor(o?.config);const i=le("hover",this.hoveringFeature,s,this.hoveringSourceWithLayers,a),r=this.findHandlers(["hover"],t?.source,t?.layer.id);for(const t of r)t.fn(i.feature,e.lngLat,this.hoveringFeatures,this.hoveringSourceWithLayers)}if(r){const t=this.findHandlers(["hover-move"],this.hoveringFeature?.source,this.hoveringFeature?.layer.id);for(const i of t)i.fn(this.hoveringFeature,e.lngLat,this.hoveringFeatures,this.hoveringSourceWithLayers)}this.restartLongHoverTimeout()}}updateHoverCursor(e){this.hoveringFeature?this.mapCanvas.style.cursor=e?.cursorOnHover??this.config.cursorOnHover:this.mapCanvas.style.cursor=this.config.cursorOnMap}onMapClick(e,t){if(!this.isEnabled())return;const i=this.getRenderedFeatures(t.point);$(i);const r=this.lastClickedFeature;this.lastClickedFeature=i[0];const s=this.lastClickedSourceWithLayers,a=this.findHandlers([e],this.lastClickedFeature?.source,this.lastClickedFeature?.layer.id);this.lastClickedSourceWithLayers=a?.[0]?.sourceWithLayers;const o=le(e,this.lastClickedFeature,r,this.lastClickedSourceWithLayers,s);for(const n of a)n.fn(o.feature,t.lngLat,i,this.lastClickedSourceWithLayers)}},ue={country:"Places - Country name",lowestPlaceLabel:"Places - Village / Hamlet",poi:"POI",lowestLabel:"Borders - Treaty label",lowestRoadLine:"Tunnel - Railway outline",lowestBuilding:"Buildings - Underground"},de="vectorTiles",pe="hillshade",_e="vectorTiles",ye="vectorTilesIncidents",fe="vectorTilesFlow",me=["POI","POI - Micro"],Ae={NATIVE_RESERVATION:"aboriginal_land",AIRPORT:"airport",AMUSEMENT_PARK:"amusement_park",ATM:"atm",CASH_DISPENSER:"atm",BANK:"bank",BAR:"bar",BEACH:"beach_resort",ACCESS_GATEWAY:"border_control",FRONTIER_CROSSING:"border_control",BUS_STOP:"bus_station",CAFE:"cafe",CAFE_PUB:"cafe",CAMPING_GROUND:"camping_ground",RENT_A_CAR_FACILITY:"car_rental",CASINO:"casino_and_gambling",CEMETERY:"cemetery",ELECTRIC_VEHICLE_STATION:"charging_location",CINEMA:"cinema",MOVIE_THEATER:"cinema",HEALTH_CARE_SERVICE:"clinic",CLOTHING_SHOP:"clothing_shop",COFFEE_SHOP:"coffee_shop",COLLEGE_OR_UNIVERSITY:"college_or_university",COLLEGE_UNIVERSITY:"college_or_university",AGRICULTURE:"commercial_area",BUSINESS_PARK:"commercial_area",COMMERCIAL_BUILDING:"commercial_area",COMPANY:"commercial_area",RESIDENTIAL_ACCOMMODATION:"commercial_area",EXHIBITION_CONVENTION_CENTER:"conference_center",CLUB_ASSOCIATION:"consumer_service",PUBLIC_AMENITY:"consumer_service",WELFARE_ORGANIZATION:"consumer_service",COURTHOUSE:"courthouse",COMMUNITY_CENTER:"cultural_center",CULTURAL_CENTER:"cultural_center",DENTIST:"dentist",DEPARTMENT_STORE:"department_store",DOCTOR:"doctor",EMERGENCY_MEDICAL_SERVICE:"emergency_ward_entrance",EMERGENCY_ROOM:"emergency_ward_entrance",FAST_FOOD:"fast_food",FERRY_TERMINAL:"ferry_terminal",FIRE_STATION_BRIGADE:"fire_station",FITNESS_CLUB_CENTER:"fitness_center",WINERY:"food_and_drinks_shop",CURRENCY_EXCHANGE:"foreign_exchange",EXCHANGE:"foreign_exchange",FUEL_FACILITIES:"fuel_station",GAS_STATION:"fuel_station",PETROL_STATION:"fuel_station",GOLD_EXCHANGE:"gold_exchange",GOLF_COURSE:"golf_course",EMBASSY:"government_office",GOVERNMENT_OFFICE:"government_office",HELIPAD_HELICOPTER_LANDING:"heliport_or_helipad",HISTORIC_SITE:"historic_site",HOLIDAY_RENTAL:"holiday_home",VACATION_RENTAL:"holiday_home",GENERAL_HOSPITAL_AND_POLYCLINIC:"hospital",HOSPITAL:"hospital",HOSPITAL_POLYCLINIC:"hospital",HOTEL_MOTEL:"hotel_or_motel",ICE_SKATING_RINK:"ice_rink",INDUSTRIAL_BUILDING:"industrial_area",PORT_WAREHOUSE_FACILITY:"industrial_area",PRIMARY_RESOURCE_UTILITY:"industrial_area",GEOGRAPHIC_FEATURE:"landmark",SHOPPING_CENTER:"mall",MANUFACTURING_FACILITY:"manufacturing_facility",MARINA:"marina",MARKET:"marketplace",MEDIA_FACILITY:"media_facility",MOUNTAIN_PASS:"mountain_pass",MUSEUM:"museum",NON_GOVERNMENTAL_ORGANIZATION:"ngo_office",CONCERT_HALL:"nightlife",ENTERTAINMENT:"nightlife",NIGHTLIFE:"nightlife",PARK_RECREATION_AREA:"park_and_recreation_area",TRAILS:"park_and_recreation_area",TRAIL_SYSTEM:"park_and_recreation_area",LEISURE_CENTER:"park_and_recreation_facility",WATER_SPORT:"park_and_recreation_facility",OPEN_PARKING_AREA:"parking_facility",PARKING_GARAGE:"parking_facility",PHARMACY:"pharmacy",POLICE_STATION:"police_station",POST_OFFICE:"post_office",PRISON_CORRECTIONAL_FACILITY:"prison",PROTECTED_AREA:"protected_land",PUB:"pub",LIBRARY:"public_library",PUBLIC_TRANSPORT_STOP:"public_transport_stop",RAILWAY_STATION:"railway_station",CHURCH:"religious_site",GURUDWARA:"religious_site",MOSQUE:"religious_site",PAGODA:"religious_site",PLACE_OF_WORSHIP:"religious_site",SYNAGOG:"religious_site",TEMPLE:"religious_site",RENT_A_CAR_PARKING:"rental_car_parking",RESEARCH_FACILITY:"research_facility",REST_AREA:"rest_and_service_area",RESTAURANT:"restaurant",RESTAURANT_AREA:"restaurant",SCHOOL:"school_or_kindergarten",SHOP:"shop_or_store",ADVENTURE_SPORTS_FACILITY:"sport_facility",ADVENTURE_SPORTS_VENUE:"sport_facility",SPORTS_CENTER:"sport_facility",TENNIS_COURT:"sport_facility",STADIUM:"stadium",SUPERMARKETS_HYPERMARKETS:"supermarket",SWIMMING_POOL:"swimming_pool",TAXI_STAND:"taxi_stand",OPERA_HOUSE:"theater",THEATER:"theater",TOLL_GATE:"toll_booth",IMPORTANT_TOURIST_ATTRACTION:"tourist_attraction",TOURIST_ATTRACTION:"tourist_attraction",TOURIST_INFORMATION_OFFICE:"tourist_information",TRUCK_STOP:"truck_stop",AUTOMOTIVE_DEALER:"vehicle_dealer",MOTORING_ORGANIZATION_OFFICE:"vehicle_inspection",TRAFFIC_CONTROL_DEPARTMENT:"vehicle_inspection",TRAFFIC_SERVICE_CENTER:"vehicle_inspection",TRANSPORT_AUTHORITY_VEHICLE_REGISTRATION:"vehicle_inspection",REPAIR_FACILITY:"vehicle_repair",CAR_WASH:"vehicle_wash",VETERINARIAN:"veterinary",HILL:"viewpoint",MOUNTAIN_PEAK:"viewpoint",SCENIC_PANORAMIC_VIEW:"viewpoint",WEIGH_STATION:"weighbridge",AQUATIC_ZOO:"zoo_or_aquarium",ARBORETA_BOTANICAL_GARDENS:"zoo_or_aquarium",ZOOS_ARBORETA_BOTANICAL_GARDEN:"zoo_or_aquarium"},ge={...Ae,AIRFIELD:"airport",AIRLINE_ACCESS:"airport",PRIVATE_AIRPORT:"airport",PUBLIC_AIRPORT:"airport",ANIMAL_SHELTER:"animal_shelter",DIVERSIFIED_FINANCIALS:"bank",COCKTAIL_BAR:"bar",BEACH_CLUB:"beach_resort",SECURED_ENTRANCE:"border_control",INTERNET_CAFE:"cafe",CAFETERIA:"cafeteria",CARAVAN_SITE:"camping_ground",RECREATIONAL_CAMPING_GROUND:"camping_ground",REST_CAMP:"camping_ground",MAUSOLEUM_GRAVE:"cemetery",CHILD_CARE_FACILITY:"childcare",PRE_SCHOOL:"childcare",DRIVE_IN_MOVIES:"cinema",CHILDRENS_CLOTHES:"clothing_shop",MENS_CLOTHING:"clothing_shop",SPECIALTY_CLOTHING_SHOP:"clothing_shop",WOMENS_CLOTHING:"clothing_shop",JUNIOR_COLLEGE_COMMUNITY_COLLEGE:"college_or_university",COMEDY_CLUB:"comedy_club",ADVERTISING_COMPANY:"commercial_area",AGRICULTURAL_BUSINESS:"commercial_area",AGRICULTURAL_TECHNOLOGY:"commercial_area",AIRLINE_COMPANY:"commercial_area",APARTMENT_RENTAL:"commercial_area",AUTOMOBILE_COMPANY:"commercial_area",BUILDING:"commercial_area",BUSINESS_SERVICES:"commercial_area",BUS_CHARTER_COMPANY:"commercial_area",CABLE_TELEPHONE_COMPANY:"commercial_area",CLEANING_SERVICES:"commercial_area",COMPUTER_DATA_SERVICES:"commercial_area",CONSTRUCTION_COMPANY:"commercial_area",DELIVERY_SERVICE:"commercial_area",ELECTRONICS_COMPANY:"commercial_area",EQUIPMENT_RENTAL:"commercial_area",FARM:"commercial_area",FLATS_APARTMENT_COMPLEX:"commercial_area",HORTICULTURE:"commercial_area",IMPORT_EXPORT_AND_DISTRIBUTION:"commercial_area",INSURANCE_COMPANY:"commercial_area",INVESTMENT_ADVISOR:"commercial_area",LEGAL_SERVICES:"commercial_area",MINING_COMPANY:"commercial_area",MOVING_STORAGE_COMPANY:"commercial_area",OIL_NATURAL_GAS:"commercial_area",PHARMACEUTICAL_COMPANY:"commercial_area",PRIMARY_PRODUCER:"commercial_area",PUBLISHING_TECHNOLOGIES:"commercial_area",REAL_ESTATE_AGENT:"commercial_area",REAL_ESTATE_COMPANY:"commercial_area",RETIREMENT_COMMUNITY:"commercial_area",SERVICE_COMPANY:"commercial_area",SOFTWARE_COMPANY:"commercial_area",TAX_SERVICES:"commercial_area",TELECOMMUNICATIONS:"commercial_area",TRANSPORT_COMPANY:"commercial_area",TRAVEL_AGENT:"commercial_area",WEDDING_SERVICES:"commercial_area",PUBLIC_CALL_BOX:"consumer_service",PUBLIC_TOILET:"consumer_service",GENERAL_PRACTITIONER:"doctor",SPECIALIST:"doctor",AMBULANCE_UNIT:"emergency_ward_entrance",ROAD_RESCUE:"emergency_ward_entrance",MICROBREWERY:"food_and_drinks_shop",BATTLEFIELD:"historic_site",MEMORIAL:"historic_site",BUNGALOW_RENTAL:"holiday_home",CHALET_RENTAL:"holiday_home",COTTAGE_RENTAL:"holiday_home",VILLA_RENTAL:"holiday_home",HORSE_RIDING_CENTER:"horse_riding",BLOOD_BANK:"hospital",HOSPITAL_FOR_WOMEN_AND_CHILDREN:"hospital",HOSPITAL_OF_CHINESE_MEDICINE:"hospital",SPECIAL_HOSPITAL:"hospital",B_B_GUEST_HOUSE:"hotel_or_motel",CABINS_LODGES:"hotel_or_motel",HOSTEL:"hotel_or_motel",HOTEL:"hotel_or_motel",MOTEL:"hotel_or_motel",RESORT:"hotel_or_motel",ICE_CREAM_PARLOR:"ice_cream_shop",ICE_HOCKEY_ARENA:"ice_rink",CHEMICAL_COMPANY:"industrial_area",MECHANICAL_ENGINEERING:"industrial_area",QUARRY:"industrial_area",YOGURT_JUICE_BAR:"juice_bar",ARCH:"landmark",BAY:"landmark",BRIDGE:"landmark",CAPE:"landmark",COVE:"landmark",DAM:"landmark",DUNE:"landmark",ISLAND:"landmark",LOCALE:"landmark",MARSH:"landmark",MONUMENT:"landmark",OASIS:"landmark",OBSERVATORY:"landmark",PARKWAY:"landmark",PLAIN_FLAT:"landmark",PLATEAU:"landmark",RAPIDS:"landmark",REEF:"landmark",RESERVOIR:"landmark",RIVER_CROSSING:"landmark",ROCKS:"landmark",STATUE:"landmark",TOWER:"landmark",TUNNEL:"landmark",VALLEY:"landmark",WATER_HOLE:"landmark",WELL:"landmark",AUTOMOBILE_MANUFACTURING:"manufacturing_facility",MANUFACTURING_COMPANY:"manufacturing_facility",FARMERS_MARKET:"marketplace",FOOD_MARKET:"marketplace",INFORMAL_MARKET:"marketplace",PUBLIC_MARKET:"marketplace",MILITARY_AIRPORT:"military_airfield",FUNERAL_SERVICE_MORTUARIES:"mourning_facility",AMUSEMENT_PLACE:"nightlife",BETTING_STATION:"nightlife",CABARET_THEATER:"nightlife",DISCO_CLUB:"nightlife",FAIRGROUND:"nightlife",JAZZ_CLUB:"nightlife",KARAOKE_CLUB:"nightlife",MUSIC_CENTER:"nightlife",ADVENTURE_VEHICLE_TRAIL:"park_and_recreation_area",FISHING_HUNTING_AREA:"park_and_recreation_area",FOREST_AREA:"park_and_recreation_area",HIKING_TRAIL:"park_and_recreation_area",HISTORICAL_PARK:"park_and_recreation_area",HORSE_RIDING_TRAIL:"park_and_recreation_area",MOUNTAIN_BIKE_TRAIL:"park_and_recreation_area",PARK:"park_and_recreation_area",PICNIC_AREA:"park_and_recreation_area",RECREATION_AREA:"park_and_recreation_area",ROCK_CLIMBING_TRAIL:"park_and_recreation_area",WILDERNESS_AREA:"park_and_recreation_area",OPEN_CAR_PARKING_AREA:"parking_facility",BEAUTY_SALON:"personal_care_service",HAIRDRESSER:"personal_care_service",NAIL_SALON:"personal_care_service",PERSONAL_CARE_FACILITY:"personal_care_service",PERSONAL_SERVICE:"personal_care_service",SAUNA_SOLARIUM_MASSAGE:"personal_care_service",DRUG_STORE:"pharmacy",MARIJUANA_DISPENSARY:"pharmacy",MEDICINAL_MARIJUANA_DISPENSARY:"pharmacy",RECREATIONAL_MARIJUANA_DISPENSARY:"pharmacy",PLANETARIUM:"planetarium",COURIER_DROP_BOX:"post_depot",BUS_LINES:"public_transport_stop",PASSENGER_TRANSPORT_TICKET_OFFICE:"public_transport_stop",STREETCAR_STOP:"public_transport_stop",SUBWAY_STATION:"public_transport_stop",INTERNATIONAL_RAILROAD_STATION:"railway_station",NATIONAL_RAILROAD_STATION:"railway_station",STATION_ACCESS:"railway_station",URBAN_STATION:"railway_station",AFGHAN_RESTAURANT:"restaurant",AFRICAN_RESTAURANT:"restaurant",AMERICAN_RESTAURANT:"restaurant",ARABIAN_RESTAURANT:"restaurant",ARMENIAN_RESTAURANT:"restaurant",ASIAN_RESTAURANT:"restaurant",AUSTRALIAN_RESTAURANT:"restaurant",AUSTRIAN_RESTAURANT:"restaurant",BANQUET_ROOMS:"restaurant",BARBECUE_RESTAURANT:"restaurant",BASQUE_RESTAURANT:"restaurant",BELGIAN_RESTAURANT:"restaurant",BISTRO:"restaurant",BOLIVIAN_RESTAURANT:"restaurant",BRAZILIAN_RESTAURANT:"restaurant",BRITISH_RESTAURANT:"restaurant",BUFFET_RESTAURANT:"restaurant",BULGARIAN_RESTAURANT:"restaurant",BURMESE_RESTAURANT:"restaurant",CALIFORNIAN_RESTAURANT:"restaurant",CAMBODIAN_RESTAURANT:"restaurant",CANADIAN_RESTAURANT:"restaurant",CARIBBEAN_RESTAURANT:"restaurant",CATERING_SERVICES:"restaurant",CHICKEN_RESTAURANT:"restaurant",CHINESE_RESTAURANT:"restaurant",COLOMBIAN_RESTAURANT:"restaurant",CORSICAN_RESTAURANT:"restaurant",CREOLE_RESTAURANT:"restaurant",CREPERIE:"restaurant",CUBAN_RESTAURANT:"restaurant",CZECH_RESTAURANT:"restaurant",DANISH_RESTAURANT:"restaurant",DINNER_THEATER:"restaurant",DONGBEI_RESTAURANT:"restaurant",DOUGHNUT_RESTAURANT:"restaurant",DUTCH_RESTAURANT:"restaurant",EGYPTIAN_RESTAURANT:"restaurant",ENGLISH_RESTAURANT:"restaurant",ETHIOPIAN_RESTAURANT:"restaurant",FINNISH_RESTAURANT:"restaurant",FONDUE_RESTAURANT:"restaurant",FRENCH_RESTAURANT:"restaurant",FUSION_RESTAURANT:"restaurant",GERMAN_RESTAURANT:"restaurant",GREEK_RESTAURANT:"restaurant",GRILL_RESTAURANT:"restaurant",HAMBURGER_RESTAURANT:"restaurant",HAWAIIAN_RESTAURANT:"restaurant",HOT_POT_RESTAURANT:"restaurant",HUNAN_RESTAURANT:"restaurant",HUNGARIAN_RESTAURANT:"restaurant",INDIAN_RESTAURANT:"restaurant",INDONESIAN_RESTAURANT:"restaurant",INTERNATIONAL_RESTAURANT:"restaurant",IRANIAN_RESTAURANT:"restaurant",IRISH_RESTAURANT:"restaurant",ISRAELI_RESTAURANT:"restaurant",ITALIAN_RESTAURANT:"restaurant",JAMAICAN_RESTAURANT:"restaurant",JAPANESE_RESTAURANT:"restaurant",JEWISH_RESTAURANT:"restaurant",KOREAN_RESTAURANT:"restaurant",KOSHER_RESTAURANT:"restaurant",LATIN_AMERICAN_RESTAURANT:"restaurant",LEBANESE_RESTAURANT:"restaurant",MEDITERRANEAN_RESTAURANT:"restaurant",MEXICAN_RESTAURANT:"restaurant",MIDDLE_EASTERN_RESTAURANT:"restaurant",MONGOLIAN_RESTAURANT:"restaurant",MOROCCAN_RESTAURANT:"restaurant",NEPALESE_RESTAURANT:"restaurant",NORWEGIAN_RESTAURANT:"restaurant",ORGANIC_FOOD_RESTAURANT:"restaurant",ORIENTAL_RESTAURANT:"restaurant",PAKISTANI_RESTAURANT:"restaurant",PERUVIAN_RESTAURANT:"restaurant",PHILIPPINE_RESTAURANT:"restaurant",PIZZERIA:"restaurant",POLISH_RESTAURANT:"restaurant",POLYNESIAN_RESTAURANT:"restaurant",PORTUGUESE_RESTAURANT:"restaurant",PUB_FOOD:"restaurant",RUSSIAN_RESTAURANT:"restaurant",SALAD_BAR:"restaurant",SANDWICH_RESTAURANT:"restaurant",SCANDINAVIAN_RESTAURANT:"restaurant",SEAFOOD:"restaurant",SHANDONG_RESTAURANT:"restaurant",SICHUAN_RESTAURANT:"restaurant",SNACKS_RESTAURANT:"restaurant",SOUL_FOOD:"restaurant",SOUP_RESTAURANT:"restaurant",SPANISH_RESTAURANT:"restaurant",STEAK_HOUSE:"restaurant",SUSHI_RESTAURANT:"restaurant",SWEDISH_RESTAURANT:"restaurant",SWISS_RESTAURANT:"restaurant",SYRIAN_RESTAURANT:"restaurant",TAIWANESE_RESTAURANT:"restaurant",TAKEOUT_FOOD:"restaurant",TAPAS_RESTAURANT:"restaurant",TEPPANYAKI_RESTAURANT:"restaurant",THAI_RESTAURANT:"restaurant",TIBETAN_RESTAURANT:"restaurant",TUNISIAN_RESTAURANT:"restaurant",TURKISH_RESTAURANT:"restaurant",VEGETARIAN_RESTAURANT:"restaurant",VENEZUELAN_RESTAURANT:"restaurant",VIETNAMESE_RESTAURANT:"restaurant",WESTERN_RESTAURANT:"restaurant",ART_SCHOOL:"school_or_kindergarten",DANCE_STUDIO_SCHOOL:"school_or_kindergarten",DRIVING_SCHOOL:"school_or_kindergarten",HIGH_SCHOOL:"school_or_kindergarten",LANGUAGE_SCHOOL:"school_or_kindergarten",MIDDLE_SCHOOL:"school_or_kindergarten",PRIMARY_SCHOOL:"school_or_kindergarten",SENIOR_HIGH_SCHOOL:"school_or_kindergarten",VOCATIONAL_SCHOOL:"school_or_kindergarten",AGRICULTURAL_SUPPLIES:"shop_or_store",ANTIQUE_ART_SHOP:"shop_or_store",BAGS_LEATHERWEAR:"shop_or_store",BAKERY:"shop_or_store",BEAUTY_SUPPLIES:"shop_or_store",BOATING_EQUIPMENT_ACCESSORIES:"shop_or_store",BOOK_SHOP:"shop_or_store",BUTCHER:"shop_or_store",CAMERAS_PHOTOGRAPHY:"shop_or_store",CARPET_FLOOR_COVERINGS:"shop_or_store",CHRISTMAS_HOLIDAY_SHOP:"shop_or_store",COMPUTER_COMPUTER_SUPPLIES:"shop_or_store",CONSTRUCTION_MATERIAL_EQUIPMENT:"shop_or_store",CONSUMER_ELECTRONICS:"shop_or_store",CONVENIENCE_STORE:"shop_or_store",CURTAINS_TEXTILES:"shop_or_store",C_DS_DVD_VIDEOS:"shop_or_store",DELICATESSEN:"shop_or_store",DO_IT_YOURSELF_CENTERS:"shop_or_store",DRIVE_THROUGH_BOTTLE_SHOP:"shop_or_store",DRY_CLEANER:"shop_or_store",ELECTRICAL_APPLIANCES_SHOP:"shop_or_store",FACTORY_OUTLET:"shop_or_store",FISHMONGER:"shop_or_store",FLORISTS:"shop_or_store",FOOTWEAR_SHOE_REPAIRS:"shop_or_store",FURNITURE_HOME_FURNISHINGS:"shop_or_store",GARDEN_CENTERS_SERVICES:"shop_or_store",GIFTS_CARDS_NOVELTIES_SOUVENIRS:"shop_or_store",GLASSWARE_CERAMIC_SHOP:"shop_or_store",GLASS_WINDOWS_STORE:"shop_or_store",GREENGROCER:"shop_or_store",GROCERY_STORE:"shop_or_store",HARDWARE_STORE:"shop_or_store",HOBBY_SHOP:"shop_or_store",HOUSE_GARDEN_FURNITURE_FITTINGS:"shop_or_store",JEWELRY_CLOCKS_WATCHES:"shop_or_store",KITCHENS_BATHROOMS:"shop_or_store",LAUNDRY:"shop_or_store",LIGHTING_SHOPS:"shop_or_store",LOCAL_SPECIALITIES_SHOP:"shop_or_store",LOTTERY_SHOP:"shop_or_store",MEDICAL_SUPPLIES_EQUIPMENT:"shop_or_store",MOBILE_PHONE_SHOP:"shop_or_store",MUSIC_INSTRUMENTS_STORE:"shop_or_store",NEWSAGENTS_TOBACCONISTS:"shop_or_store",OFFICE_EQUIPMENT:"shop_or_store",OPTICIAN:"shop_or_store",OTHER_FOOD_SHOPS:"shop_or_store",PAINTING_DECORATING:"shop_or_store",PAWN_SHOP:"shop_or_store",PET_SUPPLIES:"shop_or_store",PHOTOCOPY_SHOP:"shop_or_store",PHOTO_LAB_DEVELOPMENT:"shop_or_store",RECYCLING_SHOP:"shop_or_store",RETAIL_OUTLET:"shop_or_store",SECURITY_PRODUCTS:"shop_or_store",SHOPPING_SERVICE:"shop_or_store",SPECIALTY_FOODS:"shop_or_store",SPORTS_EQUIPMENT_CLOTHING:"shop_or_store",TAILOR_SHOP:"shop_or_store",TOYS_GAMES_SHOP:"shop_or_store",VARIETY_STORE:"shop_or_store",VIDEO_RENTAL_SHOP:"shop_or_store",WHOLESALE_CLUB:"shop_or_store",WINE_SPIRITS:"shop_or_store",ATHLETICS_TRACK:"sport_facility",BASEBALL_PARK:"sport_facility",BASKETBALL_ARENA:"sport_facility",BOWLING_CENTER:"sport_facility",CRICKET_GROUND:"sport_facility",HOCKEY_CLUB:"sport_facility",HORSE_RACING_TRACK:"sport_facility",RACE_TRACK:"sport_facility",RUGBY_GROUND:"sport_facility",SNOOKER_POOL_BILLIARD:"sport_facility",THEMATIC_SPORT_CENTER:"sport_facility",FOOTBALL_STADIUM:"stadium",MOTOR_RACING_STADIUM:"stadium",MULTI_PURPOSE_STADIUM:"stadium",NETBALL_STADIUM:"stadium",SOCCER_STADIUM:"stadium",STOCK_EXCHANGE:"stock_exchange",TAXI_LIMOUSINE_SHUTTLE_SERVICE:"taxi_stand",TEA_HOUSE:"tea_house",AMPHITHEATER:"theater",CAVE:"tourist_attraction",MINERAL_HOT_SPRINGS:"tourist_attraction",NATURAL_TOURIST_ATTRACTION:"tourist_attraction",BOAT_LAUNCHING_RAMP:"transport_access",HARBOR:"transport_access",YACHT_BASIN:"transport_access",ATV_DEALER:"vehicle_dealer",BOAT_DEALER:"vehicle_dealer",BUS_DEALER:"vehicle_dealer",CAR_DEALER:"vehicle_dealer",MOTORCYCLE_DEALER:"vehicle_dealer",RECREATIONAL_VEHICLE_DEALER:"vehicle_dealer",TRUCK_DEALER:"vehicle_dealer",VAN_DEALER:"vehicle_dealer",ROAD_TRAFFIC_CONTROL_CENTER:"vehicle_inspection",BODYSHOP:"vehicle_repair",CAR_GLASS_REPLACEMENT_SHOP:"vehicle_repair",CAR_REPAIR_AND_SERVICE:"vehicle_repair",HOME_APPLIANCE_REPAIR:"vehicle_repair",MOTORCYCLE_REPAIR:"vehicle_repair",REPAIR_SHOP:"vehicle_repair",TIRE_SERVICE:"vehicle_repair",TRUCK_REPAIR_AND_SERVICE:"vehicle_repair",ANIMAL_SERVICES:"veterinary",RIDGE:"viewpoint",OTHER_WINTER_SPORT:"winter_sports",SKI_RESORT:"winter_sports",WILDLIFE_PARK:"zoo_or_aquarium",ZOO:"zoo_or_aquarium"},Ee=e=>ge[e],Ie="Noto-Bold",Re=.8,Te="title",Le="iconID",Se=.7,Oe=1.4,Ne="default_place",be={"icon-image":["get",Le],"icon-anchor":"bottom","icon-size":["interpolate",["linear"],["zoom"],8,.6,22,Re],"icon-allow-overlap":!0,"icon-padding":0},Ce={"icon-translate":[0,5],"icon-translate-anchor":"viewport"},ve={"text-optional":!0,"text-font":[Ie],"text-field":["get",Te],"text-justify":"auto","text-variable-anchor":["top","left","right"],"text-variable-anchor-offset":["top",[0,Se],"left",[Oe,-1.4],"right",[-1.4,-1.4]],"text-size":["interpolate",["linear"],["zoom"],10,14,18,16],"text-padding":5},we={"text-color":"#333333","text-halo-color":"#FFFFFF","text-halo-width":["interpolate",["linear"],["zoom"],6,1,10,1.5],"text-translate-anchor":"viewport"},Me={type:"symbol",layout:{...be,...ve},paint:{...Ce,...we}},De=(e,t)=>`${e}-${t}`,Pe=(e,t)=>{if(!e)return;const i=(e=>{try{if("string"==typeof e){if(e.includes("<svg")){const t=U(e),i=t.getAttribute("viewBox");if(i){const e=i.split(/\s+/);if(4===e.length)return{width:Number.parseFloat(e[2]),height:Number.parseFloat(e[3])}}const r=t.getAttribute("width"),s=t.getAttribute("height");if(r&&s)return{width:Number.parseFloat(r),height:Number.parseFloat(s)}}return null}return e.complete&&e.naturalWidth>0?{width:e.naturalWidth,height:e.naturalHeight}:null}catch(t){return console.warn("Failed to extract image dimensions:",t),null}})(e);return i?"base-map"===t?{heightScale:i.height/54,widthScale:i.width/54}:{heightScale:i.height/140,widthScale:i.width/120}:void 0},Ue=e=>Boolean(e&&"availability"in e&&e.availability),xe=e=>"ELECTRIC_VEHICLE_STATION"===e.properties.poi?.categories?.[0]&&Ue(e.properties.chargingPark),Fe=e=>{const t=e.properties.chargingPark;if(Ue(t)){const e=t.availability.chargingPointAvailability,i=e.statusCounts.Available??0;return{availableCount:i,totalCount:e.count,ratio:i/e.count}}},He=(e,t)=>`${e}/${t}`,We=e=>Fe(e)?.ratio??0,Ge=e=>["case",[">=",["get","evAvailabilityRatio"],e?.threshold??0],"green","red"],Be=(e,t,i,r)=>{const s=void 0!==r;return{top:s?[0,r]:[0,e],left:s?[r,i]:[t,i],right:s?[-r,i]:[-t,i]}},ke=(e,t,i,r)=>{const s=(e=>{if(!e)return Re;if("number"==typeof e)return e;if(Array.isArray(e)){const t=e.at(-1);if("number"==typeof t)return t}return Re})(e)/Re,a="base-map"===i;if(a&&void 0!==r)return{"text-offset":[r,r]};const o=Oe*s,n=Be(Se*s,o,a?0:-o,r),l=["top",n.top,"left",n.left,"right",n.right];if(0===t.size)return{"text-variable-anchor-offset":l};const c=["case"];for(const[h,u]of t.entries()){const e=(a?1.4:Se)*u.heightScale,t=Oe*u.widthScale,i=Be(e,t,a?0:-t,r);c.push(["==",["get",Le],h],["literal",["top",i.top,"left",i.left,"right",i.right]])}return c.push(["literal",l]),{"text-variable-anchor-offset":c}},Ve=(e,t,i,r,s)=>{const a=t?.text,o=t?.layers?.[i],n=s&&s.size>0,l={...e.layout};(n||void 0!==a?.offset)&&(delete l["text-offset"],delete l["text-variable-anchor-offset"],delete l["text-radial-offset"]);const c={...l,...o?.layout,...a?.size&&{"text-size":a.size},...a?.font&&{"text-font":a.font},"text-field":r};if(n||void 0!==a?.offset){const i=e.layout?.["icon-size"],r=s??/* @__PURE__ */new Map;Object.assign(c,ke(i,r,t?.theme,a?.offset))}return c},Ye=(e,t,i,r)=>{const s=t?.text,a=t?.layers?.[i],{textColor:o,haloColor:n}=(e=>({textColor:"dark"===e?"#FFFFFF":"#333333",haloColor:"dark"===e?"#333333":"#FFFFFF"}))(r);return{...e.paint,...!s?.color&&{"text-color":o},...!s?.haloColor&&{"text-halo-color":n},...s?.color&&{"text-color":s.color},...s?.haloColor&&{"text-halo-color":s.haloColor},...s?.haloWidth&&{"text-halo-width":s.haloWidth},...a?.paint}},ze=["in",["get","eventState"],["literal",["click","contextmenu"]]],Ke=e=>JSON.parse(JSON.stringify(e)?.replaceAll("name",Te)),$e=["has","eventState"],je="#3f9cd9",qe={...Me,filter:["!",$e]},Xe={...Me,filter:$e,layout:{...Me.layout,"icon-size":["interpolate",["linear"],["zoom"],8,.8,22,1],"text-allow-overlap":!0},paint:{...Me.paint,"text-color":je}},Ze=(e,t,i,r,s)=>{const a=t?.text,o=t?.layers?.[i],n=((e,t)=>t?["case",["has","evAvailabilityText"],["format",["get",Te],{},"\n",{},["get","evAvailabilityText"],{"font-scale":1.1,"text-color":Ge(e?.evAvailability)}],["get",Te]]:["get",Te])(t,!0===t?.evAvailability?.enabled),l=a?.title&&"function"!=typeof a?.title?a.title:n;return{...e,layout:Ve(e,t,i,l,s),paint:Ye(e,t,i,r),...o}},Je=(e,t,i,r)=>{const s=((e,t)=>{const i=/* @__PURE__ */new Map,r=e?.icon?.categoryIcons??[];for(const s of r)if(s.image){const r=Pe(s.image,e?.theme);if(void 0!==r){const e=De(s.id,t);if(i.set(e,r),s.availabilityLevel){const e=De(`${s.id}-${s.availabilityLevel}`,t);i.set(e,r)}}}return i})(e,r);let a,o;if("base-map"===e?.theme){const e=(e=>{const t=e.getStyle().layers.find(e=>"POI"===e.id)||{},i=t.layout?.["text-size"];return{filter:["!",ze],type:"symbol",paint:t.paint,layout:{...t.layout,"text-field":["get",Te],"icon-image":["get",Le],...i&&{"text-size":Ke(i)}}}})(t);a=e,o={...e,filter:$e,layout:{...e.layout,"text-allow-overlap":!0},paint:{...e.paint,"text-color":je}}}else a=qe,o=Xe;return{main:Ze(a,e,"main",i,s),selected:Ze(o,e,"selected",i,s),...e?.layers?.additional}},Qe=e=>{if(D())return P(x(e))},et=new Set([7339002,8099002,7369004,7321003,7376006,9362003,9362004,9160004,9376007,7315015,9376006,9376002,7315078,7315149,9376005,7372003,9352045,9352032,9361048,9902003,9378005,7383004,9910004,7320002,9362016,7320003,9362025,9942002,9942003,7380005,9663003,9361021,9379009,9379004,7315147,9376003,9160002,9160003,9352008,9361006,7389004,9910006]),tt=e=>e.properties.poi?.name??e.properties.address.freeformAddress,it=(e,t,i)=>{if("pin"===t)return(e=>{if(e)return et.has(e)?e.toString():e.toString().substring(0,4)})(m[e])??i;{const t=Ee(e);return t?`poi-${t}`:i}},rt=(e,t,i={})=>{const r=i.theme??"pin",s=De(Ne,t),a=i.icon?.mapping;if(a)return"imageID"===a.to?a.fn(e):it(a.fn(e),r,s);const o=e.properties.poi?.categories?.[0],n=((e,t,i,r,s)=>{if(!r.evAvailability?.enabled||!xe(e))return;const a=We(e)>=(r.evAvailability.threshold??.3)?"available":"occupied",o=r.icon?.categoryIcons&&r.icon.categoryIcons.length>0,n=r.icon?.categoryIcons?.find(e=>e.id===t&&e.availabilityLevel===a);return n?De(`${n.id}-${a}`,i):o||"pin"!==s?void 0:`7309-${a}`})(e,o,t,i,r);if(n)return n;const l=i.icon?.categoryIcons?.find(e=>e.id===o);return l?De(l.id,t):it(o,r,s)},st=e=>{const t=e.properties.poi?.categories?.[0];return t&&Ee(t)},at=e=>Array.isArray(e)?{type:"FeatureCollection",features:e}:"Feature"===e.type?{type:"FeatureCollection",features:[e]}:e,ot=(e,t,i)=>{if(!0!==t?.enabled)return e;let r=!1,s=!1;for(const a of i.features)if("ELECTRIC_VEHICLE_STATION"===a.properties.poi?.categories?.[0]&&(r=!0,xe(a))){s=!0;break}return r&&!s&&console.warn("PlacesModule: evAvailability is enabled but no availability data found. Did you call getPlacesWithEVAvailability()?"),{...e,evAvailabilityText:e=>xe(e)?((e,t)=>{const i=Fe(e);return i?(t?.formatText??He)(i.availableCount,i.totalCount):""})(e,t):"",evAvailabilityRatio:e=>xe(e)?We(e):0}},nt=(e,t,i={})=>{const r=at(e),s=!0===i.evAvailability?.enabled?ot(i.extraFeatureProps,i.evAvailability,r):i.extraFeatureProps;return{...r,features:r.features.map(e=>{const r="function"==typeof i?.text?.title?i?.text?.title(e):tt(e),a=s?Object.fromEntries(Object.entries(s).map(([t,i])=>[t,"function"==typeof i?i(e):i])):{},o=e.id??u();return{...e,id:o,geometry:{...e.geometry,bbox:e.bbox},properties:{...e.properties,id:o,title:r,iconID:rt(e,t,i),..."base-map"===i?.theme&&{category:st(e)},...a}}})}},lt=class e extends ie{static{this.lastInstanceIndex=-1}static async get(t,i){return await K(t),new e(t,i)}constructor(e,t){super("geojson",e,t)}_initSourcesWithLayers(t,i){return i||(e.lastInstanceIndex++,this.instanceIndex=e.lastInstanceIndex,this.sourceID=`places-${this.instanceIndex}`,this.layerIDPrefix=this.sourceID,this.defaultPlaceIconID=De(Ne,this.instanceIndex)),this.layerSpecs=this.buildLayerSpecs(t),{places:new z(this.mapLibreMap,this.sourceID,[this.layerSpecs.main,this.layerSpecs.selected])}}buildLayerSpecs(e){const t=Je(e,this.tomtomMap.mapLibreMap,this.tomtomMap.styleLightDarkTheme,this.instanceIndex);return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,{...t,id:`${this.layerIDPrefix}-${e}`}]))}_applyConfig(e){return this.updateLayersAndData(e),e}restoreDataAndConfigImpl(){const e=this.sourcesWithLayers.places.shownFeatures;this.initSourcesWithLayers(this.config,!0),this.config&&this._applyConfig(this.config),this.show(e)}applyTheme(e){this.applyConfigPart({theme:e})}applyIconConfig(e){this.applyConfigPart({icon:e})}applyTextConfig(e){this.applyConfigPart({text:e})}applyConfigPart(e){const t={...this.config,...e};this.updateLayersAndData(t),this.config=t}applyExtraFeatureProps(e){const t={...this.config,extraFeatureProps:e};this.updateData(t),this.config=t}updateLayersAndData(e){this.setupImages(e);const t=this.buildLayerSpecs(e);q([t.main,t.selected],[this.layerSpecs.main,this.layerSpecs.selected],this.mapLibreMap),this.layerSpecs=t,this.updateData(e)}setupImages(e){if(e?.icon){for(const t of e.icon.categoryIcons??[])Q("if-not-in-sprite",De(t.availabilityLevel?`${t.id}-${t.availabilityLevel}`:t.id,this.instanceIndex),t.image,this.mapLibreMap,{pixelRatio:t.pixelRatio??2});e.icon.default&&(e.icon.default.image&&Q("if-not-in-sprite",this.defaultPlaceIconID,e.icon.default.image.image,this.mapLibreMap,{pixelRatio:e.icon.default.image.pixelRatio??2}),e.icon.default.style&&Q("if-not-in-sprite",this.defaultPlaceIconID,Qe(e.icon.default.style),this.mapLibreMap,{pixelRatio:2}))}else Q("if-not-in-sprite",this.defaultPlaceIconID,Qe(),this.mapLibreMap,{pixelRatio:2})}updateData(e){this.sourcesWithLayers.places.source.runtimeSource?.setData(nt(this.sourcesWithLayers.places.shownFeatures,this.instanceIndex,e))}async show(e){await this.waitUntilModuleReady(),this.sourcesWithLayers.places.show(nt(e,this.instanceIndex,this.config))}async clear(){await this.waitUntilModuleReady(),this.sourcesWithLayers.places.clear()}getShown(){return{places:this.sourcesWithLayers.places.shownFeatures}}putEventState(e){this.sourcesWithLayers.places.putEventState(e)}cleanEventState(e){this.sourcesWithLayers.places.cleanEventState(e)}cleanEventStates(e){this.sourcesWithLayers.places.cleanEventStates(e)}get events(){return new re(this.eventsProxy,this.sourcesWithLayers.places,this.config?.events)}},ct=e=>{if(!0===e||!1===e)return!0;if(!Array.isArray(e)||0===e.length)return!1;switch(e[0]){case"has":return e.length>=2&&"$id"!==e[1]&&"$type"!==e[1];case"in":return e.length>=3&&("string"!=typeof e[1]||Array.isArray(e[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==e.length||Array.isArray(e[1])||Array.isArray(e[2]);case"any":case"all":for(const t of e.slice(1))if(!ct(t)&&"boolean"!=typeof t)return!1;return!0;default:return!0}},ht=e=>e?.length?1===e.length?e[0]:{expression:["any",...e.map(e=>e?.expression)],legacy:["any",...e.map(e=>e?.legacy)]}:null,ut=(e,t)=>{return t?["all",e[(i=t,ct(i)?"expression":"legacy")],t]:e.expression;var i},dt=(e,t,i)=>{if(1===i.length){const r="only"===t?"==":"!=";return{expression:[r,["get",e],i[0]],legacy:[r,e,i[0]]}}const r=["in",["get",e],["literal",i]];return"only"===t?{expression:r,legacy:["in",e,...i]}:{expression:["!",r],legacy:["!in",e,...i]}},pt=(e,t,i)=>dt(e,t.show,i?t.values.map(i):t.values),_t={FOOD_DRINKS_GROUP:["RESTAURANT","FAST_FOOD","CAFE_PUB","PUB","WINERY","PUB_FOOD","SOUL_FOOD","DELICATESSEN"],SHOPPING_GROUP:["SHOP","SHOPPING_CENTER","CLOTHING_SHOP","MARKET","FOOD_MARKET","SUPERMARKETS_HYPERMARKETS","DEPARTMENT_STORE","CONVENIENCE_STORE","GROCERY_STORE","HARDWARE_STORE","ELECTRICAL_APPLIANCES_SHOP"],TRANSPORTATION_GROUP:["AIRPORT","FERRY_TERMINAL","HELIPAD_HELICOPTER_LANDING","PUBLIC_TRANSPORT_STOP","RAILWAY_STATION","BUS_STOP","TAXI_STAND"],HEALTH_GROUP:["DOCTOR","EMERGENCY_MEDICAL_SERVICE","EMERGENCY_ROOM","HEALTH_CARE_SERVICE","HOSPITAL","HOSPITAL_POLYCLINIC","PHARMACY","DENTIST","WELFARE_ORGANIZATION"],PARKING_GROUP:["PARKING_GARAGE","OPEN_PARKING_AREA"],HOLIDAY_TOURISM_GROUP:["AMUSEMENT_PARK","BEACH","HOLIDAY_RENTAL","GEOGRAPHIC_FEATURE","IMPORTANT_TOURIST_ATTRACTION","LEISURE_CENTER","MOUNTAIN_PASS","MOUNTAIN_PEAK","MUSEUM","SCENIC_PANORAMIC_VIEW","TOURIST_INFORMATION_OFFICE"],EV_CHARGING_STATIONS_GROUP:["ELECTRIC_VEHICLE_STATION"],GAS_STATIONS_GROUP:["GAS_STATION","PETROL_STATION"],ACCOMMODATION_GROUP:["CAMPING_GROUND","HOTEL_MOTEL","HOLIDAY_RENTAL"],ENTERTAINMENT_GROUP:["CINEMA","THEATER","MOVIE_THEATER","NIGHTLIFE","CONCERT_HALL","ENTERTAINMENT","CLUB_ASSOCIATION","CASINO"],SPORTS_LEISURE_GROUP:["SPORTS_CENTER","WATER_SPORT","SWIMMING_POOL","GOLF_COURSE","STADIUM","BEACH","ICE_SKATING_RINK","LEISURE_CENTER","MOUNTAIN_PASS","MOUNTAIN_PEAK"],EDUCATION_GROUP:["SCHOOL","COLLEGE_UNIVERSITY","LIBRARY","CULTURAL_CENTER"],GOVERNMENT_GROUP:["GOVERNMENT_OFFICE","COURTHOUSE","EMBASSY","FIRE_STATION_BRIGADE","POLICE_STATION"]},yt=e=>{const{properties:t}=e;return{id:e.id,type:e.type,geometry:e.geometry,properties:{id:String(t?.id),name:t?.name,category:t?.category,group:t?.group,priority:t?.priority}}},ft=e=>{const t=[];return e.forEach(e=>{e in _t?t.push(..._t[e].map(Ee)):t.push(Ee(e))}),[...new Set(t)]},mt=class e extends ie{static async get(t,i){return await K(t),new e(t,i)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const t=this.mapLibreMap.getSource(de);if(!t)throw M(`init ${e.name} with source ID ${de}`);const i=new k(this.mapLibreMap,t,e=>me.includes(e.id)),r=i.sourceAndLayerIDs.layerIDs[0];return this.mapLibreMap.getLayer(r)&&(this.originalFilter=this.mapLibreMap.getFilter(r)),{poi:i}}_applyConfig(e){return e&&!i(e.visible)?this.setVisible(e.visible):this._initializing||this.isVisible()||this.setVisible(!0),this.filterCategories(e?.filters?.categories),e}isVisible(){return this.sourcesWithLayers.poi.isAnyLayerVisible()}setVisible(e){this.config={...this.config,visible:e},this.tomtomMap.mapReady&&this.sourcesWithLayers.poi.setLayersVisible(e)}filterCategories(e){if(e){if(this.tomtomMap.mapReady){const t=dt("category",e.show,ft(e.values));this.mapLibreMap.setFilter("POI",ut(t,this.originalFilter))}this.config={...this.config,filters:{categories:e}}}else this.categoriesFilter&&(this.config={...this.config,filters:{categories:{show:"all_except",values:[]}}},this.tomtomMap.mapReady&&this.mapLibreMap.setFilter("POI",this.originalFilter));this.categoriesFilter=e}getShown(){return{poi:this.mapLibreMap.queryRenderedFeatures({layers:this.sourcesWithLayers.poi.sourceAndLayerIDs.layerIDs,validate:!1}).map(yt)}}get events(){return new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.poi,this.config?.events,yt)}},At={land:{layerIDMatches:["lulc"],layerTypes:["fill"]},borders:{layerIDMatches:["borders"],layerTypes:["line"]},water:{layerIDMatches:["water"],layerTypes:["fill","line"]},buildings2D:{layerIDMatches:["building"],layerTypes:["fill","line"]},buildings3D:{layerIDMatches:["building"],layerTypes:["fill-extrusion"]},houseNumbers:{layerIDMatches:["house number"],layerTypes:["symbol"]},roadLines:{layerIDMatches:["road","tunnel","bridge","surface"],layerTypes:["fill","line"]},roadLabels:{layerIDMatches:["road","tunnel","bridge","surface"],layerTypes:["symbol"]},roadShields:{layerIDMatches:["shield"],layerTypes:["symbol"]},placeLabels:{layerIDMatches:["places"],layerTypes:["symbol"]},smallerTownLabels:{layerIDMatches:["town","village","neighbourhood"],layerTypes:["symbol"]},cityLabels:{layerIDMatches:["city","capital"],layerTypes:["symbol"]},capitalLabels:{layerIDMatches:["capital"],layerTypes:["symbol"]},stateLabels:{layerIDMatches:["state"],layerTypes:["symbol"]},countryLabels:{layerIDMatches:["places - country"],layerTypes:["symbol"]}},gt=(e,t)=>{const i=At[e];return i.layerIDMatches.some(e=>t.id.toLowerCase().includes(e))&&i.layerTypes.includes(t.type)},Et=e=>t=>(!e||((e,t)=>{const i=t?.mode,r=t?.names;if(i&&r?.length){if("include"===i)return r.some(t=>gt(t,e));if("exclude"===i)return!r.some(t=>gt(t,e))}return!0})(t,e))&&!me.includes(t.id),It=class e extends ie{static async get(t,i){return await K(t),new e(t,i)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(t){const i=this.mapLibreMap.getSource(_e);if(!i)throw M(`init ${e.name} with source ID ${_e}`);return{vectorTiles:new k(this.mapLibreMap,i,Et(t?.layerGroupsFilter))}}_applyConfig(e){return e&&!i(e.visible)?this.setVisible(e.visible):this._initializing||this.isVisible()||this.setVisible(!0),e?.layerGroupsVisibility&&this.setVisible(e.layerGroupsVisibility.visible,{layerGroups:e.layerGroupsVisibility}),this.config||e?{...this.config,...e}:void 0}isVisible(){return this.sourcesWithLayers.vectorTiles.isAnyLayerVisible()}setVisible(e,t){t?.layerGroups?this.config={...this.config,layerGroupsVisibility:{...t.layerGroups,visible:e}}:(delete this.config?.layerGroupsVisibility,this.config={...this.config,visible:e}),this.tomtomMap.mapReady&&this.sourcesWithLayers.vectorTiles.setLayersVisible(e,t?.layerGroups&&(e=>{const t=e.mode,i=e.names;return"include"===t?e=>i.some(t=>gt(t,e)):"exclude"===t?e=>!i.some(t=>gt(t,e)):(console.error("Unrecognized layer group mode:",t),()=>!0)})(t.layerGroups))}get events(){return new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.vectorTiles,this.config?.events)}},Rt=["land","water","borders","buildings2D","buildings3D","houseNumbers","roadLines","roadLabels","roadShields","placeLabels","smallerTownLabels","cityLabels","capitalLabels","stateLabels","countryLabels"],Tt="#0A3653",Lt="#555555",St={type:"fill",paint:{"fill-color":["coalesce",["get","color"],Tt],"fill-opacity":["case",["==",["get","theme"],"outline"],0,.15],"fill-antialias":!1}},Ot={type:"line",paint:{"line-color":["case",["==",["get","theme"],"outline"],["coalesce",["get","color"],Lt],["coalesce",["get","color"],Tt]],"line-opacity":["case",["==",["get","theme"],"outline"],.9,1],"line-width":["case",["==",["get","theme"],"outline"],5,2]}},Nt=(e,t,r)=>{const s=r?.colorConfig,a=r?.lineConfig;return[{...St,id:e,paint:{...St.paint,...!i(s?.fillOpacity)&&{"fill-opacity":s?.fillOpacity},...s?.fillColor&&{"fill-color":["get","color"]}}},{...Ot,id:t,paint:{...Ot.paint,...!i(a?.lineColor)&&{"line-color":a?.lineColor},...!i(a?.lineWidth)&&{"line-width":a?.lineWidth},...!i(a?.lineOpacity)&&{"line-opacity":a?.lineOpacity}}}]},bt=(e,t)=>{const i=t?.textConfig;return{type:"symbol",id:e,layout:{"text-field":["get","title"],...i?.textField&&{"text-field":i.textField},"text-padding":5,"text-size":15,"text-font":[Ie],"symbol-placement":"point"},paint:{"text-color":"#333333","text-halo-color":"#FFFFFF","text-halo-width":["interpolate",["linear"],["zoom"],6,1,10,1.5],"text-translate-anchor":"viewport"}}},Ct=(e,t)=>{const r=t?.lineLabelConfig;return{type:"symbol",id:e,minzoom:r?.minZoom??3,layout:{"text-field":["get","title"],"symbol-placement":"line","text-size":r?.textSize??15,"text-font":[Ie],"symbol-spacing":r?.symbolSpacing??200,"text-keep-upright":!0,"text-offset":r?.textOffset??[0,1]},paint:{"text-color":r?.textColor??"#333333","text-halo-color":r?.textHaloColor??"#FFFFFF","text-halo-width":r?.textHaloWidth??2,...!i(r?.textOpacity)&&{"text-opacity":r?.textOpacity}}}},vt={warm:["#793F0D","#AC703D","#C38E63","#E49969","#E5AE86","#EEC5A9","#6E7649","#9D9754","#C7C397","#B4A851","#DFD27C","#E7E3B5","#846D74","#B7A6AD","#D3C9CE"],browns:["#edc4b3","#e6b8a2","#deab90","#d69f7e","#cd9777","#c38e70","#b07d62","#9d6b53","#8a5a44","#774936"],cold:["#344464","#548ca4","#549cac","#2c445c","#a4ccd4","#acbccc","#b4c4d4","#acd4cc","#5c8ca4"],fadedBlues:["#152033","#1d2d44","#2e455d","#3e5c76","#4c6884","#597491","#67809e","#6e86a5","#7b91ad","#879bb4"],blues:["#03045e","#023e8a","#0077b6","#0096c7","#00b4d8","#48cae4","#90e0ef","#ade8f4","#caf0f8"],greens:["#004b23","#006400","#007200","#008000","#38b000","#70e000","#9ef01a","#ccff33"],fadedGreenToBlue:["#d9ed92","#b5e48c","#99d98c","#76c893","#52b69a","#34a0a4","#168aad","#1a759f","#1e6091","#184e77"],blueToRed:["#033270","#1368aa","#4091c9","#9dcee2","#fedfd4","#f29479","#f26a4f","#ef3c2d","#cb1b16","#65010c"],greenToYellow:["#007f5f","#2b9348","#55a630","#80b918","#aacc00","#bfd200","#d4d700","#dddf00","#eeef20","#ffff3f"],pastel:["#fec5bb","#fcd5ce","#fae1dd","#f8edeb","#e8e8e4","#d8e2dc","#ece4db","#ffe5d9","#ffd7ba","#fec89a"],retro:["#f94144","#f3722c","#f8961e","#f9844a","#f9c74f","#90be6d","#43aa8b","#4d908e","#577590","#277da1"],contrastRetro:["#001219","#005f73","#0a9396","#94d2bd","#e9d8a6","#ee9b00","#ca6702","#bb3e03","#ae2012","#9b2226"],fadedRainbow:["#ffadad","#ffd6a5","#fdffb6","#caffbf","#9bf6ff","#a0c4ff","#bdb2ff","#ffc6ff","#fffffc"],pastelRainbow:["#54478c","#2c699a","#048ba8","#0db39e","#16db93","#83e377","#b9e769","#efea5a","#f1c453","#f29e4c"]},wt=Object.keys(vt),Mt=(e,t={})=>({...e,features:e.features.map((e,i)=>{const r=(e.properties??{}).theme??t.theme,s="inverted"===r?(e=>{const t=I(e);return{...e,geometry:t.geometry}})(e):e,a=s.properties??{},o=a.title??((e,t)=>t.textConfig?.textField?t.textConfig.textField:e.properties?.address?.freeformAddress)(s,t),n=a.color??((e,t)=>{const i=e?.colorConfig?.fillColor;if("string"==typeof i&&vt[i]){const e=vt[i];return e[t%e.length]}return i})(t,i);return{...s,properties:{...s.properties,...r&&{theme:r},...o&&{title:o},...n&&{color:n},id:a.id??u()}}})}),Dt=e=>{const t=e.features.map(e=>{let t;if(e.properties?.placeCoordinates)t=e.properties?.placeCoordinates;else if("MultiPolygon"===e.geometry.type){const i=l((e=>e.flat().reduce((e,t)=>t.length>e.length?t:e,[]))(e.geometry.coordinates));t=i&&n(i)||null}else t=e.geometry.coordinates.flat();const i=e.id??e.properties?.id??u();return{type:"Feature",id:i,geometry:{type:"Point",coordinates:t},properties:{...e.properties,id:i}}});return{type:"FeatureCollection",bbox:e.bbox,features:t}},Pt=class e extends ie{static{this.lastInstanceIndex=-1}static async get(t,i){return await K(t),new e(t,i)}constructor(e,t){super("geojson",e,t),this.lineLabelLayerSpecs=null,this.lastRawInput=null}_initSourcesWithLayers(t,i){if(!i){e.lastInstanceIndex++,this.sourceID=`geometry-${e.lastInstanceIndex}`,this.titleSourceID=`geometryTitle-${e.lastInstanceIndex}`;const t=`geometry-${e.lastInstanceIndex}`;this.fillLayerID=`${t}_Fill`,this.outlineLayerID=`${t}_Outline`,this.lineLabelLayerID=`${t}_LineLabel`,this.titleLayerID=`${t}_Title`}const[r,s]=Nt(this.fillLayerID,this.outlineLayerID,t),a=bt(this.titleLayerID,t);this.titleLayerSpecs=a,this.geometryFillLayerSpecs=r,this.geometryOutlineLayerSpecs=s;const o=void 0===t?.lineLabelConfig?null:Ct(this.lineLabelLayerID,t);return this.lineLabelLayerSpecs=o,{geometry:new z(this.mapLibreMap,this.sourceID,[{...r},{...s},...o?[o]:[]]),geometryLabel:new z(this.mapLibreMap,this.titleSourceID,[a])}}_applyConfig(e){return(e?.textConfig||e?.colorConfig||e?.lineConfig)&&this.updateLayerAndData(e),e?.beforeLayerConfig&&this.moveBeforeLayer(e.beforeLayerConfig),e}moveBeforeLayerID(e){for(const t of this.sourcesWithLayers.geometry.sourceAndLayerIDs.layerIDs)this.mapLibreMap.moveLayer(t,e)}moveBeforeLayer(e){this.config={...this.config,beforeLayerConfig:e},this.moveBeforeLayerID("top"===e?this.titleLayerID:ue[e])}applyTextConfig(e){const t={...this.config,textConfig:e};this.updateLayerAndData(t),this.sourcesWithLayers.geometryLabel.show(Dt(this.sourcesWithLayers.geometry.shownFeatures)),this.config=t}updateLayerAndData(e){const[t,i]=Nt(this.fillLayerID,this.outlineLayerID,e),r=bt(this.titleLayerID,e);if(j(t,this.geometryFillLayerSpecs,this.mapLibreMap),j(i,this.geometryOutlineLayerSpecs,this.mapLibreMap),j(r,this.titleLayerSpecs,this.mapLibreMap),this.geometryFillLayerSpecs=t,this.geometryOutlineLayerSpecs=i,this.titleLayerSpecs=r,this.lineLabelLayerSpecs){const t=Ct(this.lineLabelLayerID,e);j(t,this.lineLabelLayerSpecs,this.mapLibreMap),this.lineLabelLayerSpecs=t}}restoreDataAndConfigImpl(){const e=this.lastRawInput;this.initSourcesWithLayers(this.config,!0),this.config&&this._applyConfig(this.config),e&&this.show(e)}async show(e){await this.waitUntilModuleReady(),this.lastRawInput=e;const{transformFeaturesForDisplay:t}=this.config??{},i=t?t(e):e,r=this.sourcesWithLayers.geometry;r.show(Mt(i,this.config)),this.sourcesWithLayers.geometryLabel.show(Dt(r.shownFeatures))}async clear(){await this.waitUntilModuleReady(),this.sourcesWithLayers.geometry.clear(),this.sourcesWithLayers.geometryLabel.clear()}getShown(){return{geometry:this.sourcesWithLayers.geometry.shownFeatures,geometryLabel:this.sourcesWithLayers.geometryLabel.shownFeatures}}get events(){return new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.geometry,this.config?.events)}},Ut={timeMinutes:"min",distanceKM:"km",remainingChargeCPT:"% remaining",spentChargePCT:"% spent",spentFuelLiters:"L"},xt=(e,t,i="filled")=>{const r=e.map((e,r)=>({...e,properties:{...e.properties,title:t[r],theme:i}}));return"inverted"===i?(e=>[...e.map((t,i)=>{const r=0===i?I(t):g(E([e[i-1],t])),{title:s,theme:a,...o}=t.properties??{};return{...t,geometry:r?.geometry??t.geometry,properties:o}}),...e.map(e=>({...e,id:void 0,properties:{...e.properties,theme:"filled"}}))])(r):r},Ft=(e,t="filled",i)=>{const r=e.features,s=r.map((e,t)=>{if(i)return i(e,t);const r=e.properties?.budget;return void 0!==r?.value&&r?.type?`${r.value} ${Ut[r.type]??r.type}`:String(t+1)});return{type:"FeatureCollection",...e.bbox&&{bbox:e.bbox},features:xt(r,s,t)}},Ht=(e="fadedRainbow",t="lowestLabel")=>({beforeLayerConfig:t,lineConfig:{lineWidth:["case",["==",["get","theme"],"outline"],5,1],lineColor:["case",["==",["get","theme"],"outline"],["coalesce",["get","color"],Lt],"grey"],lineOpacity:["case",["==",["get","theme"],"outline"],.9,1]},colorConfig:{fillColor:e,fillOpacity:["case",["==",["get","theme"],"outline"],0,.6]},lineLabelConfig:{}}),Wt=(e="fadedRainbow",t,i,r)=>{const s=Ht(e,i),a=e=>Ft(e,t,r);return"inverted"!==t?{...s,transformFeaturesForDisplay:a}:{...s,lineConfig:{...s.lineConfig,lineOpacity:["case",["==",["get","theme"],"filled"],1,0]},colorConfig:{...s.colorConfig,fillOpacity:["case",["==",["get","theme"],"filled"],0,.6]},lineLabelConfig:{textOpacity:["case",["==",["get","theme"],"filled"],1,0],textOffset:["case",["==",["get","theme"],"filled"],["literal",[0,-1]],["literal",[0,1]]]},transformFeaturesForDisplay:a}},Gt=["filled","outline","inverted"],Bt=class e extends ie{static async get(t,i){return await K(t),await J(t,pe,"hillshade"),new e(t,i)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const t=this.mapLibreMap.getSource(pe);if(!t)throw M(`init ${e.name} with source ID ${pe}`);return{hillshade:new k(this.mapLibreMap,t)}}_applyConfig(e){return this.setVisible(e?.visible??!1),e}setVisible(e){this.config={...this.config,visible:e},this.tomtomMap.mapReady&&this.sourcesWithLayers.hillshade.setLayersVisible(e)}isVisible(){return this.sourcesWithLayers.hillshade.isAnyLayerVisible()}get events(){return new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.hillshade,this.config?.events)}},kt=["standardLight","standardDark","drivingLight","drivingDark","monoLight","monoDark","satellite"],Vt=["trafficIncidents","trafficFlow","hillshade"],Yt="#36A8F0",zt="#105287",Kt="#ABAFB3",$t="#3C4956",jt="#727C85",qt=["interpolate",["linear"],["zoom"],1,3,5,4,10,7,18,10],Xt=["==",["get","routeState"],"selected"],Zt=["==",["get","routeState"],"deselected"],Jt="#AD0000",Qt="#FB2D09",ei="#f58240",ti="#000000",ii=e=>!1===e?.visible?"":e?.title??["format",["get","title"],"\n",["get","chargingPower"]," • ",["get","chargingDuration"]],ri=e=>({...Me,filter:Xt,minzoom:4,layout:{...Me.layout,"text-field":ii(e?.text)},paint:{...Me.paint}}),si={filter:Xt,minzoom:16},ai={...si,type:"line",layout:{"line-cap":"round"}},oi={...ai,paint:{"line-width":["interpolate",["linear"],["zoom"],16,14,22,20],"line-color":"grey"}},ni={...ai,paint:{"line-width":["interpolate",["linear"],["zoom"],16,12,22,17],"line-color":"white"}},li="instruction-arrow",ci={...si,type:"symbol",layout:{"icon-allow-overlap":!0,"icon-image":li,"icon-rotation-alignment":"map","icon-rotate":["get","lastPointBearingDegrees"],"icon-size":["interpolate",["linear"],["zoom"],16,1,22,2]}},hi={filter:Xt,type:"line",layout:{"line-join":"round"},paint:{"line-width":qt,"line-color":"#6dc4ed"}},ui={filter:Xt,type:"symbol",minzoom:6,maxzoom:16.5,layout:{"symbol-placement":"point","symbol-avoid-edges":!0,"icon-image":"poi-ferry_terminal","icon-size":["interpolate",["linear"],["zoom"],6,.8,16.5,1],"icon-ignore-placement":!0}},di={type:"line",layout:{"line-join":"round","line-cap":"round","line-sort-key":["get","index"]}},pi=["interpolate",["linear"],["zoom"],1,5,5,6,10,10,18,14],_i={...di,filter:Zt,paint:{"line-color":$t,"line-width":pi}},yi={...di,filter:Zt,paint:{"line-color":Kt,"line-width":qt}},fi={...di,filter:Xt,paint:{"line-color":zt,"line-width":pi}},mi={type:"symbol",layout:{"symbol-placement":"line","icon-image":"roads-arrow-white","icon-rotate":180}},Ai="selected-route-summary-popup",gi="deselected-route-summary-popup",Ei={filter:Xt,type:"line",layout:{"line-join":"round","line-cap":"round"},paint:{"line-width":["interpolate",["linear"],["zoom"],1,9,5,11,10,15,18,20],"line-color":"#BEBFFA"}},Ii={filter:Xt,type:"symbol",minzoom:4,layout:{"symbol-placement":"point","symbol-avoid-edges":!0,"icon-image":"poi-toll_plaza","icon-size":["interpolate",["linear"],["zoom"],4,.8,16.5,1]}},Ri=["interpolate",["linear"],["zoom"],1,2,5,3,10,4,18,6],Ti={type:"line",layout:{"line-cap":"round"},paint:{"line-width":Ri,"line-color":["match",["get","magnitudeOfDelay"],"minor","#FFC105","moderate",Qt,"major",Jt,"#C7D2D8"]}},Li={type:"line",filter:["in",["get","magnitudeOfDelay"],["literal",["unknown","indefinite"]]],layout:{"line-join":"round"},paint:{"line-width":Ri,"line-color":["match",["get","magnitudeOfDelay"],"unknown","rgba(190, 39, 27, 1)","rgba(137, 150, 168, 1)"],"line-dasharray":[1.5,1]}},Si=["match",["get","magnitudeOfDelay"],"minor",ei,"moderate",Qt,"major",Jt,"indefinite","#666666",ti],Oi={filter:Xt,type:"symbol",minzoom:6,layout:{"symbol-placement":"point","symbol-avoid-edges":!0,"icon-ignore-placement":!0}},Ni={...Oi,filter:["all",["has","jamIconID"],Oi.filter],layout:{...Oi.layout,"icon-image":["get","jamIconID"],"icon-anchor":"bottom-left","text-anchor":"bottom-left","text-field":["get","title"],"text-font":[Ie],"text-offset":[3.9,-1.4],"text-size":13},paint:{...Oi.paint,"text-color":Si,"text-halo-color":"#FFFFFF","text-halo-width":1}},bi={...Oi,filter:["all",["has","causeIconID"],Oi.filter],layout:{...Oi.layout,"icon-image":["get","causeIconID"],"icon-anchor":"bottom-right"},paint:{...Oi.paint}},Ci={filter:Xt,type:"line",layout:{"line-join":"round"},paint:{"line-width":qt,"line-color":"#000000","line-opacity":.3}},vi={filter:Xt,type:"line",layout:{"line-join":"round"},paint:{"line-color":zt,"line-width":qt}},wi={filter:Xt,type:"line",layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":Yt,"line-width":["interpolate",["linear"],["zoom"],1,2,5,3,10,5,18,7],"line-dasharray":[0,1.5]}},Mi="traffic-clear",Di="traffic-major",Pi="traffic-moderate",Ui="traffic-minor",xi=["has","formattedTraffic"],Fi=e=>{const t=void 0!==e?De(Ai,e):Ai,i=void 0!==e?De(gi,e):gi,r=void 0!==e?De(Mi,e):Mi,s=void 0!==e?De(Di,e):Di,a=void 0!==e?De(Pi,e):Pi,o=void 0!==e?De(Ui,e):Ui;return{type:"symbol",layout:{"icon-image":["case",Xt,t,i],"symbol-placement":"point","icon-rotation-alignment":"viewport","text-rotation-alignment":"viewport","symbol-sort-key":["case",Xt,0,1],"icon-text-fit":"both","icon-text-fit-padding":[10,5,5,10],"text-font":["Noto-Medium"],"text-size":13,"icon-padding":0,"text-justify":"left","text-line-height":1.5,"text-field":["format",["get","formattedDuration"],{"text-font":["literal",[Ie]],"text-color":["case",Xt,"black",jt]},["concat","\t\t",["get","formattedDistance"]],{"text-color":jt},["case",xi,"\n",""],{},["image",["case",xi,["match",["get","magnitudeOfDelay"],"major",s,"moderate",a,"minor",o,r],""]],{},["case",xi,["concat"," ",["get","formattedTraffic"]],""],{"text-font":["literal",[Ie]],"text-color":Si}]},paint:{"icon-translate":[0,-35],"text-translate":[0,-35]}}},Hi=Fi(),Wi="start",Gi="middle",Bi="finish",ki="indexType",Vi="stopDisplayIndex",Yi="waypointStart",zi="waypointStop",Ki="waypointSoft",$i="waypointFinish",ji={"text-field":["get",Vi],"text-font":[Ie],"text-size":["interpolate",["linear"],["zoom"],13,14,18,16],"text-offset":[0,-1.6],"icon-anchor":["case",["all",["==",["get",ki],Gi],["!",["has",Vi]]],"center","bottom"],"text-allow-overlap":!0},qi={type:"symbol",paint:{...Ce,"text-color":"#ffffff"},layout:{...be,...ji,"symbol-sort-key":["case",["==",["get",Le],Ki],0,["abs",["-",["get","index"],1e3]]]}},Xi={type:"symbol",paint:{...we,"text-color":"black","text-halo-width":1.5,"text-halo-color":"#ffffff"},layout:{...ve,"text-anchor":"top","text-offset":[0,.4]}},Zi=(e,t)=>e&&t&&(e.startsWith("route")||e.startsWith("waypoint"))?`${t}-${e}`:e,Ji=(e,t)=>e&&t?Object.fromEntries(Object.entries(e).map(([e,i])=>[e,i?.beforeID?{...i,beforeID:Zi(i.beforeID,t)}:i])):e,Qi=(e,t)=>e&&void 0!==t?`${e}-${t}`:e,er=(e={},t,i)=>{const r=e.layers,s=r?.sections,a=e.theme?.mainColor;return{mainLines:{routeLineArrows:{...mi,beforeID:ue.lowestLabel,...r?.mainLines?.routeLineArrows},routeLine:{...(o={color:a},{...di,filter:Xt,paint:{"line-color":o?.color??"#36A8F0","line-width":qt}}),beforeID:Zi("routeIncidentBackgroundLine",t),...r?.mainLines?.routeLine},routeOutline:{...fi,beforeID:Zi("routeLine",t),...r?.mainLines?.routeOutline},routeDeselectedLine:{...yi,beforeID:Zi("routeOutline",t),...r?.mainLines?.routeDeselectedLine},routeDeselectedOutline:{..._i,beforeID:Zi("routeDeselectedLine",t),...r?.mainLines?.routeDeselectedOutline},...Ji(r?.mainLines?.additional,t)},waypoints:{routeWaypointSymbol:{...qi,beforeID:Zi("routeSummaryBubbleSymbol",t),...r?.waypoints?.routeWaypointSymbol},routeWaypointLabel:{...Xi,beforeID:Zi("routeWaypointSymbol",t),...r?.waypoints?.routeWaypointLabel},...Ji(r?.waypoints?.additional,t)},chargingStops:{routeChargingStopSymbol:{...ri(e.chargingStops),beforeID:Zi("routeWaypointSymbol",t),...r?.chargingStops?.routeChargingStopSymbol},...Ji(r?.chargingStops?.additional,t)},sections:{incident:{routeIncidentJamSymbol:{...Ni,beforeID:Zi("routeChargingStopSymbol",t),...s?.incident?.routeIncidentJamSymbol},routeIncidentCauseSymbol:{...bi,beforeID:Zi("routeChargingStopSymbol",t),...s?.incident?.routeIncidentCauseSymbol},routeIncidentBackgroundLine:{...Ti,beforeID:Zi("routeIncidentDashedLine",t),...s?.incident?.routeIncidentBackgroundLine},routeIncidentDashedLine:{...Li,beforeID:Zi("routeTunnelLine",t),...s?.incident?.routeIncidentDashedLine},...Ji(s?.incident?.additional,t)},ferry:{routeFerryLine:{...hi,beforeID:Zi("routeLineArrows",t),...s?.ferry?.routeFerryLine},routeFerrySymbol:{...ui,beforeID:Zi("routeIncidentJamSymbol",t),...s?.ferry?.routeFerrySymbol},...Ji(s?.ferry?.additional,t)},tollRoad:{routeTollRoadOutline:{...Ei,beforeID:Zi("routeDeselectedOutline",t),...s?.tollRoad?.routeTollRoadOutline},routeTollRoadSymbol:{...Ii,beforeID:Zi("routeChargingStopSymbol",t),...s?.tollRoad?.routeTollRoadSymbol},...Ji(s?.tollRoad?.additional,t)},tunnel:{routeTunnelLine:{...Ci,beforeID:Zi("routeLineArrows",t),...s?.tunnel?.routeTunnelLine},...Ji(s?.tunnel?.additional,t)},vehicleRestricted:{routeVehicleRestrictedBackgroundLine:{...vi,beforeID:Zi("routeVehicleRestrictedForegroundLine",t),...s?.vehicleRestricted?.routeVehicleRestrictedBackgroundLine},routeVehicleRestrictedForegroundLine:{...wi,beforeID:ue.lowestLabel,...s?.vehicleRestricted?.routeVehicleRestrictedForegroundLine},...Ji(s?.vehicleRestricted?.additional,t)}},instructionLines:{routeInstructionLine:{...ni,beforeID:ue.lowestLabel,...r?.instructionLines?.routeInstructionLine},routeInstructionOutline:{...oi,beforeID:Zi("routeInstructionLine",t),...r?.instructionLines?.routeInstructionOutline},...Ji(r?.instructionLines?.additional,t)},instructionArrows:{routeInstructionArrowSymbol:{...ci,beforeID:Zi("routeInstructionLine",t),...void 0!==i&&{layout:{...ci.layout,"icon-image":Qi(ci.layout?.["icon-image"],i)}},...r?.instructionArrows?.routeInstructionArrowSymbol},...Ji(r?.instructionArrows?.additional,t)},summaryBubbles:{routeSummaryBubbleSymbol:{...void 0!==i?Fi(i):Hi,...r?.summaryBubbles?.routeSummaryBubbleSymbol},...Ji(r?.summaryBubbles?.additional,t)}};var o},tr=er();D()&&(F=P(U('<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">\n <path d="M1.562 40.569L25 1.562l23.438 39.007L25 27.566 1.562 40.569z" fill="#fff"/>\n <path d="M25.369.107c.782.429.506.167.917.682l23.438 39.007c.79 1.316-.671 2.829-2.014 2.085L25 29.281l-22.71 12.6c-1.343.744-2.804-.769-2.014-2.085L23.714.789c.461-.694.9-.682 1.656-.682zM25 1.562L1.562 40.569 25 27.566l23.438 13.003L25 1.562z"\n fill="gray"/>\n</svg>\n')));var ir=e=>{if(!D())return;const t=U('<svg xmlns="http://www.w3.org/2000/svg" width="160" height="65">\n <g filter="url(#A)">\n <rect id="pin" x="81.899" y="47" width="10" height="10" rx="2" transform="rotate(45 81.899 47)"/>\n <rect id="bubble" x="10" y="10" width="140" height="45" rx="12"/>\n </g>\n <defs>\n <filter id="A">\n <feDropShadow dx="0" dy="2" stdDeviation="4" flood-opacity=".3"/>\n </filter>\n </defs>\n</svg>\n');return t.querySelector("#bubble")?.setAttribute("fill",e),t.querySelector("#pin")?.setAttribute("fill",e),P(t)},rr={pixelRatio:2,stretchX:[[20,45],[100,130]],stretchY:[[20,35]],content:[10,10,130,45]},sr=e=>{if(!D())return;const t=U('<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">\n <g id="main">\n <path fill-rule="evenodd"\n d="M11.389 4H9.025a.86.86 0 0 0-.517.173l-.001-.001a.5.5 0 0 1-.464.059l-.028-.011a.5.5 0 0 1-.129-.83A1.86 1.86 0 0 1 9.025 3h2.364a2 2 0 0 1 1.789 1.106l1.02 2.04c.471.176.802.63.802 1.156v.803c0 .543 0 .815-.071 1.038a1.5 1.5 0 0 1-.914.953c-.219.08-.491.092-1.034.114l-1.481.062v-.166-.803a2.23 2.23 0 0 0-1.055-1.897l-.74-1.479 2.326.033h.955l-.703-1.406A1 1 0 0 0 11.389 4zM12 8.4a1 1 0 1 1 2 0 .5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5z"/>\n <path d="M11.833 11.115c0-.109.089-.198.198-.198h1.979c.109 0 .198.089.198.198 0 .328-.266.594-.594.594h-1.187c-.328 0-.594-.266-.594-.594z"/>\n <path fill-rule="evenodd"\n d="M1.802 8.146C1.331 8.321 1 8.776 1 9.302v.803c0 .543 0 .815.071 1.038a1.5 1.5 0 0 0 .914.953c.219.08.491.092 1.034.114l2.731.114 2.731-.114c.543-.023.814-.034 1.034-.114a1.5 1.5 0 0 0 .914-.953c.071-.223.071-.494.071-1.038v-.803c0-.526-.331-.98-.802-1.156l-1.02-2.04A2 2 0 0 0 6.889 5H4.611a2 2 0 0 0-1.789 1.106l-1.02 2.04zM6.889 6H4.611a1 1 0 0 0-.894.553l-.703 1.406h.955 3.563.955l-.703-1.406A1 1 0 0 0 6.889 6zM2 10.4a1 1 0 1 1 2 0 .5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zm6.5-1a1 1 0 0 0-1 1 .5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5 1 1 0 0 0-1-1z"/>\n <path d="M1.792 13.115c0-.109.089-.198.198-.198h1.979c.109 0 .198.089.198.198 0 .328-.266.594-.594.594H2.385c-.328 0-.594-.266-.594-.594zm5.739-.198c-.109 0-.198.089-.198.198 0 .328.266.594.594.594h1.188c.328 0 .594-.266.594-.594 0-.109-.089-.198-.198-.198h-1.98z"/>\n </g>\n</svg>\n'),i=t.querySelector("#main");return i.setAttribute("transform","scale(2)"),i.setAttribute("fill",e),P(t)},ar=(e,t)=>{if(!D())return;const i=x(t);return e&&i.appendChild(e),P(i)},or=(e={},t)=>Object.entries(e).map(([e,i])=>({...i,id:t?`${t}-${e}`:e})),nr=(e={},t)=>({mainLines:or(e.mainLines,t),waypoints:or(e.waypoints,t),chargingStops:or(e?.chargingStops,t),ferries:or(e.sections?.ferry,t),incidents:or(e.sections?.incident,t),tollRoads:or(e.sections?.tollRoad,t),tunnels:or(e.sections?.tunnel,t),vehicleRestricted:or(e.sections?.vehicleRestricted,t),instructionLines:or(e.instructionLines,t),instructionArrows:or(e.instructionArrows,t),summaryBubbles:or(e.summaryBubbles,t)}),lr=(e,t,i)=>{const r=o.instance.get().displayUnits,s=e?.displayUnits;return{...e,...s?{}:{displayUnits:r},layers:er(e,t,i)}},cr=(e,t)=>{const i=t?.chargingStops?.icon;if(i?.mapping){const t=i.mapping;switch(t.basedOn){case"chargingSpeed":if(e.properties.chargingConnectionInfo?.chargingSpeed)return t.value[e.properties.chargingConnectionInfo?.chargingSpeed];break;case"custom":return t.fn(e)}}return"7309"},hr=e=>{const t=e.properties;return t.chargingParkName??t.chargingParkOperatorName},ur=(e,t)=>{const i=[];if(!1!==t?.chargingStops?.visible)for(const r of e.features)for(const e of r.properties.sections.leg){const s=e.summary.chargingInformationAtEndOfLeg;if(s){const e=s.properties;i.push({...s,properties:{...s.properties,id:s.properties.chargingParkId??u(),iconID:cr(s,t),title:hr(s),chargingPower:`${e.chargingConnectionInfo?.chargingPowerInkW} kW`,chargingDuration:h(e.chargingTimeInSeconds,t?.displayUnits?.time),routeState:r.properties.routeState}})}}return{type:"FeatureCollection",features:i}},dr=e=>e.categories.includes("jam"),pr=e=>{const t=(e=>{if(dr(e))return h(e.delayInSeconds)})(e),i=((e,t)=>dr(e)?`traffic-jam-${e.magnitudeOfDelay??"unknown"}-${(e=>e?.length?e.length<6?"small":e.length<8?"medium":"large":"collapsed")(t)}`:null)(e,t),r=(e=>{switch(e.categories.find(e=>"jam"!==e)){case"accident":return"traffic-incidents-accident";case"roadworks":return"traffic-incidents-roadworks";case"road-closed":return"traffic-incidents-road_closed";case"danger":case"animals-on-road":return"traffic-incidents-danger";case"broken-down-vehicle":return"traffic-incidents-broken_down_vehicle";case"lane-closed":case"narrow-lanes":return"traffic-incidents-lane_closed";case"wind":return"traffic-incidents-wind";case"fog":return"traffic-incidents-fog";case"rain":return"traffic-incidents-rain";case"frost":return"traffic-incidents-frost";case"flooding":return"traffic-incidents-flooding";default:return null}})(e);return{...e,...i&&{jamIconID:i},...r&&{causeIconID:r},...t&&{title:t}}},_r=(e,t,i)=>{if(e.properties.radiusMeters)return void 0!==i?De(Ki,i):Ki;let r;switch(t){case"start":r=Yi;break;case"finish":r=$i;break;default:r=zi}return void 0!==i?De(r,i):r},yr=(e,t,i)=>{let r=-1;return{type:"FeatureCollection",features:e.map((s,a)=>{if(!s)return r++,null;const o=(e=>{return Array.isArray(e)?{type:"Feature",geometry:{type:"Point",coordinates:e},properties:{}}:"Point"===e.type?{type:"Feature",geometry:t=e,properties:{},...t.bbox&&{bbox:t.bbox}}:e;var t})(s),n=((e,t)=>0===e?Wi:e<t-1?Gi:Bi)(a,e.length),l=(e=>!e.properties.radiusMeters)(o);l&&r++;const c=(e=>{const t=e?.properties;return t?.poi?.name??t?.address?.freeformAddress??void 0})(o),h=o.id??u();return{...o,..."main-when-available"===t?.entryPoints&&{geometry:{type:"Point",coordinates:p(o,{useEntryPoint:"main-when-available"})}},id:h,properties:{...o.properties,id:h,index:a,indexType:n,...c&&{title:c},iconID:_r(o,n,i),...l&&"middle"===n&&{stopDisplayIndex:r}}}}).filter(e=>e)}},fr=(e,t,i)=>({type:"FeatureCollection",features:e.features.flatMap(e=>((e,t,i)=>e.properties.sections[t]?.map(t=>{const r=t.id??u();return{type:"Feature",id:r,geometry:{type:"LineString",coordinates:e.geometry.coordinates.slice(t.startPointIndex,t.endPointIndex+1)},properties:{...i?i(t,e.properties):t,routeState:e.properties.routeState,routeIndex:e.properties.index,id:r}}})||[])(e,t,i))}),mr=(e,t)=>t.show(((e,t)=>({...t,features:t.features.map(t=>({...t,properties:{...t.properties,routeState:e.features[t.properties.routeIndex||0].properties.routeState}}))}))(e,t.shownFeatures)),Ar=(e,t=0)=>{const i="features"in e?e:{type:"FeatureCollection",features:[e]};return{...i,features:i.features.map((e,i)=>{const r=e.id??u();return{...e,id:r,properties:{...e.properties,id:r,routeState:i===t?"selected":"deselected"}}})}},gr=(e,t)=>e.some(e=>e.magnitudeOfDelay===t),Er=(e,t)=>({type:"FeatureCollection",features:e.features.map(e=>{const i=e.properties.summary,r=e.geometry.coordinates,s=h(i.trafficDelayInSeconds,t?.time),a=(e=>{const t=e.properties.sections.traffic;if(t?.length)return gr(t,"major")?"major":gr(t,"moderate")?"moderate":gr(t,"minor")?"minor":void 0})(e),o=e.id??u();return{type:"Feature",id:o,geometry:{type:"Point",coordinates:r[Math.round(r.length/2)]},properties:{id:o,routeIndex:e.properties.index,routeState:e.properties.routeState,formattedDistance:c(i.lengthInMeters,t?.distance),...a&&{magnitudeOfDelay:a},...s&&{formattedTraffic:s},formattedDuration:h(i.travelTimeInSeconds,t?.time)}}})}),Ir=class e extends ie{static{this.lastInstanceIndex=-1}static async get(t,i){return await K(t),new e(t,i)}constructor(e,t){super("geojson",e,t)}createSourcesWithLayers(e){const t=De("routes",this.instanceIndex);return{mainLines:new z(this.mapLibreMap,`${t}-mainLines`,e.mainLines,!1),waypoints:new z(this.mapLibreMap,`${t}-waypoints`,e.waypoints,!1),incidents:new z(this.mapLibreMap,`${t}-incidents`,e.incidents,!1),ferries:new z(this.mapLibreMap,`${t}-ferries`,e.ferries,!1),chargingStops:new z(this.mapLibreMap,`${t}-chargingStops`,e.chargingStops,!1),tollRoads:new z(this.mapLibreMap,`${t}-tollRoads`,e.tollRoads,!1),tunnels:new z(this.mapLibreMap,`${t}-tunnels`,e.tunnels,!1),vehicleRestricted:new z(this.mapLibreMap,`${t}-vehicleRestricted`,e.vehicleRestricted,!1),instructionLines:new z(this.mapLibreMap,`${t}-instructionLines`,e.instructionLines,!1),instructionArrows:new z(this.mapLibreMap,`${t}-instructionArrows`,e.instructionArrows,!1),summaryBubbles:new z(this.mapLibreMap,`${t}-summaryBubbles`,e.summaryBubbles,!1)}}_initSourcesWithLayers(t,i){i||(e.lastInstanceIndex++,this.instanceIndex=e.lastInstanceIndex,this.layerIDPrefix=De("routes",this.instanceIndex)),this.layersSpecs=nr(lr(t,this.layerIDPrefix,this.instanceIndex).layers,this.layerIDPrefix);const r=this.createSourcesWithLayers(this.layersSpecs);X(Object.values(r).flatMap(e=>e._layerSpecs),this.mapLibreMap);const s={fillColor:t?.theme?.mainColor,...t?.waypoints?.icon?.style},a={pixelRatio:2},o=De(Yi,this.instanceIndex),n=De(zi,this.instanceIndex),l=De(Ki,this.instanceIndex),c=De($i,this.instanceIndex),h=De(li,this.instanceIndex),u=De(Ai,this.instanceIndex),d=De(gi,this.instanceIndex),p=De(Mi,this.instanceIndex),_=De(Di,this.instanceIndex),y=De(Pi,this.instanceIndex),f=De(Ui,this.instanceIndex);this.addImageIfNotExisting(o,(e=>{if(D())return ar(U('<svg xmlns="http://www.w3.org/2000/svg" width="120" height="140">\n <path d="M63.734 86.383c-1.404.026-2.78-.393-3.93-1.197s-2.01-1.949-2.46-3.271l-3.15-9.339c-1.093-3.403-3.748-6.089-7.154-7.238L37.5 62.21c-2.742-.902-4.567-3.477-4.5-6.345-.058-2.874 1.761-5.457 4.5-6.388l36-11.886c2.461-.88 5.213-.27 7.062 1.567s2.466 4.571 1.578 7.015L70.17 81.918c-.938 2.719-3.54 4.526-6.436 4.469h0z"\n fill="#f4f5f6"/>\n</svg>\n'),e)})(s),a),this.addImageIfNotExisting(n,ar(void 0,s),a),this.addImageIfNotExisting(l,(()=>{if(D())return P(U('<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">\n <circle id="circle" cx="16" cy="16" r="12" fill="white" stroke="#105287" stroke-width="4"/>\n</svg>\n'))})(),a),this.addImageIfNotExisting(c,(e=>{if(D())return ar(U('<svg xmlns="http://www.w3.org/2000/svg" width="120" height="140">\n <path d="M33 83.404a2.99 2.99 0 0 1-3-2.978V44.681a2.99 2.99 0 1 1 6 0v35.745a2.99 2.99 0 0 1-3 2.978zm48-38.723H39v17.872h42V44.681zm3.878 37.851a3.02 3.02 0 0 0 4.244 0c.561-.559.878-1.317.878-2.106V44.681a2.99 2.99 0 1 0-6 0v35.745c0 .789.317 1.547.878 2.106z"\n fill="#f4f5f6"/>\n</svg>\n'),e)})(s),a),this.addImageIfNotExisting(h,F,a),this.addImageIfNotExisting(u,ir("white"),rr),this.addImageIfNotExisting(d,ir("#EEEEEE"),rr),this.addImageIfNotExisting(p,sr(ti),a),this.addImageIfNotExisting(_,sr(Jt),a),this.addImageIfNotExisting(y,sr(Qt),a),this.addImageIfNotExisting(f,sr(ei),a);for(const e of t?.chargingStops?.icon?.customIcons??[])this.addImageIfNotExisting(e.id,e.image,{pixelRatio:e.pixelRatio??2});return r}_applyConfig(e){const i=lr(e,this.layerIDPrefix,this.instanceIndex);if(this.config){const e=nr(i.layers,this.layerIDPrefix);Object.keys(e).forEach(t=>{const i=t;((e,t,i,r)=>{const s=e.reduce((e,t)=>({...e,[t.id]:t}),{}),a=t.reduce((e,t)=>({...e,[t.id]:t}),{}),o=[],n=[],l=[],c=[];Object.keys(s).forEach(e=>{a[e]?(l.push(s[e]),c.push(a[e])):o.push(e)}),Object.keys(a).forEach(e=>{s[e]||n.push(e)});const h=i._layerSpecs;n.forEach(e=>{r.removeLayer(e);for(let t=0;t<h.length;t++)if(h[t].id===e){h.splice(t,1);break}}),o.forEach(e=>{const t={...s[e],source:i.source.id};h.push(t)}),i._updateSourceAndLayerIDs(),q(l,c,r)})(e[i],this.layersSpecs[i],this.sourcesWithLayers[i],this.mapLibreMap)});const t=Object.values(this.sourcesWithLayers);X(t.flatMap(e=>e._layerSpecs),this.mapLibreMap),t.forEach(e=>e.setLayersVisible(!!e.shownFeatures.features.length)),this.layersSpecs=e}const r=!1!==i.summaryBubbles?.visible,s=!t(this.config?.summaryBubbles?.visible,i.summaryBubbles?.visible),a=!t(this.config?.displayUnits,i.displayUnits),o=this.sourcesWithLayers.summaryBubbles.shownFeatures.features.length>0,n=this.sourcesWithLayers.mainLines.shownFeatures.features.length>0;return!r&&s?this.sourcesWithLayers.summaryBubbles.clear():r&&(s&&n||a&&o)&&this.sourcesWithLayers.summaryBubbles.show(Er(this.sourcesWithLayers.mainLines.shownFeatures,i.displayUnits)),i}restoreDataAndConfigImpl(){const e=Object.entries(this.sourcesWithLayers).map(e=>({[e[0]]:e[1].shownFeatures})).reduce((e,t)=>({...e,...t}),{});this.initSourcesWithLayers(this.config,!0),this._applyConfig(this.config);for(const t of Object.keys(e))this.sourcesWithLayers[t].show(e[t])}addImageIfNotExisting(e,t,i){Q("if-not-in-sprite",e,t,this.mapLibreMap,i)}async showRoutes(e,t){const i=Ar(e,t?.selectedIndex);await this.waitUntilModuleReady(),this.sourcesWithLayers.mainLines.show(i),this.sourcesWithLayers.vehicleRestricted.show(fr(i,"vehicleRestricted")),this.sourcesWithLayers.incidents.show(fr(i,"traffic",pr)),this.sourcesWithLayers.chargingStops.show(ur(i,this.config)),this.sourcesWithLayers.ferries.show(fr(i,"ferry")),this.sourcesWithLayers.tunnels.show(fr(i,"tunnel")),this.sourcesWithLayers.tollRoads.show(fr(i,"toll")),this.sourcesWithLayers.instructionLines.show((e=>({type:"FeatureCollection",features:e.features.flatMap((e,t)=>e.properties.guidance?.instructions?.filter(e=>e.routePath?.length).map(i=>({type:"Feature",geometry:{type:"LineString",coordinates:i.routePath.map(e=>e.point)},properties:{...i,id:u(),routeIndex:t,routeState:e.properties.routeState}}))||[])}))(i)),this.sourcesWithLayers.instructionArrows.show((e=>({type:"FeatureCollection",features:e.features.flatMap((e,t)=>e.properties.guidance?.instructions?.filter(e=>e.routePath?.length&&e.routePath.length>1).map(i=>{const r=[i.routePath[i.routePath.length-2]?.point,i.routePath[i.routePath.length-1]?.point];return{type:"Feature",geometry:{type:"Point",coordinates:r[1]},properties:{...i,id:u(),routeIndex:t,routeState:e.properties.routeState,lastPointBearingDegrees:A(r[0],r[1])}}})||[])}))(i)),!1!==this.config?.summaryBubbles?.visible?this.sourcesWithLayers.summaryBubbles.show(Er(i,this.config?.displayUnits)):this.sourcesWithLayers.summaryBubbles.clear()}async clearRoutes(){await this.waitUntilModuleReady();for(const e of Object.keys(this.sourcesWithLayers))"waypoints"!==e&&this.sourcesWithLayers[e].clear()}async selectRoute(e){const t=Ar(this.sourcesWithLayers.mainLines.shownFeatures,e);await this.waitUntilModuleReady(),this.sourcesWithLayers.mainLines.show(t),this.sourcesWithLayers.chargingStops.show(ur(t,this.config)),mr(t,this.sourcesWithLayers.vehicleRestricted),mr(t,this.sourcesWithLayers.incidents),mr(t,this.sourcesWithLayers.ferries),mr(t,this.sourcesWithLayers.tollRoads),mr(t,this.sourcesWithLayers.tunnels),mr(t,this.sourcesWithLayers.instructionLines),mr(t,this.sourcesWithLayers.instructionArrows),mr(t,this.sourcesWithLayers.summaryBubbles)}async showWaypoints(e){const t=Array.isArray(e)?yr(e,this.config?.waypoints,this.instanceIndex):yr(e.features,this.config?.waypoints,this.instanceIndex);await this.waitUntilModuleReady(),this.sourcesWithLayers.waypoints.show(t)}async clearWaypoints(){await this.waitUntilModuleReady(),this.sourcesWithLayers.waypoints.clear()}getShown(){return{mainLines:this.sourcesWithLayers.mainLines.shownFeatures,waypoints:this.sourcesWithLayers.waypoints.shownFeatures,incidents:this.sourcesWithLayers.incidents.shownFeatures,ferries:this.sourcesWithLayers.ferries.shownFeatures,chargingStops:this.sourcesWithLayers.chargingStops.shownFeatures,tollRoads:this.sourcesWithLayers.tollRoads.shownFeatures,tunnels:this.sourcesWithLayers.tunnels.shownFeatures,vehicleRestricted:this.sourcesWithLayers.vehicleRestricted.shownFeatures,instructionLines:this.sourcesWithLayers.instructionLines.shownFeatures,instructionArrows:this.sourcesWithLayers.instructionArrows.shownFeatures,summaryBubbles:this.sourcesWithLayers.summaryBubbles.shownFeatures}}get events(){return{mainLines:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.mainLines,this.config?.events),waypoints:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.waypoints,this.config?.events),chargingStops:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.chargingStops,this.config?.events),summaryBubbles:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.summaryBubbles,this.config?.events),incidents:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.incidents,this.config?.events),vehicleRestricted:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.vehicleRestricted,this.config?.events),ferries:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.ferries,this.config?.events),tollRoads:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.tollRoads,this.config?.events),tunnels:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.tunnels,this.config?.events),instructionLines:new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.instructionLines,this.config?.events)}}getLayerToRenderLinesUnder(){return ue.lowestLabel}},Rr="standardLight",Tr={standardLight:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_light"},standardDark:{trafficIncidents:"incidents_dark",trafficFlow:"flow_relative-dark",hillshade:"hillshade_dark"},drivingLight:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_light"},drivingDark:{trafficIncidents:"incidents_dark",trafficFlow:"flow_relative-dark",hillshade:"hillshade_dark"},monoLight:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_mono-light"},monoDark:{trafficIncidents:"incidents_dark",trafficFlow:"flow_relative-dark",hillshade:"hillshade_mono-dark"},satellite:{trafficIncidents:"incidents_light",trafficFlow:"flow_relative-light",hillshade:"hillshade_satellite"}},Lr=e=>`\${baseURL}/maps/orbis/assets/styles/\${version}/style.json?&apiVersion=1&key=\${apiKey}&map=${e}`,Sr={standardLight:Lr("basic_street-light"),standardDark:Lr("basic_street-dark"),drivingLight:Lr("basic_street-light-driving"),drivingDark:Lr("basic_street-dark-driving"),monoLight:Lr("basic_mono-light"),monoDark:Lr("basic_mono-dark"),satellite:Lr("basic_street-satellite")},Or=(e,t,i)=>{const r=e.id??"standardLight",s=new URL(Sr[r].replace("${baseURL}",t).replace("${version}",e.version??"0.6.0-0").replace("${apiKey}",i));for(const a of e.include??Vt)s.searchParams.append(a,Tr[r][a]);return s.toString()},Nr=e=>{const t=e.style,i=e.commonBaseURL,r=e.apiKey;return"string"==typeof t?Or({id:t},i,r):"standard"===t?.type?Or(t,i,r):"custom"===t?.type&&t?.url?((e,t)=>{const i=new URL(e);return i.searchParams.has("key")?console.warn("The style URL is coming with an API key parameter which takes priority. If you want to use the SDK configured API key, remove the key param from the style URL"):i.searchParams.set("key",t),i.toString()})(t.url,r):"custom"===t?.type&&t?.json?t.json:Or({id:Rr},i,r)},br=class{constructor(e){var i,r;this.mapReady=!1,this.styleChangeHandlers=[],this.setStyle=(e,i={keepState:!0})=>{this.mapReady=!1;for(const t of this.styleChangeHandlers)try{t.onStyleAboutToChange?.()}catch(s){console.error(s)}const r=i.keepState?((e,t)=>t&&"object"==typeof t&&"standard"===t.type&&t.include&&("string"==typeof e||"standard"===e.type&&!e.include)?{type:"standard",id:"string"==typeof e?e:e.id,include:t.include}:e)(e,this._params.style):e;this._params={...this._params,style:r},this.styleLightDarkTheme=te(r),this.mapLibreMap.once("styledata",()=>{!this.mapReady&&t(r,this._params.style)&&this.handleStyleData(i.keepState||!0)}),this.mapLibreMap.setStyle(Nr(this._params),{validate:!1})},this.getStyle=()=>this._params.style,this._params=f(e),void 0===this._params.style&&(this._params={...this._params,style:Rr}),this.styleLightDarkTheme=te(this._params.style),this.ensureMapLibreCSSLoaded(),S(4),this.mapLibreMap=new R({validateStyle:!1,maxTileCacheZoomLevels:22,cancelPendingTileRequestsWhileZooming:!1,...(i=this._params).mapLibre,style:Nr(i),attributionControl:{compact:!1},transformRequest:(r=i,(e,t)=>{if(e.includes("tomtom.com")){if("Image"===t)return{url:e};const i=new URL(e);return i.pathname.includes("incidents")?i.searchParams.set("tags",`${C.join(",")}`):i.pathname.includes("flow")&&i.searchParams.set("tags",`${N.join(",")}`),{url:i.toString(),headers:{...d(r)}}}return{url:e}})}),this.mapLibreMap.once("styledata",()=>{this.handleStyleData(!1)}),this._eventsProxy=new he(this.mapLibreMap,this._params?.events),this.loadRTLTextPlugin()}loadRTLTextPlugin(){setTimeout(()=>{["deferred","loaded"].includes(T())||L("https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.3.0/dist/mapbox-gl-rtl-text.js",!0).catch(e=>console.error("Something went wrong when setting RTL plugin",e))})}ensureMapLibreCSSLoaded(){if("undefined"==typeof document)return;if(Array.from(document.querySelectorAll('link[rel="stylesheet"], style')).some(e=>e.textContent?.includes(".maplibregl-map")))return;const e=document.createElement("link");e.rel="stylesheet",e.href=`https://unpkg.com/maplibre-gl@${O}/dist/maplibre-gl.css`,document.head.appendChild(e)}_setLanguage(e){this._params={...this._params,language:e};const t=e?.includes("-")?e.split("-")[0]:e;this.mapLibreMap.getStyle().layers.forEach(e=>{if("symbol"===e.type&&(e=>{const t=e.layout?.["text-field"]??"";return!!t&&("{name}"===t||2===t.length&&"name"===t[1]||3===t.length&&Array.isArray(t[1])&&"string"==typeof t[1][1]&&t[1][1].includes("name_")&&Array.isArray(t[2])&&t[2].includes("name"))})(e)){const i=t?["coalesce",["get",`name_${t}`],["get","name"]]:["get","name"];this.mapLibreMap.setLayoutProperty(e.id,"text-field",i,{validate:!1})}})}setLanguage(e){this.mapReady?this._setLanguage(e):this.mapLibreMap.once("styledata",()=>this.setLanguage(e))}getBBox(){return this.mapLibreMap.getBounds().toArray().flat()}handleStyleData(e){for(const i of B(this.mapLibreMap,[ye,fe,pe]))this.mapLibreMap.setLayoutProperty(i.id,"visibility","none",{validate:!1});if((async(e,t)=>{t.setSprite(`${e.commonBaseURL}/maps/orbis/assets/sprites/2.*/sprite?key=${e.apiKey}&poi=poi_${te(e.style)}&apiVersion=1&apiChannel=preview`,{validate:!1})})(this._params,this.mapLibreMap),this._params.language&&this._setLanguage(this._params.language),this.mapReady=!0,e)for(const i of this.styleChangeHandlers)try{i.onStyleChanged?.()}catch(t){console.error(t)}}addStyleChangeHandler(e){this.styleChangeHandlers.push(e)}},Cr=(e,t)=>e.length?1===e.length?{expression:e[0],legacy:t[0]}:{expression:["all",...e],legacy:["all",...t]}:null,vr=(e,t,i)=>{e&&(t.push(e.expression),i.push(e.legacy))},wr=(e,t,i,r)=>{e&&vr(pt(t,e),i,r)},Mr=(e,t,i)=>{wr(e.roadCategories,"road_category",t,i),wr(e.roadSubCategories,"road_subcategory",t,i)},Dr=e=>{const t=[],i=[];return Mr(e,t,i),e.incidentCategories&&vr(pt("icon_category_0",e.incidentCategories,e=>v[e]),t,i),e.magnitudes&&vr(pt("magnitude_of_delay",e.magnitudes,e=>y.indexOf(e)),t,i),e.delays&&vr((e=>{const t=[],i=[];if(e.mustHaveDelay&&e.minDelayMinutes){const r=60*e.minDelayMinutes;t.push([">=",["get","delay"],r]),i.push([">=","delay",r])}else if(e.mustHaveDelay)t.push([">",["get","delay"],0]),i.push([">","delay",0]);else if(e.minDelayMinutes){const r=60*e.minDelayMinutes;t.push(["any",["!",["has","delay"]],["==",["get","delay"],0],[">=",["get","delay"],r]]),i.push(["any",["!has","delay"],["==","delay",0],[">=","delay",r]])}return Cr(t,i)})(e.delays),t,i),Cr(t,i)},Pr=e=>e?.any?.length?ht(e.any.map(Dr).filter(e=>!i(e))):null,Ur=e=>{const t=[],i=[];if(Mr(e,t,i),e.showRoadClosures){const r="only"===e.showRoadClosures?"==":"!=";t.push([r,["get","road_closure"],!0]),i.push([r,"road_closure",!0])}return Cr(t,i)},xr=(e,t,i,r)=>{for(const s of t)i.setFilter(s.id,e?ut(e,r[s.id]):r[s.id])},Fr=class e extends ie{static async get(t,i){return await K(t),await J(t,fe,"trafficFlow"),new e(t,i)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const t=this.mapLibreMap.getSource(fe);if(!t)throw M(`init ${e.name} with source ID ${fe}`);this.originalFilters={};for(const e of this.getLayers())this.originalFilters[e.id]=e.filter;return{trafficFlow:new k(this.mapLibreMap,t)}}_applyConfig(e){return this.setVisible(e?.visible??!1),this._filter(e?.filters,!1),e}getLayers(){return B(this.tomtomMap.mapLibreMap,[fe])}filter(e){this._filter(e)}_filter(e,t=!0){if(this.tomtomMap.mapReady)if(e?.any?.length){const t=(r=e,r?.any?.length?ht(r.any.map(Ur).filter(e=>!i(e))):null);t&&xr(t,this.getLayers(),this.mapLibreMap,this.originalFilters)}else this.config?.filters?.any?.length&&xr(void 0,this.getLayers(),this.mapLibreMap,this.originalFilters);var r;t&&(this.config=s({...this.config,filters:e},i))}setVisible(e){this.config={...this.config,visible:e},this.tomtomMap.mapReady&&this.sourcesWithLayers.trafficFlow.setLayersVisible(e)}isVisible(){return this.sourcesWithLayers.trafficFlow.isAnyLayerVisible()}getShown(){return{trafficFlow:this.mapLibreMap.queryRenderedFeatures({layers:this.sourcesWithLayers.trafficFlow.sourceAndLayerIDs.layerIDs,validate:!1}).map(b)}}get events(){return new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.trafficFlow,this.config?.events,b)}},Hr=class t extends ie{static async get(e,i){return await K(e),await J(e,ye,"trafficIncidents"),new t(e,i)}constructor(e,t){super("style",e,t)}_initSourcesWithLayers(){const e=this.mapLibreMap.getSource(ye);if(!e)throw M(`init ${t.name} with source ID ${ye}`);this.originalFilters={};for(const t of this.getLayers())this.originalFilters[t.id]=t.filter;return{trafficIncidents:new k(this.mapLibreMap,e)}}_applyConfig(e){return this._setVisible(e?.visible??!1,{updateConfig:!1}),i(e?.icons?.visible)||this.setIconsVisible(e.icons.visible),this._filter(e?.filters,e?.icons?.filters,!1),e}filter(e,t){this._filter(e,t)}_filter(e,t,r=!0){if(this.tomtomMap.mapReady){if(e?.any?.length){const i=Pr(e);i&&xr(i,t?this.getNonSymbolLayers():this.getLayers(),this.mapLibreMap,this.originalFilters)}else this.config?.filters?.any?.length&&xr(void 0,this.getLayers(),this.mapLibreMap,this.originalFilters);if(t?.any?.length){const e=Pr(t);e&&xr(e,this.getSymbolLayers(),this.mapLibreMap,this.originalFilters)}}r&&(this.config=s({...this.config,filters:e,icons:{...this.config?.icons,filters:t}},i))}getLayers(){return B(this.tomtomMap.mapLibreMap,[ye])}getSymbolLayers(){return this.getLayers().filter(e=>"symbol"===e.type)}getNonSymbolLayers(){return this.getLayers().filter(e=>"symbol"!=e.type)}setIconsVisible(e){this.config={...this.config,icons:{...this.config?.icons,visible:e}},this.tomtomMap.mapReady&&this.sourcesWithLayers.trafficIncidents.setLayersVisible(e,e=>"symbol"===e.type)}setVisible(e){this._setVisible(e)}_setVisible(t,i){(i?.updateConfig??1)&&(delete this.config?.icons?.visible,this.config={...s({...this.config},e),visible:t}),this.tomtomMap.mapReady&&this.sourcesWithLayers.trafficIncidents.setLayersVisible(t)}isVisible(){return this.sourcesWithLayers.trafficIncidents.isAnyLayerVisible()}anyIconLayersVisible(){return!!this.sourcesWithLayers.trafficIncidents?.isAnyLayerVisible(e=>"symbol"===e.type)}getShown(){return{trafficIncidents:this.mapLibreMap.queryRenderedFeatures({layers:this.sourcesWithLayers.trafficIncidents.sourceAndLayerIDs.layerIDs,validate:!1}).map(w)}}get events(){return new re(this.tomtomMap._eventsProxy,this.sourcesWithLayers.trafficIncidents,this.config?.events,w)}},Wr=["motorway","motorway_link","trunk","trunk_link","primary","primary_link","secondary","secondary_link","tertiary","tertiary_link","street","service","track"],Gr=["unclassified","residential","living_street"],Br=["parking","driveway","alley"],kr=(e,t)=>({left:e.left-t.left,top:e.top-t.top,right:e.right-t.left,bottom:e.bottom-t.top}),Vr=(e,t,i)=>e.right<=0||e.left>=t||e.bottom<=0||e.top>=i,Yr=(e,t,i,r)=>{e.top<=i-e.bottom?t.top=Math.max(t.top,e.bottom+r):t.bottom=Math.min(t.bottom,e.top-r)},zr=(e,t,i,r)=>{e.left<=i-e.right?t.left=Math.max(t.left,e.right+r):t.right=Math.min(t.right,e.left-r)},Kr=(e,t,i,r,s)=>{const a=((e,t,i)=>({left:Math.max(0,e.left),top:Math.max(0,e.top),right:Math.min(t,e.right),bottom:Math.min(i,e.bottom)}))(e,i,r),o=e.left<=0&&e.right>=i,n=e.top<=0&&e.bottom>=r;if(o&&!n)return void Yr(a,t,r,s);if(n&&!o)return void zr(a,t,i,s);const l=e.left<=0,c=e.right>=i,h=e.top<=0,u=e.bottom>=r;!l&&!c||h||u?!h&&!u||l||c?((e,t,i,r,s)=>{const a=e.left,o=i-e.right,n=e.top,l=r-e.bottom,c=Math.min(a,o,n,l);c===a?t.left=Math.max(t.left,e.right+s):c===o?t.right=Math.min(t.right,e.left-s):c===n?t.top=Math.max(t.top,e.bottom+s):t.bottom=Math.min(t.bottom,e.top-s)})(a,t,i,r,s):zr(a,t,i,s):Yr(a,t,r,s)},$r=e=>"string"==typeof e?document.querySelector(e):e,jr=e=>"mapLibreMap"in e?e.mapLibreMap:e,qr=(e,t,i)=>{const r=jr(e).getContainer().getBoundingClientRect(),{width:s,height:a}=r,o={left:i,top:i,right:s-i,bottom:a-i};for(const n of t){const e=$r(n);if(!e)continue;const t=kr(e.getBoundingClientRect(),r);Vr(t,s,a)||Kr(t,o,s,a,i)}return o.left>=o.right||o.top>=o.bottom?null:{visibleAreaBounds:o,mapWidthPX:s,mapHeightPX:a}},Xr=e=>{const{map:t,surroundingElements:i,paddingPX:r=0}=e,s=qr(t,i,r);if(!s)return null;const{visibleAreaBounds:a}=s,o=jr(t),n=o.unproject([a.left,a.bottom]),l=o.unproject([a.right,a.top]);return[n.lng,n.lat,l.lng,l.lat]},Zr=e=>{const{map:t,surroundingElements:i}=e,r=Xr({map:t,surroundingElements:i});if(!r)return null;const[s,a,o,n]=r;return[(s+o)/2,(a+n)/2]},Jr=e=>{const{map:t,toBeContainedBBox:i,surroundingElements:r,paddingPX:s=0}=e,a=qr(t,r,s);if(!a)return null;const{visibleAreaBounds:o,mapWidthPX:n,mapHeightPX:l}=a,c=o.left/n,h=o.right/n,u=o.top/l,d=h-c,p=o.bottom/l-u,[_,y,f,m]=i,A=(f-_)/d,g=(m-y)/p,E=_-c*A,I=m+u*g;return[E,I-g,E+A,I]};export{ie as AbstractMapModule,G as AbstractSourceWithLayers,V as AddedSourceWithLayers,_e as BASE_MAP_SOURCE_ID,It as BaseMapModule,Kt as DESELECTED_FOREGROUND_COLOR,$t as DESELECTED_OUTLINE_COLOR,Zt as DESELECTED_ROUTE_FILTER,jt as DESELECTED_SECONDARY_COLOR,re as EventsModule,he as EventsProxy,Bi as FINISH_INDEX,z as GeoJSONSourceWithLayers,Pt as GeometriesModule,pe as HILLSHADE_SOURCE_ID,Bt as HillshadeModule,ki as INDEX_TYPE,Jt as MAJOR_DELAY_COLOR,Gi as MIDDLE_INDEX,ei as MINOR_DELAY_LABEL_COLOR,Qt as MODERATE_DELAY_COLOR,de as POI_SOURCE_ID,mt as POIsModule,lt as PlacesModule,Yt as ROUTE_LINE_FOREGROUND_COLOR,qt as ROUTE_LINE_FOREGROUND_WIDTH,zt as ROUTE_LINE_OUTLINE_COLOR,Ir as RoutingModule,Xt as SELECTED_ROUTE_FILTER,Wi as START_INDEX,Vi as STOP_DISPLAY_INDEX,k as StyleSourceWithLayers,fe as TRAFFIC_FLOW_SOURCE_ID,ye as TRAFFIC_INCIDENTS_SOURCE_ID,br as TomTomMap,W as TomTomMapSource,Fr as TrafficFlowModule,Hr as TrafficIncidentsModule,ti as UNKNOWN_DELAY_COLOR,Rt as baseMapLayerGroupNames,tt as buildPlaceTitle,xt as buildReachableRangeFeatures,er as buildRoutingLayers,Jr as calculateFittingBBox,Xr as calculatePaddedBBox,Zr as calculatePaddedCenter,wt as colorPaletteIDs,vt as colorPalettes,tr as defaultRoutingLayers,B as filterLayersBySources,Gt as geometryThemes,rt as getIconIDForPlace,st as getPOILayerCategoryForPlace,ft as getStyleCategories,Ae as mapDisplayPoiCategoryMappings,ue as mapStyleLayerIDs,_t as poiCategoryGroups,me as poiLayerIDs,nt as preparePlacesForDisplay,Ft as prepareReachableRangesForDisplay,Wt as reachableRangeGeometryConfig,Wr as roadCategories,Br as serviceRoadSubCategories,kt as standardStyleIDs,Gr as streetRoadSubCategories,Vt as styleModules,Ht as themedGeometryConfig,Ee as toBaseMapPOICategory,at as toPlaces};
2
+ //# sourceMappingURL=map.es.js.map