solid-map-gl 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{effect as e,setAttribute as t,className as o,classList as r,style as n,createComponent as a,memo as s,template as i}from"solid-js/web";import{createContext as l,useContext as c,createUniqueId as p,createSignal as d,onMount as u,onCleanup as g,createEffect as y,untrack as m}from"solid-js";const h=["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"],v=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],b="mapbox://styles/mapbox",w="https://raw.githubusercontent.com/",f="https://raw.githubusercontent.com/GIShub4/map-styles/main/",$="https://assets.vector.hereapi.com/styles/",k={mb:{light:`${b}/light-v10`,dark:`${b}/dark-v10`,street:`${b}/streets-v11`,outdoor:`${b}/outdoors-v11`,sat:`${b}/satellite-v9`,sat_street:`${b}/satellite-streets-v11`,nav:`${b}/navigation-guidance-day-v4`,nav_night:`${b}/navigation-guidance-night-v4`,basic:`${b}/cjf4m44iw0uza2spb3q0a7s41`,monochrome:`${b}/cjv6rzz4j3m4b1fqcchuxclhb`,leshine:`${b}/cjcunv5ae262f2sm9tfwg8i0w`,icecream:`${b}/cj7t3i5yj0unt2rmt3y4b5e32`,cali:`${b}/cjerxnqt3cgvp2rmyuxbeqme7`,northstar:`${b}/cj44mfrt20f082snokim4ungi`,mineral:`${b}/cjtep62gq54l21frr1whf27ak`,moonlight:`${b}/cj3kbeqzo00022smj7akz3o1e`,frank:`${b}-map-design/ckshxkppe0gge18nz20i0nrwq`,minimo:`${b}-map-design/cksjc2nsq1bg117pnekb655h1`,decimal:`${b}-map-design/ck4014y110wt61ctt07egsel6`,standard:`${b}-map-design/ckr0svm3922ki18qntevm857n`,blueprint:`${b}-map-design/cks97e1e37nsd17nzg7p0308g`,bubble:`${b}-map-design/cksysy2nl62zp17quosctdtcc`,pencil:`${b}-map-design/cks9iema71es417mlrft4go2k`,swiss_ski:`${w}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,vintage:`${w}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,whaam:`${w}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,neon:`${w}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,camoflauge:`${w}jingsam/mapbox-gl-styles/master/Camouflage.json`,emerald:`${w}jingsam/mapbox-gl-styles/master/Emerald.json`,runner:`${w}jingsam/mapbox-gl-styles/master/Runner.json`,x_ray:`${w}jingsam/mapbox-gl-styles/master/X-ray.json`},here:{base:`${$}berlin/base/mapbox/tilezen?apikey={apikey}`,day:`${$}berlin/day/mapbox/tilezen?apikey={apikey}`,night:`${$}berlin/night/mapbox/tilezen?apikey={apikey}`},esri:{blueprint:`${f}esri:blueprint.json`,charted_territory:`${f}esri:charted-territory.json`,colored_pencil:`${f}esri:colored-pencil.json`,community:`${f}esri:community.json`,mid_century:`${f}esri:mid-century.json`,modern_antique:`${f}esri:modern-antique.json`,nat_geo:`${f}esri:national-geographic.json`,newspaper:`${f}esri:newspaper.json`,open_street_map:`${f}esri:open-street-map.json`,light_gray_canvas:`${f}esri:light-gray-canvas.json`,dark_gray_canvas:`${f}esri:dark-gray-canvas.json`,human_geo_light:`${f}esri:human-geography-light.json`,human_geo_dark:`${f}esri:human-geography-dark.json`,world_navigation:`${f}esri:world-navigation.json`,world_street:`${f}esri:world-street.json`,world_street_night:`${f}esri:world-street-night.json`,world_terrain:`${f}esri:world-terrain.json`,world_terrain_hybrid:`${f}esri:world-terrain-hybrid.json`,world_topographic:`${f}esri:world-topographic.json`,chromium:`${f}esri:chromium.json`,dreamcatcher:`${f}esri:dreamcatcher.json`,seahaven:`${f}esri:seahaven.json`,sangria:`${f}esri:sangria.json`,mercurial:`${f}esri:mercurial.json`,imagery:`${f}esri:imagery.json`,imagery_hybrid:`${f}esri:imagery-hybrid.json`,firefly:`${f}esri:firefly.json`,firefly_hybrid:`${f}esri:firefly-hybrid.json`,oceans:`${f}esri:oceans.json`}},x="https://{s}.basemaps.cartocdn.com/rastertiles/",j="https://stamen-tiles-{s}.a.ssl.fastly.net/",_="https://{s}.tile.thunderforest.com/",z={osm:{org:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",human:"https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",cycle:"https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",topo:"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",_copy:'<a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap</a>'},carto:{voyager:`${x}voyager_labels_under/{z}/{x}/{y}{r}.png`,positron:`${x}light_all/{z}/{x}/{y}{r}.png`,dark:`${x}dark_all/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://carto.com/attribution" target="_blank">&copy; Carto</a>'},stamen:{toner:`${j}toner/{z}/{x}/{y}{r}.png`,toner_lite:`${j}toner-lite/{z}/{x}/{y}{r}.png`,watercolor:`${j}watercolor/{z}/{x}/{y}.png`,terrain:`${j}terrain/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://stamen.com/privacy-policy" target="_blank">&copy; Stamen Design</a>'},tf:{cycle:`${_}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,trans:`${_}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,trans_dark:`${_}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,landscape:`${_}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,outdoors:`${_}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,neighbourhood:`${_}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,spinal:`${_}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,pioneer:`${_}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,atlas:`${_}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,mobile:`${_}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,_copy:'<a href="https://thunderforest.com/privacy" target="_blank">&copy; Thunderforest</a>'}},L=i("<div></div>",2),M=l(),S=()=>c(M),T=i=>{i.id=i.id||p();const[l,c]=d(),[v,b]=d("flyTo"),[w,f]=d("undefined"!=typeof window&&(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark"))),$=(e,t)=>i.debug&&console.debug(`${e}: %c${t}`,"color: #00F"),x=(()=>{const a=L.cloneNode(!0);return e((e=>{const s=i.id,l=i?.class,c=i?.classList,p=i?.style||i?.class||i?.classList?i.style:{position:"absolute",inset:0,...i.style};return s!==e._v$&&t(a,"id",e._v$=s),l!==e._v$2&&o(a,e._v$2=l),e._v$3=r(a,c,e._v$3),e._v$4=n(a,p,e._v$4),e}),{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),a})(),j=(e,t)=>{const o=w()&&t||e;return"string"==typeof o||o instanceof String?o?.split(":").reduce(((e,t)=>e&&e[t]),k)?.replace("{apikey}",i.apikey||import.meta.env.VITE_VECTOR_API_KEY)||o:o||{version:8,sources:{},layers:[]}};return u((async()=>{let e=i.mapLib||await import("mapbox-gl");e.Map||(e=window.maplibregl||window.mapboxgl);const t=new e.Map({accessToken:import.meta.env.VITE_MAPBOX_ACCESS_TOKEN,interactive:!!i.onViewportChange,...i.options,style:j(i.options?.style,i.darkStyle),container:x,bounds:i.viewport?.bounds,center:i.viewport?.center,zoom:i.viewport?.zoom||null,pitch:i.viewport?.pitch||null,bearing:i.viewport?.bearing||null,fitBoundsOptions:{padding:i.viewport?.padding}});t.mapLib=e,t.debug=i.debug,t.once("load",(()=>c(t))),g((()=>t?.remove()));const o=new ResizeObserver((()=>t.resize()));y((()=>i.disableResize?o.disconnect():o.observe(x)));const r=window.matchMedia("(prefers-color-scheme: dark)");r.addEventListener("change",(()=>f(r.matches)));new MutationObserver((()=>f(document.body.classList.contains("dark")))).observe(document.body,{attributes:!0}),y((()=>h.forEach((e=>{const o=i[e];if(o){const r=e.slice(2).toLowerCase();if("function"==typeof o){const e=e=>o(e);t.on(r,e),g((()=>t?.off(r,e)))}else Object.keys(o).forEach((e=>{const n=t=>o[e](t);t.on(r,e,n),g((()=>t?.off(r,e,n)))}))}})))),y((()=>{t.showTileBoundaries=i.showTileBoundaries,t.showTerrainWireframe=i.showTerrainWireframe,t.showPadding=i.showPadding,t.showCollisionBoxes=i.showCollisionBoxes,t.showOverdrawInspector=i.showOverdrawInspector})),y((e=>{if(i.cursorStyle!==e)return $("Update Cursor to",i.cursorStyle),t.getCanvas().style.cursor=i.cursorStyle,i.cursorStyle})),y((e=>{if(i.transitionType!==e)return $("Update Transition to",i.transitionType),b(i.transitionType),i.transitionType})),y((e=>{if(i.options?.projection!==e)return $("Update Projection to",i.options?.projection.name),t.setProjection(i.options?.projection),i.options?.projection})),y((e=>{const o=j(i.options?.style,i.darkStyle);if(o===e)return;let r=[],n={};if($("Update Mapstyle to",o),t.isStyleLoaded()){const e=t.getStyle();r=e.layers.filter((e=>e.id.startsWith("cl-"))),n=Object.keys(e.sources).filter((e=>e.startsWith("cl-"))).reduce(((t,o)=>({...t,[o]:e.sources[o]})),{})}return t.setStyle(o),t.once("styledata",(()=>{const e=t.getStyle();t.setStyle({...e,sources:{...e.sources,...n},layers:[...e.layers,...r]})})),o}),i.options?.style),y((()=>{const e={id:null,center:t.getCenter(),zoom:t.getZoom(),pitch:t.getPitch(),bearing:t.getBearing(),padding:i.viewport?.padding,bounds:i.viewport?.bounds},o=t=>{t.originalEvent&&i.onViewportChange&&i.onViewportChange({...e,id:i.id}),b("jumpTo")},r=t=>{t.originalEvent&&i.onViewportChange&&i.onViewportChange(e),b(i.transitionType)};t.on("move",o).on("moveend",r),g((()=>t?.off("move",o).off("moveend",r)))})),y((e=>(i.viewport?.bounds!=e&&i.onViewportChange({...i.viewport,...t.cameraForBounds(i.viewport?.bounds,{padding:i.viewport?.padding})}),i.viewport?.bounds)),i.viewport?.bounds),y((()=>{if(i.id===i.viewport?.id)return;const e={...i.viewport,padding:i.viewport?.padding||0};switch(m(v)){case"easeTo":t.stop().easeTo(e);case"jumpTo":t.stop().jumpTo(e);default:t.stop().flyTo(e)}}))})),a(M.Provider,{value:l,get children(){return[s((()=>l()&&i.children)),x]}})},C=l(),E=()=>c(C),P=e=>{const t=S();e.id=e.id||p();const o=t=>{const o=t?.split(":").reduce(((e,t)=>e&&e[t]),z);return o?{...e.source,url:"",tiles:[o.replace("{apikey}",e.source.apikey||import.meta.env.VITE_RASTER_API_KEY).replace("{r}",window.devicePixelRatio>1?"@2x":"")],attribution:z[t.split(":")[0]]._copy}:e.source};return g((()=>{t()?.getStyle().layers.forEach((o=>o.source===e.id&&t().removeLayer(o.id))),t()?.getSource(e.id)&&t().removeSource(e.id)})),y((()=>{const r=t().getSource(e.id);if(r&&("geojson"===e.source.type&&e.source.data&&r.setData(e.source.data),"image"===e.source.type&&(e.source.url||e.source.coordinates)&&r.updateImage(e.source.url,e.source.coordinates),"vector"===e.source.type&&(e.source.url||e.source.tiles)&&(e.source.url?r.setUrl(e.source.url):r.setTiles(e.source.tiles)),"raster"===e.source.type&&(e.source.url||e.source.tiles))){const n=o(e.source.url);n.tiles&&(n.tiles=["a","b","c"].map((e=>n.tiles[0].replace("{s}",e)))),r._tileJSONRequest?.cancel(),r.url=n.url,r.scheme=n.scheme,r._options={...r._options,...n},t().style._sourceCaches[`other:${e.id}`]?.clearTiles(),r.load()}})),y((()=>{const r=o(e.source.url);r.tiles&&(r.tiles=["a","b","c"].map((e=>r.tiles[0].replace("{s}",e)))),!t().getSource(e.id)&&t().addSource(e.id,r)})),a(C.Provider,{get value(){return e.id},get children(){return e.children}})},I=(e={},t={})=>[...new Set([...Object.keys(e),...Object.keys(t)])].reduce(((o,r)=>{const n=e[r];return n!==t[r]&&o.push([r,n]),o}),[]),O=e=>{const t=S(),o=E();return e.id=e.id||p(),g((()=>t()&&t().getLayer(e.id)&&t().removeLayer(e.id))),y((()=>v.forEach((o=>{if(e[o]){const r=o.slice(2).toLowerCase(),n=t=>e[o](t);t()?.on(r,e.id,n),g((()=>t()?.off(r,e.id,n)))}})))),y((r=>{if(e.style&&t().style&&t().getSource(o)&&t().getLayer(e.id))return e.style.layout!==r?.layout&&I(e.style.layout,r?.layout).forEach((([o,r])=>t().setLayoutProperty(e.id,o,r,{validate:!1}))),e.style.paint!==r?.paint&&I(e.style.paint,r?.paint).forEach((([o,r])=>t().setPaintProperty(e.id,o,r,{validate:!1}))),e.style.minzoom===r?.minzoom&&e.style.maxzoom===r?.maxzoom||t().setLayerZoomRange(e.id,e.style.minzoom,e.style.maxzoom),e.style.filter!==r?.filter&&t().setFilter(e.id,e.style.filter,{validate:!1}),e.style}),e.style),y((r=>{if(void 0!==e.visible&&e.visible!==r&&t().getSource(o)&&t().getLayer(e.id))return t().setLayoutProperty(e.id,"visibility",e.visible?"visible":"none",{validate:!1}),e.visible}),e.visible),y((async()=>{e.filter&&(!t().isStyleLoaded()&&await t().once("styledata"),t().setFilter(e.id,e.filter))})),y((async()=>{e.featureState&&e.featureState.id&&(!t().isStyleLoaded()&&await t().once("styledata"),t().removeFeatureState({source:o,sourceLayer:e.style["source-layer"]}),t().setFeatureState({source:o,sourceLayer:e.style["source-layer"],id:e.featureState.id},e.featureState.state))})),y((()=>{!t().getLayer(e.id)&&t().addLayer(e.customLayer||{...e.style,id:e.id,source:o,metadata:{smg:{beforeType:e.beforeType,beforeId:e.beforeId}}},e.beforeType?t()?.getStyle().layers.find((t=>t.type===e.beforeType))?.id:e.beforeId)})),e.children},D=e=>{const t=S()();return g((()=>t?.setFog(null))),y((()=>t.setFog(e.style||{}))),null},q=e=>{const t=S()();let o=E();return g((()=>t?.setTerrain(null))),y((()=>{o&&(o=p(),t.addSource(o,t.isMapLibre?{type:"raster-dem",url:"https://demotiles.maplibre.org/terrain-tiles/tiles.json",tileSize:256}:{type:"raster-dem",url:"mapbox://mapbox.terrain-rgb",tileSize:512,maxzoom:14})),t.setTerrain({exaggeration:e.exaggeration||1,source:o})})),y((()=>{void 0!==e.visible&&t.setTerrain(e.visible?{exaggeration:e.exaggeration||1,source:o}:null)})),null},R=e=>{const t=S(),[o,r]=d(null);return y((async()=>{const o=t().mapLib,n=((t,r)=>{if(e.custom)return new e.custom(r);switch(t){case"navigation":return new o.NavigationControl(r);case"scale":return new o.ScaleControl(r);case"attribution":return new o.AttributionControl(r);case"geolocate":return new o.GeolocateControl(r);case"fullscreen":return new o.FullscreenControl;default:throw new Error(`Unknown control type: ${t}`)}})(e.type,e.options);n&&t()?.addControl(n,e.position),r(n)})),g((()=>t()?.removeControl(o()))),e.children},V=e=>{const t=S?.()();let o=null,r=null;return g((()=>o?.remove())),y((()=>{if(m((()=>!e.openPopup&&!e.lngLat)))throw new Error("Marker - lngLat is required");r?.remove(),r=m((()=>e.children))?new t.mapLib.Popup(e.options.popup).setHTML(m((()=>e.children))).on("close",(()=>e.onClose?.())):null,o?.remove(),o=new t.mapLib.Marker(e.options).setPopup(r).on("dragstart",(()=>e.onDragStart?.())).on("dragend",(()=>e.onDragEnd?.())).on("drag",(()=>e.onLngLatChange?.(o.getLngLat().toArray()))),m((()=>{o.setDraggable(e.draggable).setLngLat(e.lngLat).addTo(t),e.openPopup!==r.isOpen()&&o.togglePopup()}))})),y((()=>e.openPopup!==r.isOpen()&&o.togglePopup())),y((()=>o.setLngLat(e.lngLat))),y((()=>r.setHTML(e.children))),y((()=>o.setDraggable(e.draggable))),null},A=e=>{const t=S()();let o=null;return g((()=>o?.remove())),y((()=>{if(!e.trackPointer&&!e.lngLat)throw new Error("Popup - lngLat is required");o?.remove(),o=new t.mapLib.Popup(e.trackPointer?{...e.options,closeOnClick:!1,closeButton:!1}:{focusAfterOpen:!1,...e.options}).setHTML(m((()=>e.children))).setLngLat(m((()=>e.lngLat))).on("close",(()=>e.onClose?.())).addTo(t)})),y((()=>e.trackPointer?o.trackPointer():o.setLngLat(e.lngLat))),y((()=>o.setHTML(e.children))),null},F={diagonal_l:{size:20,path:"M20 0 0 20M-10 10 10-10M10 30 30 10"},diagonal_r:{size:20,path:"M0 0 20 20M30 10 10-10M10 30-10 10"},horizontal:{size:14,path:"M7 0V20"},vertical:{size:14,path:"M0 7H20"},cross:{size:18,path:"M9 0V18M0 9H18"},hash:{size:30,path:"M15 0 30 15 15 30 0 15Z"},chevron_h:{size:20,path:"M-5 5 0 10 10 0 20 10 25 5M0 30 10 20 20 30"},chevron_v:{size:20,path:"M5-5 10 0 0 10 10 20 5 25M25 15 20 10 25 5"},square:{size:20,path:"M8 8H12V12H8Z",fill:!0},hex:{size:50,path:"M0 0V50L50 25ZM50 0V50L0 25ZM25 0V50"},circle:{size:25,path:"M8 10A2.5 2.5 0 118.01 10M18 15A2.5 2.5 0 1018.01 15",fill:!0}},B=Object.keys(F),Z=e=>{const t=S()(),[o,r]=d({width:0,height:0});g((()=>t&&t.hasImage(e.id)&&t.removeImage(e.id))),y((()=>{if(!e.id)throw new Error("Image - ID is required");if(!e.image&&!e.pattern)throw new Error("Image - Image or Pattern is required");const s=e.pattern?{pixelRatio:2,...e.options}:e.options;n(e.image||a(e.pattern),(n=>{const{width:a,height:i}=n;t.hasImage(e.id)||t.addImage(e.id,n,s),!e.pattern&&m((()=>a===o().width&&i===o().height))?(t.updateImage(e.id,n),t.triggerRepaint()):(t.removeImage(e.id),t.addImage(e.id,n,s)),r({width:a,height:i})}))}));const n=(e,o)=>{if("string"!=typeof e)return o(e);t.loadImage(e,((e,t)=>{if(e)throw e;return o(t)}))},a=e=>{const t=F[e.type];return{width:t.size,height:t.size,data:new Uint8Array(t.size*t.size*4),onAdd:function(){let e=document.createElement("canvas");e.width=e.height=t.size,this.ctx=e.getContext("2d",{willReadFrequently:!0})},render:function(){return this.ctx.fillStyle=e.background||"transparent",this.ctx.fillRect(0,0,this.width,this.height),this.ctx.strokeStyle=this.ctx.fillStyle=e.color||"black",this.ctx.lineWidth=e.lineWith||1,this.ctx.stroke(new Path2D(t.path)),t.fill&&this.ctx.fill(new Path2D(t.path)),this.data=this.ctx.getImageData(0,0,this.width,this.height).data,!0}}};return null},U={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},W=e=>{const t=S();let o=.1,r=!1;const n=a=>{e.animate&&window.requestAnimationFrame(n);const s=[e.translate.start,e.translate.end,e.translate.easing?U[e.translate.easing](o):o];(async([e,o,r],n)=>{const a=t().getFreeCameraOptions();a.position=t().mapLib.MercatorCoordinate.fromLngLat([e,o],r),a.lookAtPoint(n),t().setFreeCameraOptions(a)})("line"===e.translate.type?((e,t,o)=>e.map(((r,n)=>(1-o)*e[n]+o*t[n])))(...s):((e,t,o)=>{const r=.075;return e.map(((n,a)=>Math.sin((1-o)*r)/Math.sin(r)*e[a]+Math.sin(o*r)/Math.sin(r)*t[a]))})(...s),e.translate.target),!e.translate.loop&&(o>1||o<0)&&(r=!r),o=r?o-.001:o+.001};return y((async()=>{e.animate&&window.requestAnimationFrame(n)})),e.children};export{D as Atmosphere,W as Camera,R as Control,Z as Image,O as Layer,V as Marker,A as Popup,P as Source,q as Terrain,T as default,B as patternList,S as useMap,E as useSourceId};
1
+ import{effect as e,setAttribute as t,className as o,classList as r,style as n,createComponent as a,memo as s,template as i}from"solid-js/web";import{createContext as l,useContext as c,createUniqueId as p,createSignal as d,onMount as u,onCleanup as g,createEffect as y,untrack as m}from"solid-js";const h=["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"],v=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],b="mapbox://styles/mapbox",w="https://raw.githubusercontent.com/",f="https://raw.githubusercontent.com/GIShub4/map-styles/main/",$="https://assets.vector.hereapi.com/styles/",k={mb:{light:`${b}/light-v10`,dark:`${b}/dark-v10`,street:`${b}/streets-v11`,outdoor:`${b}/outdoors-v11`,sat:`${b}/satellite-v9`,sat_street:`${b}/satellite-streets-v11`,nav:`${b}/navigation-guidance-day-v4`,nav_night:`${b}/navigation-guidance-night-v4`,basic:`${b}/cjf4m44iw0uza2spb3q0a7s41`,monochrome:`${b}/cjv6rzz4j3m4b1fqcchuxclhb`,leshine:`${b}/cjcunv5ae262f2sm9tfwg8i0w`,icecream:`${b}/cj7t3i5yj0unt2rmt3y4b5e32`,cali:`${b}/cjerxnqt3cgvp2rmyuxbeqme7`,northstar:`${b}/cj44mfrt20f082snokim4ungi`,mineral:`${b}/cjtep62gq54l21frr1whf27ak`,moonlight:`${b}/cj3kbeqzo00022smj7akz3o1e`,frank:`${b}-map-design/ckshxkppe0gge18nz20i0nrwq`,minimo:`${b}-map-design/cksjc2nsq1bg117pnekb655h1`,decimal:`${b}-map-design/ck4014y110wt61ctt07egsel6`,standard:`${b}-map-design/ckr0svm3922ki18qntevm857n`,blueprint:`${b}-map-design/cks97e1e37nsd17nzg7p0308g`,bubble:`${b}-map-design/cksysy2nl62zp17quosctdtcc`,pencil:`${b}-map-design/cks9iema71es417mlrft4go2k`,swiss_ski:`${w}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,vintage:`${w}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,whaam:`${w}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,neon:`${w}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,camoflauge:`${w}jingsam/mapbox-gl-styles/master/Camouflage.json`,emerald:`${w}jingsam/mapbox-gl-styles/master/Emerald.json`,runner:`${w}jingsam/mapbox-gl-styles/master/Runner.json`,x_ray:`${w}jingsam/mapbox-gl-styles/master/X-ray.json`},here:{base:`${$}berlin/base/mapbox/tilezen?apikey={apikey}`,day:`${$}berlin/day/mapbox/tilezen?apikey={apikey}`,night:`${$}berlin/night/mapbox/tilezen?apikey={apikey}`},esri:{blueprint:`${f}esri:blueprint.json`,charted_territory:`${f}esri:charted-territory.json`,colored_pencil:`${f}esri:colored-pencil.json`,community:`${f}esri:community.json`,mid_century:`${f}esri:mid-century.json`,modern_antique:`${f}esri:modern-antique.json`,nat_geo:`${f}esri:national-geographic.json`,newspaper:`${f}esri:newspaper.json`,open_street_map:`${f}esri:open-street-map.json`,light_gray_canvas:`${f}esri:light-gray-canvas.json`,dark_gray_canvas:`${f}esri:dark-gray-canvas.json`,human_geo_light:`${f}esri:human-geography-light.json`,human_geo_dark:`${f}esri:human-geography-dark.json`,world_navigation:`${f}esri:world-navigation.json`,world_street:`${f}esri:world-street.json`,world_street_night:`${f}esri:world-street-night.json`,world_terrain:`${f}esri:world-terrain.json`,world_terrain_hybrid:`${f}esri:world-terrain-hybrid.json`,world_topographic:`${f}esri:world-topographic.json`,chromium:`${f}esri:chromium.json`,dreamcatcher:`${f}esri:dreamcatcher.json`,seahaven:`${f}esri:seahaven.json`,sangria:`${f}esri:sangria.json`,mercurial:`${f}esri:mercurial.json`,imagery:`${f}esri:imagery.json`,imagery_hybrid:`${f}esri:imagery-hybrid.json`,firefly:`${f}esri:firefly.json`,firefly_hybrid:`${f}esri:firefly-hybrid.json`,oceans:`${f}esri:oceans.json`}},x="https://{s}.basemaps.cartocdn.com/rastertiles/",j="https://stamen-tiles-{s}.a.ssl.fastly.net/",_="https://{s}.tile.thunderforest.com/",z={osm:{org:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",human:"https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",cycle:"https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",topo:"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",_copy:'<a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap</a>'},carto:{voyager:`${x}voyager_labels_under/{z}/{x}/{y}{r}.png`,positron:`${x}light_all/{z}/{x}/{y}{r}.png`,dark:`${x}dark_all/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://carto.com/attribution" target="_blank">&copy; Carto</a>'},stamen:{toner:`${j}toner/{z}/{x}/{y}{r}.png`,toner_lite:`${j}toner-lite/{z}/{x}/{y}{r}.png`,watercolor:`${j}watercolor/{z}/{x}/{y}.png`,terrain:`${j}terrain/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://stamen.com/privacy-policy" target="_blank">&copy; Stamen Design</a>'},tf:{cycle:`${_}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,trans:`${_}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,trans_dark:`${_}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,landscape:`${_}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,outdoors:`${_}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,neighbourhood:`${_}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,spinal:`${_}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,pioneer:`${_}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,atlas:`${_}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,mobile:`${_}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,_copy:'<a href="https://thunderforest.com/privacy" target="_blank">&copy; Thunderforest</a>'}},L=i("<div></div>",2),M=l(),S=()=>c(M),T=i=>{i.id=i.id||p();const[l,c]=d(),[v,b]=d("flyTo"),[w,f]=d("undefined"!=typeof window&&(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark"))),$=(e,t)=>i.debug&&console.debug(`${e}: %c${t}`,"color: #00F"),x=(()=>{const a=L.cloneNode(!0);return e((e=>{const s=i.id,l=i?.class,c=i?.classList,p=i?.style||i?.class||i?.classList?i.style:{position:"absolute",inset:0,...i.style};return s!==e._v$&&t(a,"id",e._v$=s),l!==e._v$2&&o(a,e._v$2=l),e._v$3=r(a,c,e._v$3),e._v$4=n(a,p,e._v$4),e}),{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),a})(),j=(e,t)=>{const o=w()&&t||e;return"string"==typeof o||o instanceof String?o?.split(":").reduce(((e,t)=>e&&e[t]),k)?.replace("{apikey}",i.apikey||import.meta.env.VITE_VECTOR_API_KEY)||o:o||{version:8,sources:{},layers:[]}};return u((async()=>{let e=i.mapLib||await import("mapbox-gl");e.Map||(e=window.maplibregl||window.mapboxgl);const t=new e.Map({accessToken:import.meta.env.VITE_MAPBOX_ACCESS_TOKEN,interactive:!!i.onViewportChange,...i.options,style:j(i.options?.style,i.darkStyle),container:x,bounds:i.viewport?.bounds,center:i.viewport?.center,zoom:i.viewport?.zoom||null,pitch:i.viewport?.pitch||null,bearing:i.viewport?.bearing||null,fitBoundsOptions:{padding:i.viewport?.padding}});t.mapLib=e,t.debug=i.debug,t.once("load",(()=>c(t))),g((()=>t?.remove()));const o=new ResizeObserver((()=>t.resize()));y((()=>i.disableResize?o.disconnect():o.observe(x)));const r=window.matchMedia("(prefers-color-scheme: dark)");r.addEventListener("change",(()=>f(r.matches)));new MutationObserver((()=>f(document.body.classList.contains("dark")))).observe(document.body,{attributes:!0}),y((()=>h.forEach((e=>{const o=i[e];if(o){const r=e.slice(2).toLowerCase();if("function"==typeof o){const e=e=>o(e);t.on(r,e),g((()=>t?.off(r,e)))}else Object.keys(o).forEach((e=>{const n=t=>o[e](t);t.on(r,e,n),g((()=>t?.off(r,e,n)))}))}})))),y((()=>{t.showTileBoundaries=i.showTileBoundaries,t.showTerrainWireframe=i.showTerrainWireframe,t.showPadding=i.showPadding,t.showCollisionBoxes=i.showCollisionBoxes,t.showOverdrawInspector=i.showOverdrawInspector})),y((e=>{if(i.cursorStyle!==e)return $("Update Cursor to",i.cursorStyle),t.getCanvas().style.cursor=i.cursorStyle,i.cursorStyle})),y((e=>{if(i.transitionType!==e)return $("Update Transition to",i.transitionType),b(i.transitionType),i.transitionType})),y((e=>{if(i.options?.projection!==e)return $("Update Projection to",i.options?.projection.name),t.setProjection(i.options?.projection),i.options?.projection})),y((e=>{const o=j(i.options?.style,i.darkStyle);if(o===e)return;let r=[],n={};if($("Update Mapstyle to",o),t.isStyleLoaded()){const e=t.getStyle();r=e.layers.filter((e=>e.id.startsWith("cl-"))),n=Object.keys(e.sources).filter((e=>e.startsWith("cl-"))).reduce(((t,o)=>({...t,[o]:e.sources[o]})),{})}return t.setStyle(o),t.once("styledata",(()=>{const e=t.getStyle();t.setStyle({...e,sources:{...e.sources,...n},layers:[...e.layers,...r]})})),o}),i.options?.style),y((()=>{const e={id:null,center:t.getCenter(),zoom:t.getZoom(),pitch:t.getPitch(),bearing:t.getBearing(),padding:i.viewport?.padding,bounds:i.viewport?.bounds},o=t=>{t.originalEvent&&i.onViewportChange&&i.onViewportChange({...e,id:i.id}),b("jumpTo")},r=t=>{t.originalEvent&&i.onViewportChange&&i.onViewportChange(e),b(i.transitionType)};t.on("move",o).on("moveend",r),g((()=>t?.off("move",o).off("moveend",r)))})),y((e=>(i.viewport?.bounds!=e&&i.onViewportChange({...i.viewport,...t.cameraForBounds(i.viewport?.bounds,{padding:i.viewport?.padding})}),i.viewport?.bounds)),i.viewport?.bounds),y((()=>{if(i.id===i.viewport?.id)return;const e={...i.viewport,padding:i.viewport?.padding||0};switch(m(v)){case"easeTo":t.stop().easeTo(e);case"jumpTo":t.stop().jumpTo(e);default:t.stop().flyTo(e)}}))})),a(M.Provider,{value:l,get children(){return[s((()=>l()&&i.children)),x]}})},C=l(),E=()=>c(C),P=e=>{const t=S();e.id=e.id||p();const o=t=>{const o=t?.split(":").reduce(((e,t)=>e&&e[t]),z)?{...e.source,url:"",tiles:[o.replace("{apikey}",e.source.apikey||import.meta.env.VITE_RASTER_API_KEY).replace("{r}",window.devicePixelRatio>1?"@2x":"")],attribution:z[t.split(":")[0]]._copy}:e.source;return o.tiles&&(o.tiles=["a","b","c"].map((e=>o.tiles[0].replace("{s}",e)))),o};return g((()=>{t&&t().getStyle().layers.forEach((o=>o.source===e.id&&t().removeLayer(o.id))),t().removeSource(e.id)})),y((()=>{if(t().getSource(e.id)){if("geojson"===e.source.type&&e.source.data&&t().getSource(e.id)?.setData(e.source.data),"image"===e.source.type&&(e.source.url||e.source.coordinates)&&t().getSource(e.id)?.updateImage(e.source.url,e.source.coordinates),"vector"===e.source.type&&(e.source.url||e.source.tiles)&&(e.source.url?t().getSource(e.id)?.setUrl(e.source.url):t().getSource(e.id)?.setTiles(e.source.tiles)),"raster"===e.source.type&&(e.source.url||e.source.tiles)){let r=t().getSource(e.id);if(!r)return;const n=o(e.source.url);n.tiles&&(n.tiles=["a","b","c"].map((e=>n.tiles[0].replace("{s}",e)))),r._tileJSONRequest?.cancel(),r.url=n.url,r.scheme=n.scheme,r._options={...r._options,...n},t().style._sourceCaches[`other:${e.id}`]?.clearTiles(),r.load()}}else t().addSource(e.id,o(e.source.url))})),a(C.Provider,{get value(){return e.id},get children(){return e.children}})},I=(e={},t={})=>[...new Set([...Object.keys(e),...Object.keys(t)])].reduce(((o,r)=>{const n=e[r];return n!==t[r]&&o.push([r,n]),o}),[]),O=e=>{const t=S(),o=E();return e.id=e.id||p(),g((()=>t&&t().getLayer(e.id)&&t().removeLayer(e.id))),y((()=>v.forEach((o=>{if(e[o]){const r=o.slice(2).toLowerCase(),n=t=>e[o](t);t()?.on(r,e.id,n),g((()=>t()?.off(r,e.id,n)))}})))),y((r=>{if(e.style&&t().style&&t().getSource(o)&&t().getLayer(e.id))return e.style.layout!==r?.layout&&I(e.style.layout,r?.layout).forEach((([o,r])=>t().setLayoutProperty(e.id,o,r,{validate:!1}))),e.style.paint!==r?.paint&&I(e.style.paint,r?.paint).forEach((([o,r])=>t().setPaintProperty(e.id,o,r,{validate:!1}))),e.style.minzoom===r?.minzoom&&e.style.maxzoom===r?.maxzoom||t().setLayerZoomRange(e.id,e.style.minzoom,e.style.maxzoom),e.style.filter!==r?.filter&&t().setFilter(e.id,e.style.filter,{validate:!1}),e.style}),e.style),y((r=>{if(void 0!==e.visible&&e.visible!==r&&t().getSource(o)&&t().getLayer(e.id))return t().setLayoutProperty(e.id,"visibility",e.visible?"visible":"none",{validate:!1}),e.visible}),e.visible),y((async()=>{e.filter&&(!t().isStyleLoaded()&&await t().once("styledata"),t().setFilter(e.id,e.filter))})),y((async()=>{e.featureState&&e.featureState.id&&(!t().isStyleLoaded()&&await t().once("styledata"),t().removeFeatureState({source:o,sourceLayer:e.style["source-layer"]}),t().setFeatureState({source:o,sourceLayer:e.style["source-layer"],id:e.featureState.id},e.featureState.state))})),y((()=>{!t().getLayer(e.id)&&t().addLayer(e.customLayer||{...e.style,id:e.id,source:o,metadata:{smg:{beforeType:e.beforeType,beforeId:e.beforeId}}},e.beforeType?t()?.getStyle().layers.find((t=>t.type===e.beforeType))?.id:e.beforeId)})),e.children},D=e=>{const t=S()();return g((()=>t?.setFog(null))),y((()=>t.setFog(e.style||{}))),null},q=e=>{const t=S()();let o=E();return g((()=>t?.setTerrain(null))),y((()=>{o&&(o=p(),t.addSource(o,t.isMapLibre?{type:"raster-dem",url:"https://demotiles.maplibre.org/terrain-tiles/tiles.json",tileSize:256}:{type:"raster-dem",url:"mapbox://mapbox.terrain-rgb",tileSize:512,maxzoom:14})),t.setTerrain({exaggeration:e.exaggeration||1,source:o})})),y((()=>{void 0!==e.visible&&t.setTerrain(e.visible?{exaggeration:e.exaggeration||1,source:o}:null)})),null},R=e=>{const t=S(),[o,r]=d(null);return y((async()=>{const o=t().mapLib,n=((t,r)=>{if(e.custom)return new e.custom(r);switch(t){case"navigation":return new o.NavigationControl(r);case"scale":return new o.ScaleControl(r);case"attribution":return new o.AttributionControl(r);case"geolocate":return new o.GeolocateControl(r);case"fullscreen":return new o.FullscreenControl;default:throw new Error(`Unknown control type: ${t}`)}})(e.type,e.options);n&&t()?.addControl(n,e.position),r(n)})),g((()=>t()?.removeControl(o()))),e.children},V=e=>{const t=S?.()();let o=null,r=null;return g((()=>o?.remove())),y((()=>{if(m((()=>!e.openPopup&&!e.lngLat)))throw new Error("Marker - lngLat is required");r?.remove(),r=m((()=>e.children))?new t.mapLib.Popup(e.options.popup).setHTML(m((()=>e.children))).on("close",(()=>e.onClose?.())):null,o?.remove(),o=new t.mapLib.Marker(e.options).setPopup(r).on("dragstart",(()=>e.onDragStart?.())).on("dragend",(()=>e.onDragEnd?.())).on("drag",(()=>e.onLngLatChange?.(o.getLngLat().toArray()))),m((()=>{o.setDraggable(e.draggable).setLngLat(e.lngLat).addTo(t),e.openPopup!==r.isOpen()&&o.togglePopup()}))})),y((()=>e.openPopup!==r.isOpen()&&o.togglePopup())),y((()=>o.setLngLat(e.lngLat))),y((()=>r.setHTML(e.children))),y((()=>o.setDraggable(e.draggable))),null},A=e=>{const t=S()();let o=null;return g((()=>o?.remove())),y((()=>{if(!e.trackPointer&&!e.lngLat)throw new Error("Popup - lngLat is required");o?.remove(),o=new t.mapLib.Popup(e.trackPointer?{...e.options,closeOnClick:!1,closeButton:!1}:{focusAfterOpen:!1,...e.options}).setHTML(m((()=>e.children))).setLngLat(m((()=>e.lngLat))).on("close",(()=>e.onClose?.())).addTo(t)})),y((()=>e.trackPointer?o.trackPointer():o.setLngLat(e.lngLat))),y((()=>o.setHTML(e.children))),null},F={diagonal_l:{size:20,path:"M20 0 0 20M-10 10 10-10M10 30 30 10"},diagonal_r:{size:20,path:"M0 0 20 20M30 10 10-10M10 30-10 10"},horizontal:{size:14,path:"M7 0V20"},vertical:{size:14,path:"M0 7H20"},cross:{size:18,path:"M9 0V18M0 9H18"},hash:{size:30,path:"M15 0 30 15 15 30 0 15Z"},chevron_h:{size:20,path:"M-5 5 0 10 10 0 20 10 25 5M0 30 10 20 20 30"},chevron_v:{size:20,path:"M5-5 10 0 0 10 10 20 5 25M25 15 20 10 25 5"},square:{size:20,path:"M8 8H12V12H8Z",fill:!0},hex:{size:50,path:"M0 0V50L50 25ZM50 0V50L0 25ZM25 0V50"},circle:{size:25,path:"M8 10A2.5 2.5 0 118.01 10M18 15A2.5 2.5 0 1018.01 15",fill:!0}},B=Object.keys(F),Z=e=>{const t=S()(),[o,r]=d({width:0,height:0});g((()=>t&&t.hasImage(e.id)&&t.removeImage(e.id))),y((()=>{if(!e.id)throw new Error("Image - ID is required");if(!e.image&&!e.pattern)throw new Error("Image - Image or Pattern is required");const s=e.pattern?{pixelRatio:2,...e.options}:e.options;n(e.image||a(e.pattern),(n=>{const{width:a,height:i}=n;t.hasImage(e.id)||t.addImage(e.id,n,s),!e.pattern&&m((()=>a===o().width&&i===o().height))?(t.updateImage(e.id,n),t.triggerRepaint()):(t.removeImage(e.id),t.addImage(e.id,n,s)),r({width:a,height:i})}))}));const n=(e,o)=>{if("string"!=typeof e)return o(e);t.loadImage(e,((e,t)=>{if(e)throw e;return o(t)}))},a=e=>{const t=F[e.type];return{width:t.size,height:t.size,data:new Uint8Array(t.size*t.size*4),onAdd:function(){let e=document.createElement("canvas");e.width=e.height=t.size,this.ctx=e.getContext("2d",{willReadFrequently:!0})},render:function(){return this.ctx.fillStyle=e.background||"transparent",this.ctx.fillRect(0,0,this.width,this.height),this.ctx.strokeStyle=this.ctx.fillStyle=e.color||"black",this.ctx.lineWidth=e.lineWith||1,this.ctx.stroke(new Path2D(t.path)),t.fill&&this.ctx.fill(new Path2D(t.path)),this.data=this.ctx.getImageData(0,0,this.width,this.height).data,!0}}};return null},U={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},W=e=>{const t=S();let o=.1,r=!1;const n=a=>{e.animate&&window.requestAnimationFrame(n);const s=[e.translate.start,e.translate.end,e.translate.easing?U[e.translate.easing](o):o];(async([e,o,r],n)=>{const a=t().getFreeCameraOptions();a.position=t().mapLib.MercatorCoordinate.fromLngLat([e,o],r),a.lookAtPoint(n),t().setFreeCameraOptions(a)})("line"===e.translate.type?((e,t,o)=>e.map(((r,n)=>(1-o)*e[n]+o*t[n])))(...s):((e,t,o)=>{const r=.075;return e.map(((n,a)=>Math.sin((1-o)*r)/Math.sin(r)*e[a]+Math.sin(o*r)/Math.sin(r)*t[a]))})(...s),e.translate.target),!e.translate.loop&&(o>1||o<0)&&(r=!r),o=r?o-.001:o+.001};return y((async()=>{e.animate&&window.requestAnimationFrame(n)})),e.children};export{D as Atmosphere,W as Camera,R as Control,Z as Image,O as Layer,V as Marker,A as Popup,P as Source,q as Terrain,T as default,B as patternList,S as useMap,E as useSourceId};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/mapStyles.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Atmosphere/index.tsx","../../src/components/Terrain/index.tsx","../../src/components/Control/index.tsx","../../src/components/Marker/index.tsx","../../src/components/Popup/index.tsx","../../src/components/Image/index.tsx","../../src/components/Camera/index.tsx"],"sourcesContent":["type mapEventTypes = {\n onMouseDown?: Function\n onMouseUp?: Function\n onMouseOver?: Function\n onMouseOut?: Function\n onMouseMove?: Function\n onMouseEnter?: Function\n onMouseLeave?: Function\n onPreClick?: Function\n onClick?: Function\n onDblClick?: Function\n onContextMenu?: Function\n onTouchStart?: Function\n onTouchEnd?: Function\n onTouchCancel?: Function\n onWheel?: Function\n onResize?: Function\n onRemove?: Function\n onTouchMove?: Function\n onMoveStart?: Function\n onMove?: Function\n onMoveEnd?: Function\n onDragStart?: Function\n onDrag?: Function\n onDragEnd?: Function\n onZoomStart?: Function\n onZoom?: Function\n onZoomEnd?: Function\n onRotateStart?: Function\n onRotate?: Function\n onRotatEnd?: Function\n onPitchStart?: Function\n onPitch?: Function\n onPitchEnd?: Function\n onBoxZoomStart?: Function\n onBoxZoomEnd?: Function\n onBoxZoomCancel?: Function\n onWebglContextLost?: Function\n onWebglContextRestored?: Function\n onLoad?: Function\n onRender?: Function\n onIdle?: Function\n onError?: Function\n onData?: Function\n onStyleData?: Function\n onSourceData?: Function\n onDataLoading?: Function\n onStyleDataLoading?: Function\n onSourceDataLoading?: Function\n onStyleImageMissing?: Function\n}\n\nconst 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\ntype layerEventTypes = {\n onMouseDown?: Function\n onMouseUp?: Function\n onMouseOver?: Function\n onMouseOut?: Function\n onMouseMove?: Function\n onMouseEnter?: Function\n onMouseLeave?: Function\n onClick?: Function\n onDblClick?: Function\n onContextMenu?: Function\n onTouchStart?: Function\n onTouchEnd?: Function\n onTouchCancel?: Function\n}\n\nconst layerEvents: any[] = [\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 }\nexport type { mapEventTypes, layerEventTypes }\n","const mapBase = 'mapbox://styles/mapbox'\nconst gitBase = 'https://raw.githubusercontent.com/'\nconst gishub = 'https://raw.githubusercontent.com/GIShub4/map-styles/main/'\nconst hereBase = 'https://assets.vector.hereapi.com/styles/'\n\nexport const vectorStyleList: object = {\n mb: {\n light: `${mapBase}/light-v10`,\n dark: `${mapBase}/dark-v10`,\n street: `${mapBase}/streets-v11`,\n outdoor: `${mapBase}/outdoors-v11`,\n sat: `${mapBase}/satellite-v9`,\n sat_street: `${mapBase}/satellite-streets-v11`,\n nav: `${mapBase}/navigation-guidance-day-v4`,\n nav_night: `${mapBase}/navigation-guidance-night-v4`,\n basic: `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n monochrome: `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n leshine: `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n icecream: `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n cali: `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n northstar: `${mapBase}/cj44mfrt20f082snokim4ungi`,\n mineral: `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n moonlight: `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n frank: `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n minimo: `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n decimal: `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n standard: `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n blueprint: `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n bubble: `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n pencil: `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n swiss_ski: `${gitBase}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n vintage: `${gitBase}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n whaam: `${gitBase}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n neon: `${gitBase}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n camoflauge: `${gitBase}jingsam/mapbox-gl-styles/master/Camouflage.json`,\n emerald: `${gitBase}jingsam/mapbox-gl-styles/master/Emerald.json`,\n runner: `${gitBase}jingsam/mapbox-gl-styles/master/Runner.json`,\n x_ray: `${gitBase}jingsam/mapbox-gl-styles/master/X-ray.json`,\n },\n here: {\n base: `${hereBase}berlin/base/mapbox/tilezen?apikey={apikey}`,\n day: `${hereBase}berlin/day/mapbox/tilezen?apikey={apikey}`,\n night: `${hereBase}berlin/night/mapbox/tilezen?apikey={apikey}`,\n },\n esri: {\n blueprint: `${gishub}esri:blueprint.json`,\n charted_territory: `${gishub}esri:charted-territory.json`,\n colored_pencil: `${gishub}esri:colored-pencil.json`,\n community: `${gishub}esri:community.json`,\n mid_century: `${gishub}esri:mid-century.json`,\n modern_antique: `${gishub}esri:modern-antique.json`,\n nat_geo: `${gishub}esri:national-geographic.json`,\n newspaper: `${gishub}esri:newspaper.json`,\n open_street_map: `${gishub}esri:open-street-map.json`,\n light_gray_canvas: `${gishub}esri:light-gray-canvas.json`,\n dark_gray_canvas: `${gishub}esri:dark-gray-canvas.json`,\n human_geo_light: `${gishub}esri:human-geography-light.json`,\n human_geo_dark: `${gishub}esri:human-geography-dark.json`,\n world_navigation: `${gishub}esri:world-navigation.json`,\n world_street: `${gishub}esri:world-street.json`,\n world_street_night: `${gishub}esri:world-street-night.json`,\n world_terrain: `${gishub}esri:world-terrain.json`,\n world_terrain_hybrid: `${gishub}esri:world-terrain-hybrid.json`,\n world_topographic: `${gishub}esri:world-topographic.json`,\n chromium: `${gishub}esri:chromium.json`,\n dreamcatcher: `${gishub}esri:dreamcatcher.json`,\n seahaven: `${gishub}esri:seahaven.json`,\n sangria: `${gishub}esri:sangria.json`,\n mercurial: `${gishub}esri:mercurial.json`,\n imagery: `${gishub}esri:imagery.json`,\n imagery_hybrid: `${gishub}esri:imagery-hybrid.json`,\n firefly: `${gishub}esri:firefly.json`,\n firefly_hybrid: `${gishub}esri:firefly-hybrid.json`,\n oceans: `${gishub}esri:oceans.json`,\n },\n}\nconst carto = 'https://{s}.basemaps.cartocdn.com/rastertiles/'\nconst stamen = 'https://stamen-tiles-{s}.a.ssl.fastly.net/'\nconst tf = 'https://{s}.tile.thunderforest.com/'\n\nexport const rasterStyleList: object = {\n osm: {\n org: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n human: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n cycle: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n topo: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n _copy:\n '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">&copy; OpenStreetMap</a>',\n },\n carto: {\n voyager: `${carto}voyager_labels_under/{z}/{x}/{y}{r}.png`,\n positron: `${carto}light_all/{z}/{x}/{y}{r}.png`,\n dark: `${carto}dark_all/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://carto.com/attribution\" target=\"_blank\">&copy; Carto</a>',\n },\n stamen: {\n toner: `${stamen}toner/{z}/{x}/{y}{r}.png`,\n toner_lite: `${stamen}toner-lite/{z}/{x}/{y}{r}.png`,\n watercolor: `${stamen}watercolor/{z}/{x}/{y}.png`,\n terrain: `${stamen}terrain/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://stamen.com/privacy-policy\" target=\"_blank\">&copy; Stamen Design</a>',\n },\n tf: {\n cycle: `${tf}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans: `${tf}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans_dark: `${tf}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n landscape: `${tf}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n outdoors: `${tf}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n neighbourhood: `${tf}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n spinal: `${tf}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n pioneer: `${tf}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n atlas: `${tf}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n mobile: `${tf}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n _copy:\n '<a href=\"https://thunderforest.com/privacy\" target=\"_blank\">&copy; Thunderforest</a>',\n },\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n createUniqueId,\n untrack,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../mapStyles'\nimport type { mapEventTypes } from '../../events'\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 {\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 //** MapLibre library */\n mapLib?: any\n //** APIkey for vector service */\n apikey?: string\n //** Debug Mode */\n debug?: boolean\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: any\n } & mapEventTypes\n> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n const [darkMode, setDarkMode] = createSignal(\n typeof window !== 'undefined' &&\n (window.matchMedia('(prefers-color-scheme: dark)').matches ||\n document.body.classList.contains('dark'))\n )\n\n const debug = (text, value) =>\n props.debug && console.debug(`${text}: %c${value}`, 'color: #00F')\n\n const mapRef = (\n <div\n id={props.id}\n class={props?.class}\n classList={props?.classList}\n style={\n props?.style || props?.class || props?.classList\n ? props.style\n : { position: 'absolute', inset: 0, ...props.style }\n }\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\n ?.split(':')\n .reduce((p, c) => p && p[c], vectorStyleList)\n ?.replace(\n '{apikey}',\n //@ts-ignore\n props.apikey || import.meta.env.VITE_VECTOR_API_KEY\n ) || style\n : style || { version: 8, sources: {}, layers: [] }\n }\n\n onMount(async () => {\n let mapLib = props.mapLib || (await import('mapbox-gl'))\n if (!mapLib.Map) mapLib = window['maplibregl'] || window['mapboxgl']\n\n const map: MapboxMap = new mapLib.Map({\n accessToken:\n //@ts-ignore\n import.meta.env.VITE_MAPBOX_ACCESS_TOKEN,\n interactive: !!props.onViewportChange,\n ...props.options,\n style: getStyle(props.options?.style, props.darkStyle),\n container: mapRef,\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.mapLib = mapLib\n map.debug = props.debug\n // map.container = containerRef\n\n map.once('load', () => setMapRoot(map))\n\n onCleanup(() => map?.remove())\n\n // Listen to map container size changes\n const resizeObserver = new ResizeObserver(() => map.resize())\n createEffect(() =>\n props.disableResize\n ? resizeObserver.disconnect()\n : resizeObserver.observe(mapRef as Element)\n )\n\n // Listen to dark theme changes\n const darkTheme = window.matchMedia('(prefers-color-scheme: dark)')\n darkTheme.addEventListener('change', () => setDarkMode(darkTheme.matches))\n\n const bodyClassObserver = new MutationObserver(() =>\n setDarkMode(document.body.classList.contains('dark'))\n )\n bodyClassObserver.observe(document.body, { attributes: true })\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n const prop = props[item]\n if (prop) {\n const event = item.slice(2).toLowerCase()\n if (typeof prop === 'function') {\n const callback = e => prop(e)\n map.on(event, callback)\n onCleanup(() => map?.off(event, callback))\n } else {\n Object.keys(prop).forEach(layerId => {\n const callback = e => prop[layerId](e)\n map.on(event, layerId, callback)\n onCleanup(() => map?.off(event, layerId, callback))\n })\n }\n }\n })\n )\n\n // Update debug features\n createEffect(() => {\n map.showTileBoundaries = props.showTileBoundaries\n map.showTerrainWireframe = props.showTerrainWireframe\n map.showPadding = props.showPadding\n map.showCollisionBoxes = props.showCollisionBoxes\n map.showOverdrawInspector = props.showOverdrawInspector\n })\n\n // Update cursor\n createEffect(prev => {\n if (props.cursorStyle === prev) return\n debug('Update Cursor to', props.cursorStyle)\n map.getCanvas().style.cursor = props.cursorStyle\n return props.cursorStyle\n })\n\n //Update transition type\n createEffect(prev => {\n if (props.transitionType === prev) return\n debug('Update Transition to', props.transitionType)\n setTransitionType(props.transitionType)\n return props.transitionType\n })\n\n // Update projection\n createEffect(prev => {\n if (props.options?.projection === prev) return\n debug('Update Projection to', props.options?.projection.name)\n map.setProjection(props.options?.projection)\n return props.options?.projection\n })\n\n // Update map style\n createEffect(prev => {\n const style = getStyle(props.options?.style, props.darkStyle)\n if (style === prev) return\n let oldLayers = []\n let oldSources = {}\n debug('Update Mapstyle to', style)\n if (map.isStyleLoaded()) {\n const oldStyle = map.getStyle()\n oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n }\n map.setStyle(style)\n map.once('styledata', () => {\n const newStyle = map.getStyle()\n map.setStyle({\n ...newStyle,\n sources: { ...newStyle.sources, ...oldSources },\n layers: [...newStyle.layers, ...oldLayers],\n })\n })\n return style\n }, props.options?.style)\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map?.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n {mapRoot() && props.children}\n {mapRef}\n </MapContext.Provider>\n )\n}\n","import {\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../mapStyles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url => {\n const source = url?.split(':').reduce((p, c) => p && p[c], rasterStyleList)\n return source\n ? {\n ...props.source,\n url: '',\n tiles: [\n source\n .replace(\n '{apikey}',\n //@ts-ignore\n props.source.apikey || import.meta.env.VITE_RASTER_API_KEY\n )\n .replace('{r}', window.devicePixelRatio > 1 ? '@2x' : ''),\n ],\n attribution: rasterStyleList[url.split(':')[0]]._copy,\n }\n : props.source\n }\n\n // Remove Source\n onCleanup(() => {\n map()\n ?.getStyle()\n .layers.forEach(\n layer => layer.source === props.id && map().removeLayer(layer.id)\n )\n map()?.getSource(props.id) && map().removeSource(props.id)\n })\n\n // Update\n createEffect(() => {\n const source = map().getSource(props.id)\n if (!source) return\n\n // Update GeoJSON Data\n if (props.source.type === 'geojson' && props.source.data)\n source.setData(props.source.data)\n\n // Update Image URL\n if (\n props.source.type === 'image' &&\n (props.source.url || props.source.coordinates)\n )\n source.updateImage(props.source.url, props.source.coordinates)\n\n // Update Vector URL or Tiles\n if (\n props.source.type === 'vector' &&\n (props.source.url || props.source.tiles)\n )\n props.source.url\n ? source.setUrl(props.source.url)\n : source.setTiles(props.source.tiles)\n\n // Update Raster URL or Tiles\n if (\n props.source.type === 'raster' &&\n (props.source.url || props.source.tiles)\n ) {\n const src = lookup(props.source.url)\n src.tiles &&\n (src.tiles = ['a', 'b', 'c'].map(i => src.tiles[0].replace('{s}', i)))\n source._tileJSONRequest?.cancel()\n source.url = src.url\n source.scheme = src.scheme\n source._options = { ...source._options, ...src }\n map().style._sourceCaches[`other:${props.id}`]?.clearTiles()\n source.load()\n }\n })\n\n // Add Source\n createEffect(() => {\n const source = lookup(props.source.url)\n source.tiles &&\n (source.tiles = ['a', 'b', 'c'].map(i =>\n source.tiles[0].replace('{s}', i)\n ))\n !map().getSource(props.id) && map().addSource(props.id, source)\n })\n\n return (\n <SourceContext.Provider value={props.id}>\n {props.children}\n </SourceContext.Provider>\n )\n}\n","import { onCleanup, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport { layerEvents } from '../../events'\nimport type { layerEventTypes } 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 {\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 } & layerEventTypes\n> = props => {\n const map: MapboxMap = useMap()\n const sourceId: string = useSourceId()\n props.id = props.id || createUniqueId()\n\n //Remove Layer\n onCleanup(\n () => map() && map().getLayer(props.id) && map().removeLayer(props.id)\n )\n\n // Hook up events\n createEffect(() =>\n layerEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map()?.on(event, props.id, callback)\n onCleanup(() => map()?.off(event, props.id, callback))\n }\n })\n )\n\n // Update Style\n createEffect((prev: StyleSpecification) => {\n if (\n !props.style ||\n !map().style ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n if (props.style.layout !== prev?.layout)\n diff(props.style.layout, prev?.layout).forEach(([key, value]) =>\n map().setLayoutProperty(props.id, key, value, { validate: false })\n )\n\n if (props.style.paint !== prev?.paint)\n diff(props.style.paint, prev?.paint).forEach(([key, value]) =>\n map().setPaintProperty(props.id, key, value, { validate: false })\n )\n\n if (\n props.style.minzoom !== prev?.minzoom ||\n props.style.maxzoom !== prev?.maxzoom\n )\n map().setLayerZoomRange(\n props.id,\n props.style.minzoom,\n props.style.maxzoom\n )\n\n if (props.style.filter !== prev?.filter)\n map().setFilter(props.id, props.style.filter, { validate: false })\n\n return props.style\n }, props.style)\n\n // Update Visibility\n createEffect((prev: boolean) => {\n if (\n props.visible === undefined ||\n props.visible === prev ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n map().setLayoutProperty(\n props.id,\n 'visibility',\n props.visible ? 'visible' : 'none',\n { validate: false }\n )\n return props.visible\n }, props.visible)\n\n // Update Filter\n createEffect(async () => {\n if (!props.filter) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFilter(props.id, props.filter)\n })\n\n // Update Feature State\n createEffect(async () => {\n if (!props.featureState || !props.featureState.id) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n map().removeFeatureState({\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n id: props.featureState.id,\n },\n props.featureState.state\n )\n })\n\n // Add Layer\n createEffect(() => {\n !map().getLayer(props.id) &&\n map().addLayer(\n props.customLayer || {\n ...props.style,\n id: props.id,\n source: sourceId,\n metadata: {\n smg: { beforeType: props.beforeType, beforeId: props.beforeId },\n },\n },\n props.beforeType\n ? map()\n ?.getStyle()\n .layers.find(l => l.type === props.beforeType)?.id\n : props.beforeId\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, VoidComponent } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { FogSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Atmosphere: VoidComponent<{\n style: FogSpecification\n}> = props => {\n const map: MapboxMap = useMap()()\n\n // Remove Atmosphere Layer\n onCleanup(() => map?.setFog(null))\n\n // Add Atmosphere Layer\n createEffect(() => map.setFog(props.style || {}))\n\n return null\n}\n","import {\n onCleanup,\n createEffect,\n VoidComponent,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n SourceSpecification,\n TerrainSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: VoidComponent<{\n exaggeration?: number\n source?: TerrainSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()()\n let sourceId: SourceSpecification = useSourceId()\n\n // Remove Terrain Layer\n onCleanup(() => map?.setTerrain(null))\n\n // Add Terrain Layer\n createEffect(() => {\n if (sourceId) {\n sourceId = createUniqueId()\n map.addSource(\n sourceId,\n map.isMapLibre\n ? {\n type: 'raster-dem',\n url: 'https://demotiles.maplibre.org/terrain-tiles/tiles.json',\n tileSize: 256,\n }\n : {\n type: 'raster-dem',\n url: 'mapbox://mapbox.terrain-rgb',\n tileSize: 512,\n maxzoom: 14,\n }\n )\n }\n map.setTerrain({\n exaggeration: props.exaggeration || 1,\n source: sourceId,\n })\n })\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map.setTerrain(\n props.visible\n ? { exaggeration: props.exaggeration || 1, source: sourceId }\n : null\n )\n })\n\n return null\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { Options as AttributionOptions } from 'mapbox-gl/src/ui/control/attribution_control'\nimport type { Options as FullscreenOptions } from 'mapbox-gl/src/ui/control/fullscreen_control'\nimport type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolocate_control'\nimport type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control'\nimport type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control'\n\nexport const Control: Component<{\n type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n | object\n custom?: any\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n // Add Control\n createEffect(async () => {\n const mapLib = map().mapLib\n\n const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapLib.NavigationControl(options)\n case 'scale':\n return new mapLib.ScaleControl(options)\n case 'attribution':\n return new mapLib.AttributionControl(options)\n case 'geolocate':\n return new mapLib.GeolocateControl(options)\n case 'fullscreen':\n return new mapLib.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n const control = getControl(props.type, props.options)\n control && map()?.addControl(control, props.position)\n setControl(control)\n })\n\n onCleanup(() => map()?.removeControl(control()))\n\n return props.children\n}\n","import { onCleanup, createEffect, Component, untrack } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n Popup as PopupType,\n PopupOptions,\n} from 'mapbox-gl/src/ui/popup.js'\nimport type {\n Marker as MarkerType,\n MarkerOptions,\n} from 'mapbox-gl/src/ui/marker.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Marker: Component<{\n options?: MarkerOptions & { popup: PopupOptions }\n lngLat: LngLatLike\n openPopup?: boolean\n draggable?: boolean\n onLngLatChange?: Function\n onClose?: Function\n onDragStart?: Function\n onDragEnd?: Function\n children?: any\n}> = props => {\n const map: MapboxMap = useMap?.()()\n let marker: MarkerType = null\n let popup: PopupType = null\n\n // Remove Marker\n onCleanup(() => marker?.remove())\n\n // Add/Update Marker\n createEffect(() => {\n if (untrack(() => !props.openPopup && !props.lngLat))\n throw new Error('Marker - lngLat is required')\n\n popup?.remove()\n popup = untrack(() => props.children)\n ? new map.mapLib.Popup(props.options.popup)\n .setHTML(untrack(() => props.children))\n .on('close', () => props.onClose?.())\n : null\n\n marker?.remove()\n marker = new map.mapLib.Marker(props.options)\n .setPopup(popup)\n .on('dragstart', () => props.onDragStart?.())\n .on('dragend', () => props.onDragEnd?.())\n .on('drag', () => props.onLngLatChange?.(marker.getLngLat().toArray()))\n untrack(() => {\n marker.setDraggable(props.draggable).setLngLat(props.lngLat).addTo(map)\n props.openPopup !== popup.isOpen() && marker.togglePopup()\n })\n })\n\n // Toggle Popup\n createEffect(() => props.openPopup !== popup.isOpen() && marker.togglePopup())\n\n // Update Position\n createEffect(() => marker.setLngLat(props.lngLat))\n\n // Update Popup Content\n createEffect(() => popup.setHTML(props.children))\n\n // Update Draggable\n createEffect(() => marker.setDraggable(props.draggable))\n\n return null\n}\n","import { onCleanup, createEffect, Component, untrack } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n Popup as PopupType,\n PopupOptions,\n} from 'mapbox-gl/src/ui/popup.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Popup: Component<{\n options?: PopupOptions\n trackPointer?: boolean\n lngLat: LngLatLike\n onClose?: Function\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()()\n let popup: PopupType = null\n\n // Remove Popup\n onCleanup(() => popup?.remove())\n\n // Add/Update Popup\n createEffect(() => {\n if (!props.trackPointer && !props.lngLat)\n throw new Error('Popup - lngLat is required')\n popup?.remove()\n popup = new map.mapLib.Popup(\n props.trackPointer\n ? { ...props.options, closeOnClick: false, closeButton: false }\n : { focusAfterOpen: false, ...props.options }\n )\n .setHTML(untrack(() => props.children))\n .setLngLat(untrack(() => props.lngLat))\n .on('close', () => props.onClose?.())\n .addTo(map)\n })\n\n // Update Position\n createEffect(() =>\n props.trackPointer ? popup.trackPointer() : popup.setLngLat(props.lngLat)\n )\n\n // Update Content\n createEffect(() => popup.setHTML(props.children))\n\n return null\n}\n","import {\n onCleanup,\n createSignal,\n createEffect,\n VoidComponent,\n untrack,\n} 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\nconst PATTERN = {\n diagonal_l: { size: 20, path: 'M20 0 0 20M-10 10 10-10M10 30 30 10' },\n diagonal_r: { size: 20, path: 'M0 0 20 20M30 10 10-10M10 30-10 10' },\n horizontal: { size: 14, path: 'M7 0V20' },\n vertical: { size: 14, path: 'M0 7H20' },\n cross: { size: 18, path: 'M9 0V18M0 9H18' },\n hash: { size: 30, path: 'M15 0 30 15 15 30 0 15Z' },\n chevron_h: { size: 20, path: 'M-5 5 0 10 10 0 20 10 25 5M0 30 10 20 20 30' },\n chevron_v: { size: 20, path: 'M5-5 10 0 0 10 10 20 5 25M25 15 20 10 25 5' },\n square: { size: 20, path: 'M8 8H12V12H8Z', fill: true },\n hex: { size: 50, path: 'M0 0V50L50 25ZM50 0V50L0 25ZM25 0V50' },\n circle: {\n size: 25,\n path: 'M8 10A2.5 2.5 0 118.01 10M18 15A2.5 2.5 0 1018.01 15',\n fill: true,\n },\n}\n\nexport const patternList = Object.keys(PATTERN)\n\nexport type Color =\n | `#${string}`\n | `rgb(${number}, ${number}, ${number})`\n | `hsl(${number}, ${number}%, ${number}%)`\n\nexport const Image: VoidComponent<{\n id: string\n image?:\n | HTMLImageElement\n | ImageBitmap\n | ImageData\n | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }\n | StyleImageInterface\n | string\n options?: StyleImageMetadata\n pattern?: {\n type: string\n color: Color\n background: Color\n lineWith: number\n }\n}> = props => {\n const map: MapboxMap = useMap()()\n const [size, setSize] = createSignal({ width: 0, height: 0 })\n\n // Remove Image\n onCleanup(() => map && map.hasImage(props.id) && map.removeImage(props.id))\n\n // Add or Update Image\n createEffect(() => {\n if (!props.id) throw new Error('Image - ID is required')\n if (!props.image && !props.pattern)\n throw new Error('Image - Image or Pattern is required')\n\n const ops = props.pattern\n ? { pixelRatio: 2, ...props.options }\n : props.options\n\n _loadImage(props.image || _createPattern(props.pattern), data => {\n const { width, height } = data\n if (!map.hasImage(props.id)) map.addImage(props.id, data, ops)\n if (\n !props.pattern &&\n untrack(() => width === size().width && height === size().height)\n ) {\n map.updateImage(props.id, data)\n map.triggerRepaint()\n } else {\n map.removeImage(props.id)\n map.addImage(props.id, data, ops)\n }\n setSize({ width, height })\n })\n })\n\n // Load Image from URL\n const _loadImage = (image, callback) => {\n if (typeof image !== 'string') return callback(image)\n map.loadImage(image, (error, imageData) => {\n if (error) throw error\n return callback(imageData)\n })\n }\n\n const _createPattern = pattern => {\n const p = PATTERN[pattern.type]\n return {\n width: p.size,\n height: p.size,\n data: new Uint8Array(p.size * p.size * 4),\n onAdd: function () {\n let canvas = document.createElement('canvas')\n canvas.width = canvas.height = p.size\n this.ctx = canvas.getContext('2d', { willReadFrequently: true })\n },\n render: function () {\n this.ctx.fillStyle = pattern.background || 'transparent'\n this.ctx.fillRect(0, 0, this.width, this.height)\n this.ctx.strokeStyle = this.ctx.fillStyle = pattern.color || 'black'\n this.ctx.lineWidth = pattern.lineWith || 1\n this.ctx.stroke(new Path2D(p.path))\n if (p.fill) this.ctx.fill(new Path2D(p.path))\n this.data = this.ctx.getImageData(0, 0, this.width, this.height).data\n return true\n },\n }\n }\n\n return null\n}\n","import { createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type LngLatLike from 'mapbox-gl/src/geo/lng_lat.js'\n\n// linearly interpolate between two positions [x,y,z] based on time\nconst lerp = (a, b, t) => a.map((_, idx) => (1.0 - t) * a[idx] + t * b[idx])\n\n// sphericaly interpolate between two positions [x,y,z] based on time\nconst slerp = (a, b, t) => {\n const omega = 0.075\n // TODO: Proper Calculation\n // a.map((_, idx) => a[idx] * b[idx]).reduce((m, n) => m + n)\n\n return a.map(\n (_, idx) =>\n (Math.sin((1 - t) * omega) / Math.sin(omega)) * a[idx] +\n (Math.sin(t * omega) / Math.sin(omega)) * b[idx]\n )\n}\n\n// calculations from: https://easings.net\nconst easeQuad = {\n in: (x: number): number => x * x,\n out: (x: number): number => 1 - (1 - x) * (1 - x),\n inOut: (x: number): number =>\n x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n}\n\nexport const Camera: Component<{\n animate: boolean\n translate?: {\n type?: 'line' | 'sphere'\n start: [number, number, number]\n end: [number, number, number]\n target: LngLatLike\n targetEnd?: LngLatLike\n easing?: 'in' | 'out' | 'inOut'\n loop?: boolean\n duration: number\n }\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let animationTime = 0.1\n let isReverse = false\n\n const updateCameraPosition = async ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = map().mapLib.MercatorCoordinate.fromLngLat(\n [lng, lat],\n alt\n )\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","hereBase","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","here","base","day","night","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","style","position","inset","_v$","_$setAttribute","_$className","_$classList","_$style","undefined","getStyle","String","split","reduce","p","c","replace","apikey","import","meta","env","VITE_VECTOR_API_KEY","version","sources","layers","onMount","async","mapLib","Map","map","accessToken","VITE_MAPBOX_ACCESS_TOKEN","interactive","onViewportChange","options","darkStyle","container","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","once","onCleanup","remove","resizeObserver","ResizeObserver","resize","createEffect","disableResize","disconnect","observe","darkTheme","addEventListener","MutationObserver","attributes","forEach","item","prop","event","slice","toLowerCase","callback","e","on","off","Object","keys","layerId","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","prev","cursorStyle","getCanvas","cursor","projection","name","setProjection","oldLayers","oldSources","isStyleLoaded","oldStyle","filter","l","startsWith","s","obj","key","setStyle","newStyle","getCenter","getZoom","getPitch","getBearing","callMove","originalEvent","callEnd","cameraForBounds","untrack","stop","easeTo","jumpTo","flyTo","_$createComponent","Provider","children","_$memo","SourceContext","useSourceId","Source","lookup","url","source","tiles","VITE_RASTER_API_KEY","devicePixelRatio","attribution","layer","removeLayer","getSource","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","src","i","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","addSource","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","getLayer","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","featureState","removeFeatureState","sourceLayer","setFeatureState","state","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","Atmosphere","setFog","Terrain","setTerrain","isMapLibre","tileSize","exaggeration","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","removeControl","Marker","marker","popup","openPopup","lngLat","Popup","setHTML","onClose","setPopup","onDragStart","onDragEnd","onLngLatChange","getLngLat","toArray","setDraggable","draggable","setLngLat","addTo","isOpen","togglePopup","trackPointer","closeOnClick","closeButton","focusAfterOpen","PATTERN","diagonal_l","size","path","diagonal_r","horizontal","vertical","cross","hash","chevron_h","chevron_v","square","fill","hex","circle","patternList","Image","setSize","width","height","hasImage","removeImage","image","pattern","ops","pixelRatio","_loadImage","_createPattern","addImage","triggerRepaint","loadImage","error","imageData","Uint8Array","onAdd","canvas","createElement","this","ctx","getContext","willReadFrequently","render","fillStyle","background","fillRect","strokeStyle","color","lineWidth","lineWith","stroke","Path2D","getImageData","easeQuad","in","x","out","inOut","Math","pow","Camera","animationTime","isReverse","frame","time","animate","requestAnimationFrame","params","translate","start","end","easing","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions","updateCameraPosition","a","b","t","_","idx","lerp","omega","sin","slerp","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/Atmosphere/index.tsx","../../src/components/Terrain/index.tsx","../../src/components/Control/index.tsx","../../src/components/Marker/index.tsx","../../src/components/Popup/index.tsx","../../src/components/Image/index.tsx","../../src/components/Camera/index.tsx"],"sourcesContent":["type mapEventTypes = {\n onMouseDown?: Function\n onMouseUp?: Function\n onMouseOver?: Function\n onMouseOut?: Function\n onMouseMove?: Function\n onMouseEnter?: Function\n onMouseLeave?: Function\n onPreClick?: Function\n onClick?: Function\n onDblClick?: Function\n onContextMenu?: Function\n onTouchStart?: Function\n onTouchEnd?: Function\n onTouchCancel?: Function\n onWheel?: Function\n onResize?: Function\n onRemove?: Function\n onTouchMove?: Function\n onMoveStart?: Function\n onMove?: Function\n onMoveEnd?: Function\n onDragStart?: Function\n onDrag?: Function\n onDragEnd?: Function\n onZoomStart?: Function\n onZoom?: Function\n onZoomEnd?: Function\n onRotateStart?: Function\n onRotate?: Function\n onRotatEnd?: Function\n onPitchStart?: Function\n onPitch?: Function\n onPitchEnd?: Function\n onBoxZoomStart?: Function\n onBoxZoomEnd?: Function\n onBoxZoomCancel?: Function\n onWebglContextLost?: Function\n onWebglContextRestored?: Function\n onLoad?: Function\n onRender?: Function\n onIdle?: Function\n onError?: Function\n onData?: Function\n onStyleData?: Function\n onSourceData?: Function\n onDataLoading?: Function\n onStyleDataLoading?: Function\n onSourceDataLoading?: Function\n onStyleImageMissing?: Function\n}\n\nconst 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\ntype layerEventTypes = {\n onMouseDown?: Function\n onMouseUp?: Function\n onMouseOver?: Function\n onMouseOut?: Function\n onMouseMove?: Function\n onMouseEnter?: Function\n onMouseLeave?: Function\n onClick?: Function\n onDblClick?: Function\n onContextMenu?: Function\n onTouchStart?: Function\n onTouchEnd?: Function\n onTouchCancel?: Function\n}\n\nconst layerEvents: any[] = [\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 }\nexport type { mapEventTypes, layerEventTypes }\n","const mapBase = 'mapbox://styles/mapbox'\nconst gitBase = 'https://raw.githubusercontent.com/'\nconst gishub = 'https://raw.githubusercontent.com/GIShub4/map-styles/main/'\nconst hereBase = 'https://assets.vector.hereapi.com/styles/'\n\nexport const vectorStyleList: object = {\n mb: {\n light: `${mapBase}/light-v10`,\n dark: `${mapBase}/dark-v10`,\n street: `${mapBase}/streets-v11`,\n outdoor: `${mapBase}/outdoors-v11`,\n sat: `${mapBase}/satellite-v9`,\n sat_street: `${mapBase}/satellite-streets-v11`,\n nav: `${mapBase}/navigation-guidance-day-v4`,\n nav_night: `${mapBase}/navigation-guidance-night-v4`,\n basic: `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n monochrome: `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n leshine: `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n icecream: `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n cali: `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n northstar: `${mapBase}/cj44mfrt20f082snokim4ungi`,\n mineral: `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n moonlight: `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n frank: `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n minimo: `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n decimal: `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n standard: `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n blueprint: `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n bubble: `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n pencil: `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n swiss_ski: `${gitBase}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n vintage: `${gitBase}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n whaam: `${gitBase}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n neon: `${gitBase}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n camoflauge: `${gitBase}jingsam/mapbox-gl-styles/master/Camouflage.json`,\n emerald: `${gitBase}jingsam/mapbox-gl-styles/master/Emerald.json`,\n runner: `${gitBase}jingsam/mapbox-gl-styles/master/Runner.json`,\n x_ray: `${gitBase}jingsam/mapbox-gl-styles/master/X-ray.json`,\n },\n here: {\n base: `${hereBase}berlin/base/mapbox/tilezen?apikey={apikey}`,\n day: `${hereBase}berlin/day/mapbox/tilezen?apikey={apikey}`,\n night: `${hereBase}berlin/night/mapbox/tilezen?apikey={apikey}`,\n },\n esri: {\n blueprint: `${gishub}esri:blueprint.json`,\n charted_territory: `${gishub}esri:charted-territory.json`,\n colored_pencil: `${gishub}esri:colored-pencil.json`,\n community: `${gishub}esri:community.json`,\n mid_century: `${gishub}esri:mid-century.json`,\n modern_antique: `${gishub}esri:modern-antique.json`,\n nat_geo: `${gishub}esri:national-geographic.json`,\n newspaper: `${gishub}esri:newspaper.json`,\n open_street_map: `${gishub}esri:open-street-map.json`,\n light_gray_canvas: `${gishub}esri:light-gray-canvas.json`,\n dark_gray_canvas: `${gishub}esri:dark-gray-canvas.json`,\n human_geo_light: `${gishub}esri:human-geography-light.json`,\n human_geo_dark: `${gishub}esri:human-geography-dark.json`,\n world_navigation: `${gishub}esri:world-navigation.json`,\n world_street: `${gishub}esri:world-street.json`,\n world_street_night: `${gishub}esri:world-street-night.json`,\n world_terrain: `${gishub}esri:world-terrain.json`,\n world_terrain_hybrid: `${gishub}esri:world-terrain-hybrid.json`,\n world_topographic: `${gishub}esri:world-topographic.json`,\n chromium: `${gishub}esri:chromium.json`,\n dreamcatcher: `${gishub}esri:dreamcatcher.json`,\n seahaven: `${gishub}esri:seahaven.json`,\n sangria: `${gishub}esri:sangria.json`,\n mercurial: `${gishub}esri:mercurial.json`,\n imagery: `${gishub}esri:imagery.json`,\n imagery_hybrid: `${gishub}esri:imagery-hybrid.json`,\n firefly: `${gishub}esri:firefly.json`,\n firefly_hybrid: `${gishub}esri:firefly-hybrid.json`,\n oceans: `${gishub}esri:oceans.json`,\n },\n}\nconst carto = 'https://{s}.basemaps.cartocdn.com/rastertiles/'\nconst stamen = 'https://stamen-tiles-{s}.a.ssl.fastly.net/'\nconst tf = 'https://{s}.tile.thunderforest.com/'\n\nexport const rasterStyleList: object = {\n osm: {\n org: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n human: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n cycle: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n topo: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n _copy:\n '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">&copy; OpenStreetMap</a>',\n },\n carto: {\n voyager: `${carto}voyager_labels_under/{z}/{x}/{y}{r}.png`,\n positron: `${carto}light_all/{z}/{x}/{y}{r}.png`,\n dark: `${carto}dark_all/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://carto.com/attribution\" target=\"_blank\">&copy; Carto</a>',\n },\n stamen: {\n toner: `${stamen}toner/{z}/{x}/{y}{r}.png`,\n toner_lite: `${stamen}toner-lite/{z}/{x}/{y}{r}.png`,\n watercolor: `${stamen}watercolor/{z}/{x}/{y}.png`,\n terrain: `${stamen}terrain/{z}/{x}/{y}{r}.png`,\n _copy:\n '<a href=\"https://stamen.com/privacy-policy\" target=\"_blank\">&copy; Stamen Design</a>',\n },\n tf: {\n cycle: `${tf}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans: `${tf}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n trans_dark: `${tf}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n landscape: `${tf}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n outdoors: `${tf}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n neighbourhood: `${tf}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n spinal: `${tf}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n pioneer: `${tf}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n atlas: `${tf}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n mobile: `${tf}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,\n _copy:\n '<a href=\"https://thunderforest.com/privacy\" target=\"_blank\">&copy; Thunderforest</a>',\n },\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n createUniqueId,\n untrack,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../mapStyles'\nimport type { mapEventTypes } from '../../events'\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 {\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 //** MapLibre library */\n mapLib?: any\n //** APIkey for vector service */\n apikey?: string\n //** Debug Mode */\n debug?: boolean\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: any\n } & mapEventTypes\n> = props => {\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n const [darkMode, setDarkMode] = createSignal(\n typeof window !== 'undefined' &&\n (window.matchMedia('(prefers-color-scheme: dark)').matches ||\n document.body.classList.contains('dark'))\n )\n\n const debug = (text, value) =>\n props.debug && console.debug(`${text}: %c${value}`, 'color: #00F')\n\n const mapRef = (\n <div\n id={props.id}\n class={props?.class}\n classList={props?.classList}\n style={\n props?.style || props?.class || props?.classList\n ? props.style\n : { position: 'absolute', inset: 0, ...props.style }\n }\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\n ?.split(':')\n .reduce((p, c) => p && p[c], vectorStyleList)\n ?.replace(\n '{apikey}',\n //@ts-ignore\n props.apikey || import.meta.env.VITE_VECTOR_API_KEY\n ) || style\n : style || { version: 8, sources: {}, layers: [] }\n }\n\n onMount(async () => {\n let mapLib = props.mapLib || (await import('mapbox-gl'))\n if (!mapLib.Map) mapLib = window['maplibregl'] || window['mapboxgl']\n\n const map: MapboxMap = new mapLib.Map({\n accessToken:\n //@ts-ignore\n import.meta.env.VITE_MAPBOX_ACCESS_TOKEN,\n interactive: !!props.onViewportChange,\n ...props.options,\n style: getStyle(props.options?.style, props.darkStyle),\n container: mapRef,\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.mapLib = mapLib\n map.debug = props.debug\n // map.container = containerRef\n\n map.once('load', () => setMapRoot(map))\n\n onCleanup(() => map?.remove())\n\n // Listen to map container size changes\n const resizeObserver = new ResizeObserver(() => map.resize())\n createEffect(() =>\n props.disableResize\n ? resizeObserver.disconnect()\n : resizeObserver.observe(mapRef as Element)\n )\n\n // Listen to dark theme changes\n const darkTheme = window.matchMedia('(prefers-color-scheme: dark)')\n darkTheme.addEventListener('change', () => setDarkMode(darkTheme.matches))\n\n const bodyClassObserver = new MutationObserver(() =>\n setDarkMode(document.body.classList.contains('dark'))\n )\n bodyClassObserver.observe(document.body, { attributes: true })\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n const prop = props[item]\n if (prop) {\n const event = item.slice(2).toLowerCase()\n if (typeof prop === 'function') {\n const callback = e => prop(e)\n map.on(event, callback)\n onCleanup(() => map?.off(event, callback))\n } else {\n Object.keys(prop).forEach(layerId => {\n const callback = e => prop[layerId](e)\n map.on(event, layerId, callback)\n onCleanup(() => map?.off(event, layerId, callback))\n })\n }\n }\n })\n )\n\n // Update debug features\n createEffect(() => {\n map.showTileBoundaries = props.showTileBoundaries\n map.showTerrainWireframe = props.showTerrainWireframe\n map.showPadding = props.showPadding\n map.showCollisionBoxes = props.showCollisionBoxes\n map.showOverdrawInspector = props.showOverdrawInspector\n })\n\n // Update cursor\n createEffect(prev => {\n if (props.cursorStyle === prev) return\n debug('Update Cursor to', props.cursorStyle)\n map.getCanvas().style.cursor = props.cursorStyle\n return props.cursorStyle\n })\n\n //Update transition type\n createEffect(prev => {\n if (props.transitionType === prev) return\n debug('Update Transition to', props.transitionType)\n setTransitionType(props.transitionType)\n return props.transitionType\n })\n\n // Update projection\n createEffect(prev => {\n if (props.options?.projection === prev) return\n debug('Update Projection to', props.options?.projection.name)\n map.setProjection(props.options?.projection)\n return props.options?.projection\n })\n\n // Update map style\n createEffect(prev => {\n const style = getStyle(props.options?.style, props.darkStyle)\n if (style === prev) return\n let oldLayers = []\n let oldSources = {}\n debug('Update Mapstyle to', style)\n if (map.isStyleLoaded()) {\n const oldStyle = map.getStyle()\n oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n }\n map.setStyle(style)\n map.once('styledata', () => {\n const newStyle = map.getStyle()\n map.setStyle({\n ...newStyle,\n sources: { ...newStyle.sources, ...oldSources },\n layers: [...newStyle.layers, ...oldLayers],\n })\n })\n return style\n }, props.options?.style)\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map?.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n })\n\n return (\n <MapContext.Provider value={mapRoot}>\n {mapRoot() && props.children}\n {mapRef}\n </MapContext.Provider>\n )\n}\n","import {\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../mapStyles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url => {\n const source = url?.split(':').reduce((p, c) => p && p[c], rasterStyleList)\n ? {\n ...props.source,\n url: '',\n tiles: [\n source\n .replace(\n '{apikey}',\n //@ts-ignore\n props.source.apikey || import.meta.env.VITE_RASTER_API_KEY\n )\n .replace('{r}', window.devicePixelRatio > 1 ? '@2x' : ''),\n ],\n attribution: rasterStyleList[url.split(':')[0]]._copy,\n }\n : props.source\n\n source.tiles &&\n (source.tiles = ['a', 'b', 'c'].map(i =>\n source.tiles[0].replace('{s}', i)\n ))\n\n return source\n }\n\n // Remove Source\n onCleanup(() => {\n map &&\n map()\n .getStyle()\n .layers.forEach(\n layer => layer.source === props.id && map().removeLayer(layer.id)\n )\n map().removeSource(props.id)\n })\n\n // Update\n createEffect(() => {\n // Add Source\n if (!map().getSource(props.id)) {\n map().addSource(props.id, lookup(props.source.url))\n return\n }\n\n // Update GeoJSON Data\n if (props.source.type === 'geojson' && props.source.data)\n map().getSource(props.id)?.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 map()\n .getSource(props.id)\n ?.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 ? map().getSource(props.id)?.setUrl(props.source.url)\n : map().getSource(props.id)?.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 let source = map().getSource(props.id)\n if (!source) return\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 { layerEventTypes } 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 {\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 } & layerEventTypes\n> = props => {\n const map: MapboxMap = useMap()\n const sourceId: string = useSourceId()\n props.id = props.id || createUniqueId()\n\n //Remove Layer\n onCleanup(\n () => map && map().getLayer(props.id) && map().removeLayer(props.id)\n )\n\n // Hook up events\n createEffect(() =>\n layerEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map()?.on(event, props.id, callback)\n onCleanup(() => map()?.off(event, props.id, callback))\n }\n })\n )\n\n // Update Style\n createEffect((prev: StyleSpecification) => {\n if (\n !props.style ||\n !map().style ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n if (props.style.layout !== prev?.layout)\n diff(props.style.layout, prev?.layout).forEach(([key, value]) =>\n map().setLayoutProperty(props.id, key, value, { validate: false })\n )\n\n if (props.style.paint !== prev?.paint)\n diff(props.style.paint, prev?.paint).forEach(([key, value]) =>\n map().setPaintProperty(props.id, key, value, { validate: false })\n )\n\n if (\n props.style.minzoom !== prev?.minzoom ||\n props.style.maxzoom !== prev?.maxzoom\n )\n map().setLayerZoomRange(\n props.id,\n props.style.minzoom,\n props.style.maxzoom\n )\n\n if (props.style.filter !== prev?.filter)\n map().setFilter(props.id, props.style.filter, { validate: false })\n\n return props.style\n }, props.style)\n\n // Update Visibility\n createEffect((prev: boolean) => {\n if (\n props.visible === undefined ||\n props.visible === prev ||\n !map().getSource(sourceId) ||\n !map().getLayer(props.id)\n )\n return\n\n map().setLayoutProperty(\n props.id,\n 'visibility',\n props.visible ? 'visible' : 'none',\n { validate: false }\n )\n return props.visible\n }, props.visible)\n\n // Update Filter\n createEffect(async () => {\n if (!props.filter) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFilter(props.id, props.filter)\n })\n\n // Update Feature State\n createEffect(async () => {\n if (!props.featureState || !props.featureState.id) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n map().removeFeatureState({\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: sourceId,\n sourceLayer: props.style['source-layer'],\n id: props.featureState.id,\n },\n props.featureState.state\n )\n })\n\n // Add Layer\n createEffect(() => {\n !map().getLayer(props.id) &&\n map().addLayer(\n props.customLayer || {\n ...props.style,\n id: props.id,\n source: sourceId,\n metadata: {\n smg: { beforeType: props.beforeType, beforeId: props.beforeId },\n },\n },\n props.beforeType\n ? map()\n ?.getStyle()\n .layers.find(l => l.type === props.beforeType)?.id\n : props.beforeId\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, VoidComponent } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { FogSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Atmosphere: VoidComponent<{\n style: FogSpecification\n}> = props => {\n const map: MapboxMap = useMap()()\n\n // Remove Atmosphere Layer\n onCleanup(() => map?.setFog(null))\n\n // Add Atmosphere Layer\n createEffect(() => map.setFog(props.style || {}))\n\n return null\n}\n","import {\n onCleanup,\n createEffect,\n VoidComponent,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n SourceSpecification,\n TerrainSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nexport const Terrain: VoidComponent<{\n exaggeration?: number\n source?: TerrainSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()()\n let sourceId: SourceSpecification = useSourceId()\n\n // Remove Terrain Layer\n onCleanup(() => map?.setTerrain(null))\n\n // Add Terrain Layer\n createEffect(() => {\n if (sourceId) {\n sourceId = createUniqueId()\n map.addSource(\n sourceId,\n map.isMapLibre\n ? {\n type: 'raster-dem',\n url: 'https://demotiles.maplibre.org/terrain-tiles/tiles.json',\n tileSize: 256,\n }\n : {\n type: 'raster-dem',\n url: 'mapbox://mapbox.terrain-rgb',\n tileSize: 512,\n maxzoom: 14,\n }\n )\n }\n map.setTerrain({\n exaggeration: props.exaggeration || 1,\n source: sourceId,\n })\n })\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map.setTerrain(\n props.visible\n ? { exaggeration: props.exaggeration || 1, source: sourceId }\n : null\n )\n })\n\n return null\n}\n","import { createEffect, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { Options as AttributionOptions } from 'mapbox-gl/src/ui/control/attribution_control'\nimport type { Options as FullscreenOptions } from 'mapbox-gl/src/ui/control/fullscreen_control'\nimport type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolocate_control'\nimport type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control'\nimport type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control'\n\nexport const Control: Component<{\n type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n | object\n custom?: any\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n // Add Control\n createEffect(async () => {\n const mapLib = map().mapLib\n\n const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapLib.NavigationControl(options)\n case 'scale':\n return new mapLib.ScaleControl(options)\n case 'attribution':\n return new mapLib.AttributionControl(options)\n case 'geolocate':\n return new mapLib.GeolocateControl(options)\n case 'fullscreen':\n return new mapLib.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n const control = getControl(props.type, props.options)\n control && map()?.addControl(control, props.position)\n setControl(control)\n })\n\n onCleanup(() => map()?.removeControl(control()))\n\n return props.children\n}\n","import { onCleanup, createEffect, Component, untrack } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n Popup as PopupType,\n PopupOptions,\n} from 'mapbox-gl/src/ui/popup.js'\nimport type {\n Marker as MarkerType,\n MarkerOptions,\n} from 'mapbox-gl/src/ui/marker.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Marker: Component<{\n options?: MarkerOptions & { popup: PopupOptions }\n lngLat: LngLatLike\n openPopup?: boolean\n draggable?: boolean\n onLngLatChange?: Function\n onClose?: Function\n onDragStart?: Function\n onDragEnd?: Function\n children?: any\n}> = props => {\n const map: MapboxMap = useMap?.()()\n let marker: MarkerType = null\n let popup: PopupType = null\n\n // Remove Marker\n onCleanup(() => marker?.remove())\n\n // Add/Update Marker\n createEffect(() => {\n if (untrack(() => !props.openPopup && !props.lngLat))\n throw new Error('Marker - lngLat is required')\n\n popup?.remove()\n popup = untrack(() => props.children)\n ? new map.mapLib.Popup(props.options.popup)\n .setHTML(untrack(() => props.children))\n .on('close', () => props.onClose?.())\n : null\n\n marker?.remove()\n marker = new map.mapLib.Marker(props.options)\n .setPopup(popup)\n .on('dragstart', () => props.onDragStart?.())\n .on('dragend', () => props.onDragEnd?.())\n .on('drag', () => props.onLngLatChange?.(marker.getLngLat().toArray()))\n untrack(() => {\n marker.setDraggable(props.draggable).setLngLat(props.lngLat).addTo(map)\n props.openPopup !== popup.isOpen() && marker.togglePopup()\n })\n })\n\n // Toggle Popup\n createEffect(() => props.openPopup !== popup.isOpen() && marker.togglePopup())\n\n // Update Position\n createEffect(() => marker.setLngLat(props.lngLat))\n\n // Update Popup Content\n createEffect(() => popup.setHTML(props.children))\n\n // Update Draggable\n createEffect(() => marker.setDraggable(props.draggable))\n\n return null\n}\n","import { onCleanup, createEffect, Component, untrack } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n Popup as PopupType,\n PopupOptions,\n} from 'mapbox-gl/src/ui/popup.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Popup: Component<{\n options?: PopupOptions\n trackPointer?: boolean\n lngLat: LngLatLike\n onClose?: Function\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()()\n let popup: PopupType = null\n\n // Remove Popup\n onCleanup(() => popup?.remove())\n\n // Add/Update Popup\n createEffect(() => {\n if (!props.trackPointer && !props.lngLat)\n throw new Error('Popup - lngLat is required')\n popup?.remove()\n popup = new map.mapLib.Popup(\n props.trackPointer\n ? { ...props.options, closeOnClick: false, closeButton: false }\n : { focusAfterOpen: false, ...props.options }\n )\n .setHTML(untrack(() => props.children))\n .setLngLat(untrack(() => props.lngLat))\n .on('close', () => props.onClose?.())\n .addTo(map)\n })\n\n // Update Position\n createEffect(() =>\n props.trackPointer ? popup.trackPointer() : popup.setLngLat(props.lngLat)\n )\n\n // Update Content\n createEffect(() => popup.setHTML(props.children))\n\n return null\n}\n","import {\n onCleanup,\n createSignal,\n createEffect,\n VoidComponent,\n untrack,\n} 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\nconst PATTERN = {\n diagonal_l: { size: 20, path: 'M20 0 0 20M-10 10 10-10M10 30 30 10' },\n diagonal_r: { size: 20, path: 'M0 0 20 20M30 10 10-10M10 30-10 10' },\n horizontal: { size: 14, path: 'M7 0V20' },\n vertical: { size: 14, path: 'M0 7H20' },\n cross: { size: 18, path: 'M9 0V18M0 9H18' },\n hash: { size: 30, path: 'M15 0 30 15 15 30 0 15Z' },\n chevron_h: { size: 20, path: 'M-5 5 0 10 10 0 20 10 25 5M0 30 10 20 20 30' },\n chevron_v: { size: 20, path: 'M5-5 10 0 0 10 10 20 5 25M25 15 20 10 25 5' },\n square: { size: 20, path: 'M8 8H12V12H8Z', fill: true },\n hex: { size: 50, path: 'M0 0V50L50 25ZM50 0V50L0 25ZM25 0V50' },\n circle: {\n size: 25,\n path: 'M8 10A2.5 2.5 0 118.01 10M18 15A2.5 2.5 0 1018.01 15',\n fill: true,\n },\n}\n\nexport const patternList = Object.keys(PATTERN)\n\nexport type Color =\n | `#${string}`\n | `rgb(${number}, ${number}, ${number})`\n | `hsl(${number}, ${number}%, ${number}%)`\n\nexport const Image: VoidComponent<{\n id: string\n image?:\n | HTMLImageElement\n | ImageBitmap\n | ImageData\n | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }\n | StyleImageInterface\n | string\n options?: StyleImageMetadata\n pattern?: {\n type: string\n color: Color\n background: Color\n lineWith: number\n }\n}> = props => {\n const map: MapboxMap = useMap()()\n const [size, setSize] = createSignal({ width: 0, height: 0 })\n\n // Remove Image\n onCleanup(() => map && map.hasImage(props.id) && map.removeImage(props.id))\n\n // Add or Update Image\n createEffect(() => {\n if (!props.id) throw new Error('Image - ID is required')\n if (!props.image && !props.pattern)\n throw new Error('Image - Image or Pattern is required')\n\n const ops = props.pattern\n ? { pixelRatio: 2, ...props.options }\n : props.options\n\n _loadImage(props.image || _createPattern(props.pattern), data => {\n const { width, height } = data\n if (!map.hasImage(props.id)) map.addImage(props.id, data, ops)\n if (\n !props.pattern &&\n untrack(() => width === size().width && height === size().height)\n ) {\n map.updateImage(props.id, data)\n map.triggerRepaint()\n } else {\n map.removeImage(props.id)\n map.addImage(props.id, data, ops)\n }\n setSize({ width, height })\n })\n })\n\n // Load Image from URL\n const _loadImage = (image, callback) => {\n if (typeof image !== 'string') return callback(image)\n map.loadImage(image, (error, imageData) => {\n if (error) throw error\n return callback(imageData)\n })\n }\n\n const _createPattern = pattern => {\n const p = PATTERN[pattern.type]\n return {\n width: p.size,\n height: p.size,\n data: new Uint8Array(p.size * p.size * 4),\n onAdd: function () {\n let canvas = document.createElement('canvas')\n canvas.width = canvas.height = p.size\n this.ctx = canvas.getContext('2d', { willReadFrequently: true })\n },\n render: function () {\n this.ctx.fillStyle = pattern.background || 'transparent'\n this.ctx.fillRect(0, 0, this.width, this.height)\n this.ctx.strokeStyle = this.ctx.fillStyle = pattern.color || 'black'\n this.ctx.lineWidth = pattern.lineWith || 1\n this.ctx.stroke(new Path2D(p.path))\n if (p.fill) this.ctx.fill(new Path2D(p.path))\n this.data = this.ctx.getImageData(0, 0, this.width, this.height).data\n return true\n },\n }\n }\n\n return null\n}\n","import { createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type LngLatLike from 'mapbox-gl/src/geo/lng_lat.js'\n\n// linearly interpolate between two positions [x,y,z] based on time\nconst lerp = (a, b, t) => a.map((_, idx) => (1.0 - t) * a[idx] + t * b[idx])\n\n// sphericaly interpolate between two positions [x,y,z] based on time\nconst slerp = (a, b, t) => {\n const omega = 0.075\n // TODO: Proper Calculation\n // a.map((_, idx) => a[idx] * b[idx]).reduce((m, n) => m + n)\n\n return a.map(\n (_, idx) =>\n (Math.sin((1 - t) * omega) / Math.sin(omega)) * a[idx] +\n (Math.sin(t * omega) / Math.sin(omega)) * b[idx]\n )\n}\n\n// calculations from: https://easings.net\nconst easeQuad = {\n in: (x: number): number => x * x,\n out: (x: number): number => 1 - (1 - x) * (1 - x),\n inOut: (x: number): number =>\n x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n}\n\nexport const Camera: Component<{\n animate: boolean\n translate?: {\n type?: 'line' | 'sphere'\n start: [number, number, number]\n end: [number, number, number]\n target: LngLatLike\n targetEnd?: LngLatLike\n easing?: 'in' | 'out' | 'inOut'\n loop?: boolean\n duration: number\n }\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let animationTime = 0.1\n let isReverse = false\n\n const updateCameraPosition = async ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = map().mapLib.MercatorCoordinate.fromLngLat(\n [lng, lat],\n alt\n )\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","hereBase","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","here","base","day","night","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","style","position","inset","_v$","_$setAttribute","_$className","_$classList","_$style","undefined","getStyle","String","split","reduce","p","c","replace","apikey","import","meta","env","VITE_VECTOR_API_KEY","version","sources","layers","onMount","async","mapLib","Map","map","accessToken","VITE_MAPBOX_ACCESS_TOKEN","interactive","onViewportChange","options","darkStyle","container","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","once","onCleanup","remove","resizeObserver","ResizeObserver","resize","createEffect","disableResize","disconnect","observe","darkTheme","addEventListener","MutationObserver","attributes","forEach","item","prop","event","slice","toLowerCase","callback","e","on","off","Object","keys","layerId","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","prev","cursorStyle","getCanvas","cursor","projection","name","setProjection","oldLayers","oldSources","isStyleLoaded","oldStyle","filter","l","startsWith","s","obj","key","setStyle","newStyle","getCenter","getZoom","getPitch","getBearing","callMove","originalEvent","callEnd","cameraForBounds","untrack","stop","easeTo","jumpTo","flyTo","_$createComponent","Provider","children","_$memo","SourceContext","useSourceId","Source","lookup","url","source","tiles","VITE_RASTER_API_KEY","devicePixelRatio","attribution","i","layer","removeLayer","removeSource","getSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","src","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","addSource","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","getLayer","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","featureState","removeFeatureState","sourceLayer","setFeatureState","state","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","Atmosphere","setFog","Terrain","setTerrain","isMapLibre","tileSize","exaggeration","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","removeControl","Marker","marker","popup","openPopup","lngLat","Popup","setHTML","onClose","setPopup","onDragStart","onDragEnd","onLngLatChange","getLngLat","toArray","setDraggable","draggable","setLngLat","addTo","isOpen","togglePopup","trackPointer","closeOnClick","closeButton","focusAfterOpen","PATTERN","diagonal_l","size","path","diagonal_r","horizontal","vertical","cross","hash","chevron_h","chevron_v","square","fill","hex","circle","patternList","Image","setSize","width","height","hasImage","removeImage","image","pattern","ops","pixelRatio","_loadImage","_createPattern","addImage","triggerRepaint","loadImage","error","imageData","Uint8Array","onAdd","canvas","createElement","this","ctx","getContext","willReadFrequently","render","fillStyle","background","fillRect","strokeStyle","color","lineWidth","lineWith","stroke","Path2D","getImageData","easeQuad","in","x","out","inOut","Math","pow","Camera","animationTime","isReverse","frame","time","animate","requestAnimationFrame","params","translate","start","end","easing","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions","updateCameraPosition","a","b","t","_","idx","lerp","omega","sin","slerp","loop"],"mappings":"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"}
@@ -17,7 +17,7 @@ export const Layer = props => {
17
17
  const sourceId = useSourceId();
18
18
  props.id = props.id || createUniqueId();
19
19
  //Remove Layer
20
- onCleanup(() => map() && map().getLayer(props.id) && map().removeLayer(props.id));
20
+ onCleanup(() => map && map().getLayer(props.id) && map().removeLayer(props.id));
21
21
  // Hook up events
22
22
  createEffect(() => layerEvents.forEach(item => {
23
23
  if (props[item]) {
@@ -7,8 +7,7 @@ export const Source = props => {
7
7
  const map = useMap();
8
8
  props.id = props.id || createUniqueId();
9
9
  const lookup = url => {
10
- const source = url?.split(':').reduce((p, c) => p && p[c], rasterStyleList);
11
- return source
10
+ const source = url?.split(':').reduce((p, c) => p && p[c], rasterStyleList)
12
11
  ? {
13
12
  ...props.source,
14
13
  url: '',
@@ -22,35 +21,46 @@ export const Source = props => {
22
21
  attribution: rasterStyleList[url.split(':')[0]]._copy,
23
22
  }
24
23
  : props.source;
24
+ source.tiles &&
25
+ (source.tiles = ['a', 'b', 'c'].map(i => source.tiles[0].replace('{s}', i)));
26
+ return source;
25
27
  };
26
28
  // Remove Source
27
29
  onCleanup(() => {
28
- map()
29
- ?.getStyle()
30
- .layers.forEach(layer => layer.source === props.id && map().removeLayer(layer.id));
31
- map()?.getSource(props.id) && map().removeSource(props.id);
30
+ map &&
31
+ map()
32
+ .getStyle()
33
+ .layers.forEach(layer => layer.source === props.id && map().removeLayer(layer.id));
34
+ map().removeSource(props.id);
32
35
  });
33
36
  // Update
34
37
  createEffect(() => {
35
- const source = map().getSource(props.id);
36
- if (!source)
38
+ // Add Source
39
+ if (!map().getSource(props.id)) {
40
+ map().addSource(props.id, lookup(props.source.url));
37
41
  return;
42
+ }
38
43
  // Update GeoJSON Data
39
44
  if (props.source.type === 'geojson' && props.source.data)
40
- source.setData(props.source.data);
45
+ map().getSource(props.id)?.setData(props.source.data);
41
46
  // Update Image URL
42
47
  if (props.source.type === 'image' &&
43
48
  (props.source.url || props.source.coordinates))
44
- source.updateImage(props.source.url, props.source.coordinates);
49
+ map()
50
+ .getSource(props.id)
51
+ ?.updateImage(props.source.url, props.source.coordinates);
45
52
  // Update Vector URL or Tiles
46
53
  if (props.source.type === 'vector' &&
47
54
  (props.source.url || props.source.tiles))
48
55
  props.source.url
49
- ? source.setUrl(props.source.url)
50
- : source.setTiles(props.source.tiles);
56
+ ? map().getSource(props.id)?.setUrl(props.source.url)
57
+ : map().getSource(props.id)?.setTiles(props.source.tiles);
51
58
  // Update Raster URL or Tiles
52
59
  if (props.source.type === 'raster' &&
53
60
  (props.source.url || props.source.tiles)) {
61
+ let source = map().getSource(props.id);
62
+ if (!source)
63
+ return;
54
64
  const src = lookup(props.source.url);
55
65
  src.tiles &&
56
66
  (src.tiles = ['a', 'b', 'c'].map(i => src.tiles[0].replace('{s}', i)));
@@ -62,13 +72,6 @@ export const Source = props => {
62
72
  source.load();
63
73
  }
64
74
  });
65
- // Add Source
66
- createEffect(() => {
67
- const source = lookup(props.source.url);
68
- source.tiles &&
69
- (source.tiles = ['a', 'b', 'c'].map(i => source.tiles[0].replace('{s}', i)));
70
- !map().getSource(props.id) && map().addSource(props.id, source);
71
- });
72
75
  return (<SourceContext.Provider value={props.id}>
73
76
  {props.children}
74
77
  </SourceContext.Provider>);
@@ -1,7 +1,7 @@
1
1
  import { VoidComponent } from 'solid-js';
2
2
  import type { StyleImageInterface, StyleImageMetadata } from 'mapbox-gl/src/style/style_image';
3
3
  export declare const patternList: string[];
4
- export declare type Color = `#${string}` | `rgb(${number}, ${number}, ${number})` | `hsl(${number}, ${number}%, ${number}%)`;
4
+ export type Color = `#${string}` | `rgb(${number}, ${number}, ${number})` | `hsl(${number}, ${number}%, ${number}%)`;
5
5
  export declare const Image: VoidComponent<{
6
6
  id: string;
7
7
  image?: HTMLImageElement | ImageBitmap | ImageData | {
@@ -6,7 +6,7 @@ import type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js';
6
6
  import type { PaddingOptions } from 'mapbox-gl/src/geo/edge_insets.js';
7
7
  import type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js';
8
8
  import type { JSX } from 'solid-js';
9
- export declare type Viewport = {
9
+ export type Viewport = {
10
10
  id?: string;
11
11
  center?: LngLatLike;
12
12
  bounds?: LngLatBounds;
@@ -1,4 +1,4 @@
1
- declare type mapEventTypes = {
1
+ type mapEventTypes = {
2
2
  onMouseDown?: Function;
3
3
  onMouseUp?: Function;
4
4
  onMouseOver?: Function;
@@ -50,7 +50,7 @@ declare type mapEventTypes = {
50
50
  onStyleImageMissing?: Function;
51
51
  };
52
52
  declare const mapEvents: string[];
53
- declare type layerEventTypes = {
53
+ type layerEventTypes = {
54
54
  onMouseDown?: Function;
55
55
  onMouseUp?: Function;
56
56
  onMouseOver?: Function;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.5.1",
2
+ "version": "1.5.2",
3
3
  "name": "solid-map-gl",
4
4
  "description": "Solid Component Library for Mapbox GL JS",
5
5
  "info": "Solid Component Library for Mapbox GL JS. Mapbox GL JS is a JavaScript library that renders interactive maps from vector tiles and Mapbox styles using WebGL. This project is intended to be as close as possible to the Mapbox GL JS API.",
@@ -50,18 +50,18 @@
50
50
  "not ie 11"
51
51
  ],
52
52
  "devDependencies": {
53
- "jsdom": "^20.0.1",
54
- "mapbox-gl": "^2.10.0",
55
- "rollup": "^2.79.1",
56
- "rollup-plugin-import-css": "^3.0.3",
53
+ "jsdom": "^20.0.3",
54
+ "mapbox-gl": "^2.11.0",
55
+ "rollup": "^3.5.0",
56
+ "rollup-plugin-import-css": "^3.1.0",
57
57
  "rollup-plugin-terser": "^7.0.2",
58
- "rollup-preset-solid": "^1.4.0",
59
- "solid-js": "^1.5.7",
60
- "solid-testing-library": "^0.3.0",
61
- "typescript": "^4.8.4",
62
- "vite": "^3.1.8",
63
- "vite-plugin-solid": "^2.3.9",
64
- "vitest": "^0.24.3"
58
+ "rollup-preset-solid": "^2.0.1",
59
+ "solid-js": "^1.6.2",
60
+ "solid-testing-library": "^0.5.0",
61
+ "typescript": "^4.9.3",
62
+ "vite": "^3.2.4",
63
+ "vite-plugin-solid": "^2.4.0",
64
+ "vitest": "^0.25.3"
65
65
  },
66
66
  "peerDependencies": {
67
67
  "mapbox-gl": "^0.x || ^1.x || ^2.x"
package/README.md DELETED
@@ -1,36 +0,0 @@
1
- ---
2
- description: Solid Map GL provides Mapbox & MapLibre functionality within SolidJS applications
3
- cover: docs/header.png
4
- coverY: -136.56381942189023
5
- layout: landing
6
- ---
7
-
8
- # Introduction
9
-
10
- [SolidJS](https://www.solidjs.com/) Component Library for [Mapbox GL JS](https://github.com/mapbox/mapbox-gl-js) and [MapLibre GL.](https://maplibre.org/projects/maplibre-gl-js/) Both libraries render interactive maps from vector tiles and Map styles using WebGL. This project is intended to be as close as possible to the [Mapbox GL JS API.](https://docs.mapbox.com/mapbox-gl-js/api/)
11
-
12
- {% content-ref url="docs/start.md" %}
13
- [start.md](docs/start.md)
14
- {% endcontent-ref %}
15
-
16
- {% content-ref url="docs/examples.md" %}
17
- [examples.md](docs/examples.md)
18
- {% endcontent-ref %}
19
-
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" %}
23
-
24
- #### Roadmap
25
-
26
- * [x] Basic Mapbox GL Functionality
27
- * [x] Include Map Controls
28
- * [x] Include Fog, Sky, and Terrain
29
- * [x] Include Popup and Markers
30
- * [x] Minify bundle & reduce size
31
- * [x] Add basemap switching
32
- * [x] Include event handling
33
- * [x] Sync Maps
34
- * [x] Add MapLibre support
35
- * [ ] Add draw functionality
36
- * [ ] Add debug console