solid-map-gl 1.4.3 → 1.4.4

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.
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{effect,setAttribute,className,classList,style,createComponent,memo,insert,template}from"solid-js/web";import{createContext,useContext,createUniqueId,createSignal,onMount,createEffect,onCleanup,untrack}from"solid-js";const mapEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onPreClick","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel","onWheel","onResize","onRemove","onTouchMove","onMoveStart","onMove","onMoveEnd","onDragStart","onDrag","onDragEnd","onZoomStart","onZoom","onZoomEnd","onRotateStart","onRotate","onRotatEnd","onPitchStart","onPitch","onPitchEnd","onBoxZoomStart","onBoxZoomEnd","onBoxZoomCancel","onWebglContextLost","onWebglContextRestored","onLoad","onRender","onIdle","onError","onData","onStyleData","onSourceData","onDataLoading","onStyleDataLoading","onSourceDataLoading","onStyleImageMissing"],layerEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],mapBase="mapbox://styles/mapbox",gitBase="https://raw.githubusercontent.com/",gishub="https://raw.githubusercontent.com/GIShub4/map-styles/main/",vectorStyleList={mb:{light:mapBase+"/light-v10",dark:mapBase+"/dark-v10",street:mapBase+"/streets-v11",outdoor:mapBase+"/outdoors-v11",sat:mapBase+"/satellite-v9",sat_street:mapBase+"/satellite-streets-v11",nav:mapBase+"/navigation-guidance-day-v4",nav_night:mapBase+"/navigation-guidance-night-v4",basic:mapBase+"/cjf4m44iw0uza2spb3q0a7s41",monochrome:mapBase+"/cjv6rzz4j3m4b1fqcchuxclhb",leshine:mapBase+"/cjcunv5ae262f2sm9tfwg8i0w",icecream:mapBase+"/cj7t3i5yj0unt2rmt3y4b5e32",cali:mapBase+"/cjerxnqt3cgvp2rmyuxbeqme7",northstar:mapBase+"/cj44mfrt20f082snokim4ungi",mineral:mapBase+"/cjtep62gq54l21frr1whf27ak",moonlight:mapBase+"/cj3kbeqzo00022smj7akz3o1e",frank:mapBase+"-map-design/ckshxkppe0gge18nz20i0nrwq",minimo:mapBase+"-map-design/cksjc2nsq1bg117pnekb655h1",decimal:mapBase+"-map-design/ck4014y110wt61ctt07egsel6",standard:mapBase+"-map-design/ckr0svm3922ki18qntevm857n",blueprint:mapBase+"-map-design/cks97e1e37nsd17nzg7p0308g",bubble:mapBase+"-map-design/cksysy2nl62zp17quosctdtcc",pencil:mapBase+"-map-design/cks9iema71es417mlrft4go2k",swiss_ski:gitBase+"mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json",vintage:gitBase+"mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json",whaam:gitBase+"mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json",neon:gitBase+"NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json",camoflauge:gitBase+"jingsam/mapbox-gl-styles/master/Camouflage.json",emerald:gitBase+"jingsam/mapbox-gl-styles/master/Emerald.json",runner:gitBase+"jingsam/mapbox-gl-styles/master/Runner.json",x_ray:gitBase+"jingsam/mapbox-gl-styles/master/X-ray.json"},esri:{blueprint:gishub+"esri:blueprint.json",charted_territory:gishub+"esri:charted-territory.json",colored_pencil:gishub+"esri:colored-pencil.json",community:gishub+"esri:community.json",mid_century:gishub+"esri:mid-century.json",modern_antique:gishub+"esri:modern-antique.json",nat_geo:gishub+"esri:national-geographic.json",newspaper:gishub+"esri:newspaper.json",open_street_map:gishub+"esri:open-street-map.json",light_gray_canvas:gishub+"esri:light-gray-canvas.json",dark_gray_canvas:gishub+"esri:dark-gray-canvas.json",human_geo_light:gishub+"esri:human-geography-light.json",human_geo_dark:gishub+"esri:human-geography-dark.json",world_navigation:gishub+"esri:world-navigation.json",world_street:gishub+"esri:world-street.json",world_street_night:gishub+"esri:world-street-night.json",world_terrain:gishub+"esri:world-terrain.json",world_terrain_hybrid:gishub+"esri:world-terrain-hybrid.json",world_topographic:gishub+"esri:world-topographic.json",chromium:gishub+"esri:chromium.json",dreamcatcher:gishub+"esri:dreamcatcher.json",seahaven:gishub+"esri:seahaven.json",sangria:gishub+"esri:sangria.json",mercurial:gishub+"esri:mercurial.json",imagery:gishub+"esri:imagery.json",imagery_hybrid:gishub+"esri:imagery-hybrid.json",firefly:gishub+"esri:firefly.json",firefly_hybrid:gishub+"esri:firefly-hybrid.json",oceans:gishub+"esri:oceans.json"}},carto="https://{s}.basemaps.cartocdn.com/rastertiles/",stamen="https://stamen-tiles-{s}.a.ssl.fastly.net/",tf="https://{s}.tile.thunderforest.com/",rasterStyleList={osm:{org:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",human:"https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",cycle:"https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",topo:"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",_copy:'<a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap</a>'},carto:{voyager:carto+"voyager_labels_under/{z}/{x}/{y}{r}.png",positron:carto+"light_all/{z}/{x}/{y}{r}.png",dark:carto+"dark_all/{z}/{x}/{y}{r}.png",_copy:'<a href="https://carto.com/attribution" target="_blank">&copy; Carto</a>'},stamen:{toner:stamen+"toner/{z}/{x}/{y}{r}.png",toner_lite:stamen+"toner-lite/{z}/{x}/{y}{r}.png",watercolor:stamen+"watercolor/{z}/{x}/{y}.png",terrain:stamen+"terrain/{z}/{x}/{y}{r}.png",_copy:'<a href="https://stamen.com/privacy-policy" target="_blank">&copy; Stamen Design</a>'},tf:{cycle:tf+"cycle/{z}/{x}/{y}{r}.png?apikey={apikey}",trans:tf+"transport/{z}/{x}/{y}{r}.png?apikey={apikey}",trans_dark:tf+"transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}",landscape:tf+"landscape/{z}/{x}/{y}{r}.png?apikey={apikey}",outdoors:tf+"outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}",neighbourhood:tf+"neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}",spinal:tf+"spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}",pioneer:tf+"pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}",atlas:tf+"atlas/{z}/{x}/{y}{r}.png?apikey={apikey}",mobile:tf+"mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}",_copy:'<a href="https://thunderforest.com/privacy" target="_blank">&copy; Thunderforest</a>'}},_tmpl$$2=template("<div></div>",2),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=n=>{n.id=n.id||createUniqueId();const[t,o]=createSignal(),[r,i]=createSignal("flyTo"),[a,l]=createSignal("undefined"!=typeof window&&(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark"))),c=(e,t)=>n.debug&&console.debug(e+": %c"+t,"color: #00F"),p=(()=>{const s=_tmpl$$2.cloneNode(!0);return effect(e=>{var t=n.id,a=n?.class,o=n?.classList,r={position:"absolute",inset:0,...n.style};return t!==e._v$&&setAttribute(s,"id",e._v$=t),a!==e._v$2&&className(s,e._v$2=a),e._v$3=classList(s,o,e._v$3),e._v$4=style(s,r,e._v$4),e},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),s})(),u=(e,t)=>{t=a()&&t||e;return"string"==typeof t||t instanceof String?t?.split(":").reduce((e,t)=>e&&e[t],vectorStyleList)||t:t||{version:8,sources:{},layers:[]}};return onMount(async()=>{n.asMapLibre?await import("maplibre-gl"):await import("mapbox-gl");var e=window[n.asMapLibre?"maplibregl":"mapboxgl"];n.asMapLibre?await import("./maplibre-gl-bbf07c9f.js"):await import("./mapbox-gl-442726f9.js");const s=new e.Map({...n.options,style:u(n.options.style,n.darkStyle),container:p,interactive:!!n.onViewportChange,bounds:n.viewport?.bounds,center:n.viewport?.center,zoom:n.viewport?.zoom||null,pitch:n.viewport?.pitch||null,bearing:n.viewport?.bearing||null,fitBoundsOptions:{padding:n.viewport?.padding}}),t=(s.isMapLibre=n.asMapLibre,s.debug=n.debug,s.once("load",()=>o(s)),new ResizeObserver(()=>s.resize())),a=(createEffect(()=>n.disableResize?t.disconnect():t.observe(p)),window.matchMedia("(prefers-color-scheme: dark)"));a.addEventListener("change",()=>l(a.matches)),new MutationObserver(()=>l(document.body.classList.contains("dark"))).observe(document.body,{attributes:!0}),createEffect(()=>mapEvents.forEach(e=>{const a=n[e];if(a){const o=e.slice(2).toLowerCase();if("function"==typeof a){const t=e=>a(e);s.on(o,t),onCleanup(()=>s.off(o,t))}else Object.keys(a).forEach(t=>{const e=e=>a[t](e);s.on(o,t,e),onCleanup(()=>s.off(o,t,e))})}})),createEffect(()=>{s.showTileBoundaries=n.showTileBoundaries,s.showTerrainWireframe=n.showTerrainWireframe,s.showPadding=n.showPadding,s.showCollisionBoxes=n.showCollisionBoxes,s.showOverdrawInspector=n.showOverdrawInspector}),createEffect(e=>{if(n.cursorStyle!==e)return c("Update Cursor to",n.cursorStyle),s.getCanvas().style.cursor=n.cursorStyle,n.cursorStyle}),createEffect(e=>{if(n.transitionType!==e)return c("Update Transition to",n.transitionType),i(n.transitionType),n.transitionType}),createEffect(e=>{if(n.options?.projection!==e)return c("Update Projection to",n.options?.projection.name),s.setProjection(n.options?.projection),n.options?.projection}),createEffect(e=>{var o=u(n.options?.style,n.darkStyle);if(o!==e){let t=[],a={};if(c("Update Mapstyle to",o),s.isStyleLoaded()){const r=s.getStyle();t=r.layers.filter(e=>e.id.startsWith("cl-")),a=Object.keys(r.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:r.sources[t]}),{})}return s.setStyle(o),s.once("styledata",()=>{var e=s.getStyle();s.setStyle({...e,sources:{...e.sources,...a},layers:[...e.layers,...t]})}),o}},n.options?.style),createEffect(()=>{const t={id:null,center:s.getCenter(),zoom:s.getZoom(),pitch:s.getPitch(),bearing:s.getBearing(),padding:n.viewport?.padding,bounds:n.viewport?.bounds},e=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange({...t,id:n.id}),i("jumpTo")},a=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange(t),i(n.transitionType)};s.on("move",e).on("moveend",a),onCleanup(()=>s.off("move",e).off("moveend",a))}),createEffect(e=>(n.viewport?.bounds!=e&&n.onViewportChange({...n.viewport,...s.cameraForBounds(n.viewport?.bounds,{padding:n.viewport?.padding})}),n.viewport?.bounds),n.viewport?.bounds),createEffect(()=>{if(n.id!==n.viewport?.id){var e={...n.viewport,padding:n.viewport?.padding||0};switch(untrack(r)){case"easeTo":s.stop().easeTo(e);case"jumpTo":s.stop().jumpTo(e);default:s.stop().flyTo(e)}}})}),createComponent(MapContext.Provider,{value:t,get children(){return[memo(()=>{return memo(()=>!!t(),!0)()&&((e=_tmpl$$2.cloneNode(!0)).style.setProperty("position","absolute"),e.style.setProperty("z-index","10"),insert(e,()=>n.children),e);var e}),p]}})},SourceContext=createContext(),useSourceId=()=>useContext(SourceContext),Source=a=>{const o=useMap(),r=(a.id=a.id||createUniqueId(),e=>{var t=e?.split(":").reduce((e,t)=>e&&e[t],rasterStyleList);return t?{...a.source,url:"",tiles:[t.replace("{apikey}",a.source.apikey).replace("{r}",1<window.devicePixelRatio?"@2x":"")],attribution:rasterStyleList[e.split(":")[0]]._copy}:a.source});return onCleanup(()=>{o().getStyle().layers.forEach(e=>e.source===a.id&&o().removeLayer(e.id)),o().getSource(a.id)&&o().removeSource(a.id)}),createEffect(()=>{var e=o().getSource(a.id);if(e&&("geojson"===a.source.type&&a.source.data&&e.setData(a.source.data),"image"===a.source.type&&(a.source.url||a.source.coordinates)&&e.updateImage(a.source.url,a.source.coordinates),"vector"===a.source.type&&(a.source.url||a.source.tiles)&&(a.source.url?e.setUrl(a.source.url):e.setTiles(a.source.tiles)),"raster"===a.source.type&&(a.source.url||a.source.tiles))){const t=r(a.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),e._tileJSONRequest?.cancel(),e.url=t.url,e.scheme=t.scheme,e._options={...e._options,...t},o().style._sourceCaches["other:"+a.id]?.clearTiles(),e.load()}}),createEffect(()=>{const t=r(a.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),o().getSource(a.id)||o().addSource(a.id,t)}),createComponent(SourceContext.Provider,{get value(){return a.id},get children(){return a.children}})},diff=(o={},r={})=>{return[...new Set([...Object.keys(o),...Object.keys(r)])].reduce((e,t)=>{var a=o[t];return a!==r[t]&&e.push([t,a]),e},[])},Layer=o=>{const r=useMap(),t=useSourceId();return o.id=o.id||createUniqueId(),onCleanup(()=>r().getLayer(o.id)&&r().removeLayer(o.id)),createEffect(()=>layerEvents.forEach(t=>{if(o[t]){const e=t.slice(2).toLowerCase(),a=e=>o[t](e);r()?.on(e,o.id,a),onCleanup(()=>r()?.off(e,o.id,a))}})),createEffect(e=>{if(o.style&&r().style&&r().getSource(t)&&r().getLayer(o.id))return o.style.layout!==e?.layout&&diff(o.style.layout,e?.layout).forEach(([e,t])=>r().setLayoutProperty(o.id,e,t,{validate:!1})),o.style.paint!==e?.paint&&diff(o.style.paint,e?.paint).forEach(([e,t])=>r().setPaintProperty(o.id,e,t,{validate:!1})),o.style.minzoom===e?.minzoom&&o.style.maxzoom===e?.maxzoom||r().setLayerZoomRange(o.id,o.style.minzoom,o.style.maxzoom),o.style.filter!==e?.filter&&r().setFilter(o.id,o.style.filter,{validate:!1}),o.style},o.style),createEffect(e=>{if(void 0!==o.visible&&o.visible!==e&&r().getSource(t)&&r().getLayer(o.id))return r().setLayoutProperty(o.id,"visibility",o.visible?"visible":"none",{validate:!1}),o.visible},o.visible),createEffect(async()=>{o.filter&&(r().isStyleLoaded()||await r().once("styledata"),r().setFilter(o.id,o.filter))}),createEffect(async()=>{o.featureState&&o.featureState.id&&(r().isStyleLoaded()||await r().once("styledata"),r().removeFeatureState({source:t,sourceLayer:o.style["source-layer"]}),r().setFeatureState({source:t,sourceLayer:o.style["source-layer"],id:o.featureState.id},o.featureState.state))}),createEffect(()=>{r().getLayer(o.id)||r().addLayer(o.customLayer||{...o.style,id:o.id,source:t,metadata:{smg:{beforeType:o.beforeType,beforeId:o.beforeId}}},o.beforeType?r()?.getStyle().layers.find(e=>e.type===o.beforeType)?.id:o.beforeId)}),o.children},Atmosphere=e=>{const t=useMap();return createEffect(()=>t().setFog(e.style||{})),onCleanup(()=>t().setFog(null)),createEffect(()=>{void 0!==e.visible&&t().setFog(e.visible?e.style||{}:null)}),e.children},Terrain=e=>{const t=useMap();let a=useSourceId();return createEffect(()=>{a||(a=createUniqueId(),t().addSource(a,t().isMapLibre?{type:"raster-dem",url:"https://demotiles.maplibre.org/terrain-tiles/tiles.json",tileSize:256}:{type:"raster-dem",url:"mapbox://mapbox.terrain-rgb",tileSize:512,maxzoom:14})),t().setTerrain({exaggeration:e.exaggeration||1,source:a})}),onCleanup(()=>t().setTerrain(null)),createEffect(()=>{void 0!==e.visible&&t().setTerrain(e.visible?{exaggeration:e.exaggeration||1,source:a}:null)}),e.children},Control=o=>{const t=useMap(),[e,r]=createSignal(null);return createEffect(async()=>{t().isMapLibre?await import("maplibre-gl"):await import("mapbox-gl");const a=window[t().isMapLibre?"maplibregl":"mapboxgl"];var e=((e,t)=>{if(o.custom)return new o.custom(t);switch(e){case"navigation":return new a.NavigationControl(t);case"scale":return new a.ScaleControl(t);case"attribution":return new a.AttributionControl(t);case"geolocate":return new a.GeolocateControl(t);case"fullscreen":return new a.FullscreenControl;default:throw new Error("Unknown control type: "+e)}})(o.type,o.options);e&&t()?.addControl(e,o.position),r(e)}),onCleanup(()=>t().removeControl(e())),o.children},_tmpl$$1=template("<div></div>",2),Marker=a=>{const o=useMap();let r=null,s=null;return createEffect(async()=>{o().isMapLibre?await import("maplibre-gl"):await import("mapbox-gl");var e,t=window[o().isMapLibre?"maplibregl":"mapboxgl"];r||(a.children&&(s=new t.Popup(a.options.popup).setDOMContent((e=_tmpl$$1.cloneNode(!0),insert(e,()=>a.children),e))),r=new t.Marker(a.options).setLngLat(a.lngLat).setPopup(s).addTo(o()),a.openPopup&&r.togglePopup())}),onCleanup(()=>r?.remove()),createEffect(()=>r?.setLngLat(a.lngLat)),createEffect(()=>{return s?.setDOMContent((e=_tmpl$$1.cloneNode(!0),insert(e,()=>a.children),e));var e}),[]},_tmpl$=template("<div></div>",2),Popup=t=>{const a=useMap();let o=null;return createEffect(async()=>{a().isMapLibre?await import("maplibre-gl"):await import("mapbox-gl");var e=window[a().isMapLibre?"maplibregl":"mapboxgl"];o=o||new e.Popup(t.options).setLngLat(t.lngLat).setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e)).addTo(a())}),onCleanup(()=>o.remove()),createEffect(()=>o?.setLngLat(t.lngLat)),createEffect(()=>{return o?.setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e));var e}),[]},Image=a=>{const o=useMap();return onCleanup(()=>o().hasImage(a.id)&&o().removeImage(a.id)),createEffect(async()=>{a.image&&a.url||(a.url?o().loadImage(a.url,(e,t)=>{if(e)throw e;o().hasImage(a.id)||o().updateImage(a.id,t)}):o().style&&o().hasImage(a.id)&&o().updateImage(a.id,a.image))}),createEffect(()=>{a.url?o().loadImage(a.url,(e,t)=>!o().hasImage(a.id)&&o().addImage(a.id,t)):o().hasImage(a.id)||o().addImage(a.id,a.image,a.options)}),[]},lerp=(a,o,r)=>a.map((e,t)=>(1-r)*a[t]+r*o[t]),slerp=(a,o,r)=>{return a.map((e,t)=>Math.sin(.075*(1-r))/Math.sin(.075)*a[t]+Math.sin(.075*r)/Math.sin(.075)*o[t])},easeQuad={in:e=>e*e,out:e=>1-(1-e)*(1-e),inOut:e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2},Camera=a=>{const n=useMap();let o=.1,r=!1;const s=e=>{a.animate&&window.requestAnimationFrame(s);var t=[a.translate.start,a.translate.end,a.translate.easing?easeQuad[a.translate.easing](o):o];(async([e,t,a],o)=>{n().isMapLibre?await import("maplibre-gl"):await import("mapbox-gl");var r=window[n().isMapLibre?"maplibregl":"mapboxgl"],s=n().getFreeCameraOptions();s.position=r.MercatorCoordinate.fromLngLat([e,t],a),s.lookAtPoint(o),n().setFreeCameraOptions(s)})(("line"===a.translate.type?lerp:slerp)(...t),a.translate.target),!a.translate.loop&&(1<o||o<0)&&(r=!r),o=r?o-.001:o+.001};return createEffect(async()=>{a.animate&&window.requestAnimationFrame(s)}),a.children};export{Atmosphere,Camera,Control,Image,Layer,Marker,Popup,Source,Terrain,MapGL as default,useMap,useSourceId};
1
+ import{effect,setAttribute,className,classList,style,createComponent,memo,insert,template}from"solid-js/web";import{createContext,useContext,createUniqueId,createSignal,onMount,createEffect,onCleanup,untrack}from"solid-js";const getLibrary=async e=>{if(e)try{return await import("maplibre-gl"),await import("./maplibre-gl-bbf07c9f.js"),window.maplibregl}catch(e){}else try{return await import("mapbox-gl"),await import("./mapbox-gl-442726f9.js"),window.mapboxgl}catch(e){}},mapEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onPreClick","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel","onWheel","onResize","onRemove","onTouchMove","onMoveStart","onMove","onMoveEnd","onDragStart","onDrag","onDragEnd","onZoomStart","onZoom","onZoomEnd","onRotateStart","onRotate","onRotatEnd","onPitchStart","onPitch","onPitchEnd","onBoxZoomStart","onBoxZoomEnd","onBoxZoomCancel","onWebglContextLost","onWebglContextRestored","onLoad","onRender","onIdle","onError","onData","onStyleData","onSourceData","onDataLoading","onStyleDataLoading","onSourceDataLoading","onStyleImageMissing"],layerEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],mapBase="mapbox://styles/mapbox",gitBase="https://raw.githubusercontent.com/",gishub="https://raw.githubusercontent.com/GIShub4/map-styles/main/",vectorStyleList={mb:{light:mapBase+"/light-v10",dark:mapBase+"/dark-v10",street:mapBase+"/streets-v11",outdoor:mapBase+"/outdoors-v11",sat:mapBase+"/satellite-v9",sat_street:mapBase+"/satellite-streets-v11",nav:mapBase+"/navigation-guidance-day-v4",nav_night:mapBase+"/navigation-guidance-night-v4",basic:mapBase+"/cjf4m44iw0uza2spb3q0a7s41",monochrome:mapBase+"/cjv6rzz4j3m4b1fqcchuxclhb",leshine:mapBase+"/cjcunv5ae262f2sm9tfwg8i0w",icecream:mapBase+"/cj7t3i5yj0unt2rmt3y4b5e32",cali:mapBase+"/cjerxnqt3cgvp2rmyuxbeqme7",northstar:mapBase+"/cj44mfrt20f082snokim4ungi",mineral:mapBase+"/cjtep62gq54l21frr1whf27ak",moonlight:mapBase+"/cj3kbeqzo00022smj7akz3o1e",frank:mapBase+"-map-design/ckshxkppe0gge18nz20i0nrwq",minimo:mapBase+"-map-design/cksjc2nsq1bg117pnekb655h1",decimal:mapBase+"-map-design/ck4014y110wt61ctt07egsel6",standard:mapBase+"-map-design/ckr0svm3922ki18qntevm857n",blueprint:mapBase+"-map-design/cks97e1e37nsd17nzg7p0308g",bubble:mapBase+"-map-design/cksysy2nl62zp17quosctdtcc",pencil:mapBase+"-map-design/cks9iema71es417mlrft4go2k",swiss_ski:gitBase+"mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json",vintage:gitBase+"mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json",whaam:gitBase+"mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json",neon:gitBase+"NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json",camoflauge:gitBase+"jingsam/mapbox-gl-styles/master/Camouflage.json",emerald:gitBase+"jingsam/mapbox-gl-styles/master/Emerald.json",runner:gitBase+"jingsam/mapbox-gl-styles/master/Runner.json",x_ray:gitBase+"jingsam/mapbox-gl-styles/master/X-ray.json"},esri:{blueprint:gishub+"esri:blueprint.json",charted_territory:gishub+"esri:charted-territory.json",colored_pencil:gishub+"esri:colored-pencil.json",community:gishub+"esri:community.json",mid_century:gishub+"esri:mid-century.json",modern_antique:gishub+"esri:modern-antique.json",nat_geo:gishub+"esri:national-geographic.json",newspaper:gishub+"esri:newspaper.json",open_street_map:gishub+"esri:open-street-map.json",light_gray_canvas:gishub+"esri:light-gray-canvas.json",dark_gray_canvas:gishub+"esri:dark-gray-canvas.json",human_geo_light:gishub+"esri:human-geography-light.json",human_geo_dark:gishub+"esri:human-geography-dark.json",world_navigation:gishub+"esri:world-navigation.json",world_street:gishub+"esri:world-street.json",world_street_night:gishub+"esri:world-street-night.json",world_terrain:gishub+"esri:world-terrain.json",world_terrain_hybrid:gishub+"esri:world-terrain-hybrid.json",world_topographic:gishub+"esri:world-topographic.json",chromium:gishub+"esri:chromium.json",dreamcatcher:gishub+"esri:dreamcatcher.json",seahaven:gishub+"esri:seahaven.json",sangria:gishub+"esri:sangria.json",mercurial:gishub+"esri:mercurial.json",imagery:gishub+"esri:imagery.json",imagery_hybrid:gishub+"esri:imagery-hybrid.json",firefly:gishub+"esri:firefly.json",firefly_hybrid:gishub+"esri:firefly-hybrid.json",oceans:gishub+"esri:oceans.json"}},carto="https://{s}.basemaps.cartocdn.com/rastertiles/",stamen="https://stamen-tiles-{s}.a.ssl.fastly.net/",tf="https://{s}.tile.thunderforest.com/",rasterStyleList={osm:{org:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",human:"https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",cycle:"https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",topo:"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",_copy:'<a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap</a>'},carto:{voyager:carto+"voyager_labels_under/{z}/{x}/{y}{r}.png",positron:carto+"light_all/{z}/{x}/{y}{r}.png",dark:carto+"dark_all/{z}/{x}/{y}{r}.png",_copy:'<a href="https://carto.com/attribution" target="_blank">&copy; Carto</a>'},stamen:{toner:stamen+"toner/{z}/{x}/{y}{r}.png",toner_lite:stamen+"toner-lite/{z}/{x}/{y}{r}.png",watercolor:stamen+"watercolor/{z}/{x}/{y}.png",terrain:stamen+"terrain/{z}/{x}/{y}{r}.png",_copy:'<a href="https://stamen.com/privacy-policy" target="_blank">&copy; Stamen Design</a>'},tf:{cycle:tf+"cycle/{z}/{x}/{y}{r}.png?apikey={apikey}",trans:tf+"transport/{z}/{x}/{y}{r}.png?apikey={apikey}",trans_dark:tf+"transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}",landscape:tf+"landscape/{z}/{x}/{y}{r}.png?apikey={apikey}",outdoors:tf+"outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}",neighbourhood:tf+"neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}",spinal:tf+"spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}",pioneer:tf+"pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}",atlas:tf+"atlas/{z}/{x}/{y}{r}.png?apikey={apikey}",mobile:tf+"mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}",_copy:'<a href="https://thunderforest.com/privacy" target="_blank">&copy; Thunderforest</a>'}},_tmpl$$2=template("<div></div>",2),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=n=>{n.id=n.id||createUniqueId();const[t,a]=createSignal(),[o,r]=createSignal("flyTo"),[s,i]=createSignal("undefined"!=typeof window&&(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark"))),l=(e,t)=>n.debug&&console.debug(e+": %c"+t,"color: #00F"),c=(()=>{const s=_tmpl$$2.cloneNode(!0);return effect(e=>{var t=n.id,a=n?.class,o=n?.classList,r={position:"absolute",inset:0,...n.style};return t!==e._v$&&setAttribute(s,"id",e._v$=t),a!==e._v$2&&className(s,e._v$2=a),e._v$3=classList(s,o,e._v$3),e._v$4=style(s,r,e._v$4),e},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),s})(),p=(e,t)=>{t=s()&&t||e;return"string"==typeof t||t instanceof String?t?.split(":").reduce((e,t)=>e&&e[t],vectorStyleList)||t:t||{version:8,sources:{},layers:[]}};return onMount(async()=>{const s=new(await getLibrary(n.asMapLibre)).Map({...n.options,style:p(n.options.style,n.darkStyle),container:c,interactive:!!n.onViewportChange,bounds:n.viewport?.bounds,center:n.viewport?.center,zoom:n.viewport?.zoom||null,pitch:n.viewport?.pitch||null,bearing:n.viewport?.bearing||null,fitBoundsOptions:{padding:n.viewport?.padding}}),e=(s.isMapLibre=n.asMapLibre,s.debug=n.debug,s.once("load",()=>a(s)),new ResizeObserver(()=>s.resize())),t=(createEffect(()=>n.disableResize?e.disconnect():e.observe(c)),window.matchMedia("(prefers-color-scheme: dark)"));t.addEventListener("change",()=>i(t.matches)),new MutationObserver(()=>i(document.body.classList.contains("dark"))).observe(document.body,{attributes:!0}),createEffect(()=>mapEvents.forEach(e=>{const a=n[e];if(a){const o=e.slice(2).toLowerCase();if("function"==typeof a){const t=e=>a(e);s.on(o,t),onCleanup(()=>s.off(o,t))}else Object.keys(a).forEach(t=>{const e=e=>a[t](e);s.on(o,t,e),onCleanup(()=>s.off(o,t,e))})}})),createEffect(()=>{s.showTileBoundaries=n.showTileBoundaries,s.showTerrainWireframe=n.showTerrainWireframe,s.showPadding=n.showPadding,s.showCollisionBoxes=n.showCollisionBoxes,s.showOverdrawInspector=n.showOverdrawInspector}),createEffect(e=>{if(n.cursorStyle!==e)return l("Update Cursor to",n.cursorStyle),s.getCanvas().style.cursor=n.cursorStyle,n.cursorStyle}),createEffect(e=>{if(n.transitionType!==e)return l("Update Transition to",n.transitionType),r(n.transitionType),n.transitionType}),createEffect(e=>{if(n.options?.projection!==e)return l("Update Projection to",n.options?.projection.name),s.setProjection(n.options?.projection),n.options?.projection}),createEffect(e=>{var o=p(n.options?.style,n.darkStyle);if(o!==e){let t=[],a={};if(l("Update Mapstyle to",o),s.isStyleLoaded()){const r=s.getStyle();t=r.layers.filter(e=>e.id.startsWith("cl-")),a=Object.keys(r.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:r.sources[t]}),{})}return s.setStyle(o),s.once("styledata",()=>{var e=s.getStyle();s.setStyle({...e,sources:{...e.sources,...a},layers:[...e.layers,...t]})}),o}},n.options?.style),createEffect(()=>{const t={id:null,center:s.getCenter(),zoom:s.getZoom(),pitch:s.getPitch(),bearing:s.getBearing(),padding:n.viewport?.padding,bounds:n.viewport?.bounds},e=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange({...t,id:n.id}),r("jumpTo")},a=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange(t),r(n.transitionType)};s.on("move",e).on("moveend",a),onCleanup(()=>s.off("move",e).off("moveend",a))}),createEffect(e=>(n.viewport?.bounds!=e&&n.onViewportChange({...n.viewport,...s.cameraForBounds(n.viewport?.bounds,{padding:n.viewport?.padding})}),n.viewport?.bounds),n.viewport?.bounds),createEffect(()=>{if(n.id!==n.viewport?.id){var e={...n.viewport,padding:n.viewport?.padding||0};switch(untrack(o)){case"easeTo":s.stop().easeTo(e);case"jumpTo":s.stop().jumpTo(e);default:s.stop().flyTo(e)}}})}),createComponent(MapContext.Provider,{value:t,get children(){return[memo(()=>{return memo(()=>!!t(),!0)()&&((e=_tmpl$$2.cloneNode(!0)).style.setProperty("position","absolute"),e.style.setProperty("z-index","10"),insert(e,()=>n.children),e);var e}),c]}})},SourceContext=createContext(),useSourceId=()=>useContext(SourceContext),Source=a=>{const o=useMap(),r=(a.id=a.id||createUniqueId(),e=>{var t=e?.split(":").reduce((e,t)=>e&&e[t],rasterStyleList);return t?{...a.source,url:"",tiles:[t.replace("{apikey}",a.source.apikey).replace("{r}",1<window.devicePixelRatio?"@2x":"")],attribution:rasterStyleList[e.split(":")[0]]._copy}:a.source});return onCleanup(()=>{o().getStyle().layers.forEach(e=>e.source===a.id&&o().removeLayer(e.id)),o().getSource(a.id)&&o().removeSource(a.id)}),createEffect(()=>{var e=o().getSource(a.id);if(e&&("geojson"===a.source.type&&a.source.data&&e.setData(a.source.data),"image"===a.source.type&&(a.source.url||a.source.coordinates)&&e.updateImage(a.source.url,a.source.coordinates),"vector"===a.source.type&&(a.source.url||a.source.tiles)&&(a.source.url?e.setUrl(a.source.url):e.setTiles(a.source.tiles)),"raster"===a.source.type&&(a.source.url||a.source.tiles))){const t=r(a.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),e._tileJSONRequest?.cancel(),e.url=t.url,e.scheme=t.scheme,e._options={...e._options,...t},o().style._sourceCaches["other:"+a.id]?.clearTiles(),e.load()}}),createEffect(()=>{const t=r(a.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),o().getSource(a.id)||o().addSource(a.id,t)}),createComponent(SourceContext.Provider,{get value(){return a.id},get children(){return a.children}})},diff=(o={},r={})=>{return[...new Set([...Object.keys(o),...Object.keys(r)])].reduce((e,t)=>{var a=o[t];return a!==r[t]&&e.push([t,a]),e},[])},Layer=o=>{const r=useMap(),t=useSourceId();return o.id=o.id||createUniqueId(),onCleanup(()=>r().getLayer(o.id)&&r().removeLayer(o.id)),createEffect(()=>layerEvents.forEach(t=>{if(o[t]){const e=t.slice(2).toLowerCase(),a=e=>o[t](e);r()?.on(e,o.id,a),onCleanup(()=>r()?.off(e,o.id,a))}})),createEffect(e=>{if(o.style&&r().style&&r().getSource(t)&&r().getLayer(o.id))return o.style.layout!==e?.layout&&diff(o.style.layout,e?.layout).forEach(([e,t])=>r().setLayoutProperty(o.id,e,t,{validate:!1})),o.style.paint!==e?.paint&&diff(o.style.paint,e?.paint).forEach(([e,t])=>r().setPaintProperty(o.id,e,t,{validate:!1})),o.style.minzoom===e?.minzoom&&o.style.maxzoom===e?.maxzoom||r().setLayerZoomRange(o.id,o.style.minzoom,o.style.maxzoom),o.style.filter!==e?.filter&&r().setFilter(o.id,o.style.filter,{validate:!1}),o.style},o.style),createEffect(e=>{if(void 0!==o.visible&&o.visible!==e&&r().getSource(t)&&r().getLayer(o.id))return r().setLayoutProperty(o.id,"visibility",o.visible?"visible":"none",{validate:!1}),o.visible},o.visible),createEffect(async()=>{o.filter&&(r().isStyleLoaded()||await r().once("styledata"),r().setFilter(o.id,o.filter))}),createEffect(async()=>{o.featureState&&o.featureState.id&&(r().isStyleLoaded()||await r().once("styledata"),r().removeFeatureState({source:t,sourceLayer:o.style["source-layer"]}),r().setFeatureState({source:t,sourceLayer:o.style["source-layer"],id:o.featureState.id},o.featureState.state))}),createEffect(()=>{r().getLayer(o.id)||r().addLayer(o.customLayer||{...o.style,id:o.id,source:t,metadata:{smg:{beforeType:o.beforeType,beforeId:o.beforeId}}},o.beforeType?r()?.getStyle().layers.find(e=>e.type===o.beforeType)?.id:o.beforeId)}),o.children},Atmosphere=e=>{const t=useMap();return createEffect(()=>t().setFog(e.style||{})),onCleanup(()=>t().setFog(null)),createEffect(()=>{void 0!==e.visible&&t().setFog(e.visible?e.style||{}:null)}),e.children},Terrain=e=>{const t=useMap();let a=useSourceId();return createEffect(()=>{a||(a=createUniqueId(),t().addSource(a,t().isMapLibre?{type:"raster-dem",url:"https://demotiles.maplibre.org/terrain-tiles/tiles.json",tileSize:256}:{type:"raster-dem",url:"mapbox://mapbox.terrain-rgb",tileSize:512,maxzoom:14})),t().setTerrain({exaggeration:e.exaggeration||1,source:a})}),onCleanup(()=>t().setTerrain(null)),createEffect(()=>{void 0!==e.visible&&t().setTerrain(e.visible?{exaggeration:e.exaggeration||1,source:a}:null)}),e.children},Control=o=>{const t=useMap(),[e,r]=createSignal(null);return createEffect(async()=>{t().isMapLibre?await import("maplibre-gl"):await import("mapbox-gl");const a=window[t().isMapLibre?"maplibregl":"mapboxgl"];var e=((e,t)=>{if(o.custom)return new o.custom(t);switch(e){case"navigation":return new a.NavigationControl(t);case"scale":return new a.ScaleControl(t);case"attribution":return new a.AttributionControl(t);case"geolocate":return new a.GeolocateControl(t);case"fullscreen":return new a.FullscreenControl;default:throw new Error("Unknown control type: "+e)}})(o.type,o.options);e&&t()?.addControl(e,o.position),r(e)}),onCleanup(()=>t().removeControl(e())),o.children},_tmpl$$1=template("<div></div>",2),Marker=a=>{const o=useMap();let r=null,s=null;return createEffect(async()=>{var e,t;r||(e=await getLibrary(o().isMapLibre),a.children&&(s=new e.Popup(a.options.popup).setDOMContent((t=_tmpl$$1.cloneNode(!0),insert(t,()=>a.children),t))),r=new e.Marker(a.options).setLngLat(a.lngLat).setPopup(s).addTo(o()),a.openPopup&&r.togglePopup())}),onCleanup(()=>r?.remove()),createEffect(()=>r?.setLngLat(a.lngLat)),createEffect(()=>{return s?.setDOMContent((e=_tmpl$$1.cloneNode(!0),insert(e,()=>a.children),e));var e}),[]},_tmpl$=template("<div></div>",2),Popup=t=>{const a=useMap();let o=null;return createEffect(async()=>{var e;o||(e=await getLibrary(a().isMapLibre),o=new e.Popup(t.options).setLngLat(t.lngLat).setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e)).addTo(a()))}),onCleanup(()=>o.remove()),createEffect(()=>o?.setLngLat(t.lngLat)),createEffect(()=>{return o?.setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e));var e}),[]},Image=a=>{const o=useMap();return onCleanup(()=>o().hasImage(a.id)&&o().removeImage(a.id)),createEffect(async()=>{a.image&&a.url||(a.url?o().loadImage(a.url,(e,t)=>{if(e)throw e;o().hasImage(a.id)||o().updateImage(a.id,t)}):o().style&&o().hasImage(a.id)&&o().updateImage(a.id,a.image))}),createEffect(()=>{a.url?o().loadImage(a.url,(e,t)=>!o().hasImage(a.id)&&o().addImage(a.id,t)):o().hasImage(a.id)||o().addImage(a.id,a.image,a.options)}),[]},lerp=(a,o,r)=>a.map((e,t)=>(1-r)*a[t]+r*o[t]),slerp=(a,o,r)=>{return a.map((e,t)=>Math.sin(.075*(1-r))/Math.sin(.075)*a[t]+Math.sin(.075*r)/Math.sin(.075)*o[t])},easeQuad={in:e=>e*e,out:e=>1-(1-e)*(1-e),inOut:e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2},Camera=a=>{const n=useMap();let o=.1,r=!1;const s=e=>{a.animate&&window.requestAnimationFrame(s);var t=[a.translate.start,a.translate.end,a.translate.easing?easeQuad[a.translate.easing](o):o];(async([e,t,a],o)=>{var r=await getLibrary(n().isMapLibre),s=n().getFreeCameraOptions();s.position=r.MercatorCoordinate.fromLngLat([e,t],a),s.lookAtPoint(o),n().setFreeCameraOptions(s)})(("line"===a.translate.type?lerp:slerp)(...t),a.translate.target),!a.translate.loop&&(1<o||o<0)&&(r=!r),o=r?o-.001:o+.001};return createEffect(async()=>{a.animate&&window.requestAnimationFrame(s)}),a.children};export{Atmosphere,Camera,Control,Image,Layer,Marker,Popup,Source,Terrain,MapGL as default,useMap,useSourceId};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/mapStyles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Atmosphere/index.tsx","../../src/components/Terrain/index.tsx","../../src/components/Control/index.tsx","../../src/components/Marker/index.tsx","../../src/components/Popup/index.tsx","../../src/components/Image/index.tsx","../../src/components/Camera/index.tsx"],"sourcesContent":["const mapEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onPreClick',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n 'onWheel',\n 'onResize',\n 'onRemove',\n 'onTouchMove',\n 'onMoveStart',\n 'onMove',\n 'onMoveEnd',\n 'onDragStart',\n 'onDrag',\n 'onDragEnd',\n 'onZoomStart',\n 'onZoom',\n 'onZoomEnd',\n 'onRotateStart',\n 'onRotate',\n 'onRotatEnd',\n 'onPitchStart',\n 'onPitch',\n 'onPitchEnd',\n 'onBoxZoomStart',\n 'onBoxZoomEnd',\n 'onBoxZoomCancel',\n 'onWebglContextLost',\n 'onWebglContextRestored',\n 'onLoad',\n 'onRender',\n 'onIdle',\n 'onError',\n 'onData',\n 'onStyleData',\n 'onSourceData',\n 'onDataLoading',\n 'onStyleDataLoading',\n 'onSourceDataLoading',\n 'onStyleImageMissing',\n]\n\nconst layerEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n]\n\nexport { mapEvents, layerEvents }\n","const mapBase = 'mapbox://styles/mapbox'\nconst gitBase = 'https://raw.githubusercontent.com/'\nconst gishub = 'https://raw.githubusercontent.com/GIShub4/map-styles/main/'\n\nexport const vectorStyleList: object = {\n mb: {\n light: `${mapBase}/light-v10`,\n dark: `${mapBase}/dark-v10`,\n street: `${mapBase}/streets-v11`,\n outdoor: `${mapBase}/outdoors-v11`,\n sat: `${mapBase}/satellite-v9`,\n sat_street: `${mapBase}/satellite-streets-v11`,\n nav: `${mapBase}/navigation-guidance-day-v4`,\n nav_night: `${mapBase}/navigation-guidance-night-v4`,\n basic: `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n monochrome: `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n leshine: `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n icecream: `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n cali: `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n northstar: `${mapBase}/cj44mfrt20f082snokim4ungi`,\n mineral: `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n moonlight: `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n frank: `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n minimo: `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n decimal: `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n standard: `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n blueprint: `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n bubble: `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n pencil: `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n swiss_ski: `${gitBase}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n vintage: `${gitBase}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n whaam: `${gitBase}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n neon: `${gitBase}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n camoflauge: `${gitBase}jingsam/mapbox-gl-styles/master/Camouflage.json`,\n emerald: `${gitBase}jingsam/mapbox-gl-styles/master/Emerald.json`,\n runner: `${gitBase}jingsam/mapbox-gl-styles/master/Runner.json`,\n x_ray: `${gitBase}jingsam/mapbox-gl-styles/master/X-ray.json`,\n },\n esri: {\n blueprint: `${gishub}esri:blueprint.json`,\n charted_territory: `${gishub}esri:charted-territory.json`,\n colored_pencil: `${gishub}esri:colored-pencil.json`,\n community: `${gishub}esri:community.json`,\n mid_century: `${gishub}esri:mid-century.json`,\n modern_antique: `${gishub}esri:modern-antique.json`,\n nat_geo: `${gishub}esri:national-geographic.json`,\n newspaper: `${gishub}esri:newspaper.json`,\n open_street_map: `${gishub}esri:open-street-map.json`,\n light_gray_canvas: `${gishub}esri:light-gray-canvas.json`,\n dark_gray_canvas: `${gishub}esri:dark-gray-canvas.json`,\n human_geo_light: `${gishub}esri:human-geography-light.json`,\n human_geo_dark: `${gishub}esri:human-geography-dark.json`,\n world_navigation: `${gishub}esri:world-navigation.json`,\n world_street: `${gishub}esri:world-street.json`,\n world_street_night: `${gishub}esri:world-street-night.json`,\n world_terrain: `${gishub}esri:world-terrain.json`,\n world_terrain_hybrid: `${gishub}esri:world-terrain-hybrid.json`,\n world_topographic: `${gishub}esri:world-topographic.json`,\n chromium: `${gishub}esri:chromium.json`,\n dreamcatcher: `${gishub}esri:dreamcatcher.json`,\n seahaven: `${gishub}esri:seahaven.json`,\n sangria: `${gishub}esri:sangria.json`,\n mercurial: `${gishub}esri:mercurial.json`,\n imagery: `${gishub}esri:imagery.json`,\n imagery_hybrid: `${gishub}esri:imagery-hybrid.json`,\n firefly: `${gishub}esri:firefly.json`,\n firefly_hybrid: `${gishub}esri:firefly-hybrid.json`,\n oceans: `${gishub}esri:oceans.json`,\n },\n}\nconst carto = 'https://{s}.basemaps.cartocdn.com/rastertiles/'\nconst stamen = 'https://stamen-tiles-{s}.a.ssl.fastly.net/'\nconst tf = 'https://{s}.tile.thunderforest.com/'\n\nexport const rasterStyleList: object = {\n osm: {\n org: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n human: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n cycle: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n topo: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n _copy:\n '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">&copy; OpenStreetMap</a>',\n },\n carto: {\n voyager: `${carto}voyager_labels_under/{z}/{x}/{y}{r}.png`,\n positron: `${carto}light_all/{z}/{x}/{y}{r}.png`,\n dark: `${carto}dark_all/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://carto.com/attribution\" target=\"_blank\">&copy; Carto</a>',\n },\n stamen: {\n toner: `${stamen}toner/{z}/{x}/{y}{r}.png`,\n toner_lite: `${stamen}toner-lite/{z}/{x}/{y}{r}.png`,\n watercolor: `${stamen}watercolor/{z}/{x}/{y}.png`,\n terrain: `${stamen}terrain/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://stamen.com/privacy-policy\" target=\"_blank\">&copy; Stamen Design</a>',\n },\n tf: {\n cycle: `${tf}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans: `${tf}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans_dark: `${tf}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n landscape: `${tf}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n outdoors: `${tf}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n neighbourhood: `${tf}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n spinal: `${tf}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n pioneer: `${tf}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n atlas: `${tf}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n mobile: `${tf}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n _copy:\n '<a href=\"https://thunderforest.com/privacy\" target=\"_blank\">&copy; Thunderforest</a>',\n },\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n createUniqueId,\n untrack,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../mapStyles'\nimport type { MapboxMap, MapboxOptions } from 'mapbox-gl/src/ui/map'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\nimport type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js'\nimport type { PaddingOptions } from 'mapbox-gl/src/geo/edge_insets.js'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { JSX } from 'solid-js'\n\nexport type Viewport = {\n id?: string\n center?: LngLatLike\n bounds?: LngLatBounds\n zoom?: number\n pitch?: number\n bearing?: number\n padding?: PaddingOptions\n}\n\nconst MapContext = createContext<MapboxMap>()\n/** Provides the Mapbox Map Object */\nexport const useMap = (): MapboxMap => useContext(MapContext)\n\n/** Creates a new Map Container */\nexport const MapGL: Component<{\n id?: string\n /** Map Container CSS Style */\n style?: JSX.CSSProperties\n /** Map Container CSS Class */\n class?: string\n /** SolidJS Class List for Map Container */\n classList?: {\n [k: string]: boolean | undefined\n }\n /** Current Map View */\n viewport?: Viewport\n /** Mapbox Options\n * @see https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters\n */\n options?: MapboxOptions\n /** Type for pan, move and zoom transitions */\n transitionType?: 'flyTo' | 'easeTo' | 'jumpTo'\n /** Event listener for Viewport updates */\n onViewportChange?: (viewport: Viewport) => void\n /** Displays Map Tile Borders */\n showTileBoundaries?: boolean\n /** Displays Wireframe if Terrain is visible */\n showTerrainWireframe?: boolean\n /** Displays Borders if Padding is set */\n showPadding?: boolean\n /** Displays Label Collision Boxes */\n showCollisionBoxes?: boolean\n /** Displays all feature outlines even if normally not drawn by style rules */\n showOverdrawInspector?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n //** Dark Map Style */\n darkStyle?: StyleSpecification | string\n //** Disable automatic map resize */\n disableResize?: boolean\n //** Enable MapLibre support */\n asMapLibre?: boolean\n //** Debug Mode */\n debug?: boolean\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: any\n}> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n const [darkMode, setDarkMode] = createSignal(\n typeof window !== 'undefined' &&\n (window.matchMedia('(prefers-color-scheme: dark)').matches ||\n document.body.classList.contains('dark'))\n )\n\n const debug = (text, value) =>\n props.debug && console.debug(`${text}: %c${value}`, 'color: #00F')\n\n const mapRef = (\n <div\n id={props.id}\n class={props?.class}\n classList={props?.classList}\n style={{ position: 'absolute', inset: 0, ...props.style }}\n />\n )\n\n const getStyle = (light, dark) => {\n const style = darkMode() ? dark || light : light\n return typeof style === 'string' || style instanceof String\n ? style?.split(':').reduce((p, c) => p && p[c], vectorStyleList) || style\n : style || { version: 8, sources: {}, layers: [] }\n }\n\n onMount(async () => {\n props.asMapLibre ? await import('maplibre-gl') : await import('mapbox-gl')\n const mapLib = window[props.asMapLibre ? 'maplibregl' : 'mapboxgl']\n\n props.asMapLibre\n ? //@ts-ignore\n await import('maplibre-gl/dist/maplibre-gl.css')\n : //@ts-ignore\n await import('mapbox-gl/dist/mapbox-gl.css')\n\n const map: MapboxMap = new mapLib.Map({\n ...props.options,\n style: getStyle(props.options.style, props.darkStyle),\n container: mapRef,\n interactive: !!props.onViewportChange,\n bounds: props.viewport?.bounds,\n center: props.viewport?.center,\n zoom: props.viewport?.zoom || null,\n pitch: props.viewport?.pitch || null,\n bearing: props.viewport?.bearing || null,\n fitBoundsOptions: { padding: props.viewport?.padding },\n } as MapboxOptions)\n\n map.isMapLibre = props.asMapLibre\n map.debug = props.debug\n // map.container = containerRef\n\n map.once('load', () => setMapRoot(map))\n\n // onCleanup(() => map.remove())\n\n // Listen to map container size changes\n const resizeObserver = new ResizeObserver(() => map.resize())\n createEffect(() =>\n props.disableResize\n ? resizeObserver.disconnect()\n : resizeObserver.observe(mapRef as Element)\n )\n\n // Listen to dark theme changes\n const darkTheme = window.matchMedia('(prefers-color-scheme: dark)')\n darkTheme.addEventListener('change', () => setDarkMode(darkTheme.matches))\n\n const bodyClassObserver = new MutationObserver(() =>\n setDarkMode(document.body.classList.contains('dark'))\n )\n bodyClassObserver.observe(document.body, { attributes: true })\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n const prop = props[item]\n if (prop) {\n const event = item.slice(2).toLowerCase()\n if (typeof prop === 'function') {\n const callback = e => prop(e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\n } else {\n Object.keys(prop).forEach(layerId => {\n const callback = e => prop[layerId](e)\n map.on(event, layerId, callback)\n onCleanup(() => map.off(event, layerId, callback))\n })\n }\n }\n })\n )\n\n // Update debug features\n createEffect(() => {\n map.showTileBoundaries = props.showTileBoundaries\n map.showTerrainWireframe = props.showTerrainWireframe\n map.showPadding = props.showPadding\n map.showCollisionBoxes = props.showCollisionBoxes\n map.showOverdrawInspector = props.showOverdrawInspector\n })\n\n // Update cursor\n createEffect(prev => {\n if (props.cursorStyle === prev) return\n debug('Update Cursor to', props.cursorStyle)\n map.getCanvas().style.cursor = props.cursorStyle\n return props.cursorStyle\n })\n\n //Update transition type\n createEffect(prev => {\n if (props.transitionType === prev) return\n debug('Update Transition to', props.transitionType)\n setTransitionType(props.transitionType)\n return props.transitionType\n })\n\n // Update projection\n createEffect(prev => {\n if (props.options?.projection === prev) return\n debug('Update Projection to', props.options?.projection.name)\n map.setProjection(props.options?.projection)\n return props.options?.projection\n })\n\n // Update map style\n createEffect(prev => {\n const style = getStyle(props.options?.style, props.darkStyle)\n if (style === prev) return\n let oldLayers = []\n let oldSources = {}\n debug('Update Mapstyle to', style)\n if (map.isStyleLoaded()) {\n const oldStyle = map.getStyle()\n oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n }\n map.setStyle(style)\n map.once('styledata', () => {\n const newStyle = map.getStyle()\n map.setStyle({\n ...newStyle,\n sources: { ...newStyle.sources, ...oldSources },\n layers: [...newStyle.layers, ...oldLayers],\n })\n })\n return style\n }, props.options?.style)\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n {mapRoot() && (\n <div style={{ position: 'absolute', 'z-index': 10 }}>\n {props.children}\n </div>\n )}\n {mapRef}\n </MapContext.Provider>\n )\n}\n","import {\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../mapStyles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url => {\n const source = url?.split(':').reduce((p, c) => p && p[c], rasterStyleList)\n return source\n ? {\n ...props.source,\n url: '',\n tiles: [\n source\n .replace('{apikey}', props.source.apikey)\n .replace('{r}', window.devicePixelRatio > 1 ? '@2x' : ''),\n ],\n attribution: rasterStyleList[url.split(':')[0]]._copy,\n }\n : props.source\n }\n\n // Remove Source\n onCleanup(() => {\n map()\n .getStyle()\n .layers.forEach(\n layer => layer.source === props.id && map().removeLayer(layer.id)\n )\n map().getSource(props.id) && map().removeSource(props.id)\n })\n\n // Update\n createEffect(() => {\n const source = map().getSource(props.id)\n if (!source) return\n\n // Update GeoJSON Data\n if (props.source.type === 'geojson' && props.source.data)\n source.setData(props.source.data)\n\n // Update Image URL\n if (\n props.source.type === 'image' &&\n (props.source.url || props.source.coordinates)\n )\n source.updateImage(props.source.url, props.source.coordinates)\n\n // Update Vector URL or Tiles\n if (\n props.source.type === 'vector' &&\n (props.source.url || props.source.tiles)\n )\n props.source.url\n ? source.setUrl(props.source.url)\n : source.setTiles(props.source.tiles)\n\n // Update Raster URL or Tiles\n if (\n props.source.type === 'raster' &&\n (props.source.url || props.source.tiles)\n ) {\n const src = lookup(props.source.url)\n src.tiles &&\n (src.tiles = ['a', 'b', 'c'].map(i => src.tiles[0].replace('{s}', i)))\n source._tileJSONRequest?.cancel()\n source.url = src.url\n source.scheme = src.scheme\n source._options = { ...source._options, ...src }\n map().style._sourceCaches[`other:${props.id}`]?.clearTiles()\n source.load()\n }\n })\n\n // Add Source\n createEffect(() => {\n const source = lookup(props.source.url)\n source.tiles &&\n (source.tiles = ['a', 'b', 'c'].map(i =>\n source.tiles[0].replace('{s}', i)\n ))\n !map().getSource(props.id) && map().addSource(props.id, source)\n })\n\n return (\n <SourceContext.Provider value={props.id}>\n {props.children}\n </SourceContext.Provider>\n )\n}\n","import { onCleanup, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport { layerEvents } from '../../events'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n FilterSpecification,\n StyleSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\nimport type { CustomLayerInterface } from 'mapbox-gl/src/style/style_layer/custom_style_layer'\n\nconst diff = (\n newProps: StyleSpecification = {},\n prevProps: StyleSpecification = {}\n) => {\n const keys = new Set([...Object.keys(newProps), ...Object.keys(prevProps)])\n return [...keys].reduce((acc, key: string) => {\n const value = newProps[key]\n if (value !== prevProps[key]) {\n acc.push([key, value])\n }\n return acc\n }, [])\n}\n\nexport const Layer: Component<{\n id?: string\n style?: StyleSpecification\n customLayer?: CustomLayerInterface\n filter?: FilterSpecification\n visible?: boolean\n sourceId?: string\n beforeType?:\n | 'background'\n | 'fill'\n | 'line'\n | 'symbol'\n | 'raster'\n | 'circle'\n | 'fill-extrusion'\n | 'heatmap'\n | 'hillshade'\n | 'sky'\n beforeId?: string\n featureState?: { id: number | string; state: object }\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: string = useSourceId()\n props.id = props.id || createUniqueId()\n\n //Remove Layer\n onCleanup(() => map().getLayer(props.id) && map().removeLayer(props.id))\n\n // Hook up events\n createEffect(() =>\n layerEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map()?.on(event, props.id, callback)\n onCleanup(() => map()?.off(event, props.id, callback))\n }\n })\n )\n\n // Update Style\n createEffect((prev: StyleSpecification) => {\n if (\n !props.style ||\n !map().style ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n if (props.style.layout !== prev?.layout)\n diff(props.style.layout, prev?.layout).forEach(([key, value]) =>\n map().setLayoutProperty(props.id, key, value, { validate: false })\n )\n\n if (props.style.paint !== prev?.paint)\n diff(props.style.paint, prev?.paint).forEach(([key, value]) =>\n map().setPaintProperty(props.id, key, value, { validate: false })\n )\n\n if (\n props.style.minzoom !== prev?.minzoom ||\n props.style.maxzoom !== prev?.maxzoom\n )\n map().setLayerZoomRange(\n props.id,\n props.style.minzoom,\n props.style.maxzoom\n )\n\n if (props.style.filter !== prev?.filter)\n map().setFilter(props.id, props.style.filter, { validate: false })\n\n return props.style\n }, props.style)\n\n // Update Visibility\n createEffect((prev: boolean) => {\n if (\n props.visible === undefined ||\n props.visible === prev ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n map().setLayoutProperty(\n props.id,\n 'visibility',\n props.visible ? 'visible' : 'none',\n { validate: false }\n )\n return props.visible\n }, props.visible)\n\n // Update Filter\n createEffect(async () => {\n if (!props.filter) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFilter(props.id, props.filter)\n })\n\n // Update Feature State\n createEffect(async () => {\n if (!props.featureState || !props.featureState.id) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n map().removeFeatureState({\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n id: props.featureState.id,\n },\n props.featureState.state\n )\n })\n\n // Add Layer\n createEffect(() => {\n !map().getLayer(props.id) &&\n map().addLayer(\n props.customLayer || {\n ...props.style,\n id: props.id,\n source: sourceId,\n metadata: {\n smg: { beforeType: props.beforeType, beforeId: props.beforeId },\n },\n },\n props.beforeType\n ? map()\n ?.getStyle()\n .layers.find(l => l.type === props.beforeType)?.id\n : props.beforeId\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { FogSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Atmosphere: Component<{\n style?: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Atmosphere Layer\n createEffect(() => map().setFog(props.style || {}))\n\n // Remove Atmosphere Layer\n onCleanup(() => map().setFog(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setFog(props.visible ? props.style || {} : null)\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: Component<{\n exaggeration?: number\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n if (!sourceId) {\n sourceId = createUniqueId()\n map().addSource(\n sourceId,\n map().isMapLibre\n ? {\n type: 'raster-dem',\n url: 'https://demotiles.maplibre.org/terrain-tiles/tiles.json',\n tileSize: 256,\n }\n : {\n type: 'raster-dem',\n url: 'mapbox://mapbox.terrain-rgb',\n tileSize: 512,\n maxzoom: 14,\n }\n )\n }\n map().setTerrain({\n exaggeration: props.exaggeration || 1,\n source: sourceId,\n })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setTerrain(\n props.visible\n ? { exaggeration: props.exaggeration || 1, source: sourceId }\n : null\n )\n })\n\n return props.children\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { Options as AttributionOptions } from 'mapbox-gl/src/ui/control/attribution_control'\nimport type { Options as FullscreenOptions } from 'mapbox-gl/src/ui/control/fullscreen_control'\nimport type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolocate_control'\nimport type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control'\nimport type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control'\n\nexport const Control: Component<{\n type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n | object\n custom?: any\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n // Add Control\n createEffect(async () => {\n map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl')\n const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl']\n\n const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapLib.NavigationControl(options)\n case 'scale':\n return new mapLib.ScaleControl(options)\n case 'attribution':\n return new mapLib.AttributionControl(options)\n case 'geolocate':\n return new mapLib.GeolocateControl(options)\n case 'fullscreen':\n return new mapLib.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n const control = getControl(props.type, props.options)\n control && map()?.addControl(control, props.position)\n setControl(control)\n })\n\n onCleanup(() => map().removeControl(control()))\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n MarkerSpecification,\n PopupSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Marker: Component<{\n options?: MarkerSpecification\n lngLat: LngLatLike\n openPopup?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n let popup = null\n\n // Add Marker\n createEffect(async () => {\n map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl')\n const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl']\n\n if (marker) return\n if (props.children)\n popup = new mapLib.Popup(\n props.options.popup as PopupSpecification\n ).setDOMContent(<div>{props.children}</div>)\n\n marker = new mapLib.Marker(props.options)\n .setLngLat(props.lngLat)\n .setPopup(popup)\n .addTo(map())\n props.openPopup && marker.togglePopup()\n })\n // Remove Marker\n onCleanup(() => marker?.remove())\n\n // Update Position\n createEffect(() => marker?.setLngLat(props.lngLat))\n\n // Update Content\n createEffect(() => popup?.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { PopupSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Popup: Component<{\n options?: PopupSpecification\n lngLat: LngLatLike\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let popup = null\n\n // Add Popup\n createEffect(async () => {\n map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl')\n const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl']\n\n if (popup) return\n popup = new mapLib.Popup(props.options)\n .setLngLat(props.lngLat)\n .setDOMContent(<div>{props.children}</div>)\n .addTo(map())\n })\n\n // Remove Popup\n onCleanup(() => popup.remove())\n\n // Update Position\n createEffect(() => popup?.setLngLat(props.lngLat))\n\n // Update Content\n createEffect(() => popup?.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n StyleImageInterface,\n StyleImageMetadata,\n} from 'mapbox-gl/src/style/style_image'\n\nexport const Image: Component<{\n id: string\n url?: string\n image?:\n | HTMLImageElement\n | ImageBitmap\n | ImageData\n | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }\n | StyleImageInterface\n options?: StyleImageMetadata\n}> = props => {\n const map: MapboxMap = useMap()\n // Remove Image\n onCleanup(() => map().hasImage(props.id) && map().removeImage(props.id))\n\n // Update Image\n createEffect(async () => {\n if (props.image && props.url) return\n\n if (props.url) {\n map().loadImage(props.url, (error, image) => {\n if (error) throw error\n !map().hasImage(props.id) && map().updateImage(props.id, image)\n })\n } else {\n map().style &&\n map().hasImage(props.id) &&\n map().updateImage(props.id, props.image)\n }\n })\n\n // Add Image\n createEffect(() => {\n if (props.url) {\n map().loadImage(\n props.url,\n (_, image) =>\n !map().hasImage(props.id) && map().addImage(props.id, image)\n )\n } else {\n !map().hasImage(props.id) &&\n map().addImage(props.id, props.image, props.options)\n }\n })\n\n return <></>\n}\n","import { createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type LngLatLike from 'mapbox-gl/src/geo/lng_lat.js'\n\n// linearly interpolate between two positions [x,y,z] based on time\nconst lerp = (a, b, t) => a.map((_, idx) => (1.0 - t) * a[idx] + t * b[idx])\n\n// sphericaly interpolate between two positions [x,y,z] based on time\nconst slerp = (a, b, t) => {\n const omega = 0.075\n // TODO: Proper Calculation\n // a.map((_, idx) => a[idx] * b[idx]).reduce((m, n) => m + n)\n\n return a.map(\n (_, idx) =>\n (Math.sin((1 - t) * omega) / Math.sin(omega)) * a[idx] +\n (Math.sin(t * omega) / Math.sin(omega)) * b[idx]\n )\n}\n\n// calculations from: https://easings.net\nconst easeQuad = {\n in: (x: number): number => x * x,\n out: (x: number): number => 1 - (1 - x) * (1 - x),\n inOut: (x: number): number =>\n x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n}\n\nexport const Camera: Component<{\n animate: boolean\n translate?: {\n type?: 'line' | 'sphere'\n start: [number, number, number]\n end: [number, number, number]\n target: LngLatLike\n targetEnd?: LngLatLike\n easing?: 'in' | 'out' | 'inOut'\n loop?: boolean\n duration: number\n }\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let animationTime = 0.1\n let isReverse = false\n\n const updateCameraPosition = async ([lng, lat, alt], target) => {\n map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl')\n const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl']\n\n const camera = map().getFreeCameraOptions()\n camera.position = mapLib.MercatorCoordinate.fromLngLat([lng, lat], alt)\n camera.lookAtPoint(target)\n map().setFreeCameraOptions(camera)\n }\n\n const frame = (time: number) => {\n props.animate && window.requestAnimationFrame(frame)\n const params = [\n props.translate.start,\n props.translate.end,\n props.translate.easing\n ? easeQuad[props.translate.easing](animationTime)\n : animationTime,\n ] as const\n const position =\n props.translate.type === 'line' ? lerp(...params) : slerp(...params)\n\n updateCameraPosition(position, props.translate.target)\n\n if (!props.translate.loop && (animationTime > 1.0 || animationTime < 0.0))\n isReverse = !isReverse\n animationTime = isReverse ? animationTime - 0.001 : animationTime + 0.001\n }\n\n createEffect(async () => {\n props.animate && window.requestAnimationFrame(frame)\n })\n\n return props.children\n}\n"],"names":["mapEvents","layerEvents","mapBase","gitBase","gishub","vectorStyleList","mb","light","dark","street","outdoor","sat","sat_street","nav","nav_night","basic","monochrome","leshine","icecream","cali","northstar","mineral","moonlight","frank","minimo","decimal","standard","blueprint","bubble","pencil","swiss_ski","vintage","whaam","neon","camoflauge","emerald","runner","x_ray","esri","charted_territory","colored_pencil","community","mid_century","modern_antique","nat_geo","newspaper","open_street_map","light_gray_canvas","dark_gray_canvas","human_geo_light","human_geo_dark","world_navigation","world_street","world_street_night","world_terrain","world_terrain_hybrid","world_topographic","chromium","dreamcatcher","seahaven","sangria","mercurial","imagery","imagery_hybrid","firefly","firefly_hybrid","oceans","carto","stamen","tf","rasterStyleList","osm","org","human","cycle","topo","_copy","voyager","positron","toner","toner_lite","watercolor","terrain","trans","trans_dark","landscape","outdoors","neighbourhood","spinal","pioneer","atlas","mobile","MapContext","createContext","useMap","useContext","MapGL","props","id","createUniqueId","mapRoot","setMapRoot","createSignal","transitionType","setTransitionType","darkMode","setDarkMode","window","matchMedia","matches","document","body","classList","contains","debug","text","value","console","mapRef","_el$","_tmpl$","cloneNode","_$effect","_p$","class","_v$4","position","inset","style","_v$","_$setAttribute","_v$2","_$className","_v$3","_$classList","_$style","undefined","getStyle","String","split","reduce","p","c","version","sources","layers","onMount","async","asMapLibre","await","import","mapLib","map","Map","options","darkStyle","container","interactive","onViewportChange","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","resizeObserver","isMapLibre","once","ResizeObserver","resize","darkTheme","createEffect","disableResize","disconnect","observe","addEventListener","MutationObserver","attributes","forEach","item","prop","event","slice","toLowerCase","callback","e","on","onCleanup","off","Object","keys","layerId","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","prev","cursorStyle","getCanvas","cursor","projection","name","setProjection","let","oldLayers","oldSources","isStyleLoaded","oldStyle","filter","l","startsWith","s","obj","key","setStyle","newStyle","getCenter","getZoom","getPitch","getBearing","callMove","originalEvent","callEnd","cameraForBounds","untrack","stop","easeTo","jumpTo","flyTo","_$createComponent","Provider","children","_$memo","_el$2","setProperty","_$insert","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","devicePixelRatio","attribution","layer","removeLayer","getSource","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","src","i","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","addSource","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","getLayer","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","featureState","removeFeatureState","sourceLayer","setFeatureState","state","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","Atmosphere","setFog","Terrain","tileSize","setTerrain","exaggeration","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","addControl","removeControl","Marker","marker","popup","Popup","setDOMContent","setLngLat","lngLat","setPopup","addTo","openPopup","togglePopup","remove","Image","hasImage","removeImage","image","loadImage","error","_","addImage","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","requestAnimationFrame","params","translate","start","end","easing","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions","loop"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/events.ts","../../src/mapStyles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Atmosphere/index.tsx","../../src/components/Terrain/index.tsx","../../src/components/Control/index.tsx","../../src/components/Marker/index.tsx","../../src/components/Popup/index.tsx","../../src/components/Image/index.tsx","../../src/components/Camera/index.tsx"],"sourcesContent":["export const getLibrary = async isMapLibre => {\n if (isMapLibre) {\n try {\n await import('maplibre-gl')\n //@ts-ignore\n await import('maplibre-gl/dist/maplibre-gl.css')\n return window['maplibregl']\n } catch (e) {}\n } else {\n try {\n await import('mapbox-gl')\n //@ts-ignore\n await import('mapbox-gl/dist/mapbox-gl.css')\n return window['mapboxgl']\n } catch (e) {}\n }\n}\n","const mapEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onPreClick',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n 'onWheel',\n 'onResize',\n 'onRemove',\n 'onTouchMove',\n 'onMoveStart',\n 'onMove',\n 'onMoveEnd',\n 'onDragStart',\n 'onDrag',\n 'onDragEnd',\n 'onZoomStart',\n 'onZoom',\n 'onZoomEnd',\n 'onRotateStart',\n 'onRotate',\n 'onRotatEnd',\n 'onPitchStart',\n 'onPitch',\n 'onPitchEnd',\n 'onBoxZoomStart',\n 'onBoxZoomEnd',\n 'onBoxZoomCancel',\n 'onWebglContextLost',\n 'onWebglContextRestored',\n 'onLoad',\n 'onRender',\n 'onIdle',\n 'onError',\n 'onData',\n 'onStyleData',\n 'onSourceData',\n 'onDataLoading',\n 'onStyleDataLoading',\n 'onSourceDataLoading',\n 'onStyleImageMissing',\n]\n\nconst layerEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n]\n\nexport { mapEvents, layerEvents }\n","const mapBase = 'mapbox://styles/mapbox'\nconst gitBase = 'https://raw.githubusercontent.com/'\nconst gishub = 'https://raw.githubusercontent.com/GIShub4/map-styles/main/'\n\nexport const vectorStyleList: object = {\n mb: {\n light: `${mapBase}/light-v10`,\n dark: `${mapBase}/dark-v10`,\n street: `${mapBase}/streets-v11`,\n outdoor: `${mapBase}/outdoors-v11`,\n sat: `${mapBase}/satellite-v9`,\n sat_street: `${mapBase}/satellite-streets-v11`,\n nav: `${mapBase}/navigation-guidance-day-v4`,\n nav_night: `${mapBase}/navigation-guidance-night-v4`,\n basic: `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n monochrome: `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n leshine: `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n icecream: `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n cali: `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n northstar: `${mapBase}/cj44mfrt20f082snokim4ungi`,\n mineral: `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n moonlight: `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n frank: `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n minimo: `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n decimal: `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n standard: `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n blueprint: `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n bubble: `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n pencil: `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n swiss_ski: `${gitBase}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n vintage: `${gitBase}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n whaam: `${gitBase}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n neon: `${gitBase}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n camoflauge: `${gitBase}jingsam/mapbox-gl-styles/master/Camouflage.json`,\n emerald: `${gitBase}jingsam/mapbox-gl-styles/master/Emerald.json`,\n runner: `${gitBase}jingsam/mapbox-gl-styles/master/Runner.json`,\n x_ray: `${gitBase}jingsam/mapbox-gl-styles/master/X-ray.json`,\n },\n esri: {\n blueprint: `${gishub}esri:blueprint.json`,\n charted_territory: `${gishub}esri:charted-territory.json`,\n colored_pencil: `${gishub}esri:colored-pencil.json`,\n community: `${gishub}esri:community.json`,\n mid_century: `${gishub}esri:mid-century.json`,\n modern_antique: `${gishub}esri:modern-antique.json`,\n nat_geo: `${gishub}esri:national-geographic.json`,\n newspaper: `${gishub}esri:newspaper.json`,\n open_street_map: `${gishub}esri:open-street-map.json`,\n light_gray_canvas: `${gishub}esri:light-gray-canvas.json`,\n dark_gray_canvas: `${gishub}esri:dark-gray-canvas.json`,\n human_geo_light: `${gishub}esri:human-geography-light.json`,\n human_geo_dark: `${gishub}esri:human-geography-dark.json`,\n world_navigation: `${gishub}esri:world-navigation.json`,\n world_street: `${gishub}esri:world-street.json`,\n world_street_night: `${gishub}esri:world-street-night.json`,\n world_terrain: `${gishub}esri:world-terrain.json`,\n world_terrain_hybrid: `${gishub}esri:world-terrain-hybrid.json`,\n world_topographic: `${gishub}esri:world-topographic.json`,\n chromium: `${gishub}esri:chromium.json`,\n dreamcatcher: `${gishub}esri:dreamcatcher.json`,\n seahaven: `${gishub}esri:seahaven.json`,\n sangria: `${gishub}esri:sangria.json`,\n mercurial: `${gishub}esri:mercurial.json`,\n imagery: `${gishub}esri:imagery.json`,\n imagery_hybrid: `${gishub}esri:imagery-hybrid.json`,\n firefly: `${gishub}esri:firefly.json`,\n firefly_hybrid: `${gishub}esri:firefly-hybrid.json`,\n oceans: `${gishub}esri:oceans.json`,\n },\n}\nconst carto = 'https://{s}.basemaps.cartocdn.com/rastertiles/'\nconst stamen = 'https://stamen-tiles-{s}.a.ssl.fastly.net/'\nconst tf = 'https://{s}.tile.thunderforest.com/'\n\nexport const rasterStyleList: object = {\n osm: {\n org: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n human: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n cycle: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n topo: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n _copy:\n '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">&copy; OpenStreetMap</a>',\n },\n carto: {\n voyager: `${carto}voyager_labels_under/{z}/{x}/{y}{r}.png`,\n positron: `${carto}light_all/{z}/{x}/{y}{r}.png`,\n dark: `${carto}dark_all/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://carto.com/attribution\" target=\"_blank\">&copy; Carto</a>',\n },\n stamen: {\n toner: `${stamen}toner/{z}/{x}/{y}{r}.png`,\n toner_lite: `${stamen}toner-lite/{z}/{x}/{y}{r}.png`,\n watercolor: `${stamen}watercolor/{z}/{x}/{y}.png`,\n terrain: `${stamen}terrain/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://stamen.com/privacy-policy\" target=\"_blank\">&copy; Stamen Design</a>',\n },\n tf: {\n cycle: `${tf}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans: `${tf}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans_dark: `${tf}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n landscape: `${tf}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n outdoors: `${tf}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n neighbourhood: `${tf}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n spinal: `${tf}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n pioneer: `${tf}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n atlas: `${tf}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n mobile: `${tf}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n _copy:\n '<a href=\"https://thunderforest.com/privacy\" target=\"_blank\">&copy; Thunderforest</a>',\n },\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n createUniqueId,\n untrack,\n} from 'solid-js'\nimport { getLibrary } from '../../utils'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../mapStyles'\nimport type { MapboxMap, MapboxOptions } from 'mapbox-gl/src/ui/map'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\nimport type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js'\nimport type { PaddingOptions } from 'mapbox-gl/src/geo/edge_insets.js'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { JSX } from 'solid-js'\n\nexport type Viewport = {\n id?: string\n center?: LngLatLike\n bounds?: LngLatBounds\n zoom?: number\n pitch?: number\n bearing?: number\n padding?: PaddingOptions\n}\n\nconst MapContext = createContext<MapboxMap>()\n/** Provides the Mapbox Map Object */\nexport const useMap = (): MapboxMap => useContext(MapContext)\n\n/** Creates a new Map Container */\nexport const MapGL: Component<{\n id?: string\n /** Map Container CSS Style */\n style?: JSX.CSSProperties\n /** Map Container CSS Class */\n class?: string\n /** SolidJS Class List for Map Container */\n classList?: {\n [k: string]: boolean | undefined\n }\n /** Current Map View */\n viewport?: Viewport\n /** Mapbox Options\n * @see https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters\n */\n options?: MapboxOptions\n /** Type for pan, move and zoom transitions */\n transitionType?: 'flyTo' | 'easeTo' | 'jumpTo'\n /** Event listener for Viewport updates */\n onViewportChange?: (viewport: Viewport) => void\n /** Displays Map Tile Borders */\n showTileBoundaries?: boolean\n /** Displays Wireframe if Terrain is visible */\n showTerrainWireframe?: boolean\n /** Displays Borders if Padding is set */\n showPadding?: boolean\n /** Displays Label Collision Boxes */\n showCollisionBoxes?: boolean\n /** Displays all feature outlines even if normally not drawn by style rules */\n showOverdrawInspector?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n //** Dark Map Style */\n darkStyle?: StyleSpecification | string\n //** Disable automatic map resize */\n disableResize?: boolean\n //** Enable MapLibre support */\n asMapLibre?: boolean\n //** Debug Mode */\n debug?: boolean\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: any\n}> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n const [darkMode, setDarkMode] = createSignal(\n typeof window !== 'undefined' &&\n (window.matchMedia('(prefers-color-scheme: dark)').matches ||\n document.body.classList.contains('dark'))\n )\n\n const debug = (text, value) =>\n props.debug && console.debug(`${text}: %c${value}`, 'color: #00F')\n\n const mapRef = (\n <div\n id={props.id}\n class={props?.class}\n classList={props?.classList}\n style={{ position: 'absolute', inset: 0, ...props.style }}\n />\n )\n\n const getStyle = (light, dark) => {\n const style = darkMode() ? dark || light : light\n return typeof style === 'string' || style instanceof String\n ? style?.split(':').reduce((p, c) => p && p[c], vectorStyleList) || style\n : style || { version: 8, sources: {}, layers: [] }\n }\n\n onMount(async () => {\n const mapLib = await getLibrary(props.asMapLibre)\n const map: MapboxMap = new mapLib.Map({\n ...props.options,\n style: getStyle(props.options.style, props.darkStyle),\n container: mapRef,\n interactive: !!props.onViewportChange,\n bounds: props.viewport?.bounds,\n center: props.viewport?.center,\n zoom: props.viewport?.zoom || null,\n pitch: props.viewport?.pitch || null,\n bearing: props.viewport?.bearing || null,\n fitBoundsOptions: { padding: props.viewport?.padding },\n } as MapboxOptions)\n\n map.isMapLibre = props.asMapLibre\n map.debug = props.debug\n // map.container = containerRef\n\n map.once('load', () => setMapRoot(map))\n\n // onCleanup(() => map.remove())\n\n // Listen to map container size changes\n const resizeObserver = new ResizeObserver(() => map.resize())\n createEffect(() =>\n props.disableResize\n ? resizeObserver.disconnect()\n : resizeObserver.observe(mapRef as Element)\n )\n\n // Listen to dark theme changes\n const darkTheme = window.matchMedia('(prefers-color-scheme: dark)')\n darkTheme.addEventListener('change', () => setDarkMode(darkTheme.matches))\n\n const bodyClassObserver = new MutationObserver(() =>\n setDarkMode(document.body.classList.contains('dark'))\n )\n bodyClassObserver.observe(document.body, { attributes: true })\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n const prop = props[item]\n if (prop) {\n const event = item.slice(2).toLowerCase()\n if (typeof prop === 'function') {\n const callback = e => prop(e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\n } else {\n Object.keys(prop).forEach(layerId => {\n const callback = e => prop[layerId](e)\n map.on(event, layerId, callback)\n onCleanup(() => map.off(event, layerId, callback))\n })\n }\n }\n })\n )\n\n // Update debug features\n createEffect(() => {\n map.showTileBoundaries = props.showTileBoundaries\n map.showTerrainWireframe = props.showTerrainWireframe\n map.showPadding = props.showPadding\n map.showCollisionBoxes = props.showCollisionBoxes\n map.showOverdrawInspector = props.showOverdrawInspector\n })\n\n // Update cursor\n createEffect(prev => {\n if (props.cursorStyle === prev) return\n debug('Update Cursor to', props.cursorStyle)\n map.getCanvas().style.cursor = props.cursorStyle\n return props.cursorStyle\n })\n\n //Update transition type\n createEffect(prev => {\n if (props.transitionType === prev) return\n debug('Update Transition to', props.transitionType)\n setTransitionType(props.transitionType)\n return props.transitionType\n })\n\n // Update projection\n createEffect(prev => {\n if (props.options?.projection === prev) return\n debug('Update Projection to', props.options?.projection.name)\n map.setProjection(props.options?.projection)\n return props.options?.projection\n })\n\n // Update map style\n createEffect(prev => {\n const style = getStyle(props.options?.style, props.darkStyle)\n if (style === prev) return\n let oldLayers = []\n let oldSources = {}\n debug('Update Mapstyle to', style)\n if (map.isStyleLoaded()) {\n const oldStyle = map.getStyle()\n oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n }\n map.setStyle(style)\n map.once('styledata', () => {\n const newStyle = map.getStyle()\n map.setStyle({\n ...newStyle,\n sources: { ...newStyle.sources, ...oldSources },\n layers: [...newStyle.layers, ...oldLayers],\n })\n })\n return style\n }, props.options?.style)\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n {mapRoot() && (\n <div style={{ position: 'absolute', 'z-index': 10 }}>\n {props.children}\n </div>\n )}\n {mapRef}\n </MapContext.Provider>\n )\n}\n","import {\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../mapStyles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url => {\n const source = url?.split(':').reduce((p, c) => p && p[c], rasterStyleList)\n return source\n ? {\n ...props.source,\n url: '',\n tiles: [\n source\n .replace('{apikey}', props.source.apikey)\n .replace('{r}', window.devicePixelRatio > 1 ? '@2x' : ''),\n ],\n attribution: rasterStyleList[url.split(':')[0]]._copy,\n }\n : props.source\n }\n\n // Remove Source\n onCleanup(() => {\n map()\n .getStyle()\n .layers.forEach(\n layer => layer.source === props.id && map().removeLayer(layer.id)\n )\n map().getSource(props.id) && map().removeSource(props.id)\n })\n\n // Update\n createEffect(() => {\n const source = map().getSource(props.id)\n if (!source) return\n\n // Update GeoJSON Data\n if (props.source.type === 'geojson' && props.source.data)\n source.setData(props.source.data)\n\n // Update Image URL\n if (\n props.source.type === 'image' &&\n (props.source.url || props.source.coordinates)\n )\n source.updateImage(props.source.url, props.source.coordinates)\n\n // Update Vector URL or Tiles\n if (\n props.source.type === 'vector' &&\n (props.source.url || props.source.tiles)\n )\n props.source.url\n ? source.setUrl(props.source.url)\n : source.setTiles(props.source.tiles)\n\n // Update Raster URL or Tiles\n if (\n props.source.type === 'raster' &&\n (props.source.url || props.source.tiles)\n ) {\n const src = lookup(props.source.url)\n src.tiles &&\n (src.tiles = ['a', 'b', 'c'].map(i => src.tiles[0].replace('{s}', i)))\n source._tileJSONRequest?.cancel()\n source.url = src.url\n source.scheme = src.scheme\n source._options = { ...source._options, ...src }\n map().style._sourceCaches[`other:${props.id}`]?.clearTiles()\n source.load()\n }\n })\n\n // Add Source\n createEffect(() => {\n const source = lookup(props.source.url)\n source.tiles &&\n (source.tiles = ['a', 'b', 'c'].map(i =>\n source.tiles[0].replace('{s}', i)\n ))\n !map().getSource(props.id) && map().addSource(props.id, source)\n })\n\n return (\n <SourceContext.Provider value={props.id}>\n {props.children}\n </SourceContext.Provider>\n )\n}\n","import { onCleanup, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport { layerEvents } from '../../events'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n FilterSpecification,\n StyleSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\nimport type { CustomLayerInterface } from 'mapbox-gl/src/style/style_layer/custom_style_layer'\n\nconst diff = (\n newProps: StyleSpecification = {},\n prevProps: StyleSpecification = {}\n) => {\n const keys = new Set([...Object.keys(newProps), ...Object.keys(prevProps)])\n return [...keys].reduce((acc, key: string) => {\n const value = newProps[key]\n if (value !== prevProps[key]) {\n acc.push([key, value])\n }\n return acc\n }, [])\n}\n\nexport const Layer: Component<{\n id?: string\n style?: StyleSpecification\n customLayer?: CustomLayerInterface\n filter?: FilterSpecification\n visible?: boolean\n sourceId?: string\n beforeType?:\n | 'background'\n | 'fill'\n | 'line'\n | 'symbol'\n | 'raster'\n | 'circle'\n | 'fill-extrusion'\n | 'heatmap'\n | 'hillshade'\n | 'sky'\n beforeId?: string\n featureState?: { id: number | string; state: object }\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: string = useSourceId()\n props.id = props.id || createUniqueId()\n\n //Remove Layer\n onCleanup(() => map().getLayer(props.id) && map().removeLayer(props.id))\n\n // Hook up events\n createEffect(() =>\n layerEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map()?.on(event, props.id, callback)\n onCleanup(() => map()?.off(event, props.id, callback))\n }\n })\n )\n\n // Update Style\n createEffect((prev: StyleSpecification) => {\n if (\n !props.style ||\n !map().style ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n if (props.style.layout !== prev?.layout)\n diff(props.style.layout, prev?.layout).forEach(([key, value]) =>\n map().setLayoutProperty(props.id, key, value, { validate: false })\n )\n\n if (props.style.paint !== prev?.paint)\n diff(props.style.paint, prev?.paint).forEach(([key, value]) =>\n map().setPaintProperty(props.id, key, value, { validate: false })\n )\n\n if (\n props.style.minzoom !== prev?.minzoom ||\n props.style.maxzoom !== prev?.maxzoom\n )\n map().setLayerZoomRange(\n props.id,\n props.style.minzoom,\n props.style.maxzoom\n )\n\n if (props.style.filter !== prev?.filter)\n map().setFilter(props.id, props.style.filter, { validate: false })\n\n return props.style\n }, props.style)\n\n // Update Visibility\n createEffect((prev: boolean) => {\n if (\n props.visible === undefined ||\n props.visible === prev ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n map().setLayoutProperty(\n props.id,\n 'visibility',\n props.visible ? 'visible' : 'none',\n { validate: false }\n )\n return props.visible\n }, props.visible)\n\n // Update Filter\n createEffect(async () => {\n if (!props.filter) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFilter(props.id, props.filter)\n })\n\n // Update Feature State\n createEffect(async () => {\n if (!props.featureState || !props.featureState.id) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n map().removeFeatureState({\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n id: props.featureState.id,\n },\n props.featureState.state\n )\n })\n\n // Add Layer\n createEffect(() => {\n !map().getLayer(props.id) &&\n map().addLayer(\n props.customLayer || {\n ...props.style,\n id: props.id,\n source: sourceId,\n metadata: {\n smg: { beforeType: props.beforeType, beforeId: props.beforeId },\n },\n },\n props.beforeType\n ? map()\n ?.getStyle()\n .layers.find(l => l.type === props.beforeType)?.id\n : props.beforeId\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { FogSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Atmosphere: Component<{\n style?: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Atmosphere Layer\n createEffect(() => map().setFog(props.style || {}))\n\n // Remove Atmosphere Layer\n onCleanup(() => map().setFog(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setFog(props.visible ? props.style || {} : null)\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: Component<{\n exaggeration?: number\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n if (!sourceId) {\n sourceId = createUniqueId()\n map().addSource(\n sourceId,\n map().isMapLibre\n ? {\n type: 'raster-dem',\n url: 'https://demotiles.maplibre.org/terrain-tiles/tiles.json',\n tileSize: 256,\n }\n : {\n type: 'raster-dem',\n url: 'mapbox://mapbox.terrain-rgb',\n tileSize: 512,\n maxzoom: 14,\n }\n )\n }\n map().setTerrain({\n exaggeration: props.exaggeration || 1,\n source: sourceId,\n })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setTerrain(\n props.visible\n ? { exaggeration: props.exaggeration || 1, source: sourceId }\n : null\n )\n })\n\n return props.children\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { Options as AttributionOptions } from 'mapbox-gl/src/ui/control/attribution_control'\nimport type { Options as FullscreenOptions } from 'mapbox-gl/src/ui/control/fullscreen_control'\nimport type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolocate_control'\nimport type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control'\nimport type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control'\n\nexport const Control: Component<{\n type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n | object\n custom?: any\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n // Add Control\n createEffect(async () => {\n map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl')\n const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl']\n\n const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapLib.NavigationControl(options)\n case 'scale':\n return new mapLib.ScaleControl(options)\n case 'attribution':\n return new mapLib.AttributionControl(options)\n case 'geolocate':\n return new mapLib.GeolocateControl(options)\n case 'fullscreen':\n return new mapLib.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n const control = getControl(props.type, props.options)\n control && map()?.addControl(control, props.position)\n setControl(control)\n })\n\n onCleanup(() => map().removeControl(control()))\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n MarkerSpecification,\n PopupSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\nimport { getLibrary } from '../../utils'\n\nexport const Marker: Component<{\n options?: MarkerSpecification\n lngLat: LngLatLike\n openPopup?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n let popup = null\n\n // Add Marker\n createEffect(async () => {\n if (marker) return\n const mapLib = await getLibrary(map().isMapLibre)\n\n if (props.children)\n popup = new mapLib.Popup(\n props.options.popup as PopupSpecification\n ).setDOMContent(<div>{props.children}</div>)\n\n marker = new mapLib.Marker(props.options)\n .setLngLat(props.lngLat)\n .setPopup(popup)\n .addTo(map())\n props.openPopup && marker.togglePopup()\n })\n // Remove Marker\n onCleanup(() => marker?.remove())\n\n // Update Position\n createEffect(() => marker?.setLngLat(props.lngLat))\n\n // Update Content\n createEffect(() => popup?.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { getLibrary } from '../../utils'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { PopupSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Popup: Component<{\n options?: PopupSpecification\n lngLat: LngLatLike\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let popup = null\n\n // Add Popup\n createEffect(async () => {\n if (popup) return\n\n const mapLib = await getLibrary(map().isMapLibre)\n popup = new mapLib.Popup(props.options)\n .setLngLat(props.lngLat)\n .setDOMContent(<div>{props.children}</div>)\n .addTo(map())\n })\n\n // Remove Popup\n onCleanup(() => popup.remove())\n\n // Update Position\n createEffect(() => popup?.setLngLat(props.lngLat))\n\n // Update Content\n createEffect(() => popup?.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n StyleImageInterface,\n StyleImageMetadata,\n} from 'mapbox-gl/src/style/style_image'\n\nexport const Image: Component<{\n id: string\n url?: string\n image?:\n | HTMLImageElement\n | ImageBitmap\n | ImageData\n | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }\n | StyleImageInterface\n options?: StyleImageMetadata\n}> = props => {\n const map: MapboxMap = useMap()\n // Remove Image\n onCleanup(() => map().hasImage(props.id) && map().removeImage(props.id))\n\n // Update Image\n createEffect(async () => {\n if (props.image && props.url) return\n\n if (props.url) {\n map().loadImage(props.url, (error, image) => {\n if (error) throw error\n !map().hasImage(props.id) && map().updateImage(props.id, image)\n })\n } else {\n map().style &&\n map().hasImage(props.id) &&\n map().updateImage(props.id, props.image)\n }\n })\n\n // Add Image\n createEffect(() => {\n if (props.url) {\n map().loadImage(\n props.url,\n (_, image) =>\n !map().hasImage(props.id) && map().addImage(props.id, image)\n )\n } else {\n !map().hasImage(props.id) &&\n map().addImage(props.id, props.image, props.options)\n }\n })\n\n return <></>\n}\n","import { createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type LngLatLike from 'mapbox-gl/src/geo/lng_lat.js'\nimport { getLibrary } from '../../utils'\n\n// linearly interpolate between two positions [x,y,z] based on time\nconst lerp = (a, b, t) => a.map((_, idx) => (1.0 - t) * a[idx] + t * b[idx])\n\n// sphericaly interpolate between two positions [x,y,z] based on time\nconst slerp = (a, b, t) => {\n const omega = 0.075\n // TODO: Proper Calculation\n // a.map((_, idx) => a[idx] * b[idx]).reduce((m, n) => m + n)\n\n return a.map(\n (_, idx) =>\n (Math.sin((1 - t) * omega) / Math.sin(omega)) * a[idx] +\n (Math.sin(t * omega) / Math.sin(omega)) * b[idx]\n )\n}\n\n// calculations from: https://easings.net\nconst easeQuad = {\n in: (x: number): number => x * x,\n out: (x: number): number => 1 - (1 - x) * (1 - x),\n inOut: (x: number): number =>\n x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n}\n\nexport const Camera: Component<{\n animate: boolean\n translate?: {\n type?: 'line' | 'sphere'\n start: [number, number, number]\n end: [number, number, number]\n target: LngLatLike\n targetEnd?: LngLatLike\n easing?: 'in' | 'out' | 'inOut'\n loop?: boolean\n duration: number\n }\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let animationTime = 0.1\n let isReverse = false\n\n const updateCameraPosition = async ([lng, lat, alt], target) => {\n const mapLib = await getLibrary(map().isMapLibre)\n const camera = map().getFreeCameraOptions()\n camera.position = mapLib.MercatorCoordinate.fromLngLat([lng, lat], alt)\n camera.lookAtPoint(target)\n map().setFreeCameraOptions(camera)\n }\n\n const frame = (time: number) => {\n props.animate && window.requestAnimationFrame(frame)\n const params = [\n props.translate.start,\n props.translate.end,\n props.translate.easing\n ? easeQuad[props.translate.easing](animationTime)\n : animationTime,\n ] as const\n const position =\n props.translate.type === 'line' ? lerp(...params) : slerp(...params)\n\n updateCameraPosition(position, props.translate.target)\n\n if (!props.translate.loop && (animationTime > 1.0 || animationTime < 0.0))\n isReverse = !isReverse\n animationTime = isReverse ? animationTime - 0.001 : animationTime + 0.001\n }\n\n createEffect(async () => {\n props.animate && window.requestAnimationFrame(frame)\n })\n\n return props.children\n}\n"],"names":["getLibrary","isMapLibre","await","import","window","e","mapEvents","layerEvents","mapBase","gitBase","gishub","vectorStyleList","mb","light","dark","street","outdoor","sat","sat_street","nav","nav_night","basic","monochrome","leshine","icecream","cali","northstar","mineral","moonlight","frank","minimo","decimal","standard","blueprint","bubble","pencil","swiss_ski","vintage","whaam","neon","camoflauge","emerald","runner","x_ray","esri","charted_territory","colored_pencil","community","mid_century","modern_antique","nat_geo","newspaper","open_street_map","light_gray_canvas","dark_gray_canvas","human_geo_light","human_geo_dark","world_navigation","world_street","world_street_night","world_terrain","world_terrain_hybrid","world_topographic","chromium","dreamcatcher","seahaven","sangria","mercurial","imagery","imagery_hybrid","firefly","firefly_hybrid","oceans","carto","stamen","tf","rasterStyleList","osm","org","human","cycle","topo","_copy","voyager","positron","toner","toner_lite","watercolor","terrain","trans","trans_dark","landscape","outdoors","neighbourhood","spinal","pioneer","atlas","mobile","MapContext","createContext","useMap","useContext","MapGL","props","id","createUniqueId","mapRoot","setMapRoot","createSignal","transitionType","setTransitionType","darkMode","setDarkMode","matchMedia","matches","document","body","classList","contains","debug","text","value","console","mapRef","_el$","_tmpl$","cloneNode","_$effect","_p$","class","_v$4","position","inset","style","_v$","_$setAttribute","_v$2","_$className","_v$3","_$classList","_$style","undefined","getStyle","String","split","reduce","p","c","version","sources","layers","onMount","async","map","asMapLibre","Map","options","darkStyle","container","interactive","onViewportChange","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","resizeObserver","once","ResizeObserver","resize","darkTheme","createEffect","disableResize","disconnect","observe","addEventListener","MutationObserver","attributes","forEach","item","prop","event","slice","toLowerCase","callback","on","onCleanup","off","Object","keys","layerId","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","prev","cursorStyle","getCanvas","cursor","projection","name","setProjection","let","oldLayers","oldSources","isStyleLoaded","oldStyle","filter","l","startsWith","s","obj","key","setStyle","newStyle","getCenter","getZoom","getPitch","getBearing","callMove","originalEvent","callEnd","cameraForBounds","untrack","stop","easeTo","jumpTo","flyTo","_$createComponent","Provider","children","_$memo","_el$2","setProperty","_$insert","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","devicePixelRatio","attribution","layer","removeLayer","getSource","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","src","i","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","addSource","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","getLayer","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","featureState","removeFeatureState","sourceLayer","setFeatureState","state","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","Atmosphere","setFog","Terrain","tileSize","setTerrain","exaggeration","Control","control","setControl","mapLib","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","addControl","removeControl","Marker","marker","popup","Popup","setDOMContent","setLngLat","lngLat","setPopup","addTo","openPopup","togglePopup","remove","Image","hasImage","removeImage","image","loadImage","error","_","addImage","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","requestAnimationFrame","params","translate","start","end","easing","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions","loop"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { createEffect } from 'solid-js';
2
2
  import { useMap } from '../MapGL';
3
+ import { getLibrary } from '../../utils';
3
4
  // linearly interpolate between two positions [x,y,z] based on time
4
5
  const lerp = (a, b, t) => a.map((_, idx) => (1.0 - t) * a[idx] + t * b[idx]);
5
6
  // sphericaly interpolate between two positions [x,y,z] based on time
@@ -21,8 +22,7 @@ export const Camera = props => {
21
22
  let animationTime = 0.1;
22
23
  let isReverse = false;
23
24
  const updateCameraPosition = async ([lng, lat, alt], target) => {
24
- map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl');
25
- const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl'];
25
+ const mapLib = await getLibrary(map().isMapLibre);
26
26
  const camera = map().getFreeCameraOptions();
27
27
  camera.position = mapLib.MercatorCoordinate.fromLngLat([lng, lat], alt);
28
28
  camera.lookAtPoint(target);
@@ -1,4 +1,5 @@
1
1
  import { createSignal, createEffect, onMount, onCleanup, createContext, useContext, createUniqueId, untrack, } from 'solid-js';
2
+ import { getLibrary } from '../../utils';
2
3
  import { mapEvents } from '../../events';
3
4
  import { vectorStyleList } from '../../mapStyles';
4
5
  const MapContext = createContext();
@@ -21,13 +22,7 @@ export const MapGL = props => {
21
22
  : style || { version: 8, sources: {}, layers: [] };
22
23
  };
23
24
  onMount(async () => {
24
- props.asMapLibre ? await import('maplibre-gl') : await import('mapbox-gl');
25
- const mapLib = window[props.asMapLibre ? 'maplibregl' : 'mapboxgl'];
26
- props.asMapLibre
27
- ? //@ts-ignore
28
- await import('maplibre-gl/dist/maplibre-gl.css')
29
- : //@ts-ignore
30
- await import('mapbox-gl/dist/mapbox-gl.css');
25
+ const mapLib = await getLibrary(props.asMapLibre);
31
26
  const map = new mapLib.Map({
32
27
  ...props.options,
33
28
  style: getStyle(props.options.style, props.darkStyle),
@@ -1,15 +1,15 @@
1
1
  import { onCleanup, createEffect } from 'solid-js';
2
2
  import { useMap } from '../MapGL';
3
+ import { getLibrary } from '../../utils';
3
4
  export const Marker = props => {
4
5
  const map = useMap();
5
6
  let marker = null;
6
7
  let popup = null;
7
8
  // Add Marker
8
9
  createEffect(async () => {
9
- map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl');
10
- const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl'];
11
10
  if (marker)
12
11
  return;
12
+ const mapLib = await getLibrary(map().isMapLibre);
13
13
  if (props.children)
14
14
  popup = new mapLib.Popup(props.options.popup).setDOMContent(<div>{props.children}</div>);
15
15
  marker = new mapLib.Marker(props.options)
@@ -1,14 +1,14 @@
1
1
  import { onCleanup, createEffect } from 'solid-js';
2
+ import { getLibrary } from '../../utils';
2
3
  import { useMap } from '../MapGL';
3
4
  export const Popup = props => {
4
5
  const map = useMap();
5
6
  let popup = null;
6
7
  // Add Popup
7
8
  createEffect(async () => {
8
- map().isMapLibre ? await import('maplibre-gl') : await import('mapbox-gl');
9
- const mapLib = window[map().isMapLibre ? 'maplibregl' : 'mapboxgl'];
10
9
  if (popup)
11
10
  return;
11
+ const mapLib = await getLibrary(map().isMapLibre);
12
12
  popup = new mapLib.Popup(props.options)
13
13
  .setLngLat(props.lngLat)
14
14
  .setDOMContent(<div>{props.children}</div>)
@@ -0,0 +1,20 @@
1
+ export const getLibrary = async (isMapLibre) => {
2
+ if (isMapLibre) {
3
+ try {
4
+ await import('maplibre-gl');
5
+ //@ts-ignore
6
+ await import('maplibre-gl/dist/maplibre-gl.css');
7
+ return window['maplibregl'];
8
+ }
9
+ catch (e) { }
10
+ }
11
+ else {
12
+ try {
13
+ await import('mapbox-gl');
14
+ //@ts-ignore
15
+ await import('mapbox-gl/dist/mapbox-gl.css');
16
+ return window['mapboxgl'];
17
+ }
18
+ catch (e) { }
19
+ }
20
+ };
@@ -0,0 +1 @@
1
+ export declare const getLibrary: (isMapLibre: any) => Promise<any>;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.4.3",
2
+ "version": "1.4.4",
3
3
  "name": "solid-map-gl",
4
4
  "description": "Solid Component Library for Mapbox GL JS",
5
5
  "info": "Solid Component Library for Mapbox GL JS. Mapbox GL JS is a JavaScript library that renders interactive maps from vector tiles and Mapbox styles using WebGL. This project is intended to be as close as possible to the Mapbox GL JS API.",