solid-map-gl 1.2.1 → 1.2.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/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var web=require("solid-js/web"),solidJs=require("solid-js"),mapboxgl=require("mapbox-gl");function _interopDefaultLegacy(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var mapboxgl__default=_interopDefaultLegacy(mapboxgl);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",vectorStyleList={"mb:light":mapBase+"/light-v10","mb:dark":mapBase+"/dark-v10","mb:streets":mapBase+"/streets-v11","mb:outdoor":mapBase+"/outdoors-v11","mb:sat":mapBase+"/satellite-v9","mb:sat-streets":mapBase+"/satellite-streets-v11","mb:nav":mapBase+"/navigation-guidance-day-v4","mb:nav-night":mapBase+"/navigation-guidance-night-v4","mb:basic":mapBase+"/cjf4m44iw0uza2spb3q0a7s41","mb:monochrome":mapBase+"/cjv6rzz4j3m4b1fqcchuxclhb","mb:leshine":mapBase+"/cjcunv5ae262f2sm9tfwg8i0w","mb:icecream":mapBase+"/cj7t3i5yj0unt2rmt3y4b5e32","mb:cali":mapBase+"/cjerxnqt3cgvp2rmyuxbeqme7","mb:northstar":mapBase+"/cj44mfrt20f082snokim4ungi","mb:mineral":mapBase+"/cjtep62gq54l21frr1whf27ak","mb:moonlight":mapBase+"/cj3kbeqzo00022smj7akz3o1e","mb:frank":mapBase+"-map-design/ckshxkppe0gge18nz20i0nrwq","mb:minimo":mapBase+"-map-design/cksjc2nsq1bg117pnekb655h1","mb:decimal":mapBase+"-map-design/ck4014y110wt61ctt07egsel6","mb:standard":mapBase+"-map-design/ckr0svm3922ki18qntevm857n","mb:blueprint":mapBase+"-map-design/cks97e1e37nsd17nzg7p0308g","mb:bubble":mapBase+"-map-design/cksysy2nl62zp17quosctdtcc","mb:pencil":mapBase+"-map-design/cks9iema71es417mlrft4go2k","mb:swiss-ski":gitBase+"/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json","mb:vintage":gitBase+"/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json","mb:whaam":gitBase+"/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json","mb:neon":gitBase+"/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json","mb:camoflauge":gitBase+"/jingsam/mapbox-gl-styles/master/Camouflage.json","mb:emerald":gitBase+"/jingsam/mapbox-gl-styles/master/Emerald.json","mb:runner":gitBase+"/jingsam/mapbox-gl-styles/master/Runner.json","mb:x-ray":gitBase+"/jingsam/mapbox-gl-styles/master/X-ray.json"},rasterStyleList={"osm:org":["https://tile.openstreetmap.org/{z}/{x}/{y}.png",'Map &copy; <a href="https://www.openstreetmap.org"><em>OpenStreetMap</em></a>'],"osm:human":["https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",'Map &copy; <a href="http://hot.openstreetmap.org"><em>Humanitarian OpenStreetMap Team</em></a>'],"osm:cycle":["https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",'Maps &copy; <a href="https://www.cyclosm.org" target="_blank"><em>CyclOSM</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"carto:voyager":["https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:positron":["https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:dark":["https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"open:topo":["https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",'Maps &copy; <a href="https://opentopomap.org/credits"><em>OpenTopoMap</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner-lite":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:watercolor":["https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:terrain":["https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:cycle":["https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans":["https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans-dark":["https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:landscape":["https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:outdoors":["https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:neighbourhood":["https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:spinal":["https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:pioneer":["https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:atlas":["https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:mobile":["https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>']},_tmpl$$2=web.template("<section></section>",2),_tmpl$2=web.template('<div id="map"></div>',2),MapContext=solidJs.createContext(),useMap=()=>solidJs.useContext(MapContext),MapGL=r=>{var e;let s,t,a;r.id=r.id||solidJs.createUniqueId();const[o,n]=solidJs.createSignal(),[,i]=solidJs.useTransition(),[l,p]=solidJs.createSignal("flyTo");solidJs.onMount(async()=>{var e;(s=new mapboxgl__default.default.Map({...r.options,style:vectorStyleList[null==(e=r.options)?void 0:e.style]||(null==(e=r.options)?void 0:e.style)||{version:8,sources:{},layers:[]},container:t||"map",interactive:!!r.onViewportChange,bounds:null==(e=r.viewport)?void 0:e.bounds,center:null==(e=r.viewport)?void 0:e.center,zoom:(null==(e=r.viewport)?void 0:e.zoom)||null,pitch:(null==(e=r.viewport)?void 0:e.pitch)||null,bearing:(null==(e=r.viewport)?void 0:e.bearing)||null,fitBoundsOptions:{padding:null==(e=r.viewport)?void 0:e.padding}})).container=a,await s.once("styledata"),n(s)}),solidJs.onCleanup(()=>s.remove()),solidJs.createEffect(()=>mapEvents.forEach(t=>{if(r[t]){const e=t.slice(2).toLowerCase(),a=e=>r[t](e);s.on(e,a),solidJs.onCleanup(()=>s.off(e,a))}})),solidJs.createEffect(()=>{o()&&(o().showTileBoundaries=r.showTileBoundaries,o().showTerrainWireframe=r.showTerrainWireframe,o().showPadding=r.showPadding,o().showCollisionBoxes=r.showCollisionBoxes,o().showOverdrawInspector=r.showOverdrawInspector,o().getCanvas().style.cursor=r.cursorStyle)}),solidJs.createEffect(()=>p(r.transitionType)),solidJs.createEffect(solidJs.on(()=>{var e;return null==(e=r.options)?void 0:e.projection},e=>s.setProjection(e),{defer:!0})),solidJs.createEffect(solidJs.on(()=>{var e;return null==(e=r.options)?void 0:e.style},e=>{const a=s.getStyle(),t=a.layers.filter(e=>e.id.startsWith("cl-")),o=Object.keys(a.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:a.sources[t]}),{});s.setStyle(vectorStyleList[e]||e||{version:8,sources:{},layers:[]}),s.once("styledata",()=>{var e=s.getStyle();s.setStyle({...e,sources:{...e.sources,...o},layers:[...e.layers,...t]})})},{defer:!0})),solidJs.createEffect(()=>{var e;const t={id:null,center:s.getCenter(),zoom:s.getZoom(),pitch:s.getPitch(),bearing:s.getBearing(),padding:null==(e=r.viewport)?void 0:e.padding,bounds:null==(e=r.viewport)?void 0:e.bounds},a=e=>{e.originalEvent&&r.onViewportChange&&r.onViewportChange({...t,id:r.id}),p("jumpTo")},o=e=>{e.originalEvent&&r.onViewportChange&&r.onViewportChange(t),p(r.transitionType)};s.on("move",a).on("moveend",o),solidJs.onCleanup(()=>s.off("move",a).off("moveend",o))}),solidJs.createEffect(e=>{var t;return(null==(t=r.viewport)?void 0:t.bounds)!=e&&r.onViewportChange({...r.viewport,...s.cameraForBounds(null==(t=r.viewport)?void 0:t.bounds,{padding:null==(e=r.viewport)?void 0:e.padding})}),null==(t=r.viewport)?void 0:t.bounds},null==(e=r.viewport)?void 0:e.bounds),solidJs.createEffect(()=>{var e;if(r.id!==(null==(e=r.viewport)?void 0:e.id)){var t={...r.viewport,padding:(null==(e=r.viewport)?void 0:e.padding)||0};switch(solidJs.untrack(l)){case"easeTo":s.stop().easeTo(t);case"jumpTo":s.stop().jumpTo(t);default:s.stop().flyTo(t)}}});let c=0;return solidJs.createEffect(()=>{r.triggerResize&&(c=0,window.requestAnimationFrame(function e(){c<15&&(c++,window.requestAnimationFrame(e),i(()=>s.resize()))}))}),web.createComponent(MapContext.Provider,{value:o,get children(){return[(()=>{const e=_tmpl$$2.cloneNode(!0),t=a;return"function"==typeof t?t(e):a=e,e.style.setProperty("position","absolute"),e.style.setProperty("z-index","1"),web.insert(e,()=>o()?r.children:null),e})(),(()=>{const s=_tmpl$2.cloneNode(!0),e=t;return"function"==typeof e?e(s):t=s,web.effect(e=>{var t=r.class||null,a=r.classList||null,o={height:"100%",width:"100%",...r.style};return t!==e._v$&&web.className(s,e._v$=t),e._v$2=web.classList(s,a,e._v$2),e._v$3=web.style(s,o,e._v$3),e},{_v$:void 0,_v$2:void 0,_v$3:void 0}),s})()]}})},SourceContext=solidJs.createContext(),useSourceId=()=>solidJs.useContext(SourceContext),Source=o=>{const s=useMap(),r=(o.id=o.id||solidJs.createUniqueId(),e=>rasterStyleList[e]?{...o.source,url:"",tiles:[rasterStyleList[e][0].replace("{apikey}",o.source.apikey)],attribution:rasterStyleList[e][1]}:o.source);return solidJs.createEffect(()=>{const t=r(o.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),s().getSource(o.id)||s().addSource(o.id,t)}),solidJs.onCleanup(()=>{s().getStyle().layers.forEach(e=>e.source===o.id&&s().removeLayer(e.id)),s().getSource(o.id)&&s().removeSource(o.id)}),solidJs.createEffect(()=>{const e=s().getSource(o.id);if(e&&("geojson"===o.source.type&&o.source.data&&e.setData(o.source.data),"image"===o.source.type&&(o.source.url||o.source.coordinates)&&e.updateImage(o.source.url,o.source.coordinates),"vector"===o.source.type&&(o.source.url||o.source.tiles)&&(o.source.url?e.setUrl(o.source.url):e.setTiles(o.source.tiles)),"raster"===o.source.type&&(o.source.url||o.source.tiles))){var t;const a=r(o.source.url);a.tiles&&(a.tiles=["a","b","c"].map(e=>a.tiles[0].replace("{s}",e))),null!=(t=e._tileJSONRequest)&&t.cancel(),e.url=a.url,e.scheme=a.scheme,e._options={...e._options,...a},null!=(t=s().style._sourceCaches["other:"+o.id])&&t.clearTiles(),e.load()}}),web.createComponent(SourceContext.Provider,{get value(){return o.id},get children(){return o.children}})},diff=(o={},s={})=>{return[...new Set([...Object.keys(o),...Object.keys(s)])].reduce((e,t)=>{var a=o[t];return a!==s[t]&&e.push([t,a]),e},[])},Layer=s=>{const r=useMap(),t=useSourceId();return s.id=s.id||solidJs.createUniqueId(),solidJs.createEffect(()=>{var e;r().getLayer(s.id)||r().addLayer(s.customLayer||{...s.style,id:s.id,source:t,metadata:{smg:{beforeType:s.beforeType,beforeId:s.beforeId}}},s.beforeType?null==(e=r())?void 0:e.getStyle().layers.find(e=>e.type===s.beforeType).id:s.beforeId)}),solidJs.onCleanup(()=>r().getLayer(s.id)&&r().removeLayer(s.id)),solidJs.createEffect(()=>layerEvents.forEach(t=>{if(s[t]){var e;const a=t.slice(2).toLowerCase(),o=e=>s[t](e);null!=(e=r())&&e.on(a,s.id,o),solidJs.onCleanup(()=>{var e;return null==(e=r())?void 0:e.off(a,s.id,o)})}})),solidJs.createEffect(e=>{if(s.style&&r().style&&r().getSource(t)&&r().getLayer(s.id))return s.style.layout!==(null==e?void 0:e.layout)&&diff(s.style.layout,null==e?void 0:e.layout).forEach(([e,t])=>r().setLayoutProperty(s.id,e,t,{validate:!1})),s.style.paint!==(null==e?void 0:e.paint)&&diff(s.style.paint,null==e?void 0:e.paint).forEach(([e,t])=>r().setPaintProperty(s.id,e,t,{validate:!1})),s.style.minzoom===(null==e?void 0:e.minzoom)&&s.style.maxzoom===(null==e?void 0:e.maxzoom)||r().setLayerZoomRange(s.id,s.style.minzoom,s.style.maxzoom),s.style.filter!==(null==e?void 0:e.filter)&&r().setFilter(s.id,s.style.filter,{validate:!1}),s.style},s.style),solidJs.createEffect(e=>{if(void 0!==s.visible&&s.visible!==e&&r().getSource(t)&&r().getLayer(s.id))return r().setLayoutProperty(s.id,"visibility",s.visible?"visible":"none",{validate:!1}),s.visible},s.visible),solidJs.createEffect(async()=>{s.filter&&(r().isStyleLoaded()||await r().once("styledata"),r().setFilter(s.id,s.filter))}),solidJs.createEffect(async()=>{s.featureState&&s.featureState.id&&(r().isStyleLoaded()||await r().once("styledata"),r().removeFeatureState({source:t,sourceLayer:s.style["source-layer"]}),r().setFeatureState({source:t,sourceLayer:s.style["source-layer"],id:s.featureState.id},s.featureState.state))}),s.children},Fog=e=>{const t=useMap();return solidJs.createEffect(()=>{t().setFog(e.style)}),solidJs.onCleanup(()=>t().setFog(null)),solidJs.createEffect(()=>{void 0!==e.visible&&t().setFog(e.visible?e.style:null)}),e.children},Sky=e=>{const t=useMap(),a="_sky";return solidJs.createEffect(()=>{t().getLayer(a)&&t().addLayer({...e.style,id:a})}),solidJs.onCleanup(()=>t().getLayer(a)&&t().removeLayer(a)),solidJs.createEffect(()=>{void 0!==e.visible&&t().setLayoutProperty(a,"visibility",e.visible?"visible":"none")}),e.children},Terrain=e=>{const t=useMap(),a=useSourceId();return solidJs.createEffect(()=>{t().setTerrain({...e.style,source:a})}),solidJs.onCleanup(()=>t().setTerrain(null)),solidJs.createEffect(()=>{void 0!==e.visible&&t().setTerrain(e.visible?e.style:null)}),e.children},Control=a=>{const o=useMap(),[e,s]=solidJs.createSignal(null);return solidJs.createEffect(()=>{var e,t=((e,t)=>{if(a.custom)return new a.custom(t);switch(e){case"navigation":return new mapboxgl__default.default.NavigationControl(t);case"scale":return new mapboxgl__default.default.ScaleControl(t);case"attribution":return new mapboxgl__default.default.AttributionControl(t);case"geolocate":return new mapboxgl__default.default.GeolocateControl(t);case"fullscreen":return new mapboxgl__default.default.FullscreenControl;default:throw new Error("Unknown control type: "+e)}})(a.type,a.options);t&&null!=(e=o())&&e.addControl(t,a.position),s(t)}),solidJs.onCleanup(()=>o().removeControl(e())),a.children},_tmpl$$1=web.template("<div></div>",2),Marker=t=>{const a=useMap();let o=null;return solidJs.createEffect(()=>{var e;o=new mapboxgl__default.default.Marker(t.options).setLngLat(t.lnglat).setPopup(t.children?(new mapboxgl__default.default.Popup).setDOMContent((e=_tmpl$$1.cloneNode(!0),web.insert(e,()=>t.children),e)):null).addTo(a())}),solidJs.onCleanup(()=>o.remove()),solidJs.createEffect(()=>o&&o.setLngLat(t.lnglat)),[]},_tmpl$=web.template("<div></div>",2),Popup=t=>{const a=useMap();let o=null;return solidJs.createEffect(()=>{var e;o=new mapboxgl__default.default.Popup(t.options).setLngLat(t.lnglat).setDOMContent((e=_tmpl$.cloneNode(!0),web.insert(e,()=>t.children),e)).addTo(a())}),solidJs.onCleanup(()=>o.remove()),solidJs.createEffect(()=>o&&o.setLngLat(t.lnglat)),solidJs.createEffect(()=>o&&o.setDOMContent((()=>{var e=_tmpl$.cloneNode(!0);return web.insert(e,()=>t.children),e})())),[]},Image=a=>{const o=useMap();return solidJs.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)}),solidJs.onCleanup(()=>o().hasImage(a.id)&&o().removeImage(a.id)),solidJs.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))}),[]},lerp=(a,o,s)=>a.map((e,t)=>(1-s)*a[t]+s*o[t]),slerp=(a,o,s)=>{return a.map((e,t)=>Math.sin(.075*(1-s))/Math.sin(.075)*a[t]+Math.sin(.075*s)/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=n=>{const i=useMap();let l=.1,p=!1;const c=e=>{n.animate&&window.requestAnimationFrame(c);var t=[n.translate.start,n.translate.end,n.translate.easing?easeQuad[n.translate.easing](l):l],t=("line"===n.translate.type?lerp:slerp)(...t);{var[[t,a,o],s]=[t,n.translate.target];const r=i().getFreeCameraOptions();r.position=mapboxgl.MercatorCoordinate.fromLngLat([t,a],o),r.lookAtPoint(s),i().setFreeCameraOptions(r)}!n.translate.loop&&(1<l||l<0)&&(p=!p),l=p?l-.001:l+.001};return solidJs.createEffect(async()=>{n.animate&&window.requestAnimationFrame(c)}),n.children};exports.Camera=Camera,exports.Control=Control,exports.Fog=Fog,exports.Image=Image,exports.Layer=Layer,exports.Marker=Marker,exports.Popup=Popup,exports.Sky=Sky,exports.Source=Source,exports.Terrain=Terrain,exports.default=MapGL,exports.useMap=useMap,exports.useSourceId=useSourceId;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var web=require("solid-js/web"),solidJs=require("solid-js"),mapboxgl=require("mapbox-gl");function _interopDefaultLegacy(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var mapboxgl__default=_interopDefaultLegacy(mapboxgl);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",vectorStyleList={"mb:light":mapBase+"/light-v10","mb:dark":mapBase+"/dark-v10","mb:streets":mapBase+"/streets-v11","mb:outdoor":mapBase+"/outdoors-v11","mb:sat":mapBase+"/satellite-v9","mb:sat-streets":mapBase+"/satellite-streets-v11","mb:nav":mapBase+"/navigation-guidance-day-v4","mb:nav-night":mapBase+"/navigation-guidance-night-v4","mb:basic":mapBase+"/cjf4m44iw0uza2spb3q0a7s41","mb:monochrome":mapBase+"/cjv6rzz4j3m4b1fqcchuxclhb","mb:leshine":mapBase+"/cjcunv5ae262f2sm9tfwg8i0w","mb:icecream":mapBase+"/cj7t3i5yj0unt2rmt3y4b5e32","mb:cali":mapBase+"/cjerxnqt3cgvp2rmyuxbeqme7","mb:northstar":mapBase+"/cj44mfrt20f082snokim4ungi","mb:mineral":mapBase+"/cjtep62gq54l21frr1whf27ak","mb:moonlight":mapBase+"/cj3kbeqzo00022smj7akz3o1e","mb:frank":mapBase+"-map-design/ckshxkppe0gge18nz20i0nrwq","mb:minimo":mapBase+"-map-design/cksjc2nsq1bg117pnekb655h1","mb:decimal":mapBase+"-map-design/ck4014y110wt61ctt07egsel6","mb:standard":mapBase+"-map-design/ckr0svm3922ki18qntevm857n","mb:blueprint":mapBase+"-map-design/cks97e1e37nsd17nzg7p0308g","mb:bubble":mapBase+"-map-design/cksysy2nl62zp17quosctdtcc","mb:pencil":mapBase+"-map-design/cks9iema71es417mlrft4go2k","mb:swiss-ski":gitBase+"/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json","mb:vintage":gitBase+"/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json","mb:whaam":gitBase+"/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json","mb:neon":gitBase+"/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json","mb:camoflauge":gitBase+"/jingsam/mapbox-gl-styles/master/Camouflage.json","mb:emerald":gitBase+"/jingsam/mapbox-gl-styles/master/Emerald.json","mb:runner":gitBase+"/jingsam/mapbox-gl-styles/master/Runner.json","mb:x-ray":gitBase+"/jingsam/mapbox-gl-styles/master/X-ray.json"},rasterStyleList={"osm:org":["https://tile.openstreetmap.org/{z}/{x}/{y}.png",'Map &copy; <a href="https://www.openstreetmap.org"><em>OpenStreetMap</em></a>'],"osm:human":["https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",'Map &copy; <a href="http://hot.openstreetmap.org"><em>Humanitarian OpenStreetMap Team</em></a>'],"osm:cycle":["https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",'Maps &copy; <a href="https://www.cyclosm.org" target="_blank"><em>CyclOSM</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"carto:voyager":["https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:positron":["https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:dark":["https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"open:topo":["https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",'Maps &copy; <a href="https://opentopomap.org/credits"><em>OpenTopoMap</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner-lite":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:watercolor":["https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:terrain":["https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:cycle":["https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans":["https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans-dark":["https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:landscape":["https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:outdoors":["https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:neighbourhood":["https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:spinal":["https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:pioneer":["https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:atlas":["https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:mobile":["https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>']},_tmpl$$2=web.template("<section></section>",2),_tmpl$2=web.template("<div></div>",2);let mapRef,containerRef;const MapContext=solidJs.createContext(),useMap=()=>solidJs.useContext(MapContext),MapGL=r=>{r.id=r.id||solidJs.createUniqueId();const[a,o]=solidJs.createSignal(),[,n]=solidJs.useTransition(),[i,l]=solidJs.createSignal("flyTo");return solidJs.onMount(()=>{var e;const s=new mapboxgl__default.default.Map({...r.options,style:vectorStyleList[null==(e=r.options)?void 0:e.style]||(null==(e=r.options)?void 0:e.style)||{version:8,sources:{},layers:[]},container:mapRef,interactive:!!r.onViewportChange,bounds:null==(e=r.viewport)?void 0:e.bounds,center:null==(e=r.viewport)?void 0:e.center,zoom:(null==(e=r.viewport)?void 0:e.zoom)||null,pitch:(null==(e=r.viewport)?void 0:e.pitch)||null,bearing:(null==(e=r.viewport)?void 0:e.bearing)||null,fitBoundsOptions:{padding:null==(e=r.viewport)?void 0:e.padding}});s.container=containerRef,s.once("styledata").then(()=>o(s)),solidJs.onCleanup(()=>s.remove()),solidJs.createEffect(()=>mapEvents.forEach(t=>{if(r[t]){const e=t.slice(2).toLowerCase(),a=e=>r[t](e);s.on(e,a),solidJs.onCleanup(()=>s.off(e,a))}})),solidJs.createEffect(()=>{s.showTileBoundaries=r.showTileBoundaries,s.showTerrainWireframe=r.showTerrainWireframe,s.showPadding=r.showPadding,s.showCollisionBoxes=r.showCollisionBoxes,s.showOverdrawInspector=r.showOverdrawInspector}),solidJs.createEffect(()=>s.getCanvas().style.cursor=r.cursorStyle),solidJs.createEffect(()=>l(r.transitionType)),solidJs.createEffect(solidJs.on(()=>{var e;return null==(e=r.options)?void 0:e.projection},e=>s.setProjection(e),{defer:!0})),solidJs.createEffect(solidJs.on(()=>{var e;return null==(e=r.options)?void 0:e.style},e=>{const a=s.getStyle(),t=a.layers.filter(e=>e.id.startsWith("cl-")),o=Object.keys(a.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:a.sources[t]}),{});s.setStyle(vectorStyleList[e]||e||{version:8,sources:{},layers:[]}),s.once("styledata",()=>{var e=s.getStyle();s.setStyle({...e,sources:{...e.sources,...o},layers:[...e.layers,...t]})})},{defer:!0})),solidJs.createEffect(()=>{var e;const t={id:null,center:s.getCenter(),zoom:s.getZoom(),pitch:s.getPitch(),bearing:s.getBearing(),padding:null==(e=r.viewport)?void 0:e.padding,bounds:null==(e=r.viewport)?void 0:e.bounds},a=e=>{e.originalEvent&&r.onViewportChange&&r.onViewportChange({...t,id:r.id}),l("jumpTo")},o=e=>{e.originalEvent&&r.onViewportChange&&r.onViewportChange(t),l(r.transitionType)};s.on("move",a).on("moveend",o),solidJs.onCleanup(()=>s.off("move",a).off("moveend",o))}),solidJs.createEffect(e=>{var t;return(null==(t=r.viewport)?void 0:t.bounds)!=e&&r.onViewportChange({...r.viewport,...s.cameraForBounds(null==(t=r.viewport)?void 0:t.bounds,{padding:null==(e=r.viewport)?void 0:e.padding})}),null==(t=r.viewport)?void 0:t.bounds},null==(e=r.viewport)?void 0:e.bounds),solidJs.createEffect(()=>{var e;if(r.id!==(null==(e=r.viewport)?void 0:e.id)){var t={...r.viewport,padding:(null==(e=r.viewport)?void 0:e.padding)||0};switch(solidJs.untrack(i)){case"easeTo":s.stop().easeTo(t);case"jumpTo":s.stop().jumpTo(t);default:s.stop().flyTo(t)}}});let t=0;solidJs.createEffect(()=>{r.triggerResize&&(t=0,window.requestAnimationFrame(function e(){t<15&&(t++,window.requestAnimationFrame(e),n(()=>s.resize()))}))})}),web.createComponent(MapContext.Provider,{value:a,get children(){return[(()=>{const e=_tmpl$$2.cloneNode(!0),t=containerRef;return"function"==typeof t?t(e):containerRef=e,e.style.setProperty("position","absolute"),e.style.setProperty("z-index","1"),web.insert(e,()=>a()?r.children:null),e})(),(()=>{const s=_tmpl$2.cloneNode(!0),e=mapRef;return"function"==typeof e?e(s):mapRef=s,web.effect(e=>{var t=null==r?void 0:r.class,a=null==r?void 0:r.classList,o={height:"100%",width:"100%",...r.style};return t!==e._v$&&web.className(s,e._v$=t),e._v$2=web.classList(s,a,e._v$2),e._v$3=web.style(s,o,e._v$3),e},{_v$:void 0,_v$2:void 0,_v$3:void 0}),s})()]}})},SourceContext=solidJs.createContext(),useSourceId=()=>solidJs.useContext(SourceContext),Source=o=>{const s=useMap(),r=(o.id=o.id||solidJs.createUniqueId(),e=>rasterStyleList[e]?{...o.source,url:"",tiles:[rasterStyleList[e][0].replace("{apikey}",o.source.apikey)],attribution:rasterStyleList[e][1]}:o.source);return solidJs.createEffect(()=>{const t=r(o.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),s().getSource(o.id)||s().addSource(o.id,t)}),solidJs.onCleanup(()=>{s().getStyle().layers.forEach(e=>e.source===o.id&&s().removeLayer(e.id)),s().getSource(o.id)&&s().removeSource(o.id)}),solidJs.createEffect(()=>{const e=s().getSource(o.id);if(e&&("geojson"===o.source.type&&o.source.data&&e.setData(o.source.data),"image"===o.source.type&&(o.source.url||o.source.coordinates)&&e.updateImage(o.source.url,o.source.coordinates),"vector"===o.source.type&&(o.source.url||o.source.tiles)&&(o.source.url?e.setUrl(o.source.url):e.setTiles(o.source.tiles)),"raster"===o.source.type&&(o.source.url||o.source.tiles))){var t;const a=r(o.source.url);a.tiles&&(a.tiles=["a","b","c"].map(e=>a.tiles[0].replace("{s}",e))),null!=(t=e._tileJSONRequest)&&t.cancel(),e.url=a.url,e.scheme=a.scheme,e._options={...e._options,...a},null!=(t=s().style._sourceCaches["other:"+o.id])&&t.clearTiles(),e.load()}}),web.createComponent(SourceContext.Provider,{get value(){return o.id},get children(){return o.children}})},diff=(o={},s={})=>{return[...new Set([...Object.keys(o),...Object.keys(s)])].reduce((e,t)=>{var a=o[t];return a!==s[t]&&e.push([t,a]),e},[])},Layer=s=>{const r=useMap(),t=useSourceId();return s.id=s.id||solidJs.createUniqueId(),solidJs.createEffect(()=>{var e;r().getLayer(s.id)||r().addLayer(s.customLayer||{...s.style,id:s.id,source:t,metadata:{smg:{beforeType:s.beforeType,beforeId:s.beforeId}}},s.beforeType?null==(e=r())?void 0:e.getStyle().layers.find(e=>e.type===s.beforeType).id:s.beforeId)}),solidJs.onCleanup(()=>r().getLayer(s.id)&&r().removeLayer(s.id)),solidJs.createEffect(()=>layerEvents.forEach(t=>{if(s[t]){var e;const a=t.slice(2).toLowerCase(),o=e=>s[t](e);null!=(e=r())&&e.on(a,s.id,o),solidJs.onCleanup(()=>{var e;return null==(e=r())?void 0:e.off(a,s.id,o)})}})),solidJs.createEffect(e=>{if(s.style&&r().style&&r().getSource(t)&&r().getLayer(s.id))return s.style.layout!==(null==e?void 0:e.layout)&&diff(s.style.layout,null==e?void 0:e.layout).forEach(([e,t])=>r().setLayoutProperty(s.id,e,t,{validate:!1})),s.style.paint!==(null==e?void 0:e.paint)&&diff(s.style.paint,null==e?void 0:e.paint).forEach(([e,t])=>r().setPaintProperty(s.id,e,t,{validate:!1})),s.style.minzoom===(null==e?void 0:e.minzoom)&&s.style.maxzoom===(null==e?void 0:e.maxzoom)||r().setLayerZoomRange(s.id,s.style.minzoom,s.style.maxzoom),s.style.filter!==(null==e?void 0:e.filter)&&r().setFilter(s.id,s.style.filter,{validate:!1}),s.style},s.style),solidJs.createEffect(e=>{if(void 0!==s.visible&&s.visible!==e&&r().getSource(t)&&r().getLayer(s.id))return r().setLayoutProperty(s.id,"visibility",s.visible?"visible":"none",{validate:!1}),s.visible},s.visible),solidJs.createEffect(async()=>{s.filter&&(r().isStyleLoaded()||await r().once("styledata"),r().setFilter(s.id,s.filter))}),solidJs.createEffect(async()=>{s.featureState&&s.featureState.id&&(r().isStyleLoaded()||await r().once("styledata"),r().removeFeatureState({source:t,sourceLayer:s.style["source-layer"]}),r().setFeatureState({source:t,sourceLayer:s.style["source-layer"],id:s.featureState.id},s.featureState.state))}),s.children},Fog=e=>{const t=useMap();return solidJs.createEffect(()=>{t().setFog(e.style)}),solidJs.onCleanup(()=>t().setFog(null)),solidJs.createEffect(()=>{void 0!==e.visible&&t().setFog(e.visible?e.style:null)}),e.children},Sky=e=>{const t=useMap(),a="_sky";return solidJs.createEffect(()=>{t().getLayer(a)&&t().addLayer({...e.style,id:a})}),solidJs.onCleanup(()=>t().getLayer(a)&&t().removeLayer(a)),solidJs.createEffect(()=>{void 0!==e.visible&&t().setLayoutProperty(a,"visibility",e.visible?"visible":"none")}),e.children},Terrain=e=>{const t=useMap(),a=useSourceId();return solidJs.createEffect(()=>{t().setTerrain({...e.style,source:a})}),solidJs.onCleanup(()=>t().setTerrain(null)),solidJs.createEffect(()=>{void 0!==e.visible&&t().setTerrain(e.visible?e.style:null)}),e.children},Control=a=>{const o=useMap(),[e,s]=solidJs.createSignal(null);return solidJs.createEffect(()=>{var e,t=((e,t)=>{if(a.custom)return new a.custom(t);switch(e){case"navigation":return new mapboxgl__default.default.NavigationControl(t);case"scale":return new mapboxgl__default.default.ScaleControl(t);case"attribution":return new mapboxgl__default.default.AttributionControl(t);case"geolocate":return new mapboxgl__default.default.GeolocateControl(t);case"fullscreen":return new mapboxgl__default.default.FullscreenControl;default:throw new Error("Unknown control type: "+e)}})(a.type,a.options);t&&null!=(e=o())&&e.addControl(t,a.position),s(t)}),solidJs.onCleanup(()=>o().removeControl(e())),a.children},_tmpl$$1=web.template("<div></div>",2),Marker=t=>{const a=useMap();let o=null;return solidJs.createEffect(()=>{var e;o=new mapboxgl__default.default.Marker(t.options).setLngLat(t.lnglat).setPopup(t.children?(new mapboxgl__default.default.Popup).setDOMContent((e=_tmpl$$1.cloneNode(!0),web.insert(e,()=>t.children),e)):null).addTo(a())}),solidJs.onCleanup(()=>o.remove()),solidJs.createEffect(()=>o&&o.setLngLat(t.lnglat)),[]},_tmpl$=web.template("<div></div>",2),Popup=t=>{const a=useMap();let o=null;return solidJs.createEffect(()=>{var e;o=new mapboxgl__default.default.Popup(t.options).setLngLat(t.lnglat).setDOMContent((e=_tmpl$.cloneNode(!0),web.insert(e,()=>t.children),e)).addTo(a())}),solidJs.onCleanup(()=>o.remove()),solidJs.createEffect(()=>o&&o.setLngLat(t.lnglat)),solidJs.createEffect(()=>o&&o.setDOMContent((()=>{var e=_tmpl$.cloneNode(!0);return web.insert(e,()=>t.children),e})())),[]},Image=a=>{const o=useMap();return solidJs.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)}),solidJs.onCleanup(()=>o().hasImage(a.id)&&o().removeImage(a.id)),solidJs.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))}),[]},lerp=(a,o,s)=>a.map((e,t)=>(1-s)*a[t]+s*o[t]),slerp=(a,o,s)=>{return a.map((e,t)=>Math.sin(.075*(1-s))/Math.sin(.075)*a[t]+Math.sin(.075*s)/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=n=>{const i=useMap();let l=.1,p=!1;const c=e=>{n.animate&&window.requestAnimationFrame(c);var t=[n.translate.start,n.translate.end,n.translate.easing?easeQuad[n.translate.easing](l):l],t=("line"===n.translate.type?lerp:slerp)(...t);{var[[t,a,o],s]=[t,n.translate.target];const r=i().getFreeCameraOptions();r.position=mapboxgl.MercatorCoordinate.fromLngLat([t,a],o),r.lookAtPoint(s),i().setFreeCameraOptions(r)}!n.translate.loop&&(1<l||l<0)&&(p=!p),l=p?l-.001:l+.001};return solidJs.createEffect(async()=>{n.animate&&window.requestAnimationFrame(c)}),n.children};exports.Camera=Camera,exports.Control=Control,exports.Fog=Fog,exports.Image=Image,exports.Layer=Layer,exports.Marker=Marker,exports.Popup=Popup,exports.Sky=Sky,exports.Source=Source,exports.Terrain=Terrain,exports.default=MapGL,exports.useMap=useMap,exports.useSourceId=useSourceId;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/styles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Fog/index.tsx","../../src/components/Sky/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'\n\nexport const vectorStyleList = {\n 'mb:light': `${mapBase}/light-v10`,\n 'mb:dark': `${mapBase}/dark-v10`,\n 'mb:streets': `${mapBase}/streets-v11`,\n 'mb:outdoor': `${mapBase}/outdoors-v11`,\n 'mb:sat': `${mapBase}/satellite-v9`,\n 'mb:sat-streets': `${mapBase}/satellite-streets-v11`,\n 'mb:nav': `${mapBase}/navigation-guidance-day-v4`,\n 'mb:nav-night': `${mapBase}/navigation-guidance-night-v4`,\n\n 'mb:basic': `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n 'mb:monochrome': `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n 'mb:leshine': `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n 'mb:icecream': `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n 'mb:cali': `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n 'mb:northstar': `${mapBase}/cj44mfrt20f082snokim4ungi`,\n 'mb:mineral': `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n 'mb:moonlight': `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n 'mb:frank': `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n 'mb:minimo': `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n 'mb:decimal': `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n 'mb:standard': `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n 'mb:blueprint': `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n 'mb:bubble': `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n 'mb:pencil': `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n\n 'mb:swiss-ski': `${gitBase}/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n 'mb:vintage': `${gitBase}/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n 'mb:whaam': `${gitBase}/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n 'mb:neon': `${gitBase}/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n 'mb:camoflauge': `${gitBase}/jingsam/mapbox-gl-styles/master/Camouflage.json`,\n 'mb:emerald': `${gitBase}/jingsam/mapbox-gl-styles/master/Emerald.json`,\n 'mb:runner': `${gitBase}/jingsam/mapbox-gl-styles/master/Runner.json`,\n 'mb:x-ray': `${gitBase}/jingsam/mapbox-gl-styles/master/X-ray.json`,\n}\n\nexport const rasterStyleList = {\n 'osm:org': [\n 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"https://www.openstreetmap.org\"><em>OpenStreetMap</em></a>',\n ],\n 'osm:human': [\n 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"http://hot.openstreetmap.org\"><em>Humanitarian OpenStreetMap Team</em></a>',\n ],\n 'osm:cycle': [\n 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://www.cyclosm.org\" target=\"_blank\"><em>CyclOSM</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'carto:voyager': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:positron': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:dark': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'open:topo': [\n 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://opentopomap.org/credits\"><em>OpenTopoMap</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner-lite': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:watercolor': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:terrain': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:cycle': [\n 'https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans': [\n 'https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans-dark': [\n 'https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:landscape': [\n 'https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:outdoors': [\n 'https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:neighbourhood': [\n 'https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:spinal': [\n 'https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:pioneer': [\n 'https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:atlas': [\n 'https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:mobile': [\n 'https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n on,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../styles'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\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 { 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 triggerResize?: boolean\n repaint?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: Element | Element[]\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLDivElement\n let containerRef: HTMLElement\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [pending, start] = useTransition()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n\n onMount(async () => {\n map = new mapboxgl.Map({\n ...props.options,\n style: vectorStyleList[props.options?.style] ||\n props.options?.style || { version: 8, sources: {}, layers: [] },\n container: mapRef || 'map',\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.container = containerRef\n\n await map.once('styledata')\n setMapRoot(map)\n })\n\n onCleanup(() => map.remove())\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\n }\n })\n )\n\n // Update debug features\n createEffect(() => {\n if (!mapRoot()) return\n mapRoot().showTileBoundaries = props.showTileBoundaries\n mapRoot().showTerrainWireframe = props.showTerrainWireframe\n mapRoot().showPadding = props.showPadding\n mapRoot().showCollisionBoxes = props.showCollisionBoxes\n mapRoot().showOverdrawInspector = props.showOverdrawInspector\n mapRoot().getCanvas().style.cursor = props.cursorStyle\n })\n\n createEffect(() => setTransitionType(props.transitionType))\n\n // Update projection\n createEffect(\n on(\n () => props.options?.projection,\n proj => map.setProjection(proj),\n { defer: true }\n )\n )\n\n // Update map style\n createEffect(\n on(\n () => props.options?.style,\n style => {\n const oldStyle = map.getStyle()\n const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n const oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n map.setStyle(\n vectorStyleList[style] ||\n style || { version: 8, sources: {}, layers: [] }\n )\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 },\n { defer: true }\n )\n )\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 let index = 0\n\n createEffect(() => {\n if (props.triggerResize) {\n index = 0\n window.requestAnimationFrame(function loop() {\n if (index < 15) {\n index++\n window.requestAnimationFrame(loop)\n start(() => map.resize())\n }\n })\n }\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n <section\n ref={containerRef}\n style={{ position: 'absolute', 'z-index': 1 }}>\n {mapRoot() ? props.children : null}\n </section>\n <div\n id='map'\n ref={mapRef}\n class={props.class || null}\n classList={props.classList || null}\n style={{ height: '100%', width: '100%', ...props.style }}\n />\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 '../../styles'\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 rasterStyleList[url]\n ? {\n ...props.source,\n url: '',\n tiles: [\n rasterStyleList[url][0].replace('{apikey}', props.source.apikey),\n ],\n attribution: rasterStyleList[url][1],\n }\n : props.source\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 // 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 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 // 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 //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 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 Fog: Component<{\n style: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n createEffect(() => {\n map().setFog(props.style)\n })\n\n // Remove Fog 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 } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n\n // Add Sky Layer\n createEffect(() => {\n map().getLayer(layerId) && map().addLayer({ ...props.style, id: layerId })\n })\n\n // Remove Sky Layer\n onCleanup(() => map().getLayer(layerId) && map().removeLayer(layerId))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n TerrainSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n map().setTerrain({ ...props.style, source: sourceId })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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 const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n // Add Control\n createEffect(() => {\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 mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { MarkerSpecification } 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 children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n createEffect(() => {\n marker = new mapboxgl.Marker(props.options)\n .setLngLat(props.lnglat)\n .setPopup(\n props.children\n ? new mapboxgl.Popup().setDOMContent(<div>{props.children}</div>)\n : null\n )\n .addTo(map())\n })\n // Remove Marker\n onCleanup(() => marker.remove())\n\n // Update Position\n createEffect(() => marker && marker.setLngLat(props.lnglat))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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(() => {\n popup = new mapboxgl.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 && popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup && 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 // 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 // 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 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 { MercatorCoordinate } from 'mapbox-gl'\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 = ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = 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","vectorStyleList","mb:light","mb:dark","mb:streets","mb:outdoor","mb:sat","mb:sat-streets","mb:nav","mb:nav-night","mb:basic","mb:monochrome","mb:leshine","mb:icecream","mb:cali","mb:northstar","mb:mineral","mb:moonlight","mb:frank","mb:minimo","mb:decimal","mb:standard","mb:blueprint","mb:bubble","mb:pencil","mb:swiss-ski","mb:vintage","mb:whaam","mb:neon","mb:camoflauge","mb:emerald","mb:runner","mb:x-ray","rasterStyleList","osm:org","osm:human","osm:cycle","carto:voyager","carto:positron","carto:dark","open:topo","stamen:toner","stamen:toner-lite","stamen:watercolor","stamen:terrain","tf:cycle","tf:trans","tf:trans-dark","tf:landscape","tf:outdoors","tf:neighbourhood","tf:spinal","tf:pioneer","tf:atlas","tf:mobile","MapContext","createContext","useMap","useContext","MapGL","props","_props$viewport13","let","map","mapRef","containerRef","id","createUniqueId","mapRoot","setMapRoot","createSignal","start","useTransition","transitionType","setTransitionType","onMount","async","_props$viewport6","mapboxgl","Map","options","style","_props$options","_props$options2","version","sources","layers","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","once","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","cursor","cursorStyle","_props$options3","projection","proj","setProjection","defer","_props$options4","oldStyle","getStyle","oldLayers","filter","l","startsWith","oldSources","Object","keys","s","reduce","obj","key","setStyle","newStyle","_props$viewport8","getCenter","getZoom","getPitch","getBearing","_props$viewport7","callMove","originalEvent","callEnd","prev","_props$viewport12","_props$viewport9","cameraForBounds","_props$viewport10","_props$viewport11","_props$viewport15","_props$viewport14","untrack","stop","easeTo","jumpTo","flyTo","index","triggerResize","window","requestAnimationFrame","loop","resize","_$createComponent","createComponent","Provider","value","children","_el$","_tmpl$","cloneNode","_ref$","setProperty","_$insert","insert","_el$2","_tmpl$2","_ref$2","_$effect","_p$","_v$","class","_v$2","classList","_v$3","height","width","_$className","className","_$classList","_$style","undefined","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","attribution","i","getSource","addSource","layer","removeLayer","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","_map$style$_sourceCac","src","_source$_tileJSONRequ","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","_map","getLayer","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","_map2","_map3","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","isStyleLoaded","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","loadImage","_","image","hasImage","addImage","removeImage","error","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","params","translate","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/styles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Fog/index.tsx","../../src/components/Sky/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'\n\nexport const vectorStyleList = {\n 'mb:light': `${mapBase}/light-v10`,\n 'mb:dark': `${mapBase}/dark-v10`,\n 'mb:streets': `${mapBase}/streets-v11`,\n 'mb:outdoor': `${mapBase}/outdoors-v11`,\n 'mb:sat': `${mapBase}/satellite-v9`,\n 'mb:sat-streets': `${mapBase}/satellite-streets-v11`,\n 'mb:nav': `${mapBase}/navigation-guidance-day-v4`,\n 'mb:nav-night': `${mapBase}/navigation-guidance-night-v4`,\n\n 'mb:basic': `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n 'mb:monochrome': `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n 'mb:leshine': `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n 'mb:icecream': `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n 'mb:cali': `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n 'mb:northstar': `${mapBase}/cj44mfrt20f082snokim4ungi`,\n 'mb:mineral': `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n 'mb:moonlight': `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n 'mb:frank': `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n 'mb:minimo': `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n 'mb:decimal': `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n 'mb:standard': `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n 'mb:blueprint': `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n 'mb:bubble': `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n 'mb:pencil': `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n\n 'mb:swiss-ski': `${gitBase}/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n 'mb:vintage': `${gitBase}/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n 'mb:whaam': `${gitBase}/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n 'mb:neon': `${gitBase}/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n 'mb:camoflauge': `${gitBase}/jingsam/mapbox-gl-styles/master/Camouflage.json`,\n 'mb:emerald': `${gitBase}/jingsam/mapbox-gl-styles/master/Emerald.json`,\n 'mb:runner': `${gitBase}/jingsam/mapbox-gl-styles/master/Runner.json`,\n 'mb:x-ray': `${gitBase}/jingsam/mapbox-gl-styles/master/X-ray.json`,\n}\n\nexport const rasterStyleList = {\n 'osm:org': [\n 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"https://www.openstreetmap.org\"><em>OpenStreetMap</em></a>',\n ],\n 'osm:human': [\n 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"http://hot.openstreetmap.org\"><em>Humanitarian OpenStreetMap Team</em></a>',\n ],\n 'osm:cycle': [\n 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://www.cyclosm.org\" target=\"_blank\"><em>CyclOSM</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'carto:voyager': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:positron': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:dark': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'open:topo': [\n 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://opentopomap.org/credits\"><em>OpenTopoMap</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner-lite': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:watercolor': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:terrain': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:cycle': [\n 'https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans': [\n 'https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans-dark': [\n 'https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:landscape': [\n 'https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:outdoors': [\n 'https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:neighbourhood': [\n 'https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:spinal': [\n 'https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:pioneer': [\n 'https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:atlas': [\n 'https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:mobile': [\n 'https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n on,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../styles'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\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 { 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\nlet mapRef: HTMLDivElement\nlet containerRef: HTMLElement\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 triggerResize?: boolean\n repaint?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: Element | Element[]\n}> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [pending, start] = useTransition()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n\n onMount(() => {\n const map: MapboxMap = new mapboxgl.Map({\n ...props.options,\n style: vectorStyleList[props.options?.style] ||\n props.options?.style || { version: 8, sources: {}, layers: [] },\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.container = containerRef\n\n map.once('styledata').then(() => setMapRoot(map))\n\n onCleanup(() => map.remove())\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\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(() => (map.getCanvas().style.cursor = props.cursorStyle))\n //Update transition type\n createEffect(() => setTransitionType(props.transitionType))\n // Update projection\n createEffect(\n on(\n () => props.options?.projection,\n proj => map.setProjection(proj),\n { defer: true }\n )\n )\n\n // Update map style\n createEffect(\n on(\n () => props.options?.style,\n style => {\n const oldStyle = map.getStyle()\n const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n const oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce(\n (obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }),\n {}\n )\n map.setStyle(\n vectorStyleList[style] ||\n style || { version: 8, sources: {}, layers: [] }\n )\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 },\n { defer: true }\n )\n )\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 let index = 0\n\n createEffect(() => {\n if (props.triggerResize) {\n index = 0\n window.requestAnimationFrame(function loop() {\n if (index < 15) {\n index++\n window.requestAnimationFrame(loop)\n start(() => map.resize())\n }\n })\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n <section\n ref={containerRef}\n style={{ position: 'absolute', 'z-index': 1 }}>\n {mapRoot() ? props.children : null}\n </section>\n <div\n ref={mapRef}\n class={props?.class}\n classList={props?.classList}\n style={{ height: '100%', width: '100%', ...props.style }}\n />\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 '../../styles'\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 rasterStyleList[url]\n ? {\n ...props.source,\n url: '',\n tiles: [\n rasterStyleList[url][0].replace('{apikey}', props.source.apikey),\n ],\n attribution: rasterStyleList[url][1],\n }\n : props.source\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 // 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 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 // 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 //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 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 Fog: Component<{\n style: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n createEffect(() => {\n map().setFog(props.style)\n })\n\n // Remove Fog 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 } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n\n // Add Sky Layer\n createEffect(() => {\n map().getLayer(layerId) && map().addLayer({ ...props.style, id: layerId })\n })\n\n // Remove Sky Layer\n onCleanup(() => map().getLayer(layerId) && map().removeLayer(layerId))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n TerrainSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n map().setTerrain({ ...props.style, source: sourceId })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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 const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n // Add Control\n createEffect(() => {\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 mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { MarkerSpecification } 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 children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n createEffect(() => {\n marker = new mapboxgl.Marker(props.options)\n .setLngLat(props.lnglat)\n .setPopup(\n props.children\n ? new mapboxgl.Popup().setDOMContent(<div>{props.children}</div>)\n : null\n )\n .addTo(map())\n })\n // Remove Marker\n onCleanup(() => marker.remove())\n\n // Update Position\n createEffect(() => marker && marker.setLngLat(props.lnglat))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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(() => {\n popup = new mapboxgl.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 && popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup && 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 // 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 // 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 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 { MercatorCoordinate } from 'mapbox-gl'\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 = ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = 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","vectorStyleList","mb:light","mb:dark","mb:streets","mb:outdoor","mb:sat","mb:sat-streets","mb:nav","mb:nav-night","mb:basic","mb:monochrome","mb:leshine","mb:icecream","mb:cali","mb:northstar","mb:mineral","mb:moonlight","mb:frank","mb:minimo","mb:decimal","mb:standard","mb:blueprint","mb:bubble","mb:pencil","mb:swiss-ski","mb:vintage","mb:whaam","mb:neon","mb:camoflauge","mb:emerald","mb:runner","mb:x-ray","rasterStyleList","osm:org","osm:human","osm:cycle","carto:voyager","carto:positron","carto:dark","open:topo","stamen:toner","stamen:toner-lite","stamen:watercolor","stamen:terrain","tf:cycle","tf:trans","tf:trans-dark","tf:landscape","tf:outdoors","tf:neighbourhood","tf:spinal","tf:pioneer","tf:atlas","tf:mobile","let","mapRef","containerRef","MapContext","createContext","useMap","useContext","MapGL","props","id","createUniqueId","mapRoot","setMapRoot","createSignal","start","useTransition","transitionType","setTransitionType","onMount","_props$viewport13","map","mapboxgl","Map","options","style","_props$options","_props$options2","version","sources","layers","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","_props$viewport6","once","then","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","cursor","cursorStyle","_props$options3","projection","proj","setProjection","defer","_props$options4","oldStyle","getStyle","oldLayers","filter","l","startsWith","oldSources","Object","keys","s","reduce","obj","key","setStyle","newStyle","_props$viewport8","getCenter","getZoom","getPitch","getBearing","_props$viewport7","callMove","originalEvent","callEnd","prev","_props$viewport12","_props$viewport9","cameraForBounds","_props$viewport10","_props$viewport11","_props$viewport15","_props$viewport14","untrack","stop","easeTo","jumpTo","flyTo","index","triggerResize","window","requestAnimationFrame","loop","resize","_$createComponent","createComponent","Provider","value","children","_el$","_tmpl$","cloneNode","_ref$","setProperty","_$insert","insert","_el$2","_tmpl$2","_ref$2","_$effect","_p$","_v$","class","_v$2","classList","_v$3","height","width","_$className","className","_$classList","_$style","undefined","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","attribution","i","getSource","addSource","layer","removeLayer","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","_map$style$_sourceCac","src","_source$_tileJSONRequ","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","_map","getLayer","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","_map2","_map3","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","async","isStyleLoaded","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","loadImage","_","image","hasImage","addImage","removeImage","error","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","params","translate","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions"],"mappings":"gTAAA,MAAMA,UAAsB,CAC1B,cACA,YACA,cACA,aACA,cACA,eACA,eACA,aACA,UACA,aACA,gBACA,eACA,aACA,gBACA,UACA,WACA,WACA,cACA,cACA,SACA,YACA,cACA,SACA,YACA,cACA,SACA,YACA,gBACA,WACA,aACA,eACA,UACA,aACA,iBACA,eACA,kBACA,qBACA,yBACA,SACA,WACA,SACA,UACA,SACA,cACA,eACA,gBACA,qBACA,sBACA,uBAGIC,YAAwB,CAC5B,cACA,YACA,cACA,aACA,cACA,eACA,eACA,UACA,aACA,gBACA,eACA,aACA,iBCjEIC,QAAU,yBACVC,QAAU,oCAEHC,gBAAkB,CAC7BC,WAAeH,QAAF,aACbI,UAAcJ,QAAF,YACZK,aAAiBL,QAAF,eACfM,aAAiBN,QAAF,gBACfO,SAAaP,QAAF,gBACXQ,iBAAqBR,QAAF,yBACnBS,SAAaT,QAAF,8BACXU,eAAmBV,QAAF,gCAEjBW,WAAeX,QAAF,6BACbY,gBAAoBZ,QAAF,6BAClBa,aAAiBb,QAAF,6BACfc,cAAkBd,QAAF,6BAChBe,UAAcf,QAAF,6BACZgB,eAAmBhB,QAAF,6BACjBiB,aAAiBjB,QAAF,6BACfkB,eAAmBlB,QAAF,6BACjBmB,WAAenB,QAAF,wCACboB,YAAgBpB,QAAF,wCACdqB,aAAiBrB,QAAF,wCACfsB,cAAkBtB,QAAF,wCAChBuB,eAAmBvB,QAAF,wCACjBwB,YAAgBxB,QAAF,wCACdyB,YAAgBzB,QAAF,wCAEd0B,eAAmBzB,QAAF,0EACjB0B,aAAiB1B,QAAF,wEACf2B,WAAe3B,QAAF,sEACb4B,UAAc5B,QAAF,mEACZ6B,gBAAoB7B,QAAF,mDAClB8B,aAAiB9B,QAAF,gDACf+B,YAAgB/B,QAAF,+CACdgC,WAAehC,QAAF,+CAGFiC,gBAAkB,CAC7BC,UAAW,CACT,iDACA,iFAEFC,YAAa,CACX,wDACA,kGAEFC,YAAa,CACX,oEACA,+LAEFC,gBAAiB,CACf,qFACA,0EAEFC,iBAAkB,CAChB,0EACA,0EAEFC,aAAc,CACZ,yEACA,0EAEFC,YAAa,CACX,mDACA,2LAEFC,eAAgB,CACd,kEACA,gMAEFC,oBAAqB,CACnB,uEACA,gMAEFC,oBAAqB,CACnB,uEACA,gMAEFC,iBAAkB,CAChB,oEACA,gMAEFC,WAAY,CACV,8EACA,uMAEFC,WAAY,CACV,+EACA,uMAEFC,gBAAiB,CACf,oFACA,uMAEFC,eAAgB,CACd,+EACA,uMAEFC,cAAe,CACb,8EACA,uMAEFC,mBAAoB,CAClB,mFACA,uMAEFC,YAAa,CACX,gFACA,uMAEFC,aAAc,CACZ,6EACA,uMAEFC,WAAY,CACV,2EACA,uMAEFC,YAAa,CACX,kFACA,6RCzFJC,IAAIC,OACAC,aAEJ,MAAMC,WAAaC,QAAaA,gBAEnBC,OAAS,IAAiBC,QAAUA,WAACH,YAGrCI,MAqCRC,IACHA,EAAMC,GAAKD,EAAMC,IAAMC,QAAcA,iBAErC,KAAM,CAACC,EAASC,GAAcC,QAAYA,eACpC,CAAA,CAAUC,GAASC,QAAaA,gBAChC,CAACC,EAAgBC,GAAqBJ,QAAYA,aAAC,SAiKzD,OA/JAK,QAAAA,QAAQ,KAAM,IAAAC,EACZ,MAAMC,EAAiB,IAAIC,kBAAQ,QAACC,IAAI,IACnCd,EAAMe,QACTC,MAAO9E,gBAAe,OAAA+E,EAACjB,EAAMe,cAAN,EAAAE,EAAeD,kBACpChB,EAAMe,cAAN,EAAAG,EAAeF,QAAS,CAAEG,QAAS,EAAGC,QAAS,GAAIC,OAAQ,IAC7DC,UAAW7B,OACX8B,cAAevB,EAAMwB,iBACrBC,gBAAQzB,EAAM0B,eAAR,EAAEC,EAAgBF,OACxBG,gBAAQ5B,EAAM0B,eAAR,EAAEG,EAAgBD,OACxBE,eAAM9B,EAAM0B,eAAUI,EAAAA,EAAAA,OAAQ,KAC9BC,gBAAO/B,EAAM0B,eAAUK,EAAAA,EAAAA,QAAS,KAChCC,kBAAShC,EAAM0B,eAAUM,EAAAA,EAAAA,UAAW,KACpCC,iBAAkB,CAAEC,QAASlC,OAAAA,EAAAA,EAAM0B,iBAANS,EAAgBD,WAG/CtB,EAAIU,UAAY5B,aAEhBkB,EAAIwB,KAAK,aAAaC,KAAK,IAAMjC,EAAWQ,IAE5C0B,QAAAA,UAAU,IAAM1B,EAAI2B,UAGpBC,QAAAA,aAAa,IACX1G,UAAU2G,QAAQC,IAChB,GAAI1C,EAAM0C,GAAO,CACf,MAAMC,EAAQD,EAAKE,MAAM,GAAGC,cACtBC,EAAWC,GAAK/C,EAAM0C,GAAMK,GAClCnC,EAAIoC,GAAGL,EAAOG,GACdR,QAASA,UAAC,IAAM1B,EAAIqC,IAAIN,EAAOG,QAMrCN,QAAAA,aAAa,KACX5B,EAAIsC,mBAAqBlD,EAAMkD,mBAC/BtC,EAAIuC,qBAAuBnD,EAAMmD,qBACjCvC,EAAIwC,YAAcpD,EAAMoD,YACxBxC,EAAIyC,mBAAqBrD,EAAMqD,mBAC/BzC,EAAI0C,sBAAwBtD,EAAMsD,wBAIpCd,qBAAa,IAAO5B,EAAI2C,YAAYvC,MAAMwC,OAASxD,EAAMyD,aAEzDjB,QAAAA,aAAa,IAAM/B,EAAkBT,EAAMQ,iBAE3CgC,QAAYA,aACVQ,QAAEA,GACA,KAAA,IAAAU,EAAA,OAAA,OAAAA,EAAM1D,EAAMe,cAAZ,EAAM2C,EAAeC,YACrBC,GAAQhD,EAAIiD,cAAcD,GAC1B,CAAEE,OAAO,KAKbtB,QAAYA,aACVQ,QAAEA,GACA,KAAA,IAAAe,EAAA,OAAA,OAAAA,EAAM/D,EAAMe,cAAZ,EAAMgD,EAAe/C,OACrBA,IACE,MAAMgD,EAAWpD,EAAIqD,WACfC,EAAYF,EAAS3C,OAAO8C,OAAOC,GAAKA,EAAEnE,GAAGoE,WAAW,QACxDC,EAAaC,OAAOC,KAAKR,EAAS5C,SACrC+C,OAAOM,GAAKA,EAAEJ,WAAW,QACzBK,OACC,CAACC,EAAKC,KAAS,IAAKD,GAAMC,GAAMZ,EAAS5C,QAAQwD,KACjD,IAEJhE,EAAIiE,SACF3I,gBAAgB8E,IACdA,GAAS,CAAEG,QAAS,EAAGC,QAAS,GAAIC,OAAQ,KAEhDT,EAAIwB,KAAK,YAAa,KACpB,IAAM0C,EAAWlE,EAAIqD,WACrBrD,EAAIiE,SAAS,IACRC,EACH1D,QAAS,IAAK0D,EAAS1D,WAAYkD,GACnCjD,OAAQ,IAAIyD,EAASzD,UAAW6C,QAItC,CAAEJ,OAAO,KAKbtB,QAAAA,aAAa,KAAM,IAAAuC,EACjB,MAAMrD,EAAW,CACfzB,GAAI,KACJ2B,OAAQhB,EAAIoE,YACZlD,KAAMlB,EAAIqE,UACVlD,MAAOnB,EAAIsE,WACXlD,QAASpB,EAAIuE,aACbjD,iBAASlC,EAAM0B,eAAR,EAAE0D,EAAgBlD,QACzBT,OAAQzB,OAAAA,EAAAA,EAAM0B,iBAANqD,EAAgBtD,QAGpB4D,EAAW1C,IACXA,EAAM2C,eACRtF,EAAMwB,kBACJxB,EAAMwB,iBAAiB,IAAKE,EAAUzB,GAAID,EAAMC,KACpDQ,EAAkB,WAGd8E,EAAU5C,IACVA,EAAM2C,eACRtF,EAAMwB,kBAAoBxB,EAAMwB,iBAAiBE,GACnDjB,EAAkBT,EAAMQ,iBAG1BI,EAAIoC,GAAG,OAAQqC,GAAUrC,GAAG,UAAWuC,GACvCjD,kBAAU,IAAM1B,EAAIqC,IAAI,OAAQoC,GAAUpC,IAAI,UAAWsC,MAI3D/C,QAAAA,aAAagD,IAAQ,IAAAC,EAQnB,gBAPIzF,EAAM0B,eAAN,EAAAgE,EAAgBjE,SAAU+D,GAC5BxF,EAAMwB,iBAAiB,IAClBxB,EAAM0B,YACNd,EAAI+E,gBAAgB3F,OAAAA,EAAAA,EAAM0B,eAA1B,EAAoBkE,EAAgBnE,OAAQ,CAC7CS,QAASlC,OAAAA,EAAAA,EAAM0B,iBAANmE,EAAgB3D,YAG/B,OAAAuD,EAAOzF,EAAM0B,eAAb,EAAO+D,EAAgBhE,QARb,OAAAd,EASTX,EAAM0B,iBAANf,EAAgBc,QAGnBe,QAAAA,aAAa,KAAM,IAAAsD,EACjB,GAAI9F,EAAMC,MAAOD,OAAAA,EAAAA,EAAM0B,eAAN,EAAAqE,EAAgB9F,IAAjC,CACA,IAAMyB,EAAW,IACZ1B,EAAM0B,SACTQ,SAASlC,OAAAA,EAAAA,EAAM0B,eAAN,EAAAoE,EAAgB5D,UAAW,GAEtC,OAAQ8D,QAAAA,QAAQxF,IACd,IAAK,SACHI,EAAIqF,OAAOC,OAAOxE,GACpB,IAAK,SACHd,EAAIqF,OAAOE,OAAOzE,GACpB,QACEd,EAAIqF,OAAOG,MAAM1E,OAIvBlC,IAAI6G,EAAQ,EAEZ7D,QAAAA,aAAa,KACPxC,EAAMsG,gBACRD,EAAQ,EACRE,OAAOC,sBAAsB,SAASC,IAChCJ,EAAQ,KACVA,IACAE,OAAOC,sBAAsBC,GAC7BnG,EAAM,IAAMM,EAAI8F,kBAQvBC,IAAAC,gBAAAjH,WAAWkH,SADd,CACuBC,MAAO3G,EAD9B4G,eAAA,MAAA,EAAA,KAAA,MAAAC,EAAAC,SAAAC,WAAA,GAAAC,EAGWzH,aAHX,MAAA,mBAAAyH,EAAAA,EAAAH,GAGWtH,aAHXsH,EAAAA,EAAAhG,MAAAoG,YAAA,WAAA,YAAAJ,EAAAhG,MAAAoG,YAAA,UAAA,KAAAC,IAAAC,OAAAN,EAAA,IAKO7G,IAAYH,EAAM+G,SAAW,MALpCC,GAAA,IAAA,KAAA,MAAAO,EAAAC,QAAAN,WAAA,GAAAO,EAQWhI,OARX,MAAA,mBAAAgI,EAAAA,EAAAF,GAQW9H,OARX8H,EAAAG,IAAAA,OAAAC,IAAA,IAAAC,EASa5H,MAAAA,OAAAA,EAAAA,EAAO6H,MATpBC,EAUiB9H,MAAAA,OAAAA,EAAAA,EAAO+H,UACXC,EAAA,CAAEC,OAAQ,OAAQC,MAAO,UAAWlI,EAAMgB,OAXvD,OAAA4G,IAAAD,EAAAC,KAAAO,IAAAC,UAAAb,EAAAI,EAAAC,IAAAA,GAAAD,EAAAG,KAAAO,cAAAd,EAAAO,EAAAH,EAAAG,MAAAH,EAAAK,KAAAM,UAAAf,EAAAS,EAAAL,EAAAK,MAAAL,GAAA,CAAAC,SAAAW,EAAAT,UAAAS,EAAAP,UAAAO,IAAAhB,GAAA,QCvOIiB,cAAgB5I,QAAaA,gBACtB6I,YAAc,IAAc3I,QAAUA,WAAC0I,eAEvCE,OAMR1I,IACH,MAAMY,EAAiBf,SAGjB8I,GAFN3I,EAAMC,GAAKD,EAAMC,IAAMC,QAAcA,iBAEtB0I,GACb1K,gBAAgB0K,GACZ,IACK5I,EAAM6I,OACTD,IAAK,GACLE,MAAO,CACL5K,gBAAgB0K,GAAK,GAAGG,QAAQ,WAAY/I,EAAM6I,OAAOG,SAE3DC,YAAa/K,gBAAgB0K,GAAK,IAEpC5I,EAAM6I,QAgEZ,OA7DArG,QAAAA,aAAa,KACX,MAAMqG,EAASF,EAAO3I,EAAM6I,OAAOD,KACnCC,EAAOC,QACJD,EAAOC,MAAQ,CAAC,IAAK,IAAK,KAAKlI,IAAIsI,GAClCL,EAAOC,MAAM,GAAGC,QAAQ,MAAOG,KAElCtI,IAAMuI,UAAUnJ,EAAMC,KAAOW,IAAMwI,UAAUpJ,EAAMC,GAAI4I,KAI1DvG,QAAAA,UAAU,KACR1B,IACGqD,WACA5C,OAAOoB,QACN4G,GAASA,EAAMR,SAAW7I,EAAMC,IAAMW,IAAM0I,YAAYD,EAAMpJ,KAElEW,IAAMuI,UAAUnJ,EAAMC,KAAOW,IAAM2I,aAAavJ,EAAMC,MAIxDuC,QAAAA,aAAa,KACX,MAAMqG,EAASjI,IAAMuI,UAAUnJ,EAAMC,IACrC,GAAK4I,IAGqB,YAAtB7I,EAAM6I,OAAOW,MAAsBxJ,EAAM6I,OAAOY,MAClDZ,EAAOa,QAAQ1J,EAAM6I,OAAOY,MAIN,UAAtBzJ,EAAM6I,OAAOW,OACZxJ,EAAM6I,OAAOD,KAAO5I,EAAM6I,OAAOc,cAElCd,EAAOe,YAAY5J,EAAM6I,OAAOD,IAAK5I,EAAM6I,OAAOc,aAI5B,WAAtB3J,EAAM6I,OAAOW,OACZxJ,EAAM6I,OAAOD,KAAO5I,EAAM6I,OAAOC,SAElC9I,EAAM6I,OAAOD,IACTC,EAAOgB,OAAO7J,EAAM6I,OAAOD,KAC3BC,EAAOiB,SAAS9J,EAAM6I,OAAOC,QAIX,WAAtB9I,EAAM6I,OAAOW,OACZxJ,EAAM6I,OAAOD,KAAO5I,EAAM6I,OAAOC,QAClC,CAAA,IAAAiB,EACA,MAAMC,EAAMrB,EAAO3I,EAAM6I,OAAOD,KAChCoB,EAAIlB,QACDkB,EAAIlB,MAAQ,CAAC,IAAK,IAAK,KAAKlI,IAAIsI,GAAKc,EAAIlB,MAAM,GAAGC,QAAQ,MAAOG,KACpE,OAAAe,EAAApB,EAAOqB,mBAAPD,EAAyBE,SACzBtB,EAAOD,IAAMoB,EAAIpB,IACjBC,EAAOuB,OAASJ,EAAII,OACpBvB,EAAOwB,SAAW,IAAKxB,EAAOwB,YAAaL,GAC3C,OAAAD,EAAAnJ,IAAMI,MAAMsJ,cAAe,SAAQtK,EAAMC,MAAzC8J,EAAgDQ,aAChD1B,EAAO2B,UAKR7D,IAAAC,gBAAA4B,cAAc3B,SADjB,CAAAC,YAAA,OACiC9G,EAAMC,IADvC8G,eAAA,OAEK/G,EAAM+G,aC3FP0D,KAAO,CACXC,EAA+B,GAC/BC,EAAgC,MAGhC,MAAO,IADM,IAAIC,IAAI,IAAIrG,OAAOC,KAAKkG,MAAcnG,OAAOC,KAAKmG,MAC9CjG,OAAO,CAACmG,EAAKjG,KAC5B,IAAMkC,EAAQ4D,EAAS9F,GAIvB,OAHIkC,IAAU6D,EAAU/F,IACtBiG,EAAIC,KAAK,CAAClG,EAAKkC,IAEV+D,GACN,KAGQE,MAqBR/K,IACH,MAAMY,EAAiBf,SACjBmL,EAAmBvC,cAyHzB,OAxHAzI,EAAMC,GAAKD,EAAMC,IAAMC,QAAcA,iBAGrCsC,QAAAA,aAAa,KAAM,IAAAyI,EAChBrK,IAAMsK,SAASlL,EAAMC,KACpBW,IAAMuK,SACJnL,EAAMoL,aAAe,IAChBpL,EAAMgB,MACTf,GAAID,EAAMC,GACV4I,OAAQmC,EACRK,SAAU,CACRC,IAAK,CAAEC,WAAYvL,EAAMuL,WAAYC,SAAUxL,EAAMwL,YAGzDxL,EAAMuL,WACF3K,OAAAA,EAAAA,UADJ,EACIqK,EACIhH,WACD5C,OAAOoK,KAAKrH,GAAKA,EAAEoF,OAASxJ,EAAMuL,YAAYtL,GACjDD,EAAMwL,YAKhBlJ,QAAAA,UAAU,IAAM1B,IAAMsK,SAASlL,EAAMC,KAAOW,IAAM0I,YAAYtJ,EAAMC,KAGpEuC,QAAAA,aAAa,IACXzG,YAAY0G,QAAQC,IAClB,GAAI1C,EAAM0C,GAAO,CAAA,IAAAgJ,EACf,MAAM/I,EAAQD,EAAKE,MAAM,GAAGC,cACtBC,EAAWC,GAAK/C,EAAM0C,GAAMK,GAClC,OAAAnC,EAAAA,MAAA8K,EAAO1I,GAAGL,EAAO3C,EAAMC,GAAI6C,GAC3BR,QAAAA,UAAU,KAAA,IAAAqJ,EAAA,OAAA,OAAAA,EAAM/K,UAAA,EAAA+K,EAAO1I,IAAIN,EAAO3C,EAAMC,GAAI6C,SAMlDN,QAAAA,aAAcgD,IACZ,GACGxF,EAAMgB,OACNJ,IAAMI,OACNJ,IAAMuI,UAAU6B,IAChBpK,IAAMsK,SAASlL,EAAMC,IA2BxB,OAvBID,EAAMgB,MAAM4K,UAAWpG,MAAAA,OAAvB,EAAuBA,EAAMoG,SAC/BnB,KAAKzK,EAAMgB,MAAM4K,OAAQpG,MAAAA,SAAAA,EAAMoG,QAAQnJ,QAAQ,CAAA,CAAEmC,EAAKkC,KACpDlG,IAAMiL,kBAAkB7L,EAAMC,GAAI2E,EAAKkC,EAAO,CAAEgF,UAAU,KAG1D9L,EAAMgB,MAAM+K,SAAUvG,MAAAA,OAAtB,EAAsBA,EAAMuG,QAC9BtB,KAAKzK,EAAMgB,MAAM+K,MAAOvG,MAAAA,SAAAA,EAAMuG,OAAOtJ,QAAQ,CAAA,CAAEmC,EAAKkC,KAClDlG,IAAMoL,iBAAiBhM,EAAMC,GAAI2E,EAAKkC,EAAO,CAAEgF,UAAU,KAI3D9L,EAAMgB,MAAMiL,WAAYzG,MAAAA,OAAxB,EAAwBA,EAAMyG,UAC9BjM,EAAMgB,MAAMkL,WAAY1G,MAAAA,SAAAA,EAAM0G,UAE9BtL,IAAMuL,kBACJnM,EAAMC,GACND,EAAMgB,MAAMiL,QACZjM,EAAMgB,MAAMkL,SAGZlM,EAAMgB,MAAMmD,UAAWqB,MAAAA,OAAvB,EAAuBA,EAAMrB,SAC/BvD,IAAMwL,UAAUpM,EAAMC,GAAID,EAAMgB,MAAMmD,OAAQ,CAAE2H,UAAU,IAErD9L,EAAMgB,OACZhB,EAAMgB,OAGTwB,QAAAA,aAAcgD,IACZ,QACoB+C,IAAlBvI,EAAMqM,SACNrM,EAAMqM,UAAY7G,GACjB5E,IAAMuI,UAAU6B,IAChBpK,IAAMsK,SAASlL,EAAMC,IAUxB,OANAW,IAAMiL,kBACJ7L,EAAMC,GACN,aACAD,EAAMqM,QAAU,UAAY,OAC5B,CAAEP,UAAU,IAEP9L,EAAMqM,SACZrM,EAAMqM,SAGT7J,QAAAA,aAAa8J,UACNtM,EAAMmE,SAEVvD,IAAM2L,uBAA0B3L,IAAMwB,KAAK,aAC5CxB,IAAMwL,UAAUpM,EAAMC,GAAID,EAAMmE,WAIlC3B,QAAAA,aAAa8J,UACNtM,EAAMwM,cAAiBxM,EAAMwM,aAAavM,KAE9CW,IAAM2L,uBAA0B3L,IAAMwB,KAAK,aAE5CxB,IAAM6L,mBAAmB,CACvB5D,OAAQmC,EACR0B,YAAa1M,EAAMgB,MAAM,kBAE3BJ,IAAM+L,gBACJ,CACE9D,OAAQmC,EACR0B,YAAa1M,EAAMgB,MAAM,gBACzBf,GAAID,EAAMwM,aAAavM,IAEzBD,EAAMwM,aAAaI,UAIhB5M,EAAM+G,UCpKF8F,IAIR7M,IACH,MAAMY,EAAiBf,SAevB,OAbA2C,QAAAA,aAAa,KACX5B,IAAMkM,OAAO9M,EAAMgB,SAIrBsB,QAAAA,UAAU,IAAM1B,IAAMkM,OAAO,OAG7BtK,QAAAA,aAAa,UACO+F,IAAlBvI,EAAMqM,SACJzL,IAAMkM,OAAO9M,EAAMqM,QAAUrM,EAAMgB,MAAQ,QAGxChB,EAAM+G,UCpBFgG,IAIR/M,IACH,MAAMY,EAAiBf,SACjBmN,EAAU,OAoBhB,OAjBAxK,QAAAA,aAAa,KACX5B,IAAMsK,SAAS8B,IAAYpM,IAAMuK,SAAS,IAAKnL,EAAMgB,MAAOf,GAAI+M,MAIlE1K,kBAAU,IAAM1B,IAAMsK,SAAS8B,IAAYpM,IAAM0I,YAAY0D,IAG7DxK,QAAAA,aAAa,UACO+F,IAAlBvI,EAAMqM,SACJzL,IAAMiL,kBACJmB,EACA,aACAhN,EAAMqM,QAAU,UAAY,UAI3BrM,EAAM+G,UCtBFkG,QAIRjN,IACH,MAAMY,EAAiBf,SACjBmL,EAAgCvC,cAgBtC,OAbAjG,QAAAA,aAAa,KACX5B,IAAMsM,WAAW,IAAKlN,EAAMgB,MAAO6H,OAAQmC,MAI7C1I,QAAAA,UAAU,IAAM1B,IAAMsM,WAAW,OAGjC1K,QAAAA,aAAa,UACO+F,IAAlBvI,EAAMqM,SACJzL,IAAMsM,WAAWlN,EAAMqM,QAAUrM,EAAMgB,MAAQ,QAG5ChB,EAAM+G,UCrBFoG,QAYRnN,IACH,MAAMY,EAAiBf,SACjB,CAACuN,EAASC,GAAchN,QAAYA,aAAC,MA8B3C,OARAmC,QAAAA,aAAa,KAAM,IAAAyI,EACXmC,GArBW,CAAC5D,EAAMzI,KACxB,GAAIf,EAAMsN,OAAQ,OAAO,IAAItN,EAAMsN,OAAOvM,GAC1C,OAAQyI,GACN,IAAK,aACH,OAAO,IAAI3I,kBAAQ,QAAC0M,kBAAkBxM,GACxC,IAAK,QACH,OAAO,IAAIF,kBAAQ,QAAC2M,aAAazM,GACnC,IAAK,cACH,OAAO,IAAIF,kBAAQ,QAAC4M,mBAAmB1M,GACzC,IAAK,YACH,OAAO,IAAIF,kBAAQ,QAAC6M,iBAAiB3M,GACvC,IAAK,aACH,OAAO,IAAIF,kBAAAA,QAAS8M,kBAEtB,QACE,MAAM,IAAIC,MAAO,yBAAwBpE,KAM7BqE,CAAW7N,EAAMwJ,KAAMxJ,EAAMe,SAC7CqM,GAAWxM,OAAAA,EAAAA,MAAAqK,EAAO6C,WAAWV,EAASpN,EAAM+N,UAC5CV,EAAWD,KAGb9K,QAASA,UAAC,IAAM1B,IAAMoN,cAAcZ,MAE7BpN,EAAM+G,iDC/CFkH,OAIRjO,IACH,MAAMY,EAAiBf,SACvBL,IAAI0O,EAAS,KAmBb,OAhBA1L,QAAAA,aAAa,KAKH,IAAAwE,EAJRkH,EAAS,IAAIrN,kBAAAA,QAASoN,OAAOjO,EAAMe,SAChCoN,UAAUnO,EAAMoO,QAChBC,SACCrO,EAAM+G,UACF,IAAIlG,kBAAQ,QAACyN,OAAQC,eAArBvH,EAAAC,SAAAC,WAAA,GAAAG,IAAAA,OAAyCrH,EAAAA,IAAAA,EAAM+G,UAA/CC,IACA,MAELwH,MAAM5N,OAGX0B,QAAAA,UAAU,IAAM4L,EAAO3L,UAGvBC,QAAYA,aAAC,IAAM0L,GAAUA,EAAOC,UAAUnO,EAAMoO,SAEpD,yCCzBWE,MAIRtO,IACH,MAAMY,EAAiBf,SACvBL,IAAIiP,EAAQ,KAmBZ,OAhBAjM,QAAAA,aAAa,KACH,IAAAwE,EAARyH,EAAQ,IAAI5N,kBAAAA,QAASyN,MAAMtO,EAAMe,SAC9BoN,UAAUnO,EAAMoO,QAChBG,eAFKvH,EAAAC,OAAAC,WAAA,GAAAG,IAAAA,OAEerH,EAAAA,IAAAA,EAAM+G,UAFrBC,IAGLwH,MAAM5N,OAIX0B,QAAAA,UAAU,IAAMmM,EAAMlM,UAGtBC,QAAYA,aAAC,IAAMiM,GAASA,EAAMN,UAAUnO,EAAMoO,SAGlD5L,QAAAA,aAAa,IAAMiM,GAASA,EAAMF,eAAN,KAAA,IAAAhH,EAAAN,OAAAC,WAAA,GAAA,OAAAG,IAAAA,OAA0BrH,EAAAA,IAAAA,EAAM+G,UAAhCQ,GAAA,KAE5B,ICxBWmH,MAUR1O,IACH,MAAMY,EAAiBf,SAkCvB,OAhCA2C,QAAAA,aAAa,KACPxC,EAAM4I,IACRhI,IAAM+N,UACJ3O,EAAM4I,IACN,CAACgG,EAAGC,KACDjO,IAAMkO,SAAS9O,EAAMC,KAAOW,IAAMmO,SAAS/O,EAAMC,GAAI4O,IAGzDjO,IAAMkO,SAAS9O,EAAMC,KACpBW,IAAMmO,SAAS/O,EAAMC,GAAID,EAAM6O,MAAO7O,EAAMe,WAKlDuB,QAAAA,UAAU,IAAM1B,IAAMkO,SAAS9O,EAAMC,KAAOW,IAAMoO,YAAYhP,EAAMC,KAGpEuC,QAAAA,aAAa8J,UACPtM,EAAM6O,OAAS7O,EAAM4I,MAErB5I,EAAM4I,IACRhI,IAAM+N,UAAU3O,EAAM4I,IAAK,CAACqG,EAAOJ,KACjC,GAAII,EAAO,MAAMA,EAChBrO,IAAMkO,SAAS9O,EAAMC,KAAOW,IAAMgJ,YAAY5J,EAAMC,GAAI4O,KAG3DjO,IAAMI,OACJJ,IAAMkO,SAAS9O,EAAMC,KACrBW,IAAMgJ,YAAY5J,EAAMC,GAAID,EAAM6O,UAIxC,IC9CIK,KAAO,CAACC,EAAGC,EAAGC,IAAMF,EAAEvO,IAAI,CAACgO,EAAGU,KAAS,EAAMD,GAAKF,EAAEG,GAAOD,EAAID,EAAEE,IAGjEC,MAAQ,CAACJ,EAAGC,EAAGC,KAKnB,OAAOF,EAAEvO,IACP,CAACgO,EAAGU,IACDE,KAAKC,IANI,MAMC,EAAIJ,IAAcG,KAAKC,IANxB,MAMsCN,EAAEG,GACjDE,KAAKC,IAPI,KAOAJ,GAAaG,KAAKC,IAPlB,MAOgCL,EAAEE,KAK5CI,SAAW,CACfC,GAAKC,GAAsBA,EAAIA,EAC/BC,IAAMD,GAAsB,GAAK,EAAIA,IAAM,EAAIA,GAC/CE,MAAQF,GACNA,EAAI,GAAM,EAAIA,EAAIA,EAAI,EAAIJ,KAAKO,KAAK,EAAIH,EAAI,EAAG,GAAK,GAG3CI,OAaRhQ,IACH,MAAMY,EAAiBf,SACvBL,IAAIyQ,EAAgB,GAChBC,GAAY,EAEhB,MAOMC,EAASC,IACbpQ,EAAMqQ,SAAW9J,OAAOC,sBAAsB2J,GAC9C,IAAMG,EAAS,CACbtQ,EAAMuQ,UAAUjQ,MAChBN,EAAMuQ,UAAUC,IAChBxQ,EAAMuQ,UAAUE,OACZf,SAAS1P,EAAMuQ,UAAUE,QAAQR,GACjCA,GAEAlC,GACqB,SAAzB/N,EAAMuQ,UAAU/G,KAAkB0F,KAAkBK,UAAVe,GAE5CI,CAAAA,GAAAA,CAnB4B,CAACC,EAAKC,EAAKC,GAAMC,GAmB7CJ,CAAqB3C,EAAU/N,EAAMuQ,UAAUO,QAlB/C,MAAMC,EAASnQ,IAAMoQ,uBACrBD,EAAOhD,SAAWkD,SAAAA,mBAAmBC,WAAW,CAACP,EAAKC,GAAMC,GAC5DE,EAAOI,YAAYL,GACnBlQ,IAAMwQ,qBAAqBL,IAiBtB/Q,EAAMuQ,UAAU9J,OAAyB,EAAhBwJ,GAAuBA,EAAgB,KACnEC,GAAaA,GACfD,EAAgBC,EAAYD,EAAgB,KAAQA,EAAgB,MAOtE,OAJAzN,QAAAA,aAAa8J,UACXtM,EAAMqQ,SAAW9J,OAAOC,sBAAsB2J,KAGzCnQ,EAAM+G"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createComponent,insert,effect,className,classList,style,template}from"solid-js/web";import{createContext,useContext,createUniqueId,createSignal,useTransition,onMount,onCleanup,createEffect,on,untrack}from"solid-js";import mapboxgl,{MercatorCoordinate}from"mapbox-gl";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",vectorStyleList={"mb:light":mapBase+"/light-v10","mb:dark":mapBase+"/dark-v10","mb:streets":mapBase+"/streets-v11","mb:outdoor":mapBase+"/outdoors-v11","mb:sat":mapBase+"/satellite-v9","mb:sat-streets":mapBase+"/satellite-streets-v11","mb:nav":mapBase+"/navigation-guidance-day-v4","mb:nav-night":mapBase+"/navigation-guidance-night-v4","mb:basic":mapBase+"/cjf4m44iw0uza2spb3q0a7s41","mb:monochrome":mapBase+"/cjv6rzz4j3m4b1fqcchuxclhb","mb:leshine":mapBase+"/cjcunv5ae262f2sm9tfwg8i0w","mb:icecream":mapBase+"/cj7t3i5yj0unt2rmt3y4b5e32","mb:cali":mapBase+"/cjerxnqt3cgvp2rmyuxbeqme7","mb:northstar":mapBase+"/cj44mfrt20f082snokim4ungi","mb:mineral":mapBase+"/cjtep62gq54l21frr1whf27ak","mb:moonlight":mapBase+"/cj3kbeqzo00022smj7akz3o1e","mb:frank":mapBase+"-map-design/ckshxkppe0gge18nz20i0nrwq","mb:minimo":mapBase+"-map-design/cksjc2nsq1bg117pnekb655h1","mb:decimal":mapBase+"-map-design/ck4014y110wt61ctt07egsel6","mb:standard":mapBase+"-map-design/ckr0svm3922ki18qntevm857n","mb:blueprint":mapBase+"-map-design/cks97e1e37nsd17nzg7p0308g","mb:bubble":mapBase+"-map-design/cksysy2nl62zp17quosctdtcc","mb:pencil":mapBase+"-map-design/cks9iema71es417mlrft4go2k","mb:swiss-ski":gitBase+"/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json","mb:vintage":gitBase+"/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json","mb:whaam":gitBase+"/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json","mb:neon":gitBase+"/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json","mb:camoflauge":gitBase+"/jingsam/mapbox-gl-styles/master/Camouflage.json","mb:emerald":gitBase+"/jingsam/mapbox-gl-styles/master/Emerald.json","mb:runner":gitBase+"/jingsam/mapbox-gl-styles/master/Runner.json","mb:x-ray":gitBase+"/jingsam/mapbox-gl-styles/master/X-ray.json"},rasterStyleList={"osm:org":["https://tile.openstreetmap.org/{z}/{x}/{y}.png",'Map &copy; <a href="https://www.openstreetmap.org"><em>OpenStreetMap</em></a>'],"osm:human":["https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",'Map &copy; <a href="http://hot.openstreetmap.org"><em>Humanitarian OpenStreetMap Team</em></a>'],"osm:cycle":["https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",'Maps &copy; <a href="https://www.cyclosm.org" target="_blank"><em>CyclOSM</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"carto:voyager":["https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:positron":["https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:dark":["https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"open:topo":["https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",'Maps &copy; <a href="https://opentopomap.org/credits"><em>OpenTopoMap</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner-lite":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:watercolor":["https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:terrain":["https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:cycle":["https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans":["https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans-dark":["https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:landscape":["https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:outdoors":["https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:neighbourhood":["https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:spinal":["https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:pioneer":["https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:atlas":["https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:mobile":["https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>']},_tmpl$$2=template("<section></section>",2),_tmpl$2=template('<div id="map"></div>',2),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=n=>{var e;let r,t,a;n.id=n.id||createUniqueId();const[o,s]=createSignal(),[,i]=useTransition(),[p,l]=createSignal("flyTo");onMount(async()=>{var e;(r=new mapboxgl.Map({...n.options,style:vectorStyleList[null==(e=n.options)?void 0:e.style]||(null==(e=n.options)?void 0:e.style)||{version:8,sources:{},layers:[]},container:t||"map",interactive:!!n.onViewportChange,bounds:null==(e=n.viewport)?void 0:e.bounds,center:null==(e=n.viewport)?void 0:e.center,zoom:(null==(e=n.viewport)?void 0:e.zoom)||null,pitch:(null==(e=n.viewport)?void 0:e.pitch)||null,bearing:(null==(e=n.viewport)?void 0:e.bearing)||null,fitBoundsOptions:{padding:null==(e=n.viewport)?void 0:e.padding}})).container=a,await r.once("styledata"),s(r)}),onCleanup(()=>r.remove()),createEffect(()=>mapEvents.forEach(t=>{if(n[t]){const e=t.slice(2).toLowerCase(),a=e=>n[t](e);r.on(e,a),onCleanup(()=>r.off(e,a))}})),createEffect(()=>{o()&&(o().showTileBoundaries=n.showTileBoundaries,o().showTerrainWireframe=n.showTerrainWireframe,o().showPadding=n.showPadding,o().showCollisionBoxes=n.showCollisionBoxes,o().showOverdrawInspector=n.showOverdrawInspector,o().getCanvas().style.cursor=n.cursorStyle)}),createEffect(()=>l(n.transitionType)),createEffect(on(()=>{var e;return null==(e=n.options)?void 0:e.projection},e=>r.setProjection(e),{defer:!0})),createEffect(on(()=>{var e;return null==(e=n.options)?void 0:e.style},e=>{const a=r.getStyle(),t=a.layers.filter(e=>e.id.startsWith("cl-")),o=Object.keys(a.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:a.sources[t]}),{});r.setStyle(vectorStyleList[e]||e||{version:8,sources:{},layers:[]}),r.once("styledata",()=>{var e=r.getStyle();r.setStyle({...e,sources:{...e.sources,...o},layers:[...e.layers,...t]})})},{defer:!0})),createEffect(()=>{var e;const t={id:null,center:r.getCenter(),zoom:r.getZoom(),pitch:r.getPitch(),bearing:r.getBearing(),padding:null==(e=n.viewport)?void 0:e.padding,bounds:null==(e=n.viewport)?void 0:e.bounds},a=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange({...t,id:n.id}),l("jumpTo")},o=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange(t),l(n.transitionType)};r.on("move",a).on("moveend",o),onCleanup(()=>r.off("move",a).off("moveend",o))}),createEffect(e=>{var t;return(null==(t=n.viewport)?void 0:t.bounds)!=e&&n.onViewportChange({...n.viewport,...r.cameraForBounds(null==(t=n.viewport)?void 0:t.bounds,{padding:null==(e=n.viewport)?void 0:e.padding})}),null==(t=n.viewport)?void 0:t.bounds},null==(e=n.viewport)?void 0:e.bounds),createEffect(()=>{var e;if(n.id!==(null==(e=n.viewport)?void 0:e.id)){var t={...n.viewport,padding:(null==(e=n.viewport)?void 0:e.padding)||0};switch(untrack(p)){case"easeTo":r.stop().easeTo(t);case"jumpTo":r.stop().jumpTo(t);default:r.stop().flyTo(t)}}});let c=0;return createEffect(()=>{n.triggerResize&&(c=0,window.requestAnimationFrame(function e(){c<15&&(c++,window.requestAnimationFrame(e),i(()=>r.resize()))}))}),createComponent(MapContext.Provider,{value:o,get children(){return[(()=>{const e=_tmpl$$2.cloneNode(!0),t=a;return"function"==typeof t?t(e):a=e,e.style.setProperty("position","absolute"),e.style.setProperty("z-index","1"),insert(e,()=>o()?n.children:null),e})(),(()=>{const r=_tmpl$2.cloneNode(!0),e=t;return"function"==typeof e?e(r):t=r,effect(e=>{var t=n.class||null,a=n.classList||null,o={height:"100%",width:"100%",...n.style};return t!==e._v$&&className(r,e._v$=t),e._v$2=classList(r,a,e._v$2),e._v$3=style(r,o,e._v$3),e},{_v$:void 0,_v$2:void 0,_v$3:void 0}),r})()]}})},SourceContext=createContext(),useSourceId=()=>useContext(SourceContext),Source=o=>{const r=useMap(),n=(o.id=o.id||createUniqueId(),e=>rasterStyleList[e]?{...o.source,url:"",tiles:[rasterStyleList[e][0].replace("{apikey}",o.source.apikey)],attribution:rasterStyleList[e][1]}:o.source);return createEffect(()=>{const t=n(o.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),r().getSource(o.id)||r().addSource(o.id,t)}),onCleanup(()=>{r().getStyle().layers.forEach(e=>e.source===o.id&&r().removeLayer(e.id)),r().getSource(o.id)&&r().removeSource(o.id)}),createEffect(()=>{const e=r().getSource(o.id);if(e&&("geojson"===o.source.type&&o.source.data&&e.setData(o.source.data),"image"===o.source.type&&(o.source.url||o.source.coordinates)&&e.updateImage(o.source.url,o.source.coordinates),"vector"===o.source.type&&(o.source.url||o.source.tiles)&&(o.source.url?e.setUrl(o.source.url):e.setTiles(o.source.tiles)),"raster"===o.source.type&&(o.source.url||o.source.tiles))){var t;const a=n(o.source.url);a.tiles&&(a.tiles=["a","b","c"].map(e=>a.tiles[0].replace("{s}",e))),null!=(t=e._tileJSONRequest)&&t.cancel(),e.url=a.url,e.scheme=a.scheme,e._options={...e._options,...a},null!=(t=r().style._sourceCaches["other:"+o.id])&&t.clearTiles(),e.load()}}),createComponent(SourceContext.Provider,{get value(){return o.id},get children(){return o.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=r=>{const n=useMap(),t=useSourceId();return r.id=r.id||createUniqueId(),createEffect(()=>{var e;n().getLayer(r.id)||n().addLayer(r.customLayer||{...r.style,id:r.id,source:t,metadata:{smg:{beforeType:r.beforeType,beforeId:r.beforeId}}},r.beforeType?null==(e=n())?void 0:e.getStyle().layers.find(e=>e.type===r.beforeType).id:r.beforeId)}),onCleanup(()=>n().getLayer(r.id)&&n().removeLayer(r.id)),createEffect(()=>layerEvents.forEach(t=>{if(r[t]){var e;const a=t.slice(2).toLowerCase(),o=e=>r[t](e);null!=(e=n())&&e.on(a,r.id,o),onCleanup(()=>{var e;return null==(e=n())?void 0:e.off(a,r.id,o)})}})),createEffect(e=>{if(r.style&&n().style&&n().getSource(t)&&n().getLayer(r.id))return r.style.layout!==(null==e?void 0:e.layout)&&diff(r.style.layout,null==e?void 0:e.layout).forEach(([e,t])=>n().setLayoutProperty(r.id,e,t,{validate:!1})),r.style.paint!==(null==e?void 0:e.paint)&&diff(r.style.paint,null==e?void 0:e.paint).forEach(([e,t])=>n().setPaintProperty(r.id,e,t,{validate:!1})),r.style.minzoom===(null==e?void 0:e.minzoom)&&r.style.maxzoom===(null==e?void 0:e.maxzoom)||n().setLayerZoomRange(r.id,r.style.minzoom,r.style.maxzoom),r.style.filter!==(null==e?void 0:e.filter)&&n().setFilter(r.id,r.style.filter,{validate:!1}),r.style},r.style),createEffect(e=>{if(void 0!==r.visible&&r.visible!==e&&n().getSource(t)&&n().getLayer(r.id))return n().setLayoutProperty(r.id,"visibility",r.visible?"visible":"none",{validate:!1}),r.visible},r.visible),createEffect(async()=>{r.filter&&(n().isStyleLoaded()||await n().once("styledata"),n().setFilter(r.id,r.filter))}),createEffect(async()=>{r.featureState&&r.featureState.id&&(n().isStyleLoaded()||await n().once("styledata"),n().removeFeatureState({source:t,sourceLayer:r.style["source-layer"]}),n().setFeatureState({source:t,sourceLayer:r.style["source-layer"],id:r.featureState.id},r.featureState.state))}),r.children},Fog=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},Sky=e=>{const t=useMap(),a="_sky";return createEffect(()=>{t().getLayer(a)&&t().addLayer({...e.style,id:a})}),onCleanup(()=>t().getLayer(a)&&t().removeLayer(a)),createEffect(()=>{void 0!==e.visible&&t().setLayoutProperty(a,"visibility",e.visible?"visible":"none")}),e.children},Terrain=e=>{const t=useMap(),a=useSourceId();return createEffect(()=>{t().setTerrain({...e.style,source:a})}),onCleanup(()=>t().setTerrain(null)),createEffect(()=>{void 0!==e.visible&&t().setTerrain(e.visible?e.style:null)}),e.children},Control=a=>{const o=useMap(),[e,r]=createSignal(null);return createEffect(()=>{var e,t=((e,t)=>{if(a.custom)return new a.custom(t);switch(e){case"navigation":return new mapboxgl.NavigationControl(t);case"scale":return new mapboxgl.ScaleControl(t);case"attribution":return new mapboxgl.AttributionControl(t);case"geolocate":return new mapboxgl.GeolocateControl(t);case"fullscreen":return new mapboxgl.FullscreenControl;default:throw new Error("Unknown control type: "+e)}})(a.type,a.options);t&&null!=(e=o())&&e.addControl(t,a.position),r(t)}),onCleanup(()=>o().removeControl(e())),a.children},_tmpl$$1=template("<div></div>",2),Marker=t=>{const a=useMap();let o=null;return createEffect(()=>{var e;o=new mapboxgl.Marker(t.options).setLngLat(t.lnglat).setPopup(t.children?(new mapboxgl.Popup).setDOMContent((e=_tmpl$$1.cloneNode(!0),insert(e,()=>t.children),e)):null).addTo(a())}),onCleanup(()=>o.remove()),createEffect(()=>o&&o.setLngLat(t.lnglat)),[]},_tmpl$=template("<div></div>",2),Popup=t=>{const a=useMap();let o=null;return createEffect(()=>{var e;o=new mapboxgl.Popup(t.options).setLngLat(t.lnglat).setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e)).addTo(a())}),onCleanup(()=>o.remove()),createEffect(()=>o&&o.setLngLat(t.lnglat)),createEffect(()=>o&&o.setDOMContent((()=>{var e=_tmpl$.cloneNode(!0);return insert(e,()=>t.children),e})())),[]},Image=a=>{const o=useMap();return 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)}),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))}),[]},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=s=>{const i=useMap();let p=.1,l=!1;const c=e=>{s.animate&&window.requestAnimationFrame(c);var t=[s.translate.start,s.translate.end,s.translate.easing?easeQuad[s.translate.easing](p):p],t=("line"===s.translate.type?lerp:slerp)(...t);{var[[t,a,o],r]=[t,s.translate.target];const n=i().getFreeCameraOptions();n.position=MercatorCoordinate.fromLngLat([t,a],o),n.lookAtPoint(r),i().setFreeCameraOptions(n)}!s.translate.loop&&(1<p||p<0)&&(l=!l),p=l?p-.001:p+.001};return createEffect(async()=>{s.animate&&window.requestAnimationFrame(c)}),s.children};export{Camera,Control,Fog,Image,Layer,Marker,Popup,Sky,Source,Terrain,MapGL as default,useMap,useSourceId};
1
+ import{createComponent,insert,effect,className,classList,style,template}from"solid-js/web";import{createContext,useContext,createUniqueId,createSignal,useTransition,onMount,onCleanup,createEffect,on,untrack}from"solid-js";import mapboxgl,{MercatorCoordinate}from"mapbox-gl";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",vectorStyleList={"mb:light":mapBase+"/light-v10","mb:dark":mapBase+"/dark-v10","mb:streets":mapBase+"/streets-v11","mb:outdoor":mapBase+"/outdoors-v11","mb:sat":mapBase+"/satellite-v9","mb:sat-streets":mapBase+"/satellite-streets-v11","mb:nav":mapBase+"/navigation-guidance-day-v4","mb:nav-night":mapBase+"/navigation-guidance-night-v4","mb:basic":mapBase+"/cjf4m44iw0uza2spb3q0a7s41","mb:monochrome":mapBase+"/cjv6rzz4j3m4b1fqcchuxclhb","mb:leshine":mapBase+"/cjcunv5ae262f2sm9tfwg8i0w","mb:icecream":mapBase+"/cj7t3i5yj0unt2rmt3y4b5e32","mb:cali":mapBase+"/cjerxnqt3cgvp2rmyuxbeqme7","mb:northstar":mapBase+"/cj44mfrt20f082snokim4ungi","mb:mineral":mapBase+"/cjtep62gq54l21frr1whf27ak","mb:moonlight":mapBase+"/cj3kbeqzo00022smj7akz3o1e","mb:frank":mapBase+"-map-design/ckshxkppe0gge18nz20i0nrwq","mb:minimo":mapBase+"-map-design/cksjc2nsq1bg117pnekb655h1","mb:decimal":mapBase+"-map-design/ck4014y110wt61ctt07egsel6","mb:standard":mapBase+"-map-design/ckr0svm3922ki18qntevm857n","mb:blueprint":mapBase+"-map-design/cks97e1e37nsd17nzg7p0308g","mb:bubble":mapBase+"-map-design/cksysy2nl62zp17quosctdtcc","mb:pencil":mapBase+"-map-design/cks9iema71es417mlrft4go2k","mb:swiss-ski":gitBase+"/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json","mb:vintage":gitBase+"/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json","mb:whaam":gitBase+"/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json","mb:neon":gitBase+"/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json","mb:camoflauge":gitBase+"/jingsam/mapbox-gl-styles/master/Camouflage.json","mb:emerald":gitBase+"/jingsam/mapbox-gl-styles/master/Emerald.json","mb:runner":gitBase+"/jingsam/mapbox-gl-styles/master/Runner.json","mb:x-ray":gitBase+"/jingsam/mapbox-gl-styles/master/X-ray.json"},rasterStyleList={"osm:org":["https://tile.openstreetmap.org/{z}/{x}/{y}.png",'Map &copy; <a href="https://www.openstreetmap.org"><em>OpenStreetMap</em></a>'],"osm:human":["https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",'Map &copy; <a href="http://hot.openstreetmap.org"><em>Humanitarian OpenStreetMap Team</em></a>'],"osm:cycle":["https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",'Maps &copy; <a href="https://www.cyclosm.org" target="_blank"><em>CyclOSM</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"carto:voyager":["https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:positron":["https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"carto:dark":["https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png",'Maps &copy; <a href="https://carto.com/attribution"><em>Carto</em></a>'],"open:topo":["https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",'Maps &copy; <a href="https://opentopomap.org/credits"><em>OpenTopoMap</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:toner-lite":["https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:watercolor":["https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"stamen:terrain":["https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg",'Maps &copy; <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:cycle":["https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans":["https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:trans-dark":["https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:landscape":["https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:outdoors":["https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:neighbourhood":["https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:spinal":["https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:pioneer":["https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:atlas":["https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>'],"tf:mobile":["https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}",'Maps &copy; <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data &copy; <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>']},_tmpl$$2=template("<section></section>",2),_tmpl$2=template("<div></div>",2);let mapRef,containerRef;const MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=n=>{n.id=n.id||createUniqueId();const[a,o]=createSignal(),[,s]=useTransition(),[i,p]=createSignal("flyTo");return onMount(()=>{var e;const r=new mapboxgl.Map({...n.options,style:vectorStyleList[null==(e=n.options)?void 0:e.style]||(null==(e=n.options)?void 0:e.style)||{version:8,sources:{},layers:[]},container:mapRef,interactive:!!n.onViewportChange,bounds:null==(e=n.viewport)?void 0:e.bounds,center:null==(e=n.viewport)?void 0:e.center,zoom:(null==(e=n.viewport)?void 0:e.zoom)||null,pitch:(null==(e=n.viewport)?void 0:e.pitch)||null,bearing:(null==(e=n.viewport)?void 0:e.bearing)||null,fitBoundsOptions:{padding:null==(e=n.viewport)?void 0:e.padding}});r.container=containerRef,r.once("styledata").then(()=>o(r)),onCleanup(()=>r.remove()),createEffect(()=>mapEvents.forEach(t=>{if(n[t]){const e=t.slice(2).toLowerCase(),a=e=>n[t](e);r.on(e,a),onCleanup(()=>r.off(e,a))}})),createEffect(()=>{r.showTileBoundaries=n.showTileBoundaries,r.showTerrainWireframe=n.showTerrainWireframe,r.showPadding=n.showPadding,r.showCollisionBoxes=n.showCollisionBoxes,r.showOverdrawInspector=n.showOverdrawInspector}),createEffect(()=>r.getCanvas().style.cursor=n.cursorStyle),createEffect(()=>p(n.transitionType)),createEffect(on(()=>{var e;return null==(e=n.options)?void 0:e.projection},e=>r.setProjection(e),{defer:!0})),createEffect(on(()=>{var e;return null==(e=n.options)?void 0:e.style},e=>{const a=r.getStyle(),t=a.layers.filter(e=>e.id.startsWith("cl-")),o=Object.keys(a.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:a.sources[t]}),{});r.setStyle(vectorStyleList[e]||e||{version:8,sources:{},layers:[]}),r.once("styledata",()=>{var e=r.getStyle();r.setStyle({...e,sources:{...e.sources,...o},layers:[...e.layers,...t]})})},{defer:!0})),createEffect(()=>{var e;const t={id:null,center:r.getCenter(),zoom:r.getZoom(),pitch:r.getPitch(),bearing:r.getBearing(),padding:null==(e=n.viewport)?void 0:e.padding,bounds:null==(e=n.viewport)?void 0:e.bounds},a=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange({...t,id:n.id}),p("jumpTo")},o=e=>{e.originalEvent&&n.onViewportChange&&n.onViewportChange(t),p(n.transitionType)};r.on("move",a).on("moveend",o),onCleanup(()=>r.off("move",a).off("moveend",o))}),createEffect(e=>{var t;return(null==(t=n.viewport)?void 0:t.bounds)!=e&&n.onViewportChange({...n.viewport,...r.cameraForBounds(null==(t=n.viewport)?void 0:t.bounds,{padding:null==(e=n.viewport)?void 0:e.padding})}),null==(t=n.viewport)?void 0:t.bounds},null==(e=n.viewport)?void 0:e.bounds),createEffect(()=>{var e;if(n.id!==(null==(e=n.viewport)?void 0:e.id)){var t={...n.viewport,padding:(null==(e=n.viewport)?void 0:e.padding)||0};switch(untrack(i)){case"easeTo":r.stop().easeTo(t);case"jumpTo":r.stop().jumpTo(t);default:r.stop().flyTo(t)}}});let t=0;createEffect(()=>{n.triggerResize&&(t=0,window.requestAnimationFrame(function e(){t<15&&(t++,window.requestAnimationFrame(e),s(()=>r.resize()))}))})}),createComponent(MapContext.Provider,{value:a,get children(){return[(()=>{const e=_tmpl$$2.cloneNode(!0),t=containerRef;return"function"==typeof t?t(e):containerRef=e,e.style.setProperty("position","absolute"),e.style.setProperty("z-index","1"),insert(e,()=>a()?n.children:null),e})(),(()=>{const r=_tmpl$2.cloneNode(!0),e=mapRef;return"function"==typeof e?e(r):mapRef=r,effect(e=>{var t=null==n?void 0:n.class,a=null==n?void 0:n.classList,o={height:"100%",width:"100%",...n.style};return t!==e._v$&&className(r,e._v$=t),e._v$2=classList(r,a,e._v$2),e._v$3=style(r,o,e._v$3),e},{_v$:void 0,_v$2:void 0,_v$3:void 0}),r})()]}})},SourceContext=createContext(),useSourceId=()=>useContext(SourceContext),Source=o=>{const r=useMap(),n=(o.id=o.id||createUniqueId(),e=>rasterStyleList[e]?{...o.source,url:"",tiles:[rasterStyleList[e][0].replace("{apikey}",o.source.apikey)],attribution:rasterStyleList[e][1]}:o.source);return createEffect(()=>{const t=n(o.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),r().getSource(o.id)||r().addSource(o.id,t)}),onCleanup(()=>{r().getStyle().layers.forEach(e=>e.source===o.id&&r().removeLayer(e.id)),r().getSource(o.id)&&r().removeSource(o.id)}),createEffect(()=>{const e=r().getSource(o.id);if(e&&("geojson"===o.source.type&&o.source.data&&e.setData(o.source.data),"image"===o.source.type&&(o.source.url||o.source.coordinates)&&e.updateImage(o.source.url,o.source.coordinates),"vector"===o.source.type&&(o.source.url||o.source.tiles)&&(o.source.url?e.setUrl(o.source.url):e.setTiles(o.source.tiles)),"raster"===o.source.type&&(o.source.url||o.source.tiles))){var t;const a=n(o.source.url);a.tiles&&(a.tiles=["a","b","c"].map(e=>a.tiles[0].replace("{s}",e))),null!=(t=e._tileJSONRequest)&&t.cancel(),e.url=a.url,e.scheme=a.scheme,e._options={...e._options,...a},null!=(t=r().style._sourceCaches["other:"+o.id])&&t.clearTiles(),e.load()}}),createComponent(SourceContext.Provider,{get value(){return o.id},get children(){return o.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=r=>{const n=useMap(),t=useSourceId();return r.id=r.id||createUniqueId(),createEffect(()=>{var e;n().getLayer(r.id)||n().addLayer(r.customLayer||{...r.style,id:r.id,source:t,metadata:{smg:{beforeType:r.beforeType,beforeId:r.beforeId}}},r.beforeType?null==(e=n())?void 0:e.getStyle().layers.find(e=>e.type===r.beforeType).id:r.beforeId)}),onCleanup(()=>n().getLayer(r.id)&&n().removeLayer(r.id)),createEffect(()=>layerEvents.forEach(t=>{if(r[t]){var e;const a=t.slice(2).toLowerCase(),o=e=>r[t](e);null!=(e=n())&&e.on(a,r.id,o),onCleanup(()=>{var e;return null==(e=n())?void 0:e.off(a,r.id,o)})}})),createEffect(e=>{if(r.style&&n().style&&n().getSource(t)&&n().getLayer(r.id))return r.style.layout!==(null==e?void 0:e.layout)&&diff(r.style.layout,null==e?void 0:e.layout).forEach(([e,t])=>n().setLayoutProperty(r.id,e,t,{validate:!1})),r.style.paint!==(null==e?void 0:e.paint)&&diff(r.style.paint,null==e?void 0:e.paint).forEach(([e,t])=>n().setPaintProperty(r.id,e,t,{validate:!1})),r.style.minzoom===(null==e?void 0:e.minzoom)&&r.style.maxzoom===(null==e?void 0:e.maxzoom)||n().setLayerZoomRange(r.id,r.style.minzoom,r.style.maxzoom),r.style.filter!==(null==e?void 0:e.filter)&&n().setFilter(r.id,r.style.filter,{validate:!1}),r.style},r.style),createEffect(e=>{if(void 0!==r.visible&&r.visible!==e&&n().getSource(t)&&n().getLayer(r.id))return n().setLayoutProperty(r.id,"visibility",r.visible?"visible":"none",{validate:!1}),r.visible},r.visible),createEffect(async()=>{r.filter&&(n().isStyleLoaded()||await n().once("styledata"),n().setFilter(r.id,r.filter))}),createEffect(async()=>{r.featureState&&r.featureState.id&&(n().isStyleLoaded()||await n().once("styledata"),n().removeFeatureState({source:t,sourceLayer:r.style["source-layer"]}),n().setFeatureState({source:t,sourceLayer:r.style["source-layer"],id:r.featureState.id},r.featureState.state))}),r.children},Fog=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},Sky=e=>{const t=useMap(),a="_sky";return createEffect(()=>{t().getLayer(a)&&t().addLayer({...e.style,id:a})}),onCleanup(()=>t().getLayer(a)&&t().removeLayer(a)),createEffect(()=>{void 0!==e.visible&&t().setLayoutProperty(a,"visibility",e.visible?"visible":"none")}),e.children},Terrain=e=>{const t=useMap(),a=useSourceId();return createEffect(()=>{t().setTerrain({...e.style,source:a})}),onCleanup(()=>t().setTerrain(null)),createEffect(()=>{void 0!==e.visible&&t().setTerrain(e.visible?e.style:null)}),e.children},Control=a=>{const o=useMap(),[e,r]=createSignal(null);return createEffect(()=>{var e,t=((e,t)=>{if(a.custom)return new a.custom(t);switch(e){case"navigation":return new mapboxgl.NavigationControl(t);case"scale":return new mapboxgl.ScaleControl(t);case"attribution":return new mapboxgl.AttributionControl(t);case"geolocate":return new mapboxgl.GeolocateControl(t);case"fullscreen":return new mapboxgl.FullscreenControl;default:throw new Error("Unknown control type: "+e)}})(a.type,a.options);t&&null!=(e=o())&&e.addControl(t,a.position),r(t)}),onCleanup(()=>o().removeControl(e())),a.children},_tmpl$$1=template("<div></div>",2),Marker=t=>{const a=useMap();let o=null;return createEffect(()=>{var e;o=new mapboxgl.Marker(t.options).setLngLat(t.lnglat).setPopup(t.children?(new mapboxgl.Popup).setDOMContent((e=_tmpl$$1.cloneNode(!0),insert(e,()=>t.children),e)):null).addTo(a())}),onCleanup(()=>o.remove()),createEffect(()=>o&&o.setLngLat(t.lnglat)),[]},_tmpl$=template("<div></div>",2),Popup=t=>{const a=useMap();let o=null;return createEffect(()=>{var e;o=new mapboxgl.Popup(t.options).setLngLat(t.lnglat).setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e)).addTo(a())}),onCleanup(()=>o.remove()),createEffect(()=>o&&o.setLngLat(t.lnglat)),createEffect(()=>o&&o.setDOMContent((()=>{var e=_tmpl$.cloneNode(!0);return insert(e,()=>t.children),e})())),[]},Image=a=>{const o=useMap();return 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)}),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))}),[]},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=s=>{const i=useMap();let p=.1,l=!1;const c=e=>{s.animate&&window.requestAnimationFrame(c);var t=[s.translate.start,s.translate.end,s.translate.easing?easeQuad[s.translate.easing](p):p],t=("line"===s.translate.type?lerp:slerp)(...t);{var[[t,a,o],r]=[t,s.translate.target];const n=i().getFreeCameraOptions();n.position=MercatorCoordinate.fromLngLat([t,a],o),n.lookAtPoint(r),i().setFreeCameraOptions(n)}!s.translate.loop&&(1<p||p<0)&&(l=!l),p=l?p-.001:p+.001};return createEffect(async()=>{s.animate&&window.requestAnimationFrame(c)}),s.children};export{Camera,Control,Fog,Image,Layer,Marker,Popup,Sky,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/styles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Fog/index.tsx","../../src/components/Sky/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'\n\nexport const vectorStyleList = {\n 'mb:light': `${mapBase}/light-v10`,\n 'mb:dark': `${mapBase}/dark-v10`,\n 'mb:streets': `${mapBase}/streets-v11`,\n 'mb:outdoor': `${mapBase}/outdoors-v11`,\n 'mb:sat': `${mapBase}/satellite-v9`,\n 'mb:sat-streets': `${mapBase}/satellite-streets-v11`,\n 'mb:nav': `${mapBase}/navigation-guidance-day-v4`,\n 'mb:nav-night': `${mapBase}/navigation-guidance-night-v4`,\n\n 'mb:basic': `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n 'mb:monochrome': `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n 'mb:leshine': `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n 'mb:icecream': `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n 'mb:cali': `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n 'mb:northstar': `${mapBase}/cj44mfrt20f082snokim4ungi`,\n 'mb:mineral': `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n 'mb:moonlight': `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n 'mb:frank': `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n 'mb:minimo': `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n 'mb:decimal': `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n 'mb:standard': `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n 'mb:blueprint': `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n 'mb:bubble': `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n 'mb:pencil': `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n\n 'mb:swiss-ski': `${gitBase}/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n 'mb:vintage': `${gitBase}/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n 'mb:whaam': `${gitBase}/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n 'mb:neon': `${gitBase}/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n 'mb:camoflauge': `${gitBase}/jingsam/mapbox-gl-styles/master/Camouflage.json`,\n 'mb:emerald': `${gitBase}/jingsam/mapbox-gl-styles/master/Emerald.json`,\n 'mb:runner': `${gitBase}/jingsam/mapbox-gl-styles/master/Runner.json`,\n 'mb:x-ray': `${gitBase}/jingsam/mapbox-gl-styles/master/X-ray.json`,\n}\n\nexport const rasterStyleList = {\n 'osm:org': [\n 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"https://www.openstreetmap.org\"><em>OpenStreetMap</em></a>',\n ],\n 'osm:human': [\n 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"http://hot.openstreetmap.org\"><em>Humanitarian OpenStreetMap Team</em></a>',\n ],\n 'osm:cycle': [\n 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://www.cyclosm.org\" target=\"_blank\"><em>CyclOSM</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'carto:voyager': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:positron': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:dark': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'open:topo': [\n 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://opentopomap.org/credits\"><em>OpenTopoMap</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner-lite': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:watercolor': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:terrain': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:cycle': [\n 'https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans': [\n 'https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans-dark': [\n 'https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:landscape': [\n 'https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:outdoors': [\n 'https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:neighbourhood': [\n 'https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:spinal': [\n 'https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:pioneer': [\n 'https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:atlas': [\n 'https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:mobile': [\n 'https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n on,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../styles'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\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 { 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 triggerResize?: boolean\n repaint?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: Element | Element[]\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLDivElement\n let containerRef: HTMLElement\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [pending, start] = useTransition()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n\n onMount(async () => {\n map = new mapboxgl.Map({\n ...props.options,\n style: vectorStyleList[props.options?.style] ||\n props.options?.style || { version: 8, sources: {}, layers: [] },\n container: mapRef || 'map',\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.container = containerRef\n\n await map.once('styledata')\n setMapRoot(map)\n })\n\n onCleanup(() => map.remove())\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\n }\n })\n )\n\n // Update debug features\n createEffect(() => {\n if (!mapRoot()) return\n mapRoot().showTileBoundaries = props.showTileBoundaries\n mapRoot().showTerrainWireframe = props.showTerrainWireframe\n mapRoot().showPadding = props.showPadding\n mapRoot().showCollisionBoxes = props.showCollisionBoxes\n mapRoot().showOverdrawInspector = props.showOverdrawInspector\n mapRoot().getCanvas().style.cursor = props.cursorStyle\n })\n\n createEffect(() => setTransitionType(props.transitionType))\n\n // Update projection\n createEffect(\n on(\n () => props.options?.projection,\n proj => map.setProjection(proj),\n { defer: true }\n )\n )\n\n // Update map style\n createEffect(\n on(\n () => props.options?.style,\n style => {\n const oldStyle = map.getStyle()\n const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n const oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n map.setStyle(\n vectorStyleList[style] ||\n style || { version: 8, sources: {}, layers: [] }\n )\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 },\n { defer: true }\n )\n )\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 let index = 0\n\n createEffect(() => {\n if (props.triggerResize) {\n index = 0\n window.requestAnimationFrame(function loop() {\n if (index < 15) {\n index++\n window.requestAnimationFrame(loop)\n start(() => map.resize())\n }\n })\n }\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n <section\n ref={containerRef}\n style={{ position: 'absolute', 'z-index': 1 }}>\n {mapRoot() ? props.children : null}\n </section>\n <div\n id='map'\n ref={mapRef}\n class={props.class || null}\n classList={props.classList || null}\n style={{ height: '100%', width: '100%', ...props.style }}\n />\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 '../../styles'\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 rasterStyleList[url]\n ? {\n ...props.source,\n url: '',\n tiles: [\n rasterStyleList[url][0].replace('{apikey}', props.source.apikey),\n ],\n attribution: rasterStyleList[url][1],\n }\n : props.source\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 // 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 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 // 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 //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 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 Fog: Component<{\n style: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n createEffect(() => {\n map().setFog(props.style)\n })\n\n // Remove Fog 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 } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n\n // Add Sky Layer\n createEffect(() => {\n map().getLayer(layerId) && map().addLayer({ ...props.style, id: layerId })\n })\n\n // Remove Sky Layer\n onCleanup(() => map().getLayer(layerId) && map().removeLayer(layerId))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n TerrainSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n map().setTerrain({ ...props.style, source: sourceId })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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 const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n // Add Control\n createEffect(() => {\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 mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { MarkerSpecification } 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 children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n createEffect(() => {\n marker = new mapboxgl.Marker(props.options)\n .setLngLat(props.lnglat)\n .setPopup(\n props.children\n ? new mapboxgl.Popup().setDOMContent(<div>{props.children}</div>)\n : null\n )\n .addTo(map())\n })\n // Remove Marker\n onCleanup(() => marker.remove())\n\n // Update Position\n createEffect(() => marker && marker.setLngLat(props.lnglat))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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(() => {\n popup = new mapboxgl.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 && popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup && 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 // 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 // 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 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 { MercatorCoordinate } from 'mapbox-gl'\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 = ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = 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","vectorStyleList","mb:light","mb:dark","mb:streets","mb:outdoor","mb:sat","mb:sat-streets","mb:nav","mb:nav-night","mb:basic","mb:monochrome","mb:leshine","mb:icecream","mb:cali","mb:northstar","mb:mineral","mb:moonlight","mb:frank","mb:minimo","mb:decimal","mb:standard","mb:blueprint","mb:bubble","mb:pencil","mb:swiss-ski","mb:vintage","mb:whaam","mb:neon","mb:camoflauge","mb:emerald","mb:runner","mb:x-ray","rasterStyleList","osm:org","osm:human","osm:cycle","carto:voyager","carto:positron","carto:dark","open:topo","stamen:toner","stamen:toner-lite","stamen:watercolor","stamen:terrain","tf:cycle","tf:trans","tf:trans-dark","tf:landscape","tf:outdoors","tf:neighbourhood","tf:spinal","tf:pioneer","tf:atlas","tf:mobile","MapContext","createContext","useMap","useContext","MapGL","props","_props$viewport13","let","map","mapRef","containerRef","id","createUniqueId","mapRoot","setMapRoot","createSignal","start","useTransition","transitionType","setTransitionType","onMount","async","_props$viewport6","mapboxgl","Map","options","style","_props$options","_props$options2","version","sources","layers","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","once","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","cursor","cursorStyle","_props$options3","projection","proj","setProjection","defer","_props$options4","oldStyle","getStyle","oldLayers","filter","l","startsWith","oldSources","Object","keys","s","reduce","obj","key","setStyle","newStyle","_props$viewport8","getCenter","getZoom","getPitch","getBearing","_props$viewport7","callMove","originalEvent","callEnd","prev","_props$viewport12","_props$viewport9","cameraForBounds","_props$viewport10","_props$viewport11","_props$viewport15","_props$viewport14","untrack","stop","easeTo","jumpTo","flyTo","index","triggerResize","window","requestAnimationFrame","loop","resize","_$createComponent","Provider","value","children","_el$","_tmpl$","cloneNode","_ref$","setProperty","_$insert","_el$2","_tmpl$2","_ref$2","_$effect","_p$","_v$","class","_v$2","classList","_v$3","height","width","_$className","_$classList","_$style","undefined","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","attribution","i","getSource","addSource","layer","removeLayer","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","_map$style$_sourceCac","src","_source$_tileJSONRequ","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","_map","getLayer","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","_map2","_map3","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","isStyleLoaded","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","loadImage","_","image","hasImage","addImage","removeImage","error","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","params","translate","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/styles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Fog/index.tsx","../../src/components/Sky/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'\n\nexport const vectorStyleList = {\n 'mb:light': `${mapBase}/light-v10`,\n 'mb:dark': `${mapBase}/dark-v10`,\n 'mb:streets': `${mapBase}/streets-v11`,\n 'mb:outdoor': `${mapBase}/outdoors-v11`,\n 'mb:sat': `${mapBase}/satellite-v9`,\n 'mb:sat-streets': `${mapBase}/satellite-streets-v11`,\n 'mb:nav': `${mapBase}/navigation-guidance-day-v4`,\n 'mb:nav-night': `${mapBase}/navigation-guidance-night-v4`,\n\n 'mb:basic': `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n 'mb:monochrome': `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n 'mb:leshine': `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n 'mb:icecream': `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n 'mb:cali': `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n 'mb:northstar': `${mapBase}/cj44mfrt20f082snokim4ungi`,\n 'mb:mineral': `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n 'mb:moonlight': `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n 'mb:frank': `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n 'mb:minimo': `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n 'mb:decimal': `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n 'mb:standard': `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n 'mb:blueprint': `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n 'mb:bubble': `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n 'mb:pencil': `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n\n 'mb:swiss-ski': `${gitBase}/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n 'mb:vintage': `${gitBase}/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n 'mb:whaam': `${gitBase}/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n 'mb:neon': `${gitBase}/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n 'mb:camoflauge': `${gitBase}/jingsam/mapbox-gl-styles/master/Camouflage.json`,\n 'mb:emerald': `${gitBase}/jingsam/mapbox-gl-styles/master/Emerald.json`,\n 'mb:runner': `${gitBase}/jingsam/mapbox-gl-styles/master/Runner.json`,\n 'mb:x-ray': `${gitBase}/jingsam/mapbox-gl-styles/master/X-ray.json`,\n}\n\nexport const rasterStyleList = {\n 'osm:org': [\n 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"https://www.openstreetmap.org\"><em>OpenStreetMap</em></a>',\n ],\n 'osm:human': [\n 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"http://hot.openstreetmap.org\"><em>Humanitarian OpenStreetMap Team</em></a>',\n ],\n 'osm:cycle': [\n 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://www.cyclosm.org\" target=\"_blank\"><em>CyclOSM</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'carto:voyager': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:positron': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:dark': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'open:topo': [\n 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://opentopomap.org/credits\"><em>OpenTopoMap</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner-lite': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:watercolor': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:terrain': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:cycle': [\n 'https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans': [\n 'https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans-dark': [\n 'https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:landscape': [\n 'https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:outdoors': [\n 'https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:neighbourhood': [\n 'https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:spinal': [\n 'https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:pioneer': [\n 'https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:atlas': [\n 'https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:mobile': [\n 'https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n on,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../styles'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\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 { 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\nlet mapRef: HTMLDivElement\nlet containerRef: HTMLElement\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 triggerResize?: boolean\n repaint?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: Element | Element[]\n}> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [pending, start] = useTransition()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n\n onMount(() => {\n const map: MapboxMap = new mapboxgl.Map({\n ...props.options,\n style: vectorStyleList[props.options?.style] ||\n props.options?.style || { version: 8, sources: {}, layers: [] },\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.container = containerRef\n\n map.once('styledata').then(() => setMapRoot(map))\n\n onCleanup(() => map.remove())\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\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(() => (map.getCanvas().style.cursor = props.cursorStyle))\n //Update transition type\n createEffect(() => setTransitionType(props.transitionType))\n // Update projection\n createEffect(\n on(\n () => props.options?.projection,\n proj => map.setProjection(proj),\n { defer: true }\n )\n )\n\n // Update map style\n createEffect(\n on(\n () => props.options?.style,\n style => {\n const oldStyle = map.getStyle()\n const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n const oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce(\n (obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }),\n {}\n )\n map.setStyle(\n vectorStyleList[style] ||\n style || { version: 8, sources: {}, layers: [] }\n )\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 },\n { defer: true }\n )\n )\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 let index = 0\n\n createEffect(() => {\n if (props.triggerResize) {\n index = 0\n window.requestAnimationFrame(function loop() {\n if (index < 15) {\n index++\n window.requestAnimationFrame(loop)\n start(() => map.resize())\n }\n })\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n <section\n ref={containerRef}\n style={{ position: 'absolute', 'z-index': 1 }}>\n {mapRoot() ? props.children : null}\n </section>\n <div\n ref={mapRef}\n class={props?.class}\n classList={props?.classList}\n style={{ height: '100%', width: '100%', ...props.style }}\n />\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 '../../styles'\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 rasterStyleList[url]\n ? {\n ...props.source,\n url: '',\n tiles: [\n rasterStyleList[url][0].replace('{apikey}', props.source.apikey),\n ],\n attribution: rasterStyleList[url][1],\n }\n : props.source\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 // 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 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 // 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 //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 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 Fog: Component<{\n style: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n createEffect(() => {\n map().setFog(props.style)\n })\n\n // Remove Fog 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 } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n\n // Add Sky Layer\n createEffect(() => {\n map().getLayer(layerId) && map().addLayer({ ...props.style, id: layerId })\n })\n\n // Remove Sky Layer\n onCleanup(() => map().getLayer(layerId) && map().removeLayer(layerId))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n TerrainSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n map().setTerrain({ ...props.style, source: sourceId })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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 const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n // Add Control\n createEffect(() => {\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 mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { MarkerSpecification } 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 children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n createEffect(() => {\n marker = new mapboxgl.Marker(props.options)\n .setLngLat(props.lnglat)\n .setPopup(\n props.children\n ? new mapboxgl.Popup().setDOMContent(<div>{props.children}</div>)\n : null\n )\n .addTo(map())\n })\n // Remove Marker\n onCleanup(() => marker.remove())\n\n // Update Position\n createEffect(() => marker && marker.setLngLat(props.lnglat))\n\n return <></>\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\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(() => {\n popup = new mapboxgl.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 && popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup && 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 // 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 // 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 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 { MercatorCoordinate } from 'mapbox-gl'\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 = ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = 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","vectorStyleList","mb:light","mb:dark","mb:streets","mb:outdoor","mb:sat","mb:sat-streets","mb:nav","mb:nav-night","mb:basic","mb:monochrome","mb:leshine","mb:icecream","mb:cali","mb:northstar","mb:mineral","mb:moonlight","mb:frank","mb:minimo","mb:decimal","mb:standard","mb:blueprint","mb:bubble","mb:pencil","mb:swiss-ski","mb:vintage","mb:whaam","mb:neon","mb:camoflauge","mb:emerald","mb:runner","mb:x-ray","rasterStyleList","osm:org","osm:human","osm:cycle","carto:voyager","carto:positron","carto:dark","open:topo","stamen:toner","stamen:toner-lite","stamen:watercolor","stamen:terrain","tf:cycle","tf:trans","tf:trans-dark","tf:landscape","tf:outdoors","tf:neighbourhood","tf:spinal","tf:pioneer","tf:atlas","tf:mobile","let","mapRef","containerRef","MapContext","createContext","useMap","useContext","MapGL","props","id","createUniqueId","mapRoot","setMapRoot","createSignal","start","useTransition","transitionType","setTransitionType","onMount","_props$viewport13","map","mapboxgl","Map","options","style","_props$options","_props$options2","version","sources","layers","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","_props$viewport6","once","then","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","cursor","cursorStyle","_props$options3","projection","proj","setProjection","defer","_props$options4","oldStyle","getStyle","oldLayers","filter","l","startsWith","oldSources","Object","keys","s","reduce","obj","key","setStyle","newStyle","_props$viewport8","getCenter","getZoom","getPitch","getBearing","_props$viewport7","callMove","originalEvent","callEnd","prev","_props$viewport12","_props$viewport9","cameraForBounds","_props$viewport10","_props$viewport11","_props$viewport15","_props$viewport14","untrack","stop","easeTo","jumpTo","flyTo","index","triggerResize","window","requestAnimationFrame","loop","resize","_$createComponent","Provider","value","children","_el$","_tmpl$","cloneNode","_ref$","setProperty","_$insert","_el$2","_tmpl$2","_ref$2","_$effect","_p$","_v$","class","_v$2","classList","_v$3","height","width","_$className","_$classList","_$style","undefined","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","attribution","i","getSource","addSource","layer","removeLayer","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","_map$style$_sourceCac","src","_source$_tileJSONRequ","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","_map","getLayer","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","_map2","_map3","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","async","isStyleLoaded","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","loadImage","_","image","hasImage","addImage","removeImage","error","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","params","translate","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions"],"mappings":"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"}
@@ -3,24 +3,23 @@ import { mapEvents } from '../../events';
3
3
  import { vectorStyleList } from '../../styles';
4
4
  import mapboxgl from 'mapbox-gl';
5
5
  import 'mapbox-gl/dist/mapbox-gl.css';
6
+ let mapRef;
7
+ let containerRef;
6
8
  const MapContext = createContext();
7
9
  /** Provides the Mapbox Map Object */
8
10
  export const useMap = () => useContext(MapContext);
9
11
  /** Creates a new Map Container */
10
12
  export const MapGL = props => {
11
- let map;
12
- let mapRef;
13
- let containerRef;
14
13
  props.id = props.id || createUniqueId();
15
14
  const [mapRoot, setMapRoot] = createSignal();
16
15
  const [pending, start] = useTransition();
17
16
  const [transitionType, setTransitionType] = createSignal('flyTo');
18
- onMount(async () => {
19
- map = new mapboxgl.Map({
17
+ onMount(() => {
18
+ const map = new mapboxgl.Map({
20
19
  ...props.options,
21
20
  style: vectorStyleList[props.options?.style] ||
22
21
  props.options?.style || { version: 8, sources: {}, layers: [] },
23
- container: mapRef || 'map',
22
+ container: mapRef,
24
23
  interactive: !!props.onViewportChange,
25
24
  bounds: props.viewport?.bounds,
26
25
  center: props.viewport?.center,
@@ -30,121 +29,120 @@ export const MapGL = props => {
30
29
  fitBoundsOptions: { padding: props.viewport?.padding },
31
30
  });
32
31
  map.container = containerRef;
33
- await map.once('styledata');
34
- setMapRoot(map);
35
- });
36
- onCleanup(() => map.remove());
37
- // Hook up events
38
- createEffect(() => mapEvents.forEach(item => {
39
- if (props[item]) {
40
- const event = item.slice(2).toLowerCase();
41
- const callback = e => props[item](e);
42
- map.on(event, callback);
43
- onCleanup(() => map.off(event, callback));
44
- }
45
- }));
46
- // Update debug features
47
- createEffect(() => {
48
- if (!mapRoot())
49
- return;
50
- mapRoot().showTileBoundaries = props.showTileBoundaries;
51
- mapRoot().showTerrainWireframe = props.showTerrainWireframe;
52
- mapRoot().showPadding = props.showPadding;
53
- mapRoot().showCollisionBoxes = props.showCollisionBoxes;
54
- mapRoot().showOverdrawInspector = props.showOverdrawInspector;
55
- mapRoot().getCanvas().style.cursor = props.cursorStyle;
56
- });
57
- createEffect(() => setTransitionType(props.transitionType));
58
- // Update projection
59
- createEffect(on(() => props.options?.projection, proj => map.setProjection(proj), { defer: true }));
60
- // Update map style
61
- createEffect(on(() => props.options?.style, style => {
62
- const oldStyle = map.getStyle();
63
- const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'));
64
- const oldSources = Object.keys(oldStyle.sources)
65
- .filter(s => s.startsWith('cl-'))
66
- .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {});
67
- map.setStyle(vectorStyleList[style] ||
68
- style || { version: 8, sources: {}, layers: [] });
69
- map.once('styledata', () => {
70
- const newStyle = map.getStyle();
71
- map.setStyle({
72
- ...newStyle,
73
- sources: { ...newStyle.sources, ...oldSources },
74
- layers: [...newStyle.layers, ...oldLayers],
32
+ map.once('styledata').then(() => setMapRoot(map));
33
+ onCleanup(() => map.remove());
34
+ // Hook up events
35
+ createEffect(() => mapEvents.forEach(item => {
36
+ if (props[item]) {
37
+ const event = item.slice(2).toLowerCase();
38
+ const callback = e => props[item](e);
39
+ map.on(event, callback);
40
+ onCleanup(() => map.off(event, callback));
41
+ }
42
+ }));
43
+ // Update debug features
44
+ createEffect(() => {
45
+ map.showTileBoundaries = props.showTileBoundaries;
46
+ map.showTerrainWireframe = props.showTerrainWireframe;
47
+ map.showPadding = props.showPadding;
48
+ map.showCollisionBoxes = props.showCollisionBoxes;
49
+ map.showOverdrawInspector = props.showOverdrawInspector;
50
+ });
51
+ // Update cursor
52
+ createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle));
53
+ //Update transition type
54
+ createEffect(() => setTransitionType(props.transitionType));
55
+ // Update projection
56
+ createEffect(on(() => props.options?.projection, proj => map.setProjection(proj), { defer: true }));
57
+ // Update map style
58
+ createEffect(on(() => props.options?.style, style => {
59
+ const oldStyle = map.getStyle();
60
+ const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'));
61
+ const oldSources = Object.keys(oldStyle.sources)
62
+ .filter(s => s.startsWith('cl-'))
63
+ .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {});
64
+ map.setStyle(vectorStyleList[style] ||
65
+ style || { version: 8, sources: {}, layers: [] });
66
+ map.once('styledata', () => {
67
+ const newStyle = map.getStyle();
68
+ map.setStyle({
69
+ ...newStyle,
70
+ sources: { ...newStyle.sources, ...oldSources },
71
+ layers: [...newStyle.layers, ...oldLayers],
72
+ });
75
73
  });
74
+ }, { defer: true }));
75
+ // Hook up viewport events
76
+ createEffect(() => {
77
+ const viewport = {
78
+ id: null,
79
+ center: map.getCenter(),
80
+ zoom: map.getZoom(),
81
+ pitch: map.getPitch(),
82
+ bearing: map.getBearing(),
83
+ padding: props.viewport?.padding,
84
+ bounds: props.viewport?.bounds,
85
+ };
86
+ const callMove = event => {
87
+ if (event.originalEvent)
88
+ props.onViewportChange &&
89
+ props.onViewportChange({ ...viewport, id: props.id });
90
+ setTransitionType('jumpTo');
91
+ };
92
+ const callEnd = event => {
93
+ if (event.originalEvent)
94
+ props.onViewportChange && props.onViewportChange(viewport);
95
+ setTransitionType(props.transitionType);
96
+ };
97
+ map.on('move', callMove).on('moveend', callEnd);
98
+ onCleanup(() => map.off('move', callMove).off('moveend', callEnd));
76
99
  });
77
- }, { defer: true }));
78
- // Hook up viewport events
79
- createEffect(() => {
80
- const viewport = {
81
- id: null,
82
- center: map.getCenter(),
83
- zoom: map.getZoom(),
84
- pitch: map.getPitch(),
85
- bearing: map.getBearing(),
86
- padding: props.viewport?.padding,
87
- bounds: props.viewport?.bounds,
88
- };
89
- const callMove = event => {
90
- if (event.originalEvent)
91
- props.onViewportChange &&
92
- props.onViewportChange({ ...viewport, id: props.id });
93
- setTransitionType('jumpTo');
94
- };
95
- const callEnd = event => {
96
- if (event.originalEvent)
97
- props.onViewportChange && props.onViewportChange(viewport);
98
- setTransitionType(props.transitionType);
99
- };
100
- map.on('move', callMove).on('moveend', callEnd);
101
- onCleanup(() => map.off('move', callMove).off('moveend', callEnd));
102
- });
103
- // Update boundaries
104
- createEffect(prev => {
105
- if (props.viewport?.bounds != prev)
106
- props.onViewportChange({
100
+ // Update boundaries
101
+ createEffect(prev => {
102
+ if (props.viewport?.bounds != prev)
103
+ props.onViewportChange({
104
+ ...props.viewport,
105
+ ...map.cameraForBounds(props.viewport?.bounds, {
106
+ padding: props.viewport?.padding,
107
+ }),
108
+ });
109
+ return props.viewport?.bounds;
110
+ }, props.viewport?.bounds);
111
+ // Update Viewport
112
+ createEffect(() => {
113
+ if (props.id === props.viewport?.id)
114
+ return;
115
+ const viewport = {
107
116
  ...props.viewport,
108
- ...map.cameraForBounds(props.viewport?.bounds, {
109
- padding: props.viewport?.padding,
110
- }),
111
- });
112
- return props.viewport?.bounds;
113
- }, props.viewport?.bounds);
114
- // Update Viewport
115
- createEffect(() => {
116
- if (props.id === props.viewport?.id)
117
- return;
118
- const viewport = {
119
- ...props.viewport,
120
- padding: props.viewport?.padding || 0,
121
- };
122
- switch (untrack(transitionType)) {
123
- case 'easeTo':
124
- map.stop().easeTo(viewport);
125
- case 'jumpTo':
126
- map.stop().jumpTo(viewport);
127
- default:
128
- map.stop().flyTo(viewport);
129
- }
130
- });
131
- let index = 0;
132
- createEffect(() => {
133
- if (props.triggerResize) {
134
- index = 0;
135
- window.requestAnimationFrame(function loop() {
136
- if (index < 15) {
137
- index++;
138
- window.requestAnimationFrame(loop);
139
- start(() => map.resize());
140
- }
141
- });
142
- }
117
+ padding: props.viewport?.padding || 0,
118
+ };
119
+ switch (untrack(transitionType)) {
120
+ case 'easeTo':
121
+ map.stop().easeTo(viewport);
122
+ case 'jumpTo':
123
+ map.stop().jumpTo(viewport);
124
+ default:
125
+ map.stop().flyTo(viewport);
126
+ }
127
+ });
128
+ let index = 0;
129
+ createEffect(() => {
130
+ if (props.triggerResize) {
131
+ index = 0;
132
+ window.requestAnimationFrame(function loop() {
133
+ if (index < 15) {
134
+ index++;
135
+ window.requestAnimationFrame(loop);
136
+ start(() => map.resize());
137
+ }
138
+ });
139
+ }
140
+ });
143
141
  });
144
142
  return (<MapContext.Provider value={mapRoot}>
145
143
  <section ref={containerRef} style={{ position: 'absolute', 'z-index': 1 }}>
146
144
  {mapRoot() ? props.children : null}
147
145
  </section>
148
- <div id='map' ref={mapRef} class={props.class || null} classList={props.classList || null} style={{ height: '100%', width: '100%', ...props.style }}/>
146
+ <div ref={mapRef} class={props?.class} classList={props?.classList} style={{ height: '100%', width: '100%', ...props.style }}/>
149
147
  </MapContext.Provider>);
150
148
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.1",
2
+ "version": "1.2.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.",
@@ -65,6 +65,6 @@
65
65
  "typescript": "^4.6.4",
66
66
  "vite": "^2.9.9",
67
67
  "vite-plugin-solid": "^2.2.6",
68
- "vitest": "^0.12.8"
68
+ "vitest": "^0.12.9"
69
69
  }
70
70
  }