solid-map-gl 1.3.0 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -27
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/styles.css +1 -2
- package/dist/source/components/MapGL/index.jsx +35 -23
- package/dist/source/components/Source/index.jsx +15 -10
- package/dist/source/mapStyles.js +102 -116
- package/dist/types/components/MapGL/index.d.ts +4 -3
- package/dist/types/mapStyles.d.ts +97 -52
- package/package.json +5 -6
- package/dist/source/style.css +0 -14
package/README.md
CHANGED
|
@@ -17,33 +17,9 @@ layout: landing
|
|
|
17
17
|
[examples.md](docs/examples.md)
|
|
18
18
|
{% endcontent-ref %}
|
|
19
19
|
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
import { render } from "solid-js/web";
|
|
24
|
-
import { Component, createSignal } from "solid-js";
|
|
25
|
-
import MapGL, { Viewport } from "solid-map-gl";
|
|
26
|
-
|
|
27
|
-
const Map: Component = () => {
|
|
28
|
-
const [viewport, setViewport] = createSignal({
|
|
29
|
-
center: [0, 0],
|
|
30
|
-
zoom: 6,
|
|
31
|
-
} as Viewport);
|
|
32
|
-
|
|
33
|
-
return (
|
|
34
|
-
<MapGL
|
|
35
|
-
options={{
|
|
36
|
-
accessToken: MAPBOX_ACCESS_TOKEN,
|
|
37
|
-
style: "mb:light",
|
|
38
|
-
}}
|
|
39
|
-
viewport={viewport()}
|
|
40
|
-
onViewportChange={(evt: Event) => setViewport(evt)}
|
|
41
|
-
></MapGL>
|
|
42
|
-
);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
render(() => <Map />, document.getElementById("app")!);
|
|
46
|
-
```
|
|
20
|
+
## Simple Demo
|
|
21
|
+
|
|
22
|
+
{% embed url="https://stackblitz.com/edit/solid-map-gl-intro?embed=1&hideExplorer=1&hideNavigation=1&hidedevtools=1&view=preview&file=src%2FApp.tsx" %}
|
|
47
23
|
|
|
48
24
|
#### Roadmap
|
|
49
25
|
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{effect,className,classList,style,createComponent,memo,insert,template}from"solid-js/web";import{createContext,useContext,createUniqueId,createSignal,onMount,createEffect,onCleanup,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 © <a href="https://www.openstreetmap.org"><em>OpenStreetMap</em></a>'],"osm:human":["https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",'Map © <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 © <a href="https://www.cyclosm.org" target="_blank"><em>CyclOSM</em></a>, Data © <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 © <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 © <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 © <a href="https://carto.com/attribution"><em>Carto</em></a>'],"open:topo":["https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",'Maps © <a href="https://opentopomap.org/credits"><em>OpenTopoMap</em></a>, Data © <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 © <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data © <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 © <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data © <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 © <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data © <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 © <a href="https://stamen.com" target="_blank"><em>Stamen Design</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <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 © <a href="https://thunderforest.com" target="_blank"><em>Thunderforest</em></a>, Data © <a href="http://www.openstreetmap.org/copyright" target="_blank"><em>OpenStreetMap</em></a>']},_tmpl$$2=template("<div></div>",2),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=n=>{n.id=n.id||createUniqueId();const[e,s]=createSignal(),[i,p]=createSignal("flyTo"),[l,c]=createSignal(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark")),m=(e,t)=>n.debug&&console.debug(e+": %c"+t,"color: #00F"),u=(()=>{const r=_tmpl$$2.cloneNode(!0);return effect(e=>{var t=null==n?void 0:n.class,a=null==n?void 0:n.classList,o={position:"absolute",inset:0,...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})();return onMount(()=>{var e;const r=new mapboxgl.Map({...n.options,style:{version:8,sources:{},layers:[]},container:u,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}}),t=(r.once("styledata").then(()=>s(r)),new ResizeObserver(()=>r.resize())),a=(t.observe(u),window.matchMedia("(prefers-color-scheme: dark)")),o=(a.addEventListener("change",()=>c(a.matches)),new MutationObserver(()=>c(document.body.classList.contains("dark"))));o.observe(document.body,{attributes:!0}),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(()=>{n.cursorStyle&&(m("Update cursor to",n.cursorStyle),r.getCanvas().style.cursor=n.cursorStyle)}),createEffect(()=>{n.transitionType&&(m("Update transition to",n.transitionType),p(n.transitionType))}),createEffect(()=>{var e;null!=(e=n.options)&&e.projection&&(m("Update projection to",null==(e=n.options)?void 0:e.projection.name),r.setProjection(null==(e=n.options)?void 0:e.projection))}),createEffect(()=>{var e=l()?n.darkStyle||(null==(e=n.options)?void 0:e.style):null==(e=n.options)?void 0:e.style;m("Update mapstyle to",e);let t=[],a={};if(r.isStyleLoaded()){const o=r.getStyle();t=o.layers.filter(e=>e.id.startsWith("cl-")),a=Object.keys(o.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:o.sources[t]}),{})}r.setStyle(vectorStyleList[e]||e||{version:8,sources:{},layers:[]}),r.once("styledata",()=>{var e=r.getStyle();r.setStyle({...e,sources:{...e.sources,...a},layers:[...e.layers,...t]})})}),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)}}})}),createComponent(MapContext.Provider,{value:e,get children(){return[memo(()=>memo(()=>!!e(),!0)()&&(()=>{const e=_tmpl$$2.cloneNode(!0);return e.style.setProperty("position","absolute"),e.style.setProperty("z-index","10"),insert(e,()=>n.children),e})()),u]}})},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.setLngLaL(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{effect,setAttribute,className,classList,style,createComponent,memo,insert,template}from"solid-js/web";import{createContext,useContext,createUniqueId,createSignal,onMount,createEffect,onCleanup,untrack}from"solid-js";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/",gishub="https://raw.githubusercontent.com/GIShub4/map-styles/main/",vectorStyleList={mb:{light:mapBase+"/light-v10",dark:mapBase+"/dark-v10",street:mapBase+"/streets-v11",outdoor:mapBase+"/outdoors-v11",sat:mapBase+"/satellite-v9",sat_street:mapBase+"/satellite-streets-v11",nav:mapBase+"/navigation-guidance-day-v4",nav_night:mapBase+"/navigation-guidance-night-v4",basic:mapBase+"/cjf4m44iw0uza2spb3q0a7s41",monochrome:mapBase+"/cjv6rzz4j3m4b1fqcchuxclhb",leshine:mapBase+"/cjcunv5ae262f2sm9tfwg8i0w",icecream:mapBase+"/cj7t3i5yj0unt2rmt3y4b5e32",cali:mapBase+"/cjerxnqt3cgvp2rmyuxbeqme7",northstar:mapBase+"/cj44mfrt20f082snokim4ungi",mineral:mapBase+"/cjtep62gq54l21frr1whf27ak",moonlight:mapBase+"/cj3kbeqzo00022smj7akz3o1e",frank:mapBase+"-map-design/ckshxkppe0gge18nz20i0nrwq",minimo:mapBase+"-map-design/cksjc2nsq1bg117pnekb655h1",decimal:mapBase+"-map-design/ck4014y110wt61ctt07egsel6",standard:mapBase+"-map-design/ckr0svm3922ki18qntevm857n",blueprint:mapBase+"-map-design/cks97e1e37nsd17nzg7p0308g",bubble:mapBase+"-map-design/cksysy2nl62zp17quosctdtcc",pencil:mapBase+"-map-design/cks9iema71es417mlrft4go2k",swiss_ski:gitBase+"mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json",vintage:gitBase+"mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json",whaam:gitBase+"mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json",neon:gitBase+"NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json",camoflauge:gitBase+"jingsam/mapbox-gl-styles/master/Camouflage.json",emerald:gitBase+"jingsam/mapbox-gl-styles/master/Emerald.json",runner:gitBase+"jingsam/mapbox-gl-styles/master/Runner.json",x_ray:gitBase+"jingsam/mapbox-gl-styles/master/X-ray.json"},esri:{blueprint:gishub+"esri:blueprint.json",charted_territory:gishub+"esri:charted-territory.json",colored_pencil:gishub+"esri:colored-pencil.json",community:gishub+"esri:community.json",mid_century:gishub+"esri:mid-century.json",modern_antique:gishub+"esri:modern-antique.json",nat_geo:gishub+"esri:national-geographic.json",newspaper:gishub+"esri:newspaper.json",open_street_map:gishub+"esri:open-street-map.json",light_gray_canvas:gishub+"esri:light-gray-canvas.json",dark_gray_canvas:gishub+"esri:dark-gray-canvas.json",human_geo_light:gishub+"esri:human-geography-light.json",human_geo_dark:gishub+"esri:human-geography-dark.json",world_navigation:gishub+"esri:world-navigation.json",world_street:gishub+"esri:world-street.json",world_street_night:gishub+"esri:world-street-night.json",world_terrain:gishub+"esri:world-terrain.json",world_terrain_hybrid:gishub+"esri:world-terrain-hybrid.json",world_topographic:gishub+"esri:world-topographic.json",chromium:gishub+"esri:chromium.json",dreamcatcher:gishub+"esri:dreamcatcher.json",seahaven:gishub+"esri:seahaven.json",sangria:gishub+"esri:sangria.json",mercurial:gishub+"esri:mercurial.json",imagery:gishub+"esri:imagery.json",imagery_hybrid:gishub+"esri:imagery-hybrid.json",firefly:gishub+"esri:firefly.json",firefly_hybrid:gishub+"esri:firefly-hybrid.json",oceans:gishub+"esri:oceans.json"}},carto="https://{s}.basemaps.cartocdn.com/rastertiles/",stamen="https://stamen-tiles-{s}.a.ssl.fastly.net/",tf="https://{s}.tile.thunderforest.com/",rasterStyleList={osm:{org:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",human:"https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}{r}.png",cycle:"https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",topo:"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",_copy:'<a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap</a>'},carto:{voyager:carto+"voyager_labels_under/{z}/{x}/{y}{r}.png",positron:carto+"light_all/{z}/{x}/{y}{r}.png",dark:carto+"dark_all/{z}/{x}/{y}{r}.png",_copy:'<a href="https://carto.com/attribution" target="_blank">© Carto</a>'},stamen:{toner:stamen+"toner/{z}/{x}/{y}{r}.png",toner_lite:stamen+"toner-lite/{z}/{x}/{y}{r}.png",watercolor:stamen+"watercolor/{z}/{x}/{y}.png",terrain:stamen+"terrain/{z}/{x}/{y}{r}.png",_copy:'<a href="https://stamen.com/privacy-policy" target="_blank">© Stamen Design</a>'},tf:{cycle:tf+"cycle/{z}/{x}/{y}{r}.png?apikey={apikey}",trans:tf+"transport/{z}/{x}/{y}{r}.png?apikey={apikey}",trans_dark:tf+"transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}",landscape:tf+"landscape/{z}/{x}/{y}{r}.png?apikey={apikey}",outdoors:tf+"outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}",neighbourhood:tf+"neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}",spinal:tf+"spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}",pioneer:tf+"pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}",atlas:tf+"atlas/{z}/{x}/{y}{r}.png?apikey={apikey}",mobile:tf+"mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}",_copy:'<a href="https://thunderforest.com/privacy" target="_blank">© Thunderforest</a>'}},_tmpl$$2=template("<div></div>",2),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=s=>{s.id=s.id||createUniqueId();const[e,r]=createSignal(),[i,l]=createSignal("flyTo"),[a,c]=createSignal(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark")),u=(e,t)=>s.debug&&console.debug(e+": %c"+t,"color: #00F"),p=(()=>{const n=_tmpl$$2.cloneNode(!0);return effect(e=>{var t=s.id,o=null==s?void 0:s.class,a=null==s?void 0:s.classList,r={position:"absolute",inset:0,...s.style};return t!==e._v$&&setAttribute(n,"id",e._v$=t),o!==e._v$2&&className(n,e._v$2=o),e._v$3=classList(n,a,e._v$3),e._v$4=style(n,r,e._v$4),e},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),n})(),d=(e,t)=>{const o=a()&&t||e;return"string"==typeof o||o instanceof String?o.split(":").reduce((e,t)=>e[t],vectorStyleList)||o:o||{version:8,sources:{},layers:[]}};return onMount(()=>{var e;const n=new mapboxgl.Map({...s.options,style:d(s.options.style,s.darkStyle),container:p,interactive:!!s.onViewportChange,bounds:null==(e=s.viewport)?void 0:e.bounds,center:null==(e=s.viewport)?void 0:e.center,zoom:(null==(e=s.viewport)?void 0:e.zoom)||null,pitch:(null==(e=s.viewport)?void 0:e.pitch)||null,bearing:(null==(e=s.viewport)?void 0:e.bearing)||null,fitBoundsOptions:{padding:null==(e=s.viewport)?void 0:e.padding}}),t=(n.debug=s.debug,n.once("load").then(()=>r(n)),new ResizeObserver(()=>n.resize())),o=(createEffect(()=>s.disableResize?t.disconnect():t.observe(p)),window.matchMedia("(prefers-color-scheme: dark)")),a=(o.addEventListener("change",()=>c(o.matches)),new MutationObserver(()=>c(document.body.classList.contains("dark"))));a.observe(document.body,{attributes:!0}),createEffect(()=>mapEvents.forEach(t=>{if(s[t]){const e=t.slice(2).toLowerCase(),o=e=>s[t](e);n.on(e,o),onCleanup(()=>n.off(e,o))}})),createEffect(()=>{n.showTileBoundaries=s.showTileBoundaries,n.showTerrainWireframe=s.showTerrainWireframe,n.showPadding=s.showPadding,n.showCollisionBoxes=s.showCollisionBoxes,n.showOverdrawInspector=s.showOverdrawInspector}),createEffect(e=>{if(s.cursorStyle!==e)return u("Update Cursor to",s.cursorStyle),n.getCanvas().style.cursor=s.cursorStyle,s.cursorStyle}),createEffect(e=>{if(s.transitionType!==e)return u("Update Transition to",s.transitionType),l(s.transitionType),s.transitionType}),createEffect(e=>{var t;if((null==(t=s.options)?void 0:t.projection)!==e)return u("Update Projection to",null==(t=s.options)?void 0:t.projection.name),n.setProjection(null==(e=s.options)?void 0:e.projection),null==(t=s.options)?void 0:t.projection}),createEffect(e=>{var a=d(null==(a=s.options)?void 0:a.style,s.darkStyle);if(a!==e){let t=[],o={};if(u("Update Mapstyle to",a),n.isStyleLoaded()){const r=n.getStyle();t=r.layers.filter(e=>e.id.startsWith("cl-")),o=Object.keys(r.sources).filter(e=>e.startsWith("cl-")).reduce((e,t)=>({...e,[t]:r.sources[t]}),{})}return n.setStyle(a),n.once("styledata",()=>{var e=n.getStyle();n.setStyle({...e,sources:{...e.sources,...o},layers:[...e.layers,...t]})}),a}},null==(e=s.options)?void 0:e.style),createEffect(()=>{var e;const t={id:null,center:n.getCenter(),zoom:n.getZoom(),pitch:n.getPitch(),bearing:n.getBearing(),padding:null==(e=s.viewport)?void 0:e.padding,bounds:null==(e=s.viewport)?void 0:e.bounds},o=e=>{e.originalEvent&&s.onViewportChange&&s.onViewportChange({...t,id:s.id}),l("jumpTo")},a=e=>{e.originalEvent&&s.onViewportChange&&s.onViewportChange(t),l(s.transitionType)};n.on("move",o).on("moveend",a),onCleanup(()=>n.off("move",o).off("moveend",a))}),createEffect(e=>{var t;return(null==(t=s.viewport)?void 0:t.bounds)!=e&&s.onViewportChange({...s.viewport,...n.cameraForBounds(null==(t=s.viewport)?void 0:t.bounds,{padding:null==(e=s.viewport)?void 0:e.padding})}),null==(t=s.viewport)?void 0:t.bounds},null==(e=s.viewport)?void 0:e.bounds),createEffect(()=>{var e;if(s.id!==(null==(e=s.viewport)?void 0:e.id)){var t={...s.viewport,padding:(null==(e=s.viewport)?void 0:e.padding)||0};switch(untrack(i)){case"easeTo":n.stop().easeTo(t);case"jumpTo":n.stop().jumpTo(t);default:n.stop().flyTo(t)}}})}),createComponent(MapContext.Provider,{value:e,get children(){return[memo(()=>memo(()=>!!e(),!0)()&&(()=>{const e=_tmpl$$2.cloneNode(!0);return e.style.setProperty("position","absolute"),e.style.setProperty("z-index","10"),insert(e,()=>s.children),e})()),p]}})},SourceContext=createContext(),useSourceId=()=>useContext(SourceContext),Source=a=>{const r=useMap(),n=(a.id=a.id||createUniqueId(),e=>{const t=e.split(":").reduce((e,t)=>e[t],rasterStyleList);return t?{...a.source,url:"",tiles:[t.replace("{apikey}",a.source.apikey).replace("{r}",1<window.devicePixelRatio?"@2x":"")],attribution:rasterStyleList[e.split(":")[0]]._copy}:a.source});return createEffect(()=>{const t=n(a.source.url);t.tiles&&(t.tiles=["a","b","c"].map(e=>t.tiles[0].replace("{s}",e))),r().getSource(a.id)||r().addSource(a.id,t)}),onCleanup(()=>{r().getStyle().layers.forEach(e=>e.source===a.id&&r().removeLayer(e.id)),r().getSource(a.id)&&r().removeSource(a.id)}),createEffect(()=>{const e=r().getSource(a.id);if(e&&("geojson"===a.source.type&&a.source.data&&e.setData(a.source.data),"image"===a.source.type&&(a.source.url||a.source.coordinates)&&e.updateImage(a.source.url,a.source.coordinates),"vector"===a.source.type&&(a.source.url||a.source.tiles)&&(a.source.url?e.setUrl(a.source.url):e.setTiles(a.source.tiles)),"raster"===a.source.type&&(a.source.url||a.source.tiles))){var t;const o=n(a.source.url);o.tiles&&(o.tiles=["a","b","c"].map(e=>o.tiles[0].replace("{s}",e))),null!=(t=e._tileJSONRequest)&&t.cancel(),e.url=o.url,e.scheme=o.scheme,e._options={...e._options,...o},null!=(t=r().style._sourceCaches["other:"+a.id])&&t.clearTiles(),e.load()}}),createComponent(SourceContext.Provider,{get value(){return a.id},get children(){return a.children}})},diff=(a={},r={})=>{return[...new Set([...Object.keys(a),...Object.keys(r)])].reduce((e,t)=>{var o=a[t];return o!==r[t]&&e.push([t,o]),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 o=t.slice(2).toLowerCase(),a=e=>r[t](e);null!=(e=n())&&e.on(o,r.id,a),onCleanup(()=>{var e;return null==(e=n())?void 0:e.off(o,r.id,a)})}})),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(),o="_sky";return createEffect(()=>{t().getLayer(o)&&t().addLayer({...e.style,id:o})}),onCleanup(()=>t().getLayer(o)&&t().removeLayer(o)),createEffect(()=>{void 0!==e.visible&&t().setLayoutProperty(o,"visibility",e.visible?"visible":"none")}),e.children},Terrain=e=>{const t=useMap(),o=useSourceId();return createEffect(()=>{t().setTerrain({...e.style,source:o})}),onCleanup(()=>t().setTerrain(null)),createEffect(()=>{void 0!==e.visible&&t().setTerrain(e.visible?e.style:null)}),e.children},Control=o=>{const a=useMap(),[e,r]=createSignal(null);return createEffect(()=>{var e,t=((e,t)=>{if(o.custom)return new o.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)}})(o.type,o.options);t&&null!=(e=a())&&e.addControl(t,o.position),r(t)}),onCleanup(()=>a().removeControl(e())),o.children},_tmpl$$1=template("<div></div>",2),Marker=t=>{const o=useMap();let a=null;return createEffect(()=>{var e;a=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(o())}),onCleanup(()=>a.remove()),createEffect(()=>a&&a.setLngLat(t.lngLat)),[]},_tmpl$=template("<div></div>",2),Popup=t=>{const o=useMap();let a=null;return createEffect(()=>{var e;a=new mapboxgl.Popup(t.options).setLngLat(t.lngLat).setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e)).addTo(o())}),onCleanup(()=>a.remove()),createEffect(()=>a&&a.setLngLaL(t.lngLat)),createEffect(()=>a&&a.setDOMContent((()=>{var e=_tmpl$.cloneNode(!0);return insert(e,()=>t.children),e})())),[]},Image=o=>{const a=useMap();return createEffect(()=>{o.url?a().loadImage(o.url,(e,t)=>!a().hasImage(o.id)&&a().addImage(o.id,t)):a().hasImage(o.id)||a().addImage(o.id,o.image,o.options)}),onCleanup(()=>a().hasImage(o.id)&&a().removeImage(o.id)),createEffect(async()=>{o.image&&o.url||(o.url?a().loadImage(o.url,(e,t)=>{if(e)throw e;a().hasImage(o.id)||a().updateImage(o.id,t)}):a().style&&a().hasImage(o.id)&&a().updateImage(o.id,o.image))}),[]},lerp=(o,a,r)=>o.map((e,t)=>(1-r)*o[t]+r*a[t]),slerp=(o,a,r)=>{return o.map((e,t)=>Math.sin(.075*(1-r))/Math.sin(.075)*o[t]+Math.sin(.075*r)/Math.sin(.075)*a[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 l=.1,c=!1;const u=e=>{s.animate&&window.requestAnimationFrame(u);var t=[s.translate.start,s.translate.end,s.translate.easing?easeQuad[s.translate.easing](l):l],t=("line"===s.translate.type?lerp:slerp)(...t);{var[[t,o,a],r]=[t,s.translate.target];const n=i().getFreeCameraOptions();n.position=MercatorCoordinate.fromLngLat([t,o],a),n.lookAtPoint(r),i().setFreeCameraOptions(n)}!s.translate.loop&&(1<l||l<0)&&(c=!c),l=c?l-.001:l+.001};return createEffect(async()=>{s.animate&&window.requestAnimationFrame(u)}),s.children};export{Camera,Control,Fog,Image,Layer,Marker,Popup,Sky,Source,Terrain,MapGL as default,useMap,useSourceId};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/mapStyles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/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 © <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 © <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 © <a href=\"https://www.cyclosm.org\" target=\"_blank\"><em>CyclOSM</em></a>, Data © <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 © <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 © <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 © <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 © <a href=\"https://opentopomap.org/credits\"><em>OpenTopoMap</em></a>, Data © <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 © <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data © <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 © <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data © <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 © <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data © <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 © <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 © <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data © <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 createUniqueId,\n untrack,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../mapStyles'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\nimport '../../style.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 /** Mouse Cursor Style */\n cursorStyle?: string\n //** Dark Map Style */\n darkStyle?: object | string\n //** Debug Mode */\n debug?: boolean\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: Element | Element[] | null\n}> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n const [darkMode, setDarkMode] = createSignal(\n window.matchMedia('(prefers-color-scheme: dark)').matches ||\n document.body.classList.contains('dark')\n )\n\n const debug = (text, value) =>\n props.debug && console.debug(`${text}: %c${value}`, 'color: #00F')\n\n const mapRef = (\n <div\n class={props?.class}\n classList={props?.classList}\n style={{ position: 'absolute', inset: 0, ...props.style }}\n />\n )\n\n onMount(() => {\n const map: MapboxMap = new mapboxgl.Map({\n ...props.options,\n 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 // Listen to map container size changes\n const resizeObserver = new ResizeObserver(() => map.resize())\n resizeObserver.observe(mapRef as Element)\n\n // Listen to dark theme changes\n const darkTheme = window.matchMedia('(prefers-color-scheme: dark)')\n darkTheme.addEventListener('change', () => setDarkMode(darkTheme.matches))\n\n const bodyClassObserver = new MutationObserver(() =>\n setDarkMode(document.body.classList.contains('dark'))\n )\n bodyClassObserver.observe(document.body, { attributes: true })\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n 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(() => {\n if (!props.cursorStyle) return\n debug('Update cursor to', props.cursorStyle)\n map.getCanvas().style.cursor = props.cursorStyle\n })\n //Update transition type\n createEffect(() => {\n if (!props.transitionType) return\n debug('Update transition to', props.transitionType)\n setTransitionType(props.transitionType)\n })\n // Update projection\n createEffect(() => {\n if (!props.options?.projection) return\n debug('Update projection to', props.options?.projection.name)\n map.setProjection(props.options?.projection)\n })\n\n // Update map style\n createEffect(() => {\n const style = darkMode()\n ? props.darkStyle || props.options?.style\n : props.options?.style\n debug('Update mapstyle to', style)\n let oldLayers = [],\n oldSources = {}\n if (map.isStyleLoaded()) {\n const oldStyle = map.getStyle()\n oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n }\n map.setStyle(\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\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n {mapRoot() && (\n <div style={{ position: 'absolute', 'z-index': 10 }}>\n {props.children}\n </div>\n )}\n {mapRef}\n </MapContext.Provider>\n )\n}\n","import {\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../mapStyles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url =>\n 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.setLngLaL(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","id","createUniqueId","mapRoot","setMapRoot","createSignal","transitionType","setTransitionType","darkMode","setDarkMode","window","matchMedia","matches","document","body","classList","contains","debug","text","value","console","mapRef","_el$","_tmpl$","cloneNode","_$effect","_p$","_v$","class","_v$2","_v$3","position","inset","style","_$className","_$classList","_$style","undefined","onMount","_props$viewport13","map","mapboxgl","Map","options","version","sources","layers","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","_props$viewport6","resizeObserver","once","then","ResizeObserver","resize","darkTheme","observe","bodyClassObserver","addEventListener","MutationObserver","attributes","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","onCleanup","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","cursorStyle","getCanvas","cursor","_props$options3","_props$options","projection","_props$options2","name","setProjection","darkStyle","_props$options4","_props$options5","let","oldLayers","oldSources","isStyleLoaded","oldStyle","getStyle","filter","l","startsWith","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","_$createComponent","Provider","children","_$memo","_el$2","setProperty","_$insert","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","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","removeControl","Marker","marker","setLngLat","lngLat","setPopup","Popup","setDOMContent","addTo","remove","popup","setLngLaL","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","requestAnimationFrame","params","translate","start","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions","loop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/mapStyles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/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/'\nconst gishub = 'https://raw.githubusercontent.com/GIShub4/map-styles/main/'\n\nexport const vectorStyleList = {\n mb: {\n light: `${mapBase}/light-v10`,\n dark: `${mapBase}/dark-v10`,\n street: `${mapBase}/streets-v11`,\n outdoor: `${mapBase}/outdoors-v11`,\n sat: `${mapBase}/satellite-v9`,\n sat_street: `${mapBase}/satellite-streets-v11`,\n nav: `${mapBase}/navigation-guidance-day-v4`,\n nav_night: `${mapBase}/navigation-guidance-night-v4`,\n basic: `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n monochrome: `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n leshine: `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n icecream: `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n cali: `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n northstar: `${mapBase}/cj44mfrt20f082snokim4ungi`,\n mineral: `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n moonlight: `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n frank: `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n minimo: `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n decimal: `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n standard: `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n blueprint: `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n bubble: `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n pencil: `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n swiss_ski: `${gitBase}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n vintage: `${gitBase}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n whaam: `${gitBase}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n neon: `${gitBase}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n camoflauge: `${gitBase}jingsam/mapbox-gl-styles/master/Camouflage.json`,\n emerald: `${gitBase}jingsam/mapbox-gl-styles/master/Emerald.json`,\n runner: `${gitBase}jingsam/mapbox-gl-styles/master/Runner.json`,\n x_ray: `${gitBase}jingsam/mapbox-gl-styles/master/X-ray.json`,\n },\n esri: {\n blueprint: `${gishub}esri:blueprint.json`,\n charted_territory: `${gishub}esri:charted-territory.json`,\n colored_pencil: `${gishub}esri:colored-pencil.json`,\n community: `${gishub}esri:community.json`,\n mid_century: `${gishub}esri:mid-century.json`,\n modern_antique: `${gishub}esri:modern-antique.json`,\n nat_geo: `${gishub}esri:national-geographic.json`,\n newspaper: `${gishub}esri:newspaper.json`,\n open_street_map: `${gishub}esri:open-street-map.json`,\n light_gray_canvas: `${gishub}esri:light-gray-canvas.json`,\n dark_gray_canvas: `${gishub}esri:dark-gray-canvas.json`,\n human_geo_light: `${gishub}esri:human-geography-light.json`,\n human_geo_dark: `${gishub}esri:human-geography-dark.json`,\n world_navigation: `${gishub}esri:world-navigation.json`,\n world_street: `${gishub}esri:world-street.json`,\n world_street_night: `${gishub}esri:world-street-night.json`,\n world_terrain: `${gishub}esri:world-terrain.json`,\n world_terrain_hybrid: `${gishub}esri:world-terrain-hybrid.json`,\n world_topographic: `${gishub}esri:world-topographic.json`,\n chromium: `${gishub}esri:chromium.json`,\n dreamcatcher: `${gishub}esri:dreamcatcher.json`,\n seahaven: `${gishub}esri:seahaven.json`,\n sangria: `${gishub}esri:sangria.json`,\n mercurial: `${gishub}esri:mercurial.json`,\n imagery: `${gishub}esri:imagery.json`,\n imagery_hybrid: `${gishub}esri:imagery-hybrid.json`,\n firefly: `${gishub}esri:firefly.json`,\n firefly_hybrid: `${gishub}esri:firefly-hybrid.json`,\n oceans: `${gishub}esri:oceans.json`,\n },\n}\nconst carto = 'https://{s}.basemaps.cartocdn.com/rastertiles/'\nconst stamen = 'https://stamen-tiles-{s}.a.ssl.fastly.net/'\nconst tf = 'https://{s}.tile.thunderforest.com/'\n\nexport const rasterStyleList = {\n osm: {\n org: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n human: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}{r}.png',\n cycle: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n topo: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n _copy:\n '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">© OpenStreetMap</a>',\n },\n carto: {\n voyager: `${carto}voyager_labels_under/{z}/{x}/{y}{r}.png`,\n positron: `${carto}light_all/{z}/{x}/{y}{r}.png`,\n dark: `${carto}dark_all/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://carto.com/attribution\" target=\"_blank\">© Carto</a>',\n },\n stamen: {\n toner: `${stamen}toner/{z}/{x}/{y}{r}.png`,\n toner_lite: `${stamen}toner-lite/{z}/{x}/{y}{r}.png`,\n watercolor: `${stamen}watercolor/{z}/{x}/{y}.png`,\n terrain: `${stamen}terrain/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://stamen.com/privacy-policy\" target=\"_blank\">© Stamen Design</a>',\n },\n tf: {\n cycle: `${tf}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans: `${tf}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans_dark: `${tf}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n landscape: `${tf}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n outdoors: `${tf}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n neighbourhood: `${tf}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n spinal: `${tf}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n pioneer: `${tf}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n atlas: `${tf}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n mobile: `${tf}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n _copy:\n '<a href=\"https://thunderforest.com/privacy\" target=\"_blank\">© Thunderforest</a>',\n },\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n createUniqueId,\n untrack,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../mapStyles'\nimport 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 { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { JSX } from 'solid-js'\n\nexport type Viewport = {\n id?: string\n center?: LngLatLike\n bounds?: LngLatBounds\n zoom?: number\n pitch?: number\n bearing?: number\n padding?: PaddingOptions\n}\n\nconst MapContext = createContext<MapboxMap>()\n/** Provides the Mapbox Map Object */\nexport const useMap = (): MapboxMap => useContext(MapContext)\n\n/** Creates a new Map Container */\nexport const MapGL: Component<{\n id?: string\n /** Map Container CSS Style */\n style?: JSX.CSSProperties\n /** Map Container CSS Class */\n class?: string\n /** SolidJS Class List for Map Container */\n classList?: {\n [k: string]: boolean | undefined\n }\n /** Current Map View */\n viewport?: Viewport\n /** Mapbox Options\n * @see https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters\n */\n options?: MapboxOptions\n /** Type for pan, move and zoom transitions */\n transitionType?: 'flyTo' | 'easeTo' | 'jumpTo'\n /** Event listener for Viewport updates */\n onViewportChange?: (viewport: Viewport) => void\n /** Displays Map Tile Borders */\n showTileBoundaries?: boolean\n /** Displays Wireframe if Terrain is visible */\n showTerrainWireframe?: boolean\n /** Displays Borders if Padding is set */\n showPadding?: boolean\n /** Displays Label Collision Boxes */\n showCollisionBoxes?: boolean\n /** Displays all feature outlines even if normally not drawn by style rules */\n showOverdrawInspector?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n //** Dark Map Style */\n darkStyle?: StyleSpecification | string\n //** Disable automatic map resize */\n disableResize?: boolean\n //** Debug Mode */\n debug?: boolean\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: any\n}> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n const [darkMode, setDarkMode] = createSignal(\n window.matchMedia('(prefers-color-scheme: dark)').matches ||\n document.body.classList.contains('dark')\n )\n\n const debug = (text, value) =>\n props.debug && console.debug(`${text}: %c${value}`, 'color: #00F')\n\n const mapRef = (\n <div\n id={props.id}\n class={props?.class}\n classList={props?.classList}\n style={{ position: 'absolute', inset: 0, ...props.style }}\n />\n )\n\n const getStyle = (light, dark) => {\n const style = darkMode() ? dark || light : light\n return typeof style === 'string' || style instanceof String\n ? style.split(':').reduce((p, c) => p[c], vectorStyleList) || style\n : style || { version: 8, sources: {}, layers: [] }\n }\n\n onMount(() => {\n const map: MapboxMap = new mapboxgl.Map({\n ...props.options,\n style: getStyle(props.options.style, props.darkStyle),\n container: mapRef,\n interactive: !!props.onViewportChange,\n bounds: props.viewport?.bounds,\n center: props.viewport?.center,\n zoom: props.viewport?.zoom || null,\n pitch: props.viewport?.pitch || null,\n bearing: props.viewport?.bearing || null,\n fitBoundsOptions: { padding: props.viewport?.padding },\n } as MapboxOptions)\n\n map.debug = props.debug\n // map.container = containerRef\n\n map.once('load').then(() => setMapRoot(map))\n\n // onCleanup(() => map.remove())\n\n // Listen to map container size changes\n const resizeObserver = new ResizeObserver(() => map.resize())\n createEffect(() =>\n props.disableResize\n ? resizeObserver.disconnect()\n : resizeObserver.observe(mapRef as Element)\n )\n\n // Listen to dark theme changes\n const darkTheme = window.matchMedia('(prefers-color-scheme: dark)')\n darkTheme.addEventListener('change', () => setDarkMode(darkTheme.matches))\n\n const bodyClassObserver = new MutationObserver(() =>\n setDarkMode(document.body.classList.contains('dark'))\n )\n bodyClassObserver.observe(document.body, { attributes: true })\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n 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(prev => {\n if (props.cursorStyle === prev) return\n debug('Update Cursor to', props.cursorStyle)\n map.getCanvas().style.cursor = props.cursorStyle\n return props.cursorStyle\n })\n\n //Update transition type\n createEffect(prev => {\n if (props.transitionType === prev) return\n debug('Update Transition to', props.transitionType)\n setTransitionType(props.transitionType)\n return props.transitionType\n })\n\n // Update projection\n createEffect(prev => {\n if (props.options?.projection === prev) return\n debug('Update Projection to', props.options?.projection.name)\n map.setProjection(props.options?.projection)\n return props.options?.projection\n })\n\n // Update map style\n createEffect(prev => {\n const style = getStyle(props.options?.style, props.darkStyle)\n if (style === prev) return\n let oldLayers = []\n let oldSources = {}\n debug('Update Mapstyle to', style)\n if (map.isStyleLoaded()) {\n const oldStyle = map.getStyle()\n oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n }\n map.setStyle(style)\n map.once('styledata', () => {\n const newStyle = map.getStyle()\n map.setStyle({\n ...newStyle,\n sources: { ...newStyle.sources, ...oldSources },\n layers: [...newStyle.layers, ...oldLayers],\n })\n })\n return style\n }, props.options?.style)\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n {mapRoot() && (\n <div style={{ position: 'absolute', 'z-index': 10 }}>\n {props.children}\n </div>\n )}\n {mapRef}\n </MapContext.Provider>\n )\n}\n","import {\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../mapStyles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url => {\n const source = url.split(':').reduce((p, c) => p[c], rasterStyleList)\n return source\n ? {\n ...props.source,\n url: '',\n tiles: [\n source\n .replace('{apikey}', props.source.apikey)\n .replace('{r}', window.devicePixelRatio > 1 ? '@2x' : ''),\n ],\n attribution: rasterStyleList[url.split(':')[0]]._copy,\n }\n : props.source\n }\n\n // 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.setLngLaL(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","gishub","vectorStyleList","mb","light","dark","street","outdoor","sat","sat_street","nav","nav_night","basic","monochrome","leshine","icecream","cali","northstar","mineral","moonlight","frank","minimo","decimal","standard","blueprint","bubble","pencil","swiss_ski","vintage","whaam","neon","camoflauge","emerald","runner","x_ray","esri","charted_territory","colored_pencil","community","mid_century","modern_antique","nat_geo","newspaper","open_street_map","light_gray_canvas","dark_gray_canvas","human_geo_light","human_geo_dark","world_navigation","world_street","world_street_night","world_terrain","world_terrain_hybrid","world_topographic","chromium","dreamcatcher","seahaven","sangria","mercurial","imagery","imagery_hybrid","firefly","firefly_hybrid","oceans","carto","stamen","tf","rasterStyleList","osm","org","human","cycle","topo","_copy","voyager","positron","toner","toner_lite","watercolor","terrain","trans","trans_dark","landscape","outdoors","neighbourhood","spinal","pioneer","atlas","mobile","MapContext","createContext","useMap","useContext","MapGL","props","id","createUniqueId","mapRoot","setMapRoot","createSignal","transitionType","setTransitionType","darkMode","setDarkMode","window","matchMedia","matches","document","body","classList","contains","debug","text","value","console","mapRef","_el$","_tmpl$","cloneNode","_$effect","_p$","_v$2","class","_v$3","_v$4","position","inset","style","_v$","_$setAttribute","_$className","_$classList","_$style","undefined","getStyle","String","split","reduce","p","c","version","sources","layers","onMount","_props$viewport13","map","mapboxgl","Map","options","darkStyle","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","_props$viewport6","resizeObserver","once","then","ResizeObserver","resize","darkTheme","createEffect","disableResize","disconnect","observe","bodyClassObserver","addEventListener","MutationObserver","attributes","forEach","item","event","slice","toLowerCase","callback","e","on","onCleanup","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","prev","cursorStyle","getCanvas","cursor","_props$options4","_props$options","projection","_props$options2","name","setProjection","_props$options3","_props$options5","let","oldLayers","oldSources","isStyleLoaded","oldStyle","filter","l","startsWith","Object","keys","s","obj","key","setStyle","newStyle","_props$options6","_props$viewport8","getCenter","getZoom","getPitch","getBearing","_props$viewport7","callMove","originalEvent","callEnd","_props$viewport12","_props$viewport9","cameraForBounds","_props$viewport10","_props$viewport11","_props$viewport15","_props$viewport14","untrack","stop","easeTo","jumpTo","flyTo","_$createComponent","Provider","children","_$memo","_el$2","setProperty","_$insert","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","devicePixelRatio","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","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","removeControl","Marker","marker","setLngLat","lngLat","setPopup","Popup","setDOMContent","addTo","remove","popup","setLngLaL","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","requestAnimationFrame","params","translate","start","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions","loop"],"mappings":"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"}
|