solid-map-gl 2.2.2 → 2.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index/index.js +3 -3
- package/dist/index/index.jsx +93 -42
- package/package.json +1 -1
package/dist/index/index.js
CHANGED
|
@@ -3,8 +3,8 @@ export { b as MapProvider, a as useMapContext } from '../chunk/BTR7SKE6.js';
|
|
|
3
3
|
import { template, isServer, use, insert, memo, createComponent, effect, setAttribute, className, classList, style } from 'solid-js/web';
|
|
4
4
|
import { createContext, createSignal, onMount, createEffect, on, onCleanup, useContext, createUniqueId, createMemo, splitProps, untrack } from 'solid-js';
|
|
5
5
|
|
|
6
|
-
var fe=["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"],he=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],ye=["onCreate","onDelete","onCombine","onUncombine","onUpdate","onSelectionchange","onModechange","onRender","onActionable"];var C="mapbox://styles/mapbox",A="https://raw.githubusercontent.com/",L="https://raw.githubusercontent.com/GIShub4/map-styles/main/",ee="https://assets.vector.hereapi.com/styles/",ve={mb:{standard:`${C}/standard`,light:`${C}/light-v11`,dark:`${C}/dark-v11`,street:`${C}/streets-v12`,outdoor:`${C}/outdoors-v12`,sat:`${C}/satellite-v9`,sat_street:`${C}/satellite-streets-v12`,nav_base:`${C}/navigation-guidance-day-v4`,nav_base_night:`${C}/navigation-guidance-night-v4`,nav:`${C}/navigation-day-v1`,nav_night:`${C}/navigation-night-v1`,basic:`${C}/cjf4m44iw0uza2spb3q0a7s41`,monochrome:`${C}/cjv6rzz4j3m4b1fqcchuxclhb`,leshine:`${C}/cjcunv5ae262f2sm9tfwg8i0w`,icecream:`${C}/cj7t3i5yj0unt2rmt3y4b5e32`,cali:`${C}/cjerxnqt3cgvp2rmyuxbeqme7`,northstar:`${C}/cj44mfrt20f082snokim4ungi`,mineral:`${C}/cjtep62gq54l21frr1whf27ak`,moonlight:`${C}/cj3kbeqzo00022smj7akz3o1e`,frank:`${C}-map-design/ckshxkppe0gge18nz20i0nrwq`,minimo:`${C}-map-design/cksjc2nsq1bg117pnekb655h1`,decimal:`${C}-map-design/ck4014y110wt61ctt07egsel6`,stand:`${C}-map-design/ckr0svm3922ki18qntevm857n`,blueprint:`${C}-map-design/cks97e1e37nsd17nzg7p0308g`,bubble:`${C}-map-design/cksysy2nl62zp17quosctdtcc`,pencil:`${C}-map-design/cks9iema71es417mlrft4go2k`,swiss_ski:`${A}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,vintage:`${A}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,whaam:`${A}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,neon:`${A}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,camoflauge:`${A}jingsam/mapbox-gl-styles/master/Camouflage.json`,emerald:`${A}jingsam/mapbox-gl-styles/master/Emerald.json`,runner:`${A}jingsam/mapbox-gl-styles/master/Runner.json`,x_ray:`${A}jingsam/mapbox-gl-styles/master/X-ray.json`},here:{base:`${ee}berlin/base/mapbox/tilezen?apikey={apikey}`,day:`${ee}berlin/day/mapbox/tilezen?apikey={apikey}`,night:`${ee}berlin/night/mapbox/tilezen?apikey={apikey}`},esri:{blueprint:`${L}esri:blueprint.json`,charted_territory:`${L}esri:charted-territory.json`,colored_pencil:`${L}esri:colored-pencil.json`,community:`${L}esri:community.json`,mid_century:`${L}esri:mid-century.json`,modern_antique:`${L}esri:modern-antique.json`,nat_geo:`${L}esri:national-geographic.json`,newspaper:`${L}esri:newspaper.json`,open_street_map:`${L}esri:open-street-map.json`,light_gray_canvas:`${L}esri:light-gray-canvas.json`,dark_gray_canvas:`${L}esri:dark-gray-canvas.json`,human_geo_light:`${L}esri:human-geography-light.json`,human_geo_dark:`${L}esri:human-geography-dark.json`,world_navigation:`${L}esri:world-navigation.json`,world_street:`${L}esri:world-street.json`,world_street_night:`${L}esri:world-street-night.json`,world_terrain:`${L}esri:world-terrain.json`,world_terrain_hybrid:`${L}esri:world-terrain-hybrid.json`,world_topographic:`${L}esri:world-topographic.json`,chromium:`${L}esri:chromium.json`,dreamcatcher:`${L}esri:dreamcatcher.json`,seahaven:`${L}esri:seahaven.json`,sangria:`${L}esri:sangria.json`,mercurial:`${L}esri:mercurial.json`,imagery:`${L}esri:imagery.json`,imagery_hybrid:`${L}esri:imagery-hybrid.json`,firefly:`${L}esri:firefly.json`,firefly_hybrid:`${L}esri:firefly-hybrid.json`,oceans:`${L}esri:oceans.json`}},te="https://{s}.basemaps.cartocdn.com/rastertiles/",N="https://stamen-tiles-{s}.a.ssl.fastly.net/",T="https://{s}.tile.thunderforest.com/",ne={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">© OpenStreetMap</a>'},carto:{voyager:`${te}voyager_labels_under/{z}/{x}/{y}{r}.png`,positron:`${te}light_all/{z}/{x}/{y}{r}.png`,dark:`${te}dark_all/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://carto.com/attribution" target="_blank">© Carto</a>'},stamen:{toner:`${N}toner/{z}/{x}/{y}{r}.png`,toner_lite:`${N}toner-lite/{z}/{x}/{y}{r}.png`,watercolor:`${N}watercolor/{z}/{x}/{y}.png`,terrain:`${N}terrain/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://stamen.com/privacy-policy" target="_blank">© Stamen Design</a>'},tf:{cycle:`${T}cycle/{z}/{x}/{y}{r}.png?apikey={apikey}`,trans:`${T}transport/{z}/{x}/{y}{r}.png?apikey={apikey}`,trans_dark:`${T}transport-dark/{z}/{x}/{y}{r}.png?apikey={apikey}`,landscape:`${T}landscape/{z}/{x}/{y}{r}.png?apikey={apikey}`,outdoors:`${T}outdoors/{z}/{x}/{y}{r}.png?apikey={apikey}`,neighbourhood:`${T}neighbourhood/{z}/{x}/{y}{r}.png?apikey={apikey}`,spinal:`${T}spinal-map/{z}/{x}/{y}{r}.png?apikey={apikey}`,pioneer:`${T}pioneer/{z}/{x}/{y}{r}.png?apikey={apikey}`,atlas:`${T}atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,mobile:`${T}mobile-atlas/{z}/{x}/{y}{r}.png?apikey={apikey}`,_copy:'<a href="https://thunderforest.com/privacy" target="_blank">© Thunderforest</a>'}};var z=()=>new Promise(e=>requestAnimationFrame(()=>e())),He=e=>{try{return !!e.style?.hasTransitions?.()}catch{return false}};function Qe(e,t){return new Promise(n=>{let o=Date.now()+t,r=()=>{if(e.areTilesLoaded()){n(true);return}if(Date.now()>=o){n(false);return}setTimeout(r,100);};r();})}async function q(e,t={}){let{timeout:n=1e4,fadeMargin:o=400}=t;if(await Qe(e,n),e.triggerRepaint(),await z(),await z(),o>0){let r=Date.now()+Math.max(o,2e3);for(;He(e)&&Date.now()<r;)e.triggerRepaint(),await z();await new Promise(i=>setTimeout(i,o)),e.triggerRepaint(),await z(),await z();}}function G(e,t={}){return new Promise(n=>{e.once("idle",()=>{q(e,t).then(n);}),e.triggerRepaint();})}function oe(e){for(let t of e.getStyle()?.layers??[])try{e.setPaintProperty(t.id,"raster-fade-duration",0);}catch{}}function Me(e,t){return {map:e,waitUntilSettled:()=>G(e,t),capture:(n="image/jpeg",o=.92)=>e.getCanvas().toDataURL(n,o),captureWhenSettled:async(n="image/jpeg",o=.92)=>(await G(e,t),e.getCanvas().toDataURL(n,o))}}var it=template("<div>"),st=template("<style>.overlay{position:relative;width:100%;height:100%;pointer-events:none}:where(.overlay>*){pointer-events:auto}"),lt=template("<div class=overlay>"),mt=e=>{let t,n,o,r,i,a=false,l=0,[c,s]=createSignal(null),[g,m]=createSignal(0),[M,f]=createSignal(!isServer&&(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark"))),h=false,v=false,y=(d,p)=>(e.debug||e.debugEvents)&&console.debug("%c[MapGL]","color: #0ea5e9",d,p||""),b$1=(d,p)=>{let u=M()&&p?p:d;return (typeof u=="string"||u instanceof String)&&u?.split(":").reduce((x,P)=>x&&x[P],ve)?.replace("{apikey}",e.apikey||import.meta.env?.VITE_VECTOR_API_KEY)||u};onMount(async()=>{try{await S();}catch(d){console.error("[MapGL] Failed to initialize map:",d),e.onError?.(d);}});let S=async()=>{if(i=e.mapLib||await import('mapbox-gl'),i.Map||(i=window.maplibregl||window.mapboxgl),typeof i.supported=="function"&&!i.supported())throw new Error("Mapbox GL not supported");if(a=typeof i.Map?.prototype?.setConfigProperty!="function",y(`Map (v${i.version}) loading...`),t=new i.Map({accessToken:e.options?.accessToken||import.meta.env?.VITE_MAPBOX_ACCESS_TOKEN,interactive:e.options?.interactive||!!e.onViewportChange,...e.options,...e.viewport,projection:e.options?.projection,container:n,style:b$1(e.options?.style,e.darkStyle),fitBoundsOptions:{padding:e.viewport?.padding},...e.offscreen?{preserveDrawingBuffer:true}:{}}),t.debug=e.debug,t.debugEvents=e.debugEvents,t.sourceIdList=[],t.layerIdList=[],t.isMapLibre=a,fe.forEach(d=>{let p=e[d];if(p){let u=d.slice(2).toLowerCase();typeof p=="function"?t.on(u,x=>{setTimeout(()=>{u==="click"&&x.clickOnLayer||(p(x),e.debugEvents&&y(`Map '${u}' event:`,x));},0);}):Object.keys(p).forEach(x=>{t.on(u,x,P=>{setTimeout(()=>{u==="click"&&P.clickOnLayer||(p[x](P),e.debugEvents&&y(`Map '${u}' event on '${x}':`,P));},0);});});}}),e.onTilesLoaded){let d=e.tilesLoadedTimeout??1e4,p=e.tilesLoadedFadeMargin??400;t.on("idle",()=>{let u=++l;q(t,{timeout:d,fadeMargin:p}).then(()=>{u===l&&(y("Tiles settled"),e.onTilesLoaded());});});}t.once("load",()=>{s(t),y("Map loaded"),e.offscreen&&e.offscreen.disableRasterFade!==false&&oe(t),e.onCapturerReady&&e.onCapturerReady(Me(t,{timeout:e.tilesLoadedTimeout??1e4,fadeMargin:e.tilesLoadedFadeMargin??400})),["mousedown","touchstart","wheel"].forEach(p=>t.on(p,u=>!u.rotate&&e.onUserInteraction?.(true))),["moveend","mouseup","touchend"].forEach(p=>t.on(p,u=>!u.rotate&&e.onUserInteraction?.(false)));let d=!isServer&&window.matchMedia("(prefers-color-scheme: dark)");d?.addEventListener("change",()=>{f(d.matches),m(p=>p+1),y("Set dark theme to:",d.matches?.toString());}),r=new MutationObserver(()=>{let p=document.documentElement.classList.contains("dark")||document.body.classList.contains("dark");f(p),m(u=>u+1),y("Set theme to:",p);}),r.observe(document.documentElement,{attributes:true}),r.observe(document.body,{attributes:true}),e.disableResize||(o=new ResizeObserver(()=>{setTimeout(()=>{t?.resize();},0),y("Map resized");}),o.observe(n)),t.on("move",p=>{let u={...e.viewport,id:e.id,point:{x:p.originalEvent?.x,y:p.originalEvent?.y},center:e.viewport?.center?.lat?t.getCenter():[t.getCenter().lng,t.getCenter().lat],zoom:t.getZoom(),pitch:t.getPitch(),bearing:t.getBearing(),inTransit:true,bounds:null};!p.viewport&&e.onViewportChange&&(v=true,e.onViewportChange(u));}),t.on("moveend",p=>{if(h||p.rotate||!e.onViewportChange)return;let u={...e.viewport,inTransit:false};v=true,e.onViewportChange(u);});});};createEffect(on(()=>e.viewport,d=>{if(!t||e.id!==d?.id)return;if(v){v=false;return}let p={...d,...d.bounds?t.cameraForBounds(d.bounds,{bearing:d?.bearing,pitch:d?.pitch,padding:d?.padding}):null};h=true,t.stop(),h=false,t[e.transitionType||"flyTo"](p),y(`Update Viewport (${e.transitionType||"flyTo"}):`,p);},{defer:true})),createEffect(()=>{let d=c();if(typeof d?.setConfigProperty!="function"){d&&e.config&&Object.keys(e.config).length&&y("Config prop is set but this map library has no setConfigProperty (Mapbox Standard Style only) \u2014 skipping");return}for(let p in e.config){if(!p||p==="id")continue;let u=e.config?.id||"basemap",x=e.config[p];d.setConfigProperty(u,p,x),y(`Set Config (${u}:${p}) to:`,x);}}),createEffect(()=>{let d=e.options?.projection;!t||!d||(t.setProjection(d),y("Set Projection to:",d));}),createEffect(()=>{let d=e.cursorStyle;!t||!d||(t.getCanvas().style.cursor=d,y("Set Cursor to:",d));});let k=(d,p)=>(p.forEach(u=>{let x=d.findIndex(P=>u.metadata.smg.beforeType?P.type===u.metadata.smg.beforeType:P.id===u.metadata.smg.beforeId);d=x===-1?[...d,u]:[...d.slice(0,x),u,...d.slice(x)];}),d);return createEffect(d=>{let p=b$1(e.options?.style,e.darkStyle);if(t?.isStyleLoaded()&&d!==p){let u=t.getStyle(),x=u.layers.filter(_=>t.layerIdList.includes(_.id)),P=Object.keys(u.sources).filter(_=>t.sourceIdList.includes(_)).reduce((_,ge)=>({..._,[ge]:u.sources[ge]}),{}),K=e.shouldDiffStyle?e.shouldDiffStyle(d,p):true;t.setStyle(p,K?void 0:{diff:false}),t.once("styledata",()=>{if(!x)return;let _=t.getStyle();t.setStyle({..._,sources:{..._.sources,...P},layers:k(_.layers,x),fog:u.fog,terrain:u.terrain,light:u.light}),y("Set Mapstyle to:",p);});}return p},e.options?.style),["showTileBoundaries","showTerrainWireframe","showCollisionBoxes","showPadding","showOverdrawInspector"].forEach(d=>{createEffect(()=>{let p=e[d];!t||!p||(t[d]=p,y(`Set ${d} to:`,p));});}),onCleanup(()=>{o?.disconnect(),r?.disconnect(),l++,t?.remove(),y("Map removed");}),(()=>{var d=it(),p=n;return typeof p=="function"?use(p,d):n=d,insert(d,(()=>{var u=memo(()=>!!c());return ()=>u()&&createComponent(b,{get map(){return c()},mapLib:i,isMapLibre:a,get constants(){return e.constants},get themeVersion(){return g()},get children(){return [st(),(()=>{var x=lt();return insert(x,()=>e.children),x})()]}})})()),effect(u=>{var x=e.id,P=e?.class,K=e?.classList,_=e.offscreen?{position:"fixed",left:"-99999px",top:"-99999px",width:`${e.offscreen.width}px`,height:`${e.offscreen.height}px`,...e.style}:{width:"100%",height:"100%",...e.style};return x!==u.e&&setAttribute(d,"id",u.e=x),P!==u.t&&className(d,u.t=P),u.a=classList(d,K,u.a),u.o=style(d,_,u.o),u},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()};var we=createContext(),V=()=>useContext(we),vt=e=>{let[t]=a();e.id??=createUniqueId();let n=(i,a)=>{t.map.debug&&console.debug("%c[MapGL]","color: #ec4899",i,a||"");},o=()=>e.source,r=i=>{let a=i?.split(":").reduce((c,s)=>c&&c[s],ne),l=a?{...o(),url:"",tiles:[a.replace("{apikey}",o().apikey||import.meta.env?.VITE_RASTER_API_KEY).replace("{r}",window.devicePixelRatio>1?"@2x":"")],attribution:ne[i.split(":")[0]]._copy}:o();return l.tiles&&(l.tiles=["a","b","c"].map(c=>l.tiles[0].replace("{s}",c))),l};switch(t.map.addSource(e.id,r(o().url)),t.map.sourceIdList.push(e.id),n("Add Source:",e.id),o().type){case "geojson":createEffect(()=>{let i=o().data;t.map.getSource(e.id).setData(i||{}),n("Update GeoJSON Data:",e.id);});break;case "image":createEffect(()=>{let i=o().url,a=o().coordinates;t.map.getSource(e.id).updateImage(i,a),n("Update Image Data:",e.id);});break;case "vector":createEffect(()=>{let i=o().url,a=o().tiles,l=t.map.getSource(e.id);i?l.setUrl(i):l.setTiles(a),n("Update Vector Data:",e.id);});break;case "raster":createEffect(()=>{let i=r(o().url),a=t.map.getSource(e.id);i.url?a.setUrl(i.url):a.setTiles(i.tiles),n("Update Raster Data:",e.id);});break}return onCleanup(()=>{t.map?.getStyle().layers.forEach(i=>i.source===e.id&&t.map.removeLayer(i.id)),t.map?.getSource(e.id)&&t.map?.removeSource(e.id),n("Remove Source:",e.id);}),createComponent(we.Provider,{get value(){return e.id},get children(){return e.children}})};var Le=["id","type","filter","source","source-layer","minzoom","metadata","maxzoom","paint","layout"],Ce=["visibility","line-join","line-cap","line-miter-limit","line-round-limit","line-sort-key","circle-sort-key","symbol-avoid-edges","symbol-placement","symbol-sort-key","symbol-spacing","symbol-z-order","icon-allow-overlap","icon-anchor","icon-ignore-placement","icon-image","icon-keep-upright","icon-offset","icon-optional","icon-padding","icon-pitch-alignment","icon-rotate","icon-rotation-alignment","icon-size","icon-text-fit","icon-text-fit-padding","text-allow-overlap","text-anchor","text-field","text-font","text-ignore-placement","text-justify","text-keep-upright","text-letter-spacing","text-line-height","text-max-angle","text-max-width","text-offset","text-optional","text-padding","text-pitch-alignment","text-radial-offset","text-rotate","text-rotation-alignment","text-size","text-transform","text-variable-anchor","text-writing-mode"];var O,Se=e=>(O??=document.body.appendChild(document.createElement("div")),O.style.cssText="position:absolute;visibility:hidden;pointer-events:none",O.style.color="",O.style.color=e,O.style.color?getComputedStyle(O).color:void 0),Mt=/^[a-z]+-\d{2,3}$/,bt=/^(rgb|rgba|hsl|hsla)\(/i,xt=/^[a-z-]+\(/i,U,wt=/^bg-[a-z]+-\d{2,3}(?:\s+dark:bg-[a-z]+-\d{2,3})?$/,Lt=e=>{U??=document.body.appendChild(document.createElement("div")),U.style.cssText="position:absolute;visibility:hidden;pointer-events:none",U.className=e;let t=getComputedStyle(U).backgroundColor;return U.className="",t&&t!=="rgba(0, 0, 0, 0)"?t:e},Pe=e=>{if(wt.test(e))return Lt(e);if(Mt.test(e)){let t=getComputedStyle(document.documentElement).getPropertyValue(`--color-${e}`).trim();return t&&Se(t)||e}return xt.test(e)&&!bt.test(e)&&Se(e)||e};var ke=(e={},t={})=>[...new Set([...Object.keys(e),...Object.keys(t)])].reduce((o,r)=>{let i=e[r];return i!==t[r]&&o.push([r,i]),o},[]),ie=(e,t)=>(e.startsWith(t)||e.startsWith("icon")||e.startsWith("text")?"":t+"-")+e.replace(/[A-Z]/g,n=>"-"+n.toLowerCase()),Pt=["slot","filter","visible","beforeId","beforeType"],X=(e,t)=>e.endsWith("color")?Array.isArray(t)?t.map(n=>X(e,n)):typeof t=="string"?Pe(t):t:t,Et=/^@(.+)$/,Y=(e,t,n,o)=>{if(Array.isArray(t))return t.map(a=>Y(e,a,n,o));if(typeof t!="string")return t;let r=t.match(Et);if(!r)return t;let i=n[r[1]];return i===void 0?(o(`Unknown constant "@${r[1]}" referenced by "${e}" \u2014 leaving unresolved`),t):i},se=(e,t={},n=()=>{})=>{if(!e)return;let o={},r={},i={},a=(l,c)=>X(l,Y(l,c,t,n));return Object.entries(e).forEach(([l,c])=>{if(Le.includes(l))i[l]=c;else {Pt.includes(l)&&n(`"${l}" is a <Layer> prop, not a style property \u2014 belongs outside "style", not inside it. Treating it as a paint/layout property instead.`);let s=ie(l,e.type);Ce.includes(s)?o[s]=Y(s,c,t,n):r[s]=a(s,c);}}),e.paint&&Object.entries(e.paint).forEach(([l,c])=>{let s=ie(l,e.type);r[s]=a(s,c);}),e.layout&&Object.entries(e.layout).forEach(([l,c])=>{let s=ie(l,e.type);o[s]=Y(s,c,t,n);}),{...i,paint:r,layout:o}},kt=e=>{let[t]=a(),n=e.sourceId||e.style?.source||V(),o=e.id||e.customLayer?.id||createUniqueId(),r=(a,l)=>{(t.map.debug||t.map.debugEvents)&&console.debug("%c[MapGL]","color: #10b981",a,l||"");},i=createMemo(()=>e.beforeType?t.map.getStyle().layers.find(a=>a.type===e.beforeType)?.id:e.beforeId);return t.map.addLayer(e.customLayer||{...se(e.style,t.constants,r),id:o,source:n,...t.isMapLibre?{}:{slot:e.slot||""},metadata:{smg:{beforeType:e.beforeType,beforeId:e.beforeId}}},i()),t.map.layerIdList.push(o),e.customLayer&&t.map.fire("load"),r("Add Layer:",o),he.forEach(a=>{if(e[a]){let l=a.slice(2).toLowerCase();t.map.on(l,o,c=>{l==="click"&&(c.clickOnLayer=true),e[a](c),t.map.debugEvents&&r(`Layer '${l}' event on '${o}':`,c);});}}),createEffect(a=>{t.themeVersion;let l=se(e.style,t.constants,r);if(l!==a)return l.layout!==a?.layout&&ke(l.layout,a?.layout).forEach(([c,s])=>t.map.setLayoutProperty(o,c,s,{validate:false})),l.paint!==a?.paint&&ke(l.paint,a?.paint).forEach(([c,s])=>t.map.setPaintProperty(o,c,s,{validate:false})),(l.minzoom!==a?.minzoom||l.maxzoom!==a?.maxzoom)&&t.map.setLayerZoomRange(o,l.minzoom,l.maxzoom),l.filter!==a?.filter&&t.map.setFilter(o,l.filter,{validate:false}),r("Update Layer Style:",o),l},se(e.style,t.constants,r)),createEffect(a=>{if(e.visible!==a)return t.map.setLayoutProperty(o,"visibility",e.visible?"visible":"none",{validate:false}),r(`Update Visibility (${o}):`,e.visible.toString()),e.visible},e.visible),createEffect(a=>i()===a?a:(t.map.moveLayer(o,i()),r(`Update Layer Z-Index (${o}):`,i()),i()),i()),createEffect(a=>e.filter===a||a===void 0&&!e.filter?a:(t.map.setFilter(o,e.filter??null),r(`Update Filter (${o}):`,e.filter),e.filter),void 0),createEffect(async()=>{!e.featureState||e.featureState.id===null||(!t.map.isStyleLoaded()&&await t.map.once("styledata"),t.map.removeFeatureState({source:n,sourceLayer:e.style["source-layer"]}),t.map.setFeatureState({source:n,sourceLayer:e.style["source-layer"],id:e.featureState.id},e.featureState.state));}),createEffect(()=>{if(!e.pulse)return;let l=(Array.isArray(e.pulse)?e.pulse:[e.pulse]).map(c=>{let{property:s,duration:g=1500,holdFraction:m=.25}=c,M=X(s,c.from),f=X(s,c.to),h=g*(1-m),v=()=>{t.map.setPaintProperty(o,`${s}-transition`,{duration:0,delay:0},{validate:false}),t.map.setPaintProperty(o,s,M,{validate:false}),requestAnimationFrame(()=>{t.map.setPaintProperty(o,`${s}-transition`,{duration:h,delay:0},{validate:false}),t.map.setPaintProperty(o,s,f,{validate:false});});};return v(),window.setInterval(v,g)});r(`Start Pulse (${o}):`,e.pulse),onCleanup(()=>l.forEach(c=>window.clearInterval(c)));}),onCleanup(()=>t.map?.getLayer(o)&&t.map?.removeLayer(o)),e.children};var _e=createContext(),Rt=()=>useContext(_e),zt=e=>{let[t]=a(),[n,o]=createSignal(null);return onMount(async()=>{e.id=e.id||createUniqueId();let r=t.mapLib.MercatorCoordinate.fromLngLat([e.origin[0]||0,e.origin[1]||0],e.origin[2]||0),i=r.meterInMercatorCoordinateUnits(),{x:a,y:l,z:c}=r,s=null,g=null,m=null;e.babylon?(g=await import('@babylonjs/core'),s=g.Matrix.Compose(new g.Vector3(i,i,i),g.Quaternion.FromEulerAngles(Math.PI/2,0,0),new g.Vector3(a,l,c))):(m=await import('three'),s={translateX:a,translateY:l,translateZ:c,rotateX:Math.PI/2,rotateY:0,rotateZ:0,scale:i}),t.map.addLayer({id:e.id,type:"custom",renderingMode:"3d",onAdd(M,f){if(e.babylon){let h=new g.Engine(f,true,{useHighPrecisionMatrix:true},true);this.scene=new g.Scene(h),this.scene.autoClear=false,this.scene.preventDefaultOnPointerDown=false,this.scene.preventDefaultOnPointerUp=false;let v=new g.UniversalCamera("Camera",g.Vector3.Zero());v.mode=g.Camera.ORTHOGRAPHIC_CAMERA,v.inertia=0,this.scene.ambientColor=new g.Color3(1,1,1),e.defaultLight&&new g.HemisphericLight("Light",new g.Vector3(100,10,0),this.scene);}else this.camera=new m.Camera,this.scene=new m.Scene,e.defaultLight&&(this.light=new m.DirectionalLight(16777215),this.light.position.set(100,0,0).normalize(),this.scene.add(this.light)),this.renderer=new m.WebGLRenderer({canvas:M.getCanvas(),context:f,antialias:true}),this.renderer.autoClear=false;this.map=M,e.onAdd&&e.onAdd(this.scene,this.map,f),o(this.scene);},render(M,f){if(e.babylon){this.scene.activeCamera.freezeProjectionMatrix(s.multiply(g.Matrix.FromArray(f)));this.map.getPitch()*(Math.PI/180);this.map.getBearing()*(Math.PI/180);this.scene.render(false);}else {let h=new m.Matrix4().makeRotationAxis(new m.Vector3(1,0,0),s.rotateX),v=new m.Matrix4().makeRotationAxis(new m.Vector3(0,1,0),s.rotateY),y=new m.Matrix4().makeRotationAxis(new m.Vector3(0,0,1),s.rotateZ),b=new m.Matrix4().fromArray(f),S=new m.Matrix4().makeTranslation(s.translateX,s.translateY,s.translateZ).scale(new m.Vector3(s.scale,-s.scale,s.scale)).multiply(h).multiply(v).multiply(y);this.camera.projectionMatrix=b.multiply(S),this.renderer.resetState(),this.renderer.render(this.scene,this.camera);}e.onRender&&e.onRender(M,f),t.map.triggerRepaint();}},e.beforeId);}),onCleanup(()=>{t.map.getLayer(e.id)&&t.map.removeLayer(e.id);}),createComponent(_e.Provider,{value:n,get children(){return memo(()=>!!n())()&&e.children}})};var jt=e=>{let[t]=a();return createEffect(()=>{t.isMapLibre?t.map.setSky?.(e.style||{}):t.map.setFog(e.style||{});}),onCleanup(()=>{t.isMapLibre?t.map.getSky?.()&&t.map.setSky(null):t.map.getFog()&&t.map.setFog(null);}),null};var Gt=e=>{let[t]=a(),n=V();return !n&&!e?.source&&(n=createUniqueId(),t.map.addSource(n,{type:"raster-dem",url:t.isMapLibre?"https://demotiles.maplibre.org/terrain-tiles/tiles.json":"mapbox://mapbox.terrain-rgb",tileSize:t.isMapLibre?256:512,maxzoom:t.isMapLibre?void 0:14}),t.map.sourceIdList.push(n)),createEffect(()=>{t.map.setTerrain({exaggeration:e.exaggeration||1,source:e?.source||n});}),onCleanup(()=>t.map?.setTerrain(null)),null};var W=(e,t)=>{let[n]=a();createEffect(()=>{let o=e(),r=t?.();o&&(n.map.hasControl(o)&&n.map.removeControl(o),n.map.addControl(o,r));}),onCleanup(()=>{let o=e();o&&n.map.hasControl(o)&&n.map.removeControl(o);});};var Kt=e=>{let[t]=a(),[n,o]=splitProps(e,["position"]),[r,i]=createSignal(null),a$1=new Map([["navigation",t.mapLib.NavigationControl],["scale",t.mapLib.ScaleControl],["attribution",t.mapLib.AttributionControl],["geolocate",t.mapLib.GeolocateControl],["fullscreen",t.mapLib.FullscreenControl],["logo",t.mapLib.LogoControl],["terrain",t.mapLib.TerrainControl]]);return createEffect(()=>{untrack(()=>r()&&t.map.hasControl(r())&&t.map.removeControl(r())),i(o.custom||new(a$1.get(o.type||"navigation"))(o.options));}),W(r,()=>n.position),null};var tn=e=>{if(!e.lngLat)throw new Error("Marker - lngLat is required");let[t,n,o]=splitProps(e,["lngLat","children","showPopup","draggable"],["popup","onOpen","onClose"]),[r]=a(),i=null,a$1=null,l=t.lngLat;return createEffect(()=>{r.map&&(a$1?.remove(),a$1=new r.mapLib.Popup({closeOnClick:false,focusAfterOpen:false,...n.popup}).on("open",()=>n.onOpen?.()).on("close",()=>n.onClose?.()),createEffect(()=>{t.children!==void 0&&(typeof t.children=="string"?a$1?.setHTML(t.children):a$1?.setDOMContent(t.children),i?.setPopup(a$1));}),createEffect(()=>t.showPopup!==a$1?.isOpen()&&i?.togglePopup()));}),createEffect(()=>{r.map&&(i?.remove(),i=new r.mapLib.Marker(o.options).on("dragstart",()=>o.onDragStart?.()).on("dragend",()=>o.onDragEnd?.()).on("drag",()=>o.onDrag?.(i?.getLngLat().toArray())).setPopup(a$1).setLngLat(l).addTo(r.map),createEffect(()=>t.showPopup!==a$1?.isOpen()&&i?.togglePopup()));}),createEffect(()=>i?.setLngLat(t.lngLat)),createEffect(()=>i?.setDraggable(t.draggable)),onCleanup(()=>i?.remove()),null};var rn=e=>{if(!e.trackPointer&&!e.lngLat)throw new Error("Popup - lngLat or trackPointer is required");let[t,n]=splitProps(e,["lngLat","children","trackPointer"]),[o]=a(),r;return createEffect(()=>{o.map&&(r?.remove(),r=new o.mapLib.Popup({closeOnClick:false,focusAfterOpen:false,...n.options}).on("open",()=>n.onOpen?.()).on("close",()=>n.onClose?.()).addTo(o.map),createEffect(()=>t.trackPointer?r.trackPointer():r.setLngLat(t.lngLat)),createEffect(()=>typeof t.children=="string"?r.setHTML(t.children):r.setDOMContent(t.children)));}),onCleanup(()=>r?.remove()),null};var ce=new Float64Array(256);for(let e=0;e<256;e++){let t=.5-Math.pow(e/255,.45454545454545453);ce[e]=t*Math.abs(t);}ce[255]=-1e20;function Ie(e,t,n,o,r,i,a){i[0]=0,a[0]=-1e20,a[1]=1e20,r[0]=e[t];for(let l=1,c=0,s=0;l<o;l++){r[l]=e[t+l*n];let g=l*l;do{let m=i[c];s=(r[l]-r[m]+g-m*m)/(l-m)/2;}while(s<=a[c]&&--c>-1);c++,i[c]=l,a[c]=s,a[c+1]=1e20;}for(let l=0,c=0;l<o;l++){for(;a[c+1]<l;)c++;let s=i[c],g=l-s;e[t+l*n]=r[s]+g*g;}}function Te(e,t,n,o,r,i){for(let a=0;a<t;a++)Ie(e,a,t,n,o,r,i);for(let a=0;a<n;a++)Ie(e,a*t,1,t,o,r,i);}var de=({radius:e=8}={})=>Math.ceil(e);function H(e,{radius:t=8,cutoff:n=.25}={}){let{width:o,height:r}=e,i=o*r,a=new Float64Array(i).fill(1e20),l=new Float64Array(i),c=Math.max(o,r),s=new Float64Array(c),g=new Uint16Array(c),m=new Float64Array(c+1),M=e.data;for(let y=0,b=3;y<i;y++,b+=4){let S=M[b];if(S===0)continue;let k=ce[S];a[y]=Math.max(0,k),l[y]=Math.max(0,-k);}Te(a,o,r,s,g,m),Te(l,o,r,s,g,m);let f=255/t,h=255*(1-n),v=new Uint8ClampedArray(i*4);for(let y=0,b=0;y<i;y++,b+=4){let S=Math.sqrt(a[y])-Math.sqrt(l[y]),k=Math.max(0,Math.min(255,Math.round(h-f*S)));v[b]=v[b+1]=v[b+2]=255,v[b+3]=k;}return {width:o,height:r,data:v}}var ue={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:true},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:true},grid:{size:20,path:"M10 0V20M0 10H20"},brick:{size:40,path:"M0 0H40M0 20H40M0 40H40M0 0V20M20 0V20M40 0V20M10 20V40M30 20V40"},wave:{size:20,path:"M0 5Q5 0 10 5T20 5M0 15Q5 10 10 15T20 15"}},$e=Object.keys(ue),E=e=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" stroke-linecap="round" stroke-linejoin="round">
|
|
6
|
+
var he=["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"],ye=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],ve=["onCreate","onDelete","onCombine","onUncombine","onUpdate","onSelectionchange","onModechange","onRender","onActionable"];var C="mapbox://styles/mapbox",F="https://raw.githubusercontent.com/",L="https://raw.githubusercontent.com/GIShub4/map-styles/main/",te="https://assets.vector.hereapi.com/styles/",Me={mb:{standard:`${C}/standard`,light:`${C}/light-v11`,dark:`${C}/dark-v11`,street:`${C}/streets-v12`,outdoor:`${C}/outdoors-v12`,sat:`${C}/satellite-v9`,sat_street:`${C}/satellite-streets-v12`,nav_base:`${C}/navigation-guidance-day-v4`,nav_base_night:`${C}/navigation-guidance-night-v4`,nav:`${C}/navigation-day-v1`,nav_night:`${C}/navigation-night-v1`,basic:`${C}/cjf4m44iw0uza2spb3q0a7s41`,monochrome:`${C}/cjv6rzz4j3m4b1fqcchuxclhb`,leshine:`${C}/cjcunv5ae262f2sm9tfwg8i0w`,icecream:`${C}/cj7t3i5yj0unt2rmt3y4b5e32`,cali:`${C}/cjerxnqt3cgvp2rmyuxbeqme7`,northstar:`${C}/cj44mfrt20f082snokim4ungi`,mineral:`${C}/cjtep62gq54l21frr1whf27ak`,moonlight:`${C}/cj3kbeqzo00022smj7akz3o1e`,frank:`${C}-map-design/ckshxkppe0gge18nz20i0nrwq`,minimo:`${C}-map-design/cksjc2nsq1bg117pnekb655h1`,decimal:`${C}-map-design/ck4014y110wt61ctt07egsel6`,stand:`${C}-map-design/ckr0svm3922ki18qntevm857n`,blueprint:`${C}-map-design/cks97e1e37nsd17nzg7p0308g`,bubble:`${C}-map-design/cksysy2nl62zp17quosctdtcc`,pencil:`${C}-map-design/cks9iema71es417mlrft4go2k`,swiss_ski:`${F}mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,vintage:`${F}mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,whaam:`${F}mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,neon:`${F}NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,camoflauge:`${F}jingsam/mapbox-gl-styles/master/Camouflage.json`,emerald:`${F}jingsam/mapbox-gl-styles/master/Emerald.json`,runner:`${F}jingsam/mapbox-gl-styles/master/Runner.json`,x_ray:`${F}jingsam/mapbox-gl-styles/master/X-ray.json`},here:{base:`${te}berlin/base/mapbox/tilezen?apikey={apikey}`,day:`${te}berlin/day/mapbox/tilezen?apikey={apikey}`,night:`${te}berlin/night/mapbox/tilezen?apikey={apikey}`},esri:{blueprint:`${L}esri:blueprint.json`,charted_territory:`${L}esri:charted-territory.json`,colored_pencil:`${L}esri:colored-pencil.json`,community:`${L}esri:community.json`,mid_century:`${L}esri:mid-century.json`,modern_antique:`${L}esri:modern-antique.json`,nat_geo:`${L}esri:national-geographic.json`,newspaper:`${L}esri:newspaper.json`,open_street_map:`${L}esri:open-street-map.json`,light_gray_canvas:`${L}esri:light-gray-canvas.json`,dark_gray_canvas:`${L}esri:dark-gray-canvas.json`,human_geo_light:`${L}esri:human-geography-light.json`,human_geo_dark:`${L}esri:human-geography-dark.json`,world_navigation:`${L}esri:world-navigation.json`,world_street:`${L}esri:world-street.json`,world_street_night:`${L}esri:world-street-night.json`,world_terrain:`${L}esri:world-terrain.json`,world_terrain_hybrid:`${L}esri:world-terrain-hybrid.json`,world_topographic:`${L}esri:world-topographic.json`,chromium:`${L}esri:chromium.json`,dreamcatcher:`${L}esri:dreamcatcher.json`,seahaven:`${L}esri:seahaven.json`,sangria:`${L}esri:sangria.json`,mercurial:`${L}esri:mercurial.json`,imagery:`${L}esri:imagery.json`,imagery_hybrid:`${L}esri:imagery-hybrid.json`,firefly:`${L}esri:firefly.json`,firefly_hybrid:`${L}esri:firefly-hybrid.json`,oceans:`${L}esri:oceans.json`}},ne="https://{s}.basemaps.cartocdn.com/rastertiles/",q="https://stamen-tiles-{s}.a.ssl.fastly.net/",$="https://{s}.tile.thunderforest.com/",oe={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">© OpenStreetMap</a>'},carto:{voyager:`${ne}voyager_labels_under/{z}/{x}/{y}{r}.png`,positron:`${ne}light_all/{z}/{x}/{y}{r}.png`,dark:`${ne}dark_all/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://carto.com/attribution" target="_blank">© Carto</a>'},stamen:{toner:`${q}toner/{z}/{x}/{y}{r}.png`,toner_lite:`${q}toner-lite/{z}/{x}/{y}{r}.png`,watercolor:`${q}watercolor/{z}/{x}/{y}.png`,terrain:`${q}terrain/{z}/{x}/{y}{r}.png`,_copy:'<a href="https://stamen.com/privacy-policy" target="_blank">© 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">© Thunderforest</a>'}};var V=()=>new Promise(e=>requestAnimationFrame(()=>e())),Ke=e=>{try{return !!e.style?.hasTransitions?.()}catch{return false}};function Je(e,t){return new Promise(n=>{let o=Date.now()+t,r=()=>{if(e.areTilesLoaded()){n(true);return}if(Date.now()>=o){n(false);return}setTimeout(r,100);};r();})}async function G(e,t={}){let{timeout:n=1e4,fadeMargin:o=400}=t;if(await Je(e,n),e.triggerRepaint(),await V(),await V(),o>0){let r=Date.now()+Math.max(o,2e3);for(;Ke(e)&&Date.now()<r;)e.triggerRepaint(),await V();await new Promise(a=>setTimeout(a,o)),e.triggerRepaint(),await V(),await V();}}function B(e,t={}){return new Promise(n=>{e.once("idle",()=>{G(e,t).then(n);}),e.triggerRepaint();})}function re(e){for(let t of e.getStyle()?.layers??[])try{e.setPaintProperty(t.id,"raster-fade-duration",0);}catch{}}function be(e,t){return {map:e,waitUntilSettled:()=>B(e,t),capture:(n="image/jpeg",o=.92)=>e.getCanvas().toDataURL(n,o),captureWhenSettled:async(n="image/jpeg",o=.92)=>(await B(e,t),e.getCanvas().toDataURL(n,o))}}var lt=template("<div>"),ct=template("<style>.overlay{position:relative;width:100%;height:100%;pointer-events:none}:where(.overlay>*){pointer-events:auto}"),dt=template("<div class=overlay>"),pt=e=>{let t,n,o,r,a,i=false,c=0,[l,s]=createSignal(null),[u,d]=createSignal(0),[M,h]=createSignal(!isServer&&(window.matchMedia("(prefers-color-scheme: dark)").matches||document.body.classList.contains("dark"))),y=false,v=false,f=(m,p)=>(e.debug||e.debugEvents)&&console.debug("%c[MapGL]","color: #0ea5e9",m,p||""),b$1=(m,p)=>{let g=M()&&p?p:m;return (typeof g=="string"||g instanceof String)&&g?.split(":").reduce((x,k)=>x&&x[k],Me)?.replace("{apikey}",e.apikey||import.meta.env?.VITE_VECTOR_API_KEY)||g};onMount(async()=>{try{await S();}catch(m){console.error("[MapGL] Failed to initialize map:",m),e.onError?.(m);}});let S=async()=>{if(a=e.mapLib||await import('mapbox-gl'),a.Map||(a=window.maplibregl||window.mapboxgl),typeof a.supported=="function"&&!a.supported())throw new Error("Mapbox GL not supported");if(i=typeof a.Map?.prototype?.setConfigProperty!="function",f(`Map (v${a.version}) loading...`),t=new a.Map({accessToken:e.options?.accessToken||import.meta.env?.VITE_MAPBOX_ACCESS_TOKEN,interactive:e.options?.interactive||!!e.onViewportChange,...e.options,...e.viewport,projection:e.options?.projection,container:n,style:b$1(e.options?.style,e.darkStyle),fitBoundsOptions:{padding:e.viewport?.padding},...e.offscreen?{preserveDrawingBuffer:true}:{}}),t.debug=e.debug,t.debugEvents=e.debugEvents,t.sourceIdList=[],t.layerIdList=[],t.isMapLibre=i,he.forEach(m=>{let p=e[m];if(p){let g=m.slice(2).toLowerCase();typeof p=="function"?t.on(g,x=>{setTimeout(()=>{g==="click"&&x.clickOnLayer||(p(x),e.debugEvents&&f(`Map '${g}' event:`,x));},0);}):Object.keys(p).forEach(x=>{t.on(g,x,k=>{setTimeout(()=>{g==="click"&&k.clickOnLayer||(p[x](k),e.debugEvents&&f(`Map '${g}' event on '${x}':`,k));},0);});});}}),e.onTilesLoaded){let m=e.tilesLoadedTimeout??1e4,p=e.tilesLoadedFadeMargin??400;t.on("idle",()=>{let g=++c;G(t,{timeout:m,fadeMargin:p}).then(()=>{g===c&&(f("Tiles settled"),e.onTilesLoaded());});});}t.once("load",()=>{s(t),f("Map loaded"),e.offscreen&&e.offscreen.disableRasterFade!==false&&re(t),e.onCapturerReady&&e.onCapturerReady(be(t,{timeout:e.tilesLoadedTimeout??1e4,fadeMargin:e.tilesLoadedFadeMargin??400})),["mousedown","touchstart","wheel"].forEach(p=>t.on(p,g=>!g.rotate&&e.onUserInteraction?.(true))),["moveend","mouseup","touchend"].forEach(p=>t.on(p,g=>!g.rotate&&e.onUserInteraction?.(false)));let m=!isServer&&window.matchMedia("(prefers-color-scheme: dark)");m?.addEventListener("change",()=>{h(m.matches),d(p=>p+1),f("Set dark theme to:",m.matches?.toString());}),r=new MutationObserver(()=>{let p=document.documentElement.classList.contains("dark")||document.body.classList.contains("dark");h(p),d(g=>g+1),f("Set theme to:",p);}),r.observe(document.documentElement,{attributes:true}),r.observe(document.body,{attributes:true}),e.disableResize||(o=new ResizeObserver(()=>{setTimeout(()=>{t?.resize();},0),f("Map resized");}),o.observe(n)),t.on("move",p=>{let g={...e.viewport,id:e.id,point:{x:p.originalEvent?.x,y:p.originalEvent?.y},center:e.viewport?.center?.lat?t.getCenter():[t.getCenter().lng,t.getCenter().lat],zoom:t.getZoom(),pitch:t.getPitch(),bearing:t.getBearing(),inTransit:true,bounds:null};!p.viewport&&e.onViewportChange&&(v=true,e.onViewportChange(g));}),t.on("moveend",p=>{if(y||p.rotate||!e.onViewportChange)return;let g={...e.viewport,inTransit:false};v=true,e.onViewportChange(g);});});};createEffect(on(()=>e.viewport,m=>{if(!t||e.id!==m?.id)return;if(v){v=false;return}let p={...m,...m.bounds?t.cameraForBounds(m.bounds,{bearing:m?.bearing,pitch:m?.pitch,padding:m?.padding}):null};y=true,t.stop(),y=false,t[e.transitionType||"flyTo"](p),f(`Update Viewport (${e.transitionType||"flyTo"}):`,p);},{defer:true})),createEffect(()=>{let m=l();if(typeof m?.setConfigProperty!="function"){m&&e.config&&Object.keys(e.config).length&&f("Config prop is set but this map library has no setConfigProperty (Mapbox Standard Style only) \u2014 skipping");return}for(let p in e.config){if(!p||p==="id")continue;let g=e.config?.id||"basemap",x=e.config[p];m.setConfigProperty(g,p,x),f(`Set Config (${g}:${p}) to:`,x);}}),createEffect(()=>{let m=e.options?.projection;!t||!m||(t.setProjection(m),f("Set Projection to:",m));}),createEffect(()=>{let m=e.cursorStyle;!t||!m||(t.getCanvas().style.cursor=m,f("Set Cursor to:",m));});let E=(m,p)=>(p.forEach(g=>{let x=m.findIndex(k=>g.metadata.smg.beforeType?k.type===g.metadata.smg.beforeType:k.id===g.metadata.smg.beforeId);m=x===-1?[...m,g]:[...m.slice(0,x),g,...m.slice(x)];}),m),_=null;return createEffect(m=>{let p=b$1(e.options?.style,e.darkStyle);if(t&&m!==p){let g=t.getStyle(),x=g.layers.filter(I=>t.layerIdList.includes(I.id)),k=Object.keys(g.sources).filter(I=>t.sourceIdList.includes(I)).reduce((I,fe)=>({...I,[fe]:g.sources[fe]}),{}),J=e.shouldDiffStyle?e.shouldDiffStyle(m,p):true;_&&(t.off("style.load",_),_=null),t.setStyle(p,J?void 0:{diff:false}),_=()=>{if(_=null,!x)return;let I=t.getStyle();t.setStyle({...I,sources:{...I.sources,...k},layers:E(I.layers,x),fog:g.fog,terrain:g.terrain,light:g.light},{diff:false}),f("Set Mapstyle to:",p);},t.once("style.load",_);}return p},e.options?.style),onCleanup(()=>{_&&(t?.off("style.load",_),_=null);}),["showTileBoundaries","showTerrainWireframe","showCollisionBoxes","showPadding","showOverdrawInspector"].forEach(m=>{createEffect(()=>{let p=e[m];!t||!p||(t[m]=p,f(`Set ${m} to:`,p));});}),onCleanup(()=>{o?.disconnect(),r?.disconnect(),c++,t?.remove(),f("Map removed");}),(()=>{var m=lt(),p=n;return typeof p=="function"?use(p,m):n=m,insert(m,(()=>{var g=memo(()=>!!l());return ()=>g()&&createComponent(b,{get map(){return l()},mapLib:a,isMapLibre:i,get constants(){return e.constants},get themeVersion(){return u()},get children(){return [ct(),(()=>{var x=dt();return insert(x,()=>e.children),x})()]}})})()),effect(g=>{var x=e.id,k=e?.class,J=e?.classList,I=e.offscreen?{position:"fixed",left:"-99999px",top:"-99999px",width:`${e.offscreen.width}px`,height:`${e.offscreen.height}px`,...e.style}:{width:"100%",height:"100%",...e.style};return x!==g.e&&setAttribute(m,"id",g.e=x),k!==g.t&&className(m,g.t=k),g.a=classList(m,J,g.a),g.o=style(m,I,g.o),g},{e:void 0,t:void 0,a:void 0,o:void 0}),m})()};var Ce=createContext(),U=()=>useContext(Ce),Mt=e=>{let[t]=a();e.id??=createUniqueId();let n=(a,i)=>{t.map.debug&&console.debug("%c[MapGL]","color: #ec4899",a,i||"");},o=()=>e.source,r=a=>{let i=a?.split(":").reduce((l,s)=>l&&l[s],oe),c=i?{...o(),url:"",tiles:[i.replace("{apikey}",o().apikey||import.meta.env?.VITE_RASTER_API_KEY).replace("{r}",window.devicePixelRatio>1?"@2x":"")],attribution:oe[a.split(":")[0]]._copy}:o();return c.tiles&&(c.tiles=["a","b","c"].map(l=>c.tiles[0].replace("{s}",l))),c};switch(t.map.addSource(e.id,r(o().url)),t.map.sourceIdList.push(e.id),n("Add Source:",e.id),o().type){case "geojson":createEffect(()=>{let a=o().data,i=t.map.getSource(e.id);i&&(i.setData(a||{}),n("Update GeoJSON Data:",e.id));});break;case "image":createEffect(()=>{let a=o().url,i=o().coordinates,c=t.map.getSource(e.id);c&&(c.updateImage(a,i),n("Update Image Data:",e.id));});break;case "vector":createEffect(()=>{let a=o().url,i=o().tiles,c=t.map.getSource(e.id);c&&(a?c.setUrl(a):c.setTiles(i),n("Update Vector Data:",e.id));});break;case "raster":createEffect(()=>{let a=r(o().url),i=t.map.getSource(e.id);i&&(a.url?i.setUrl(a.url):i.setTiles(a.tiles),n("Update Raster Data:",e.id));});break}return onCleanup(()=>{t.map?.getStyle().layers.forEach(a=>a.source===e.id&&t.map.removeLayer(a.id)),t.map?.getSource(e.id)&&t.map?.removeSource(e.id),n("Remove Source:",e.id);}),createComponent(Ce.Provider,{get value(){return e.id},get children(){return e.children}})};var Se=["id","type","filter","source","source-layer","minzoom","metadata","maxzoom","paint","layout"],Pe=["visibility","line-join","line-cap","line-miter-limit","line-round-limit","line-sort-key","circle-sort-key","symbol-avoid-edges","symbol-placement","symbol-sort-key","symbol-spacing","symbol-z-order","icon-allow-overlap","icon-anchor","icon-ignore-placement","icon-image","icon-keep-upright","icon-offset","icon-optional","icon-padding","icon-pitch-alignment","icon-rotate","icon-rotation-alignment","icon-size","icon-text-fit","icon-text-fit-padding","text-allow-overlap","text-anchor","text-field","text-font","text-ignore-placement","text-justify","text-keep-upright","text-letter-spacing","text-line-height","text-max-angle","text-max-width","text-offset","text-optional","text-padding","text-pitch-alignment","text-radial-offset","text-rotate","text-rotation-alignment","text-size","text-transform","text-variable-anchor","text-writing-mode"];var R,Ee=e=>(R??=document.body.appendChild(document.createElement("div")),R.style.cssText="position:absolute;visibility:hidden;pointer-events:none",R.style.color="",R.style.color=e,R.style.color?getComputedStyle(R).color:void 0),bt=/^[a-z]+-\d{2,3}$/,xt=/^(rgb|rgba|hsl|hsla)\(/i,wt=/^[a-z-]+\(/i,j,Lt=/^bg-[a-z]+-\d{2,3}(?:\s+dark:bg-[a-z]+-\d{2,3})?$/,Ct=e=>{j??=document.body.appendChild(document.createElement("div")),j.style.cssText="position:absolute;visibility:hidden;pointer-events:none",j.className=e;let t=getComputedStyle(j).backgroundColor;return j.className="",t&&t!=="rgba(0, 0, 0, 0)"?t:e},ke=e=>{if(Lt.test(e))return Ct(e);if(bt.test(e)){let t=getComputedStyle(document.documentElement).getPropertyValue(`--color-${e}`).trim();return t&&Ee(t)||e}return wt.test(e)&&!xt.test(e)&&Ee(e)||e};var Ie=(e={},t={})=>[...new Set([...Object.keys(e),...Object.keys(t)])].reduce((o,r)=>{let a=e[r];return a!==t[r]&&o.push([r,a]),o},[]),se=(e,t)=>(e.startsWith(t)||e.startsWith("icon")||e.startsWith("text")?"":t+"-")+e.replace(/[A-Z]/g,n=>"-"+n.toLowerCase()),Et=["slot","filter","visible","beforeId","beforeType"],W=(e,t)=>e.endsWith("color")?Array.isArray(t)?t.map(n=>W(e,n)):typeof t=="string"?ke(t):t:t,kt=/^@(.+)$/,X=(e,t,n,o)=>{if(Array.isArray(t))return t.map(i=>X(e,i,n,o));if(typeof t!="string")return t;let r=t.match(kt);if(!r)return t;let a=n[r[1]];return a===void 0?(o(`Unknown constant "@${r[1]}" referenced by "${e}" \u2014 leaving unresolved`),t):a},le=(e,t={},n=()=>{})=>{if(!e)return;let o={},r={},a={},i=(c,l)=>W(c,X(c,l,t,n));return Object.entries(e).forEach(([c,l])=>{if(Se.includes(c))a[c]=l;else {Et.includes(c)&&n(`"${c}" is a <Layer> prop, not a style property \u2014 belongs outside "style", not inside it. Treating it as a paint/layout property instead.`);let s=se(c,e.type);Pe.includes(s)?o[s]=X(s,l,t,n):r[s]=i(s,l);}}),e.paint&&Object.entries(e.paint).forEach(([c,l])=>{let s=se(c,e.type);r[s]=i(s,l);}),e.layout&&Object.entries(e.layout).forEach(([c,l])=>{let s=se(c,e.type);o[s]=X(s,l,t,n);}),{...a,paint:r,layout:o}},_t=e=>{let[t]=a(),n=e.sourceId||e.style?.source||U(),o=e.id||e.customLayer?.id||createUniqueId(),r=(l,s)=>{(t.map.debug||t.map.debugEvents)&&console.debug("%c[MapGL]","color: #10b981",l,s||"");},a$1=l=>{try{l();}catch(s){if(!(s instanceof Error)||s.message!=="Style is not done loading")throw s;r(`Skipped map update (${o}) \u2014 style mid-swap`);}},i=createMemo(()=>e.beforeType?t.map.getStyle().layers.find(l=>l.type===e.beforeType)?.id:e.beforeId);t.map.addLayer(e.customLayer||{...le(e.style,t.constants,r),id:o,source:n,...t.isMapLibre?{}:{slot:e.slot||""},...e.filter!==void 0?{filter:e.filter}:{},metadata:{smg:{beforeType:e.beforeType,beforeId:e.beforeId}}},i()),t.map.layerIdList.push(o),e.customLayer&&t.map.fire("load"),r("Add Layer:",o),ye.forEach(l=>{if(e[l]){let s=l.slice(2).toLowerCase();t.map.on(s,o,u=>{s==="click"&&(u.clickOnLayer=true),e[l](u),t.map.debugEvents&&r(`Layer '${s}' event on '${o}':`,u);});}});let c=true;return createEffect(l=>{t.themeVersion;let s=le(e.style,t.constants,r);if(c)return c=false,s;if(s!==l)return s.layout!==l?.layout&&Ie(s.layout,l?.layout).forEach(([u,d])=>a$1(()=>t.map.setLayoutProperty(o,u,d,{validate:!1}))),s.paint!==l?.paint&&Ie(s.paint,l?.paint).forEach(([u,d])=>a$1(()=>t.map.setPaintProperty(o,u,d,{validate:!1}))),(s.minzoom!==l?.minzoom||s.maxzoom!==l?.maxzoom)&&a$1(()=>t.map.setLayerZoomRange(o,s.minzoom,s.maxzoom)),s.filter!==l?.filter&&a$1(()=>t.map.setFilter(o,s.filter,{validate:!1})),r("Update Layer Style:",o),s},le(e.style,t.constants,r)),createEffect(l=>{if(e.visible!==l)return a$1(()=>t.map.setLayoutProperty(o,"visibility",e.visible?"visible":"none",{validate:!1})),r(`Update Visibility (${o}):`,e.visible.toString()),e.visible},e.visible),createEffect(l=>i()===l?l:(a$1(()=>t.map.moveLayer(o,i())),r(`Update Layer Z-Index (${o}):`,i()),i()),i()),createEffect(l=>e.filter===l||l===void 0&&!e.filter?l:(a$1(()=>t.map.setFilter(o,e.filter??null)),r(`Update Filter (${o}):`,e.filter),e.filter),e.filter),createEffect(()=>{!e.featureState||e.featureState.id===null||a$1(()=>{t.map.removeFeatureState({source:n,sourceLayer:e.style["source-layer"]}),t.map.setFeatureState({source:n,sourceLayer:e.style["source-layer"],id:e.featureState.id},e.featureState.state);});}),createEffect(()=>{if(!e.pulse)return;let s=(Array.isArray(e.pulse)?e.pulse:[e.pulse]).map(u=>{let{property:d,duration:M=1500,holdFraction:h=.25}=u,y=W(d,u.from),v=W(d,u.to),f=M*(1-h),b=()=>{a$1(()=>{t.map.setPaintProperty(o,`${d}-transition`,{duration:0,delay:0},{validate:!1}),t.map.setPaintProperty(o,d,y,{validate:!1});}),requestAnimationFrame(()=>{a$1(()=>{t.map.setPaintProperty(o,`${d}-transition`,{duration:f,delay:0},{validate:!1}),t.map.setPaintProperty(o,d,v,{validate:!1});});});};return b(),window.setInterval(b,M)});r(`Start Pulse (${o}):`,e.pulse),onCleanup(()=>s.forEach(u=>window.clearInterval(u)));}),onCleanup(()=>t.map?.getLayer(o)&&t.map?.removeLayer(o)),e.children};var Te=createContext(),zt=()=>useContext(Te),Vt=e=>{let[t]=a(),[n,o]=createSignal(null);return onMount(async()=>{e.id=e.id||createUniqueId();let r=t.mapLib.MercatorCoordinate.fromLngLat([e.origin[0]||0,e.origin[1]||0],e.origin[2]||0),a=r.meterInMercatorCoordinateUnits(),{x:i,y:c,z:l}=r,s=null,u=null,d=null;e.babylon?(u=await import('@babylonjs/core'),s=u.Matrix.Compose(new u.Vector3(a,a,a),u.Quaternion.FromEulerAngles(Math.PI/2,0,0),new u.Vector3(i,c,l))):(d=await import('three'),s={translateX:i,translateY:c,translateZ:l,rotateX:Math.PI/2,rotateY:0,rotateZ:0,scale:a}),t.map.addLayer({id:e.id,type:"custom",renderingMode:"3d",onAdd(M,h){if(e.babylon){let y=new u.Engine(h,true,{useHighPrecisionMatrix:true},true);this.scene=new u.Scene(y),this.scene.autoClear=false,this.scene.preventDefaultOnPointerDown=false,this.scene.preventDefaultOnPointerUp=false;let v=new u.UniversalCamera("Camera",u.Vector3.Zero());v.mode=u.Camera.ORTHOGRAPHIC_CAMERA,v.inertia=0,this.scene.ambientColor=new u.Color3(1,1,1),e.defaultLight&&new u.HemisphericLight("Light",new u.Vector3(100,10,0),this.scene);}else this.camera=new d.Camera,this.scene=new d.Scene,e.defaultLight&&(this.light=new d.DirectionalLight(16777215),this.light.position.set(100,0,0).normalize(),this.scene.add(this.light)),this.renderer=new d.WebGLRenderer({canvas:M.getCanvas(),context:h,antialias:true}),this.renderer.autoClear=false;this.map=M,e.onAdd&&e.onAdd(this.scene,this.map,h),o(this.scene);},render(M,h){if(e.babylon){this.scene.activeCamera.freezeProjectionMatrix(s.multiply(u.Matrix.FromArray(h)));this.map.getPitch()*(Math.PI/180);this.map.getBearing()*(Math.PI/180);this.scene.render(false);}else {let y=new d.Matrix4().makeRotationAxis(new d.Vector3(1,0,0),s.rotateX),v=new d.Matrix4().makeRotationAxis(new d.Vector3(0,1,0),s.rotateY),f=new d.Matrix4().makeRotationAxis(new d.Vector3(0,0,1),s.rotateZ),b=new d.Matrix4().fromArray(h),S=new d.Matrix4().makeTranslation(s.translateX,s.translateY,s.translateZ).scale(new d.Vector3(s.scale,-s.scale,s.scale)).multiply(y).multiply(v).multiply(f);this.camera.projectionMatrix=b.multiply(S),this.renderer.resetState(),this.renderer.render(this.scene,this.camera);}e.onRender&&e.onRender(M,h),t.map.triggerRepaint();}},e.beforeId);}),onCleanup(()=>{t.map.getLayer(e.id)&&t.map.removeLayer(e.id);}),createComponent(Te.Provider,{value:n,get children(){return memo(()=>!!n())()&&e.children}})};var Zt=e=>{let[t]=a();return createEffect(()=>{t.isMapLibre?t.map.setSky?.(e.style||{}):t.map.setFog(e.style||{});}),onCleanup(()=>{t.isMapLibre?t.map.getSky?.()&&t.map.setSky(null):t.map.getFog()&&t.map.setFog(null);}),null};var Bt=e=>{let[t]=a(),n=U();return !n&&!e?.source&&(n=createUniqueId(),t.map.addSource(n,{type:"raster-dem",url:t.isMapLibre?"https://demotiles.maplibre.org/terrain-tiles/tiles.json":"mapbox://mapbox.terrain-rgb",tileSize:t.isMapLibre?256:512,maxzoom:t.isMapLibre?void 0:14}),t.map.sourceIdList.push(n)),createEffect(()=>{t.map.setTerrain({exaggeration:e.exaggeration||1,source:e?.source||n});}),onCleanup(()=>t.map?.setTerrain(null)),null};var H=(e,t)=>{let[n]=a();createEffect(()=>{let o=e(),r=t?.();o&&(n.map.hasControl(o)&&n.map.removeControl(o),n.map.addControl(o,r));}),onCleanup(()=>{let o=e();o&&n.map.hasControl(o)&&n.map.removeControl(o);});};var Jt=e=>{let[t]=a(),[n,o]=splitProps(e,["position"]),[r,a$1]=createSignal(null),i=new Map([["navigation",t.mapLib.NavigationControl],["scale",t.mapLib.ScaleControl],["attribution",t.mapLib.AttributionControl],["geolocate",t.mapLib.GeolocateControl],["fullscreen",t.mapLib.FullscreenControl],["logo",t.mapLib.LogoControl],["terrain",t.mapLib.TerrainControl]]);return createEffect(()=>{untrack(()=>r()&&t.map.hasControl(r())&&t.map.removeControl(r())),a$1(o.custom||new(i.get(o.type||"navigation"))(o.options));}),H(r,()=>n.position),null};var nn=e=>{if(!e.lngLat)throw new Error("Marker - lngLat is required");let[t,n,o]=splitProps(e,["lngLat","children","showPopup","draggable"],["popup","onOpen","onClose"]),[r]=a(),a$1=null,i=null,c=t.lngLat;return createEffect(()=>{r.map&&(i?.remove(),i=new r.mapLib.Popup({closeOnClick:false,focusAfterOpen:false,...n.popup}).on("open",()=>n.onOpen?.()).on("close",()=>n.onClose?.()),createEffect(()=>{t.children!==void 0&&(typeof t.children=="string"?i?.setHTML(t.children):i?.setDOMContent(t.children),a$1?.setPopup(i));}),createEffect(()=>t.showPopup!==i?.isOpen()&&a$1?.togglePopup()));}),createEffect(()=>{r.map&&(a$1?.remove(),a$1=new r.mapLib.Marker(o.options).on("dragstart",()=>o.onDragStart?.()).on("dragend",()=>o.onDragEnd?.()).on("drag",()=>o.onDrag?.(a$1?.getLngLat().toArray())).setPopup(i).setLngLat(c).addTo(r.map),createEffect(()=>t.showPopup!==i?.isOpen()&&a$1?.togglePopup()));}),createEffect(()=>a$1?.setLngLat(t.lngLat)),createEffect(()=>a$1?.setDraggable(t.draggable)),onCleanup(()=>a$1?.remove()),null};var an=e=>{if(!e.trackPointer&&!e.lngLat)throw new Error("Popup - lngLat or trackPointer is required");let[t,n]=splitProps(e,["lngLat","children","trackPointer"]),[o]=a(),r;return createEffect(()=>{o.map&&(r?.remove(),r=new o.mapLib.Popup({closeOnClick:false,focusAfterOpen:false,...n.options}).on("open",()=>n.onOpen?.()).on("close",()=>n.onClose?.()).addTo(o.map),createEffect(()=>t.trackPointer?r.trackPointer():r.setLngLat(t.lngLat)),createEffect(()=>typeof t.children=="string"?r.setHTML(t.children):r.setDOMContent(t.children)));}),onCleanup(()=>r?.remove()),null};var de=new Float64Array(256);for(let e=0;e<256;e++){let t=.5-Math.pow(e/255,.45454545454545453);de[e]=t*Math.abs(t);}de[255]=-1e20;function $e(e,t,n,o,r,a,i){a[0]=0,i[0]=-1e20,i[1]=1e20,r[0]=e[t];for(let c=1,l=0,s=0;c<o;c++){r[c]=e[t+c*n];let u=c*c;do{let d=a[l];s=(r[c]-r[d]+u-d*d)/(c-d)/2;}while(s<=i[l]&&--l>-1);l++,a[l]=c,i[l]=s,i[l+1]=1e20;}for(let c=0,l=0;c<o;c++){for(;i[l+1]<c;)l++;let s=a[l],u=c-s;e[t+c*n]=r[s]+u*u;}}function Ae(e,t,n,o,r,a){for(let i=0;i<t;i++)$e(e,i,t,n,o,r,a);for(let i=0;i<n;i++)$e(e,i*t,1,t,o,r,a);}var ue=({radius:e=8}={})=>Math.ceil(e);function Q(e,{radius:t=8,cutoff:n=.25}={}){let{width:o,height:r}=e,a=o*r,i=new Float64Array(a).fill(1e20),c=new Float64Array(a),l=Math.max(o,r),s=new Float64Array(l),u=new Uint16Array(l),d=new Float64Array(l+1),M=e.data;for(let f=0,b=3;f<a;f++,b+=4){let S=M[b];if(S===0)continue;let E=de[S];i[f]=Math.max(0,E),c[f]=Math.max(0,-E);}Ae(i,o,r,s,u,d),Ae(c,o,r,s,u,d);let h=255/t,y=255*(1-n),v=new Uint8ClampedArray(a*4);for(let f=0,b=0;f<a;f++,b+=4){let S=Math.sqrt(i[f])-Math.sqrt(c[f]),E=Math.max(0,Math.min(255,Math.round(y-h*S)));v[b]=v[b+1]=v[b+2]=255,v[b+3]=E;}return {width:o,height:r,data:v}}var me={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:true},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:true},grid:{size:20,path:"M10 0V20M0 10H20"},brick:{size:40,path:"M0 0H40M0 20H40M0 40H40M0 0V20M20 0V20M40 0V20M10 20V40M30 20V40"},wave:{size:20,path:"M0 5Q5 0 10 5T20 5M0 15Q5 10 10 15T20 15"}},Fe=Object.keys(me),P=e=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" stroke-linecap="round" stroke-linejoin="round">
|
|
7
7
|
<path d="${e}" fill="#000" stroke="#000" stroke-width="3"/>
|
|
8
|
-
</svg>`,me={square:E("M3,3 L21,3 L21,21 L3,21 Z"),circle:E("M 12 4 A 1 1 0 0 0 12 20 A 1 1 0 0 0 12 4 Z"),triangle:E("M 12 2 L 22 19 H 2 Z"),diamond:E("M 12 1 L 19 12 L 12 23 L 5 12 Z"),pentagon:E("M12,3 L21,9 L17,19 L7,19 L3,9 Z"),hexagon:E("M12,3 L20,7.5 L20,16.5 L12,21 L4,16.5 L4,7.5 Z"),octagon:E("M 8 3 Q 12 3.3 16 3 Q 18.3 5.7 21 8 Q 20.7 12 21 16 Q 18.3 18.3 16 21 Q 12 20.7 8 21 Q 5.8 18.2 3 16 Q 3.3 12 3 8 Q 5.7 5.7 8 3 Z"),cross:E("M 10.5 3 h 3 v 7.5 h 7.5 v 3 h -7.5 v 7.5 h -3 v -7.5 h -7.5 v -3 h 7.5 Z"),x:E("M 18 4 L 20 6 L 14 12 L 20 18 L 18 20 L 12 14 L 6 20 L 4 18 L 10 12 L 4 6 L 6 4 L 12 10 Z"),star:E("M12,3 L14,9 L20.5,9 L15.5,13 L17.5,19.5 L12,15.5 L6.5,19.5 L8.5,13 L3.5,9 L10,9 Z"),heart:E("M 12 21 L 3 11 A 4.5 4.5 0 1 1 11 8 L 13 8 A 4.5 4.5 0 1 1 21 11 Z"),pin:E("M 12 21 L 7 11 A 6 6 0 0 1 12 2 A 6 6 0 0 1 17 11 Z"),drop:E("M 4 21 V 12 A 7.5 7.5 0 0 1 12 4 A 7.5 7.5 0 0 1 13 21 Z"),chevron:E("M 8 4 L 14 12 L 8 20 H 5 L 11 12 L 5 4 Z")},Ae=Object.keys(me),De=e=>E(e);var dn=e=>{let[t]=a(),[n,o]=createSignal({width:0,height:0}),r=null,i=(s,g)=>{t.map.debug&&console.debug("%c[MapGL]","color: #10b981",s,g||"");},a$1=()=>{!r||!t.map||t.map.hasImage(e.id)||(t.map.addImage(e.id,r.data,r.ops),i("Re-Add Image:",e.id));};t.map.on("style.load",a$1),onCleanup(()=>{t.map?.off("style.load",a$1),t.map?.hasImage(e.id)&&t.map?.removeImage(e.id),i("Remove Image:",e.id);}),createEffect(()=>{if(!e.id)throw new Error("Image - ID is required");if(!e.source&&!e.pattern&&!e.symbol)throw new Error("Image - Image, Pattern or Symbol is required");let s=Math.max(1,Math.round(window.devicePixelRatio||2)),g=e.pattern?{pixelRatio:s,...e.options}:e.sdf?{...e.options,sdf:true}:e.options,m=e.symbol&&(me[e.symbol]||(e.symbol.trimStart().startsWith("<svg")?e.symbol:De(e.symbol)));l(e.source||m||c(e.pattern,s),(M,f)=>{let h=f?{...g,pixelRatio:f}:g,{width:v,height:y}=M;t.map&&!t.map.hasImage(e.id)&&t.map.addImage(e.id,M,h),!e.pattern&&untrack(()=>v===n().width&&y===n().height)?(t.map.updateImage(e.id,M),t.map.triggerRepaint()):(t.map.removeImage(e.id),t.map.addImage(e.id,M,h)),o({width:v,height:y}),r={data:M,ops:h},i("Add Image:",e.id);});});let l=(s,g)=>{let m=e.sdf?typeof e.sdf=="object"?e.sdf:{}:null;if(typeof s=="string"&&s?.trimStart().startsWith("<svg")&&(s=new DOMParser().parseFromString(s,"image/svg+xml").childNodes[0]),s instanceof SVGElement&&(e.options?.fill&&s.setAttribute("fill",e.options.fill),e.options?.stroke&&s.setAttribute("stroke",e.options.stroke),s=new XMLSerializer().serializeToString(s)),typeof s!="string")return g(s);t.map.loadImage(s,async(M,f)=>{if(M){typeof s=="string"&&s?.trimEnd().endsWith(".svg")&&(s=await(await fetch(s)).text(),s=new DOMParser().parseFromString(s,"image/svg+xml").childNodes[0],s.setAttribute("fill",e.options.fill),s.setAttribute("stroke",e.options.stroke),s.setAttribute("transform",e.options.transform),s=new XMLSerializer().serializeToString(s));let h=new Image;h.crossOrigin="Anonymous",h.onload=()=>{let v=Math.min(h.width,h.height),y=v>0?Math.max(1,50/v):1,b=e.options?.pixelRatio??Math.max(1,Math.round(window.devicePixelRatio||1)),S=y*b,k=m?de(m)*S:0,d=Math.round(h.width*S),p=Math.round(h.height*S),u=document.createElement("canvas");u.width=d+k*2,u.height=p+k*2;let x=u.getContext("2d");x.imageSmoothingEnabled=true,x.drawImage(h,k,k,d,p);let P=x.getImageData(0,0,u.width,u.height);return g(m?H(P,m):P,S)},h.onerror=v=>console.error(`[MapGL] Image "${e.id}" failed to load:`,v),h.src=s.trimStart().startsWith("<svg")?"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(s):s;}else {if(!m)return g(f);let{width:h,height:v}=f,y=de(m),b=document.createElement("canvas");b.width=h+y*2,b.height=v+y*2;let S=b.getContext("2d");S.imageSmoothingEnabled=true,"data"in f?S.putImageData(f,y,y):S.drawImage(f,y,y,h,v);let k=S.getImageData(0,0,b.width,b.height);return g(H(k,m))}});},c=(s,g=2)=>{let m=ue[s.type],M=m.size*g;return {width:M,height:M,data:new Uint8Array(M*M*4),onAdd:function(){let f=document.createElement("canvas");f.width=f.height=M,this.ctx=f.getContext("2d",{willReadFrequently:true}),this.ctx.scale(g,g);},render:function(){return this.ctx.fillStyle=s.background||"transparent",this.ctx.fillRect(0,0,m.size,m.size),this.ctx.strokeStyle=this.ctx.fillStyle=s.color||"black",this.ctx.lineWidth=s.lineWidth||1,this.ctx.stroke(new Path2D(m.path)),m.fill&&this.ctx.fill(new Path2D(m.path)),this.data=this.ctx.getImageData(0,0,this.width,this.height).data,true}}};return null};var pn=(e,t,n)=>e.map((o,r)=>(1-n)*e[r]+n*t[r]),gn=(e,t,n)=>{let o=e.map((i,a)=>e[a]*t[a]).reduce((i,a)=>i+a),r=Math.acos(o);return e.map((i,a)=>Math.sin((1-n)*r)/Math.sin(r)*e[a]+Math.sin(n*r)/Math.sin(r)*t[a])},fn={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},hn=e=>{let[t]=a(),n=.1,o=false,[r,i]=createSignal(false);["mousedown","touchstart","wheel"].forEach(f=>t.map.on(f,h=>!h.rotate&&i(true))),["moveend","mouseup","touchend"].forEach(f=>t.map.on(f,h=>!h.rotate&&i(false)));let a$1=async([f,h,v],y)=>{let b=t.map.getFreeCameraOptions();b.position=t.mapLib.MercatorCoordinate.fromLngLat([f,h],v),b.lookAtPoint(y),t.map.setFreeCameraOptions(b);},l=()=>{e.translate&&window.requestAnimationFrame(l);let f=[e.translate.start,e.translate.end,e.translate.easing?fn[e.translate.easing](n):n],h=e.translate.type==="line"?pn(...f):gn(...f);a$1(h,e.translate.target),!e.translate.loop&&(n>1||n<0)&&(o=!o),n=o?n-.001:n+.001;};createEffect(()=>{e.translate&&window.requestAnimationFrame(l);});let c={duration:1e3,easing:f=>f},s=()=>{if(r())return;let{secPerRev:f=120,maxSpinZoom:h=5,slowSpinZoom:v=3}=e.rotateGlobe,y=t.map.getZoom();if(y>h)return;let b=360/f;y>v&&(b*=(h-y)/(h-v));let S=t.map.getCenter();S.lng=e.reverse?S.lng+b:S.lng-b,t.map.easeTo({center:S,...c},{rotate:true});},g=()=>{if(!e.rotateViewport||r()){t.map.stop();return}let f=e.rotateViewport,h=f?.secPerRev||60,v=e.reverse?t.map.getBearing()+360/h:t.map.getBearing()-360/h,y=f?.pitch||60,b=f?.around;t.map.easeTo({bearing:v,pitch:y,around:b,...c},{rotate:true});},m=()=>e.rotateGlobe?s():g();t.map.on("moveend",m).on("dragend",m);let M;return createEffect(()=>{e.rotateGlobe!=null&&(e.rotateGlobe?(M=t.map.getCenter(),s()):e.resetWhenStopped?t.map.stop().easeTo({center:M}):t.map.stop());}),createEffect(()=>{e.rotateViewport!=null&&(e.rotateViewport?g():e.resetWhenStopped?t.map.stop().resetNorthPitch():t.map.stop());}),onCleanup(()=>t.map.off("moveend",m).off("dragend",m)),e.children};var Mn=e=>{let[t]=a();return createEffect(()=>t.map.setLight(e.style||{})),onCleanup(()=>t.map?.setLight(null)),null};var j={};j.onSetup=function(e){var t={};return t.count=e.count||0,t};j.onClick=function(e,t){var n=this.newFeature({type:"Feature",properties:{count:e.count},geometry:{type:"Point",coordinates:[t.lngLat.lng,t.lngLat.lat]}});this.addFeature(n);};j.onKeyUp=function(e,t){if(t.keyCode===27)return this.changeMode("simple_select")};j.toDisplayFeatures=function(e,t,n){n(t);};var Fe=j;var bn=6371.0088,xn=1.609344,Oe=6378137;function I(e){return e*Math.PI/180}function Re(e){return e*180/Math.PI}function wn(e,t){let n=I(t[1]-e[1]),o=I(t[0]-e[0]),r=I(e[1]),i=I(t[1]),a=Math.sin(n/2)**2+Math.cos(r)*Math.cos(i)*Math.sin(o/2)**2;return bn*2*Math.asin(Math.sqrt(a))}function Z(e,t="kilometers"){let n=0;for(let o=1;o<e.length;o++)n+=wn(e[o-1],e[o]);return t==="miles"?n/xn:n}function ze(e,t){let n=I(e[1]),o=I(e[0]),r=I(t[1]),i=I(t[0]-e[0]),a=Math.cos(r)*Math.cos(i),l=Math.cos(r)*Math.sin(i),c=Math.atan2(Math.sin(n)+Math.sin(r),Math.sqrt((Math.cos(n)+a)**2+l**2)),s=o+Math.atan2(l,Math.cos(n)+a);return [Re(s),Re(c)]}function Ln(e){let t=e.length;if(t<=2)return 0;let n=0;for(let o=0;o<t;o++){let r,i,a;o===t-2?(r=t-2,i=t-1,a=0):o===t-1?(r=t-1,i=0,a=1):(r=o,i=o+1,a=o+2),n+=(I(e[a][0])-I(e[r][0]))*Math.sin(I(e[i][1]));}return n*Oe*Oe/2}function Ve(e){return e.reduce((t,n,o)=>{let r=Math.abs(Ln(n));return o===0?t+r:t-r},0)}function Ue(e){let t=e[0],n=0,o=0;for(let[c,s]of t)n+=c,o+=s;n/=t.length,o/=t.length;let r=0,i=0,a=0;for(let c=0;c<t.length-1;c++){let s=t[c][0]-n,g=t[c][1]-o,m=t[c+1][0]-n,M=t[c+1][1]-o,f=s*M-m*g;r+=(s+m)*f,i+=(g+M)*f,a+=f;}if(a===0)return [n,o];let l=1/(3*a);return [n+r*l,o+i*l]}var je=e=>new Intl.NumberFormat(void 0,{maximumFractionDigits:5}).format(e[0])+"\xB0 "+new Intl.NumberFormat(void 0,{maximumFractionDigits:5}).format(e[1])+"\xB0",$=(e,t)=>{let n=Z(e,window.navigator.language==="en-US"?"miles":"kilometers");return {type:"Feature",properties:{type:"measure",value:window.navigator.language==="en-US"?new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=1?"foot":"mile"}).format(n<=1?n*5280:n):new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=1?"meter":"kilometer"}).format(n<=1?n*1e3:n),...t},geometry:{type:"Point",coordinates:ze(e[0],e[1])}}},Q=(e,t)=>{let n=Ve(e);return {type:"Feature",properties:{type:"measure",value:window.navigator.language==="en-US"?new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=10.764?"foot":"mile"}).format(n<=10.764?n*10.764:n*1.0000003861)+"\xB2":new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=1e6?"meter":"kilometer"}).format(n<=1e6?n:n/1e6)+"\xB2",...t},geometry:{type:"Point",coordinates:Ue(e)}}};var Ze=e=>{let t=e.modes.draw_line_string;return {...t,onSetup:function(){let n=t.onSetup.call(this),o=this.newFeature({type:"Feature",properties:{type:"measure",value:"TTT"},geometry:{type:"Point",coordinates:[]}});return {...n,measure:o}},onMouseMove:function(n,o){if(t.onMouseMove.call(this,n,o),n.line.coordinates.length>=2){let r=$(n.line.coordinates);n.measure.properties.value=r.properties.value,n.measure.updateCoordinate("",r.geometry.coordinates[0],r.geometry.coordinates[1]);}},toDisplayFeatures:function(n,o,r){t.toDisplayFeatures.call(this,n,o,r),this.drawConfig.userProperties.showLength&&r(n.measure.toGeoJSON());}}};var Ne=e=>{let t=e.modes.draw_point;return {...t,onSetup:function(){let n=t.onSetup.call(this);return n.point.properties={...n.point.properties,type:"measure",anchor:"bottom"},n},onMouseMove:function(n,{lngLat:o}){n.point.properties.value=je([o.lng,o.lat]),n.point.updateCoordinate("",o.lng,o.lat);},toDisplayFeatures:function(n,o,r){let i=o.properties.id===n.point.id;return o.properties.active=i?"":"false",r(o)}}};var qe=e=>{let t=e.modes.draw_polygon;return {...t,toDisplayFeatures:function(n,o,r){let i=a=>{if(r(a),this.drawConfig.userProperties.showLength){let l=Array.isArray(a.geometry.coordinates[0][0])?a.geometry.coordinates[0]:a.geometry.coordinates;l.forEach((c,s)=>{!Array.isArray(c)||s==0||r($([l[s-1],c]));});}this.drawConfig.userProperties.showArea&&a.geometry.coordinates[0].length>=3&&r(Q([a.geometry.coordinates[0]]));};t.toDisplayFeatures.call(this,n,o,i);}}};function Cn(e,t,n,o){return {type:"Feature",properties:{meta:"vertex",parent:e,coord_path:n,active:o?"true":"false"},geometry:{type:"Point",coordinates:t}}}function Sn(e,t,n,o=64){let r=[],i=t/(111.32*Math.cos(e[1]*Math.PI/180)),a=t/110.574;for(let l=0;l<o;l+=1){let c=l/o*(2*Math.PI),s=i*Math.cos(c),g=a*Math.sin(c);r.push([e[0]+s,e[1]+g]);}return r.push(r[0]),{type:"Feature",geometry:{type:"Polygon",coordinates:[r]},properties:{parent:n,active:"true"}}}var Pn={enable:e=>{setTimeout(()=>{!e.map||!e.map.doubleClickZoom||!e._ctx||!e._ctx.store||!e._ctx.store.getInitialConfigValue||e._ctx.store.getInitialConfigValue("doubleClickZoom")&&e.map.doubleClickZoom.enable();},0);}},En=e=>({...e.modes.draw_line_string,clickAnywhere:function(t,n){return t.currentVertexPosition===1?(t.line.addCoordinate(0,n.lngLat.lng,n.lngLat.lat),this.changeMode("simple_select",{featureIds:[t.line.id]})):(this.updateUIClasses({mouse:"add"}),t.line.updateCoordinate(t.currentVertexPosition,n.lngLat.lng,n.lngLat.lat),t.direction==="forward"?(t.currentVertexPosition+=1,t.line.updateCoordinate(t.currentVertexPosition,n.lngLat.lng,n.lngLat.lat)):t.line.addCoordinate(0,n.lngLat.lng,n.lngLat.lat),null)},onStop:function(t){if(Pn.enable(this),this.activateUIButton(),this.getFeature(t.line.id)!==void 0)if(t.line.removeCoordinate("0"),t.line.isValid()){let n=t.line.toGeoJSON(),o=(Z(n.geometry.coordinates)*1e3).toFixed(1),r=n.geometry.coordinates[0];this.deleteFeature([t.line.id],{silent:true});let i=this.newFeature({type:"Feature",properties:{radius:o},geometry:{type:"Point",coordinates:r}});this.addFeature(i),this.map.fire("draw.create",{features:[i.toGeoJSON()]}),this.changeMode("simple_select",{featureIds:[i.id]});}else this.deleteFeature([t.line.id],{silent:true}),this.changeMode("simple_select",{},{silent:true});},toDisplayFeatures:function(t,n,o){let r=n.properties.id===t.line.id;return n.properties.active=r?"true":"false",r?(n.geometry.coordinates.length<2||(n.properties.meta="feature",o(Cn(t.line.id,n.geometry.coordinates[t.direction==="forward"?n.geometry.coordinates.length-2:1],`${t.direction==="forward"?n.geometry.coordinates.length-2:1}`,false)),o(n),o($(n.geometry.coordinates,{parent:t.line.id})),o(Sn(n.geometry.coordinates[0],Z(n.geometry.coordinates),t.line.id))),null):o(n)}}),Ge=En;var kn=e=>({...e.modes.draw_line_string,onSetup:function(t){let n=e.modes.draw_line_string.onSetup.call(this,t),o=this.newFeature({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[]]}});return this.addFeature(o),{...n,...t,rectangle:o}},onTap:function(t,n){t.startPoint&&this.onMouseMove(t,n),this.onClick(t,n);},onClick:function(t,n){t.startPoint&&t.startPoint[0]!==n.lngLat.lng&&t.startPoint[1]!==n.lngLat.lat?(this.updateUIClasses({mouse:"pointer"}),t.endPoint=[n.lngLat.lng,n.lngLat.lat],this.changeMode("simple_select",{featuresId:t.rectangle.id})):t.startPoint=[n.lngLat.lng,n.lngLat.lat];},onMouseMove:function(t,n){t.startPoint&&(t.rectangle.updateCoordinate("0.0",t.startPoint[0],t.startPoint[1]),t.rectangle.updateCoordinate("0.1",n.lngLat.lng,t.startPoint[1]),t.rectangle.updateCoordinate("0.2",n.lngLat.lng,n.lngLat.lat),t.rectangle.updateCoordinate("0.3",t.startPoint[0],n.lngLat.lat),t.rectangle.updateCoordinate("0.4",t.startPoint[0],t.startPoint[1]));},onKeyUp:function(t,n){if(n.keyCode===27)return this.changeMode("simple_select")},onStop:function(t){e.modes.draw_line_string.onStop.call(this,t),this.getFeature(t.rectangle.id)!==void 0&&(t.rectangle.removeCoordinate("0.4"),t.rectangle.isValid()?this.map.fire("draw.create",{features:[t.rectangle.toGeoJSON()]}):(this.deleteFeature([t.rectangle.id],{silent:true}),this.changeMode("simple_select",{},{silent:true})));},toDisplayFeatures:function(t,n,o){let r=n.properties.id===t.rectangle.id;if(n.properties.active=r?"true":"false",!r)return o(n);if(t.startPoint)return o(n),this.drawConfig.userProperties.showLength&&(o($([n.geometry.coordinates[0][0],n.geometry.coordinates[0][1]],{parent:t.rectangle.id,anchor:"bottom"})),o($([n.geometry.coordinates[0][1],n.geometry.coordinates[0][2]],{parent:t.rectangle.id,anchor:"left"}))),this.drawConfig.userProperties.showArea&&o(Q(n.geometry.coordinates,{parent:t.rectangle.id})),null},onTrash:function(t){this.deleteFeature([t.rectangle.id],{silent:true}),this.changeMode("simple_select");}}),Be=kn;var Ye={enable:e=>{setTimeout(()=>{!e.map||!e.map.doubleClickZoom||!e._ctx||!e._ctx.store||!e._ctx.store.getInitialConfigValue||e._ctx.store.getInitialConfigValue("doubleClickZoom")&&e.map.doubleClickZoom.enable();},0);},disable(e){setTimeout(()=>{!e.map||!e.map.doubleClickZoom||e.map.doubleClickZoom.disable();},0);}},_n={onSetup:function(e){let t=this.newFeature({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[]]}});return this.addFeature(t),this.clearSelectedFeatures(),Ye.disable(this),this.updateUIClasses({mouse:"add"}),this.setActionableState({trash:true}),{rectangle:t,currentVertexPosition:0}},onTap:function(e,t){this.onClick(e,t);},onClick:function(e,t){if(e.currentVertexPosition===2){let n=this.calculatepXY3(e,t,false);return n&&e.rectangle.updateCoordinate(`0.${e.currentVertexPosition+1}`,n[0],n[1]),this.updateUIClasses({mouse:"pointer"}),this.changeMode("simple_select",{featuresId:e.rectangle.id})}else e.rectangle.updateCoordinate(`0.${e.currentVertexPosition}`,t.lngLat.lng,t.lngLat.lat),e.currentVertexPosition++,e.rectangle.updateCoordinate(`0.${e.currentVertexPosition}`,t.lngLat.lng,t.lngLat.lat);},onMouseMove:function(e,t){if(e.rectangle.updateCoordinate("0."+e.currentVertexPosition,t.lngLat.lng,t.lngLat.lat),e.currentVertexPosition&&e.currentVertexPosition>0&&this.calculateOrientedAnglePolygon(e),e.currentVertexPosition===2){let n=this.calculatepXY3(e,t,true);n&&e.rectangle.updateCoordinate("0."+(e.currentVertexPosition+1),n[0],n[1]);}},deegrees2meters(e){let t=e[0]*2003750834e-2/180,n=Math.log(Math.tan((90+e[1])*Math.PI/360))/(Math.PI/180);return n=n*2003750834e-2/180,[t,n]},meters2degress(e){let t=e[0]*180/2003750834e-2,n=Math.atan(Math.exp(e[1]*Math.PI/2003750834e-2))*360/Math.PI-90;return [t,n]},calculateOrientedAnglePolygon:function(e){let t=e.rectangle.getCoordinate("0.0"),n=this.deegrees2meters(t),o=e.rectangle.getCoordinate("0.1"),r=this.deegrees2meters(o),a=-1*(Math.atan2(r[1]-n[1],r[0]-n[0])*180/Math.PI+90),l=a<0?a+360:a;e.angle=parseFloat(l.toFixed(2));},calculatepXY3:function(e,t,n){let o=e.rectangle.getCoordinate("0.0"),r=this.deegrees2meters(o),i=e.rectangle.getCoordinate("0.1"),a=this.deegrees2meters(i),l=this.deegrees2meters([t.lngLat.lng,t.lngLat.lat]),c=this.deegrees2meters([t.lngLat.lng,t.lngLat.lat]);if(r[0]===a[0])l=[c[0],a[1]];else if(r[1]===a[1])l=[a[0],c[1]];else {let h=-1/((a[1]-r[1])/(a[0]-r[0]));Math.abs(h)<1?l[1]=h*(c[0]-a[0])+a[1]:l[0]=a[0]+(l[1]-a[1])/h;}let s=[a[0]-r[0],a[1]-r[1]],g=[l[0]-s[0],l[1]-s[1]],m=this.meters2degress(l),M=this.meters2degress(g);return e.rectangle.updateCoordinate("0.2",m[0],m[1]),e.rectangle.updateCoordinate("0.3",M[0],M[1]),M},onKeyUp:function(e,t){if(t.keyCode===27)return this.changeMode("simple_select")},onStop:function(e){Ye.enable(this),this.updateUIClasses({mouse:"none"}),this.activateUIButton(),this.getFeature(e.rectangle.id)!==void 0&&(e.rectangle.removeCoordinate("0.4"),e.rectangle.isValid()?this.map.fire("draw.create",{features:[e.rectangle.toGeoJSON()]}):(this.deleteFeature([e.rectangle.id],{silent:true}),this.changeMode("simple_select",{},{silent:true})));},toDisplayFeatures:function(e,t,n){let o=t.properties.id===e.rectangle.id;if(t.properties.active=o?"true":"false",t.properties.angle=e.angle,t.angle=e.angle,!o)return n(t);let r=t.geometry.coordinates[0].length;if(r<3){let i=t.geometry.coordinates[0][0],a={type:"Feature",properties:t.properties,angle:e.angle,geometry:{coordinates:t.geometry.coordinates[0][0],type:"Point"}};i&&n(a);return}if(r>=3&&r<=4){let i=[[t.geometry.coordinates[0][0][0],t.geometry.coordinates[0][0][1]],[t.geometry.coordinates[0][1][0],t.geometry.coordinates[0][1][1]]];if(n({type:"Feature",properties:t.properties,angle:e.angle,geometry:{coordinates:i,type:"LineString"}}),r===3)return}return n(t)},onTrash:function(e){this.deleteFeature([e.rectangle.id],{silent:true}),this.changeMode("simple_select");}},Xe=_n;var We=[{id:"measure-label",type:"symbol",filter:["all",["==","$type","Point"],["==","user_type","measure"]],layout:{"text-field":["get","user_value"],"text-anchor":["get","user_anchor"],"text-offset":["match",["get","user_anchor"],"bottom",[0,-0.5],[0,0]],"text-size":12,"text-allow-overlap":true,"text-ignore-placement":true},paint:{"text-halo-color":"rgba(255,255,255,0.75)","text-halo-width":2,"text-halo-blur":1,"text-color":"#000"}}];var Tn=e=>{let[t]=a();t.isMapLibre&&e.lib.constants?.classes&&Object.assign(e.lib.constants.classes,{CANVAS:"maplibregl-canvas",CONTROL_BASE:"maplibregl-ctrl",CONTROL_PREFIX:"maplibregl-ctrl-",CONTROL_GROUP:"maplibregl-ctrl-group",ATTRIBUTION:"maplibregl-ctrl-attrib"});let n=new e.lib({styles:[...e.lib.lib.theme,...We],modes:{...e.lib.modes,draw_point:Ne(e.lib),draw_line_string:Ze(e.lib),draw_polygon:qe(e.lib),multi_point:Fe,radius:Ge(e.lib),rectangle:Be(e.lib),rectangle_assisted:Xe},userProperties:{showLength:e.showLength||false,showArea:e.showArea||false},...e.options});t.map.addControl(n,e.position||"top-right"),e.getInstance&&e.getInstance(n);let o={};return ye.forEach(r=>{if(e[r]){let i=`draw.${r.slice(2).toLowerCase()}`,a=l=>e[r](l);o[i]=a,t.map.on(i,a);}}),onCleanup(()=>{Object.keys(o).forEach(r=>t.map.off(r,o[r])),t.map?.removeControl(n);}),null};var An=e=>{let[t]=a(),n;return W(()=>(n||(n=new e.overlay(e.props||{})),n)),createEffect(()=>n?.setProps(e.props||{})),null};
|
|
8
|
+
</svg>`,pe={square:P("M3,3 L21,3 L21,21 L3,21 Z"),circle:P("M 12 4 A 1 1 0 0 0 12 20 A 1 1 0 0 0 12 4 Z"),triangle:P("M 12 2 L 22 19 H 2 Z"),diamond:P("M 12 1 L 19 12 L 12 23 L 5 12 Z"),pentagon:P("M12,3 L21,9 L17,19 L7,19 L3,9 Z"),hexagon:P("M12,3 L20,7.5 L20,16.5 L12,21 L4,16.5 L4,7.5 Z"),octagon:P("M 8 3 Q 12 3.3 16 3 Q 18.3 5.7 21 8 Q 20.7 12 21 16 Q 18.3 18.3 16 21 Q 12 20.7 8 21 Q 5.8 18.2 3 16 Q 3.3 12 3 8 Q 5.7 5.7 8 3 Z"),cross:P("M 10.5 3 h 3 v 7.5 h 7.5 v 3 h -7.5 v 7.5 h -3 v -7.5 h -7.5 v -3 h 7.5 Z"),x:P("M 18 4 L 20 6 L 14 12 L 20 18 L 18 20 L 12 14 L 6 20 L 4 18 L 10 12 L 4 6 L 6 4 L 12 10 Z"),star:P("M12,3 L14,9 L20.5,9 L15.5,13 L17.5,19.5 L12,15.5 L6.5,19.5 L8.5,13 L3.5,9 L10,9 Z"),heart:P("M 12 21 L 3 11 A 4.5 4.5 0 1 1 11 8 L 13 8 A 4.5 4.5 0 1 1 21 11 Z"),pin:P("M 12 21 L 7 11 A 6 6 0 0 1 12 2 A 6 6 0 0 1 17 11 Z"),drop:P("M 4 21 V 12 A 7.5 7.5 0 0 1 12 4 A 7.5 7.5 0 0 1 13 21 Z"),chevron:P("M 8 4 L 14 12 L 8 20 H 5 L 11 12 L 5 4 Z")},De=Object.keys(pe),Oe=e=>P(e);var un=e=>{let[t]=a(),[n,o]=createSignal({width:0,height:0}),r=null,a$1=(s,u)=>{t.map.debug&&console.debug("%c[MapGL]","color: #10b981",s,u||"");},i=()=>{!r||!t.map||t.map.hasImage(e.id)||(t.map.addImage(e.id,r.data,r.ops),a$1("Re-Add Image:",e.id));};t.map.on("style.load",i),onCleanup(()=>{t.map?.off("style.load",i),t.map?.hasImage(e.id)&&t.map?.removeImage(e.id),a$1("Remove Image:",e.id);}),createEffect(()=>{if(!e.id)throw new Error("Image - ID is required");if(!e.source&&!e.pattern&&!e.symbol)throw new Error("Image - Image, Pattern or Symbol is required");let s=Math.max(1,Math.round(window.devicePixelRatio||2)),u=e.pattern?{pixelRatio:s,...e.options}:e.sdf?{...e.options,sdf:true}:e.options,d=e.symbol&&(pe[e.symbol]||(e.symbol.trimStart().startsWith("<svg")?e.symbol:Oe(e.symbol)));c(e.source||d||l(e.pattern,s),(M,h)=>{let y=h?{...u,pixelRatio:h}:u,{width:v,height:f}=M;t.map&&!t.map.hasImage(e.id)&&t.map.addImage(e.id,M,y),!e.pattern&&untrack(()=>v===n().width&&f===n().height)?(t.map.updateImage(e.id,M),t.map.triggerRepaint()):(t.map.removeImage(e.id),t.map.addImage(e.id,M,y)),o({width:v,height:f}),r={data:M,ops:y},a$1("Add Image:",e.id);});});let c=(s,u)=>{let d=e.sdf?typeof e.sdf=="object"?e.sdf:{}:null;if(typeof s=="string"&&s?.trimStart().startsWith("<svg")&&(s=new DOMParser().parseFromString(s,"image/svg+xml").childNodes[0]),s instanceof SVGElement&&(e.options?.fill&&s.setAttribute("fill",e.options.fill),e.options?.stroke&&s.setAttribute("stroke",e.options.stroke),s=new XMLSerializer().serializeToString(s)),typeof s!="string")return u(s);t.map.loadImage(s,async(M,h)=>{if(M){typeof s=="string"&&s?.trimEnd().endsWith(".svg")&&(s=await(await fetch(s)).text(),s=new DOMParser().parseFromString(s,"image/svg+xml").childNodes[0],s.setAttribute("fill",e.options.fill),s.setAttribute("stroke",e.options.stroke),s.setAttribute("transform",e.options.transform),s=new XMLSerializer().serializeToString(s));let y=new Image;y.crossOrigin="Anonymous",y.onload=()=>{let v=Math.min(y.width,y.height),f=v>0?Math.max(1,50/v):1,b=e.options?.pixelRatio??Math.max(1,Math.round(window.devicePixelRatio||1)),S=f*b,E=d?ue(d)*S:0,_=Math.round(y.width*S),m=Math.round(y.height*S),p=document.createElement("canvas");p.width=_+E*2,p.height=m+E*2;let g=p.getContext("2d");g.imageSmoothingEnabled=true,g.drawImage(y,E,E,_,m);let x=g.getImageData(0,0,p.width,p.height);return u(d?Q(x,d):x,S)},y.onerror=v=>console.error(`[MapGL] Image "${e.id}" failed to load:`,v),y.src=s.trimStart().startsWith("<svg")?"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(s):s;}else {if(!d)return u(h);let{width:y,height:v}=h,f=ue(d),b=document.createElement("canvas");b.width=y+f*2,b.height=v+f*2;let S=b.getContext("2d");S.imageSmoothingEnabled=true,"data"in h?S.putImageData(h,f,f):S.drawImage(h,f,f,y,v);let E=S.getImageData(0,0,b.width,b.height);return u(Q(E,d))}});},l=(s,u=2)=>{let d=me[s.type],M=d.size*u;return {width:M,height:M,data:new Uint8Array(M*M*4),onAdd:function(){let h=document.createElement("canvas");h.width=h.height=M,this.ctx=h.getContext("2d",{willReadFrequently:true}),this.ctx.scale(u,u);},render:function(){return this.ctx.fillStyle=s.background||"transparent",this.ctx.fillRect(0,0,d.size,d.size),this.ctx.strokeStyle=this.ctx.fillStyle=s.color||"black",this.ctx.lineWidth=s.lineWidth||1,this.ctx.stroke(new Path2D(d.path)),d.fill&&this.ctx.fill(new Path2D(d.path)),this.data=this.ctx.getImageData(0,0,this.width,this.height).data,true}}};return null};var gn=(e,t,n)=>e.map((o,r)=>(1-n)*e[r]+n*t[r]),fn=(e,t,n)=>{let o=e.map((a,i)=>e[i]*t[i]).reduce((a,i)=>a+i),r=Math.acos(o);return e.map((a,i)=>Math.sin((1-n)*r)/Math.sin(r)*e[i]+Math.sin(n*r)/Math.sin(r)*t[i])},hn={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},yn=e=>{let[t]=a(),n=.1,o=false,[r,a$1]=createSignal(false);["mousedown","touchstart","wheel"].forEach(h=>t.map.on(h,y=>!y.rotate&&a$1(true))),["moveend","mouseup","touchend"].forEach(h=>t.map.on(h,y=>!y.rotate&&a$1(false)));let i=async([h,y,v],f)=>{let b=t.map.getFreeCameraOptions();b.position=t.mapLib.MercatorCoordinate.fromLngLat([h,y],v),b.lookAtPoint(f),t.map.setFreeCameraOptions(b);},c=()=>{e.translate&&window.requestAnimationFrame(c);let h=[e.translate.start,e.translate.end,e.translate.easing?hn[e.translate.easing](n):n],y=e.translate.type==="line"?gn(...h):fn(...h);i(y,e.translate.target),!e.translate.loop&&(n>1||n<0)&&(o=!o),n=o?n-.001:n+.001;};createEffect(()=>{e.translate&&window.requestAnimationFrame(c);});let l={duration:1e3,easing:h=>h},s=()=>{if(r())return;let{secPerRev:h=120,maxSpinZoom:y=5,slowSpinZoom:v=3}=e.rotateGlobe,f=t.map.getZoom();if(f>y)return;let b=360/h;f>v&&(b*=(y-f)/(y-v));let S=t.map.getCenter();S.lng=e.reverse?S.lng+b:S.lng-b,t.map.easeTo({center:S,...l},{rotate:true});},u=()=>{if(!e.rotateViewport||r()){t.map.stop();return}let h=e.rotateViewport,y=h?.secPerRev||60,v=e.reverse?t.map.getBearing()+360/y:t.map.getBearing()-360/y,f=h?.pitch||60,b=h?.around;t.map.easeTo({bearing:v,pitch:f,around:b,...l},{rotate:true});},d=()=>e.rotateGlobe?s():u();t.map.on("moveend",d).on("dragend",d);let M;return createEffect(()=>{e.rotateGlobe!=null&&(e.rotateGlobe?(M=t.map.getCenter(),s()):e.resetWhenStopped?t.map.stop().easeTo({center:M}):t.map.stop());}),createEffect(()=>{e.rotateViewport!=null&&(e.rotateViewport?u():e.resetWhenStopped?t.map.stop().resetNorthPitch():t.map.stop());}),onCleanup(()=>t.map.off("moveend",d).off("dragend",d)),e.children};var bn=e=>{let[t]=a();return createEffect(()=>t.map.setLight(e.style||{})),onCleanup(()=>t.map?.setLight(null)),null};var Z={};Z.onSetup=function(e){var t={};return t.count=e.count||0,t};Z.onClick=function(e,t){var n=this.newFeature({type:"Feature",properties:{count:e.count},geometry:{type:"Point",coordinates:[t.lngLat.lng,t.lngLat.lat]}});this.addFeature(n);};Z.onKeyUp=function(e,t){if(t.keyCode===27)return this.changeMode("simple_select")};Z.toDisplayFeatures=function(e,t,n){n(t);};var Re=Z;var xn=6371.0088,wn=1.609344,ze=6378137;function T(e){return e*Math.PI/180}function Ve(e){return e*180/Math.PI}function Ln(e,t){let n=T(t[1]-e[1]),o=T(t[0]-e[0]),r=T(e[1]),a=T(t[1]),i=Math.sin(n/2)**2+Math.cos(r)*Math.cos(a)*Math.sin(o/2)**2;return xn*2*Math.asin(Math.sqrt(i))}function N(e,t="kilometers"){let n=0;for(let o=1;o<e.length;o++)n+=Ln(e[o-1],e[o]);return t==="miles"?n/wn:n}function Ue(e,t){let n=T(e[1]),o=T(e[0]),r=T(t[1]),a=T(t[0]-e[0]),i=Math.cos(r)*Math.cos(a),c=Math.cos(r)*Math.sin(a),l=Math.atan2(Math.sin(n)+Math.sin(r),Math.sqrt((Math.cos(n)+i)**2+c**2)),s=o+Math.atan2(c,Math.cos(n)+i);return [Ve(s),Ve(l)]}function Cn(e){let t=e.length;if(t<=2)return 0;let n=0;for(let o=0;o<t;o++){let r,a,i;o===t-2?(r=t-2,a=t-1,i=0):o===t-1?(r=t-1,a=0,i=1):(r=o,a=o+1,i=o+2),n+=(T(e[i][0])-T(e[r][0]))*Math.sin(T(e[a][1]));}return n*ze*ze/2}function je(e){return e.reduce((t,n,o)=>{let r=Math.abs(Cn(n));return o===0?t+r:t-r},0)}function Ze(e){let t=e[0],n=0,o=0;for(let[l,s]of t)n+=l,o+=s;n/=t.length,o/=t.length;let r=0,a=0,i=0;for(let l=0;l<t.length-1;l++){let s=t[l][0]-n,u=t[l][1]-o,d=t[l+1][0]-n,M=t[l+1][1]-o,h=s*M-d*u;r+=(s+d)*h,a+=(u+M)*h,i+=h;}if(i===0)return [n,o];let c=1/(3*i);return [n+r*c,o+a*c]}var Ne=e=>new Intl.NumberFormat(void 0,{maximumFractionDigits:5}).format(e[0])+"\xB0 "+new Intl.NumberFormat(void 0,{maximumFractionDigits:5}).format(e[1])+"\xB0",A=(e,t)=>{let n=N(e,window.navigator.language==="en-US"?"miles":"kilometers");return {type:"Feature",properties:{type:"measure",value:window.navigator.language==="en-US"?new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=1?"foot":"mile"}).format(n<=1?n*5280:n):new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=1?"meter":"kilometer"}).format(n<=1?n*1e3:n),...t},geometry:{type:"Point",coordinates:Ue(e[0],e[1])}}},K=(e,t)=>{let n=je(e);return {type:"Feature",properties:{type:"measure",value:window.navigator.language==="en-US"?new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=10.764?"foot":"mile"}).format(n<=10.764?n*10.764:n*1.0000003861)+"\xB2":new Intl.NumberFormat(void 0,{style:"unit",maximumFractionDigits:2,unit:n<=1e6?"meter":"kilometer"}).format(n<=1e6?n:n/1e6)+"\xB2",...t},geometry:{type:"Point",coordinates:Ze(e)}}};var qe=e=>{let t=e.modes.draw_line_string;return {...t,onSetup:function(){let n=t.onSetup.call(this),o=this.newFeature({type:"Feature",properties:{type:"measure",value:"TTT"},geometry:{type:"Point",coordinates:[]}});return {...n,measure:o}},onMouseMove:function(n,o){if(t.onMouseMove.call(this,n,o),n.line.coordinates.length>=2){let r=A(n.line.coordinates);n.measure.properties.value=r.properties.value,n.measure.updateCoordinate("",r.geometry.coordinates[0],r.geometry.coordinates[1]);}},toDisplayFeatures:function(n,o,r){t.toDisplayFeatures.call(this,n,o,r),this.drawConfig.userProperties.showLength&&r(n.measure.toGeoJSON());}}};var Ge=e=>{let t=e.modes.draw_point;return {...t,onSetup:function(){let n=t.onSetup.call(this);return n.point.properties={...n.point.properties,type:"measure",anchor:"bottom"},n},onMouseMove:function(n,{lngLat:o}){n.point.properties.value=Ne([o.lng,o.lat]),n.point.updateCoordinate("",o.lng,o.lat);},toDisplayFeatures:function(n,o,r){let a=o.properties.id===n.point.id;return o.properties.active=a?"":"false",r(o)}}};var Be=e=>{let t=e.modes.draw_polygon;return {...t,toDisplayFeatures:function(n,o,r){let a=i=>{if(r(i),this.drawConfig.userProperties.showLength){let c=Array.isArray(i.geometry.coordinates[0][0])?i.geometry.coordinates[0]:i.geometry.coordinates;c.forEach((l,s)=>{!Array.isArray(l)||s==0||r(A([c[s-1],l]));});}this.drawConfig.userProperties.showArea&&i.geometry.coordinates[0].length>=3&&r(K([i.geometry.coordinates[0]]));};t.toDisplayFeatures.call(this,n,o,a);}}};function Sn(e,t,n,o){return {type:"Feature",properties:{meta:"vertex",parent:e,coord_path:n,active:o?"true":"false"},geometry:{type:"Point",coordinates:t}}}function Pn(e,t,n,o=64){let r=[],a=t/(111.32*Math.cos(e[1]*Math.PI/180)),i=t/110.574;for(let c=0;c<o;c+=1){let l=c/o*(2*Math.PI),s=a*Math.cos(l),u=i*Math.sin(l);r.push([e[0]+s,e[1]+u]);}return r.push(r[0]),{type:"Feature",geometry:{type:"Polygon",coordinates:[r]},properties:{parent:n,active:"true"}}}var En={enable:e=>{setTimeout(()=>{!e.map||!e.map.doubleClickZoom||!e._ctx||!e._ctx.store||!e._ctx.store.getInitialConfigValue||e._ctx.store.getInitialConfigValue("doubleClickZoom")&&e.map.doubleClickZoom.enable();},0);}},kn=e=>({...e.modes.draw_line_string,clickAnywhere:function(t,n){return t.currentVertexPosition===1?(t.line.addCoordinate(0,n.lngLat.lng,n.lngLat.lat),this.changeMode("simple_select",{featureIds:[t.line.id]})):(this.updateUIClasses({mouse:"add"}),t.line.updateCoordinate(t.currentVertexPosition,n.lngLat.lng,n.lngLat.lat),t.direction==="forward"?(t.currentVertexPosition+=1,t.line.updateCoordinate(t.currentVertexPosition,n.lngLat.lng,n.lngLat.lat)):t.line.addCoordinate(0,n.lngLat.lng,n.lngLat.lat),null)},onStop:function(t){if(En.enable(this),this.activateUIButton(),this.getFeature(t.line.id)!==void 0)if(t.line.removeCoordinate("0"),t.line.isValid()){let n=t.line.toGeoJSON(),o=(N(n.geometry.coordinates)*1e3).toFixed(1),r=n.geometry.coordinates[0];this.deleteFeature([t.line.id],{silent:true});let a=this.newFeature({type:"Feature",properties:{radius:o},geometry:{type:"Point",coordinates:r}});this.addFeature(a),this.map.fire("draw.create",{features:[a.toGeoJSON()]}),this.changeMode("simple_select",{featureIds:[a.id]});}else this.deleteFeature([t.line.id],{silent:true}),this.changeMode("simple_select",{},{silent:true});},toDisplayFeatures:function(t,n,o){let r=n.properties.id===t.line.id;return n.properties.active=r?"true":"false",r?(n.geometry.coordinates.length<2||(n.properties.meta="feature",o(Sn(t.line.id,n.geometry.coordinates[t.direction==="forward"?n.geometry.coordinates.length-2:1],`${t.direction==="forward"?n.geometry.coordinates.length-2:1}`,false)),o(n),o(A(n.geometry.coordinates,{parent:t.line.id})),o(Pn(n.geometry.coordinates[0],N(n.geometry.coordinates),t.line.id))),null):o(n)}}),Ye=kn;var _n=e=>({...e.modes.draw_line_string,onSetup:function(t){let n=e.modes.draw_line_string.onSetup.call(this,t),o=this.newFeature({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[]]}});return this.addFeature(o),{...n,...t,rectangle:o}},onTap:function(t,n){t.startPoint&&this.onMouseMove(t,n),this.onClick(t,n);},onClick:function(t,n){t.startPoint&&t.startPoint[0]!==n.lngLat.lng&&t.startPoint[1]!==n.lngLat.lat?(this.updateUIClasses({mouse:"pointer"}),t.endPoint=[n.lngLat.lng,n.lngLat.lat],this.changeMode("simple_select",{featuresId:t.rectangle.id})):t.startPoint=[n.lngLat.lng,n.lngLat.lat];},onMouseMove:function(t,n){t.startPoint&&(t.rectangle.updateCoordinate("0.0",t.startPoint[0],t.startPoint[1]),t.rectangle.updateCoordinate("0.1",n.lngLat.lng,t.startPoint[1]),t.rectangle.updateCoordinate("0.2",n.lngLat.lng,n.lngLat.lat),t.rectangle.updateCoordinate("0.3",t.startPoint[0],n.lngLat.lat),t.rectangle.updateCoordinate("0.4",t.startPoint[0],t.startPoint[1]));},onKeyUp:function(t,n){if(n.keyCode===27)return this.changeMode("simple_select")},onStop:function(t){e.modes.draw_line_string.onStop.call(this,t),this.getFeature(t.rectangle.id)!==void 0&&(t.rectangle.removeCoordinate("0.4"),t.rectangle.isValid()?this.map.fire("draw.create",{features:[t.rectangle.toGeoJSON()]}):(this.deleteFeature([t.rectangle.id],{silent:true}),this.changeMode("simple_select",{},{silent:true})));},toDisplayFeatures:function(t,n,o){let r=n.properties.id===t.rectangle.id;if(n.properties.active=r?"true":"false",!r)return o(n);if(t.startPoint)return o(n),this.drawConfig.userProperties.showLength&&(o(A([n.geometry.coordinates[0][0],n.geometry.coordinates[0][1]],{parent:t.rectangle.id,anchor:"bottom"})),o(A([n.geometry.coordinates[0][1],n.geometry.coordinates[0][2]],{parent:t.rectangle.id,anchor:"left"}))),this.drawConfig.userProperties.showArea&&o(K(n.geometry.coordinates,{parent:t.rectangle.id})),null},onTrash:function(t){this.deleteFeature([t.rectangle.id],{silent:true}),this.changeMode("simple_select");}}),Xe=_n;var We={enable:e=>{setTimeout(()=>{!e.map||!e.map.doubleClickZoom||!e._ctx||!e._ctx.store||!e._ctx.store.getInitialConfigValue||e._ctx.store.getInitialConfigValue("doubleClickZoom")&&e.map.doubleClickZoom.enable();},0);},disable(e){setTimeout(()=>{!e.map||!e.map.doubleClickZoom||e.map.doubleClickZoom.disable();},0);}},In={onSetup:function(e){let t=this.newFeature({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[]]}});return this.addFeature(t),this.clearSelectedFeatures(),We.disable(this),this.updateUIClasses({mouse:"add"}),this.setActionableState({trash:true}),{rectangle:t,currentVertexPosition:0}},onTap:function(e,t){this.onClick(e,t);},onClick:function(e,t){if(e.currentVertexPosition===2){let n=this.calculatepXY3(e,t,false);return n&&e.rectangle.updateCoordinate(`0.${e.currentVertexPosition+1}`,n[0],n[1]),this.updateUIClasses({mouse:"pointer"}),this.changeMode("simple_select",{featuresId:e.rectangle.id})}else e.rectangle.updateCoordinate(`0.${e.currentVertexPosition}`,t.lngLat.lng,t.lngLat.lat),e.currentVertexPosition++,e.rectangle.updateCoordinate(`0.${e.currentVertexPosition}`,t.lngLat.lng,t.lngLat.lat);},onMouseMove:function(e,t){if(e.rectangle.updateCoordinate("0."+e.currentVertexPosition,t.lngLat.lng,t.lngLat.lat),e.currentVertexPosition&&e.currentVertexPosition>0&&this.calculateOrientedAnglePolygon(e),e.currentVertexPosition===2){let n=this.calculatepXY3(e,t,true);n&&e.rectangle.updateCoordinate("0."+(e.currentVertexPosition+1),n[0],n[1]);}},deegrees2meters(e){let t=e[0]*2003750834e-2/180,n=Math.log(Math.tan((90+e[1])*Math.PI/360))/(Math.PI/180);return n=n*2003750834e-2/180,[t,n]},meters2degress(e){let t=e[0]*180/2003750834e-2,n=Math.atan(Math.exp(e[1]*Math.PI/2003750834e-2))*360/Math.PI-90;return [t,n]},calculateOrientedAnglePolygon:function(e){let t=e.rectangle.getCoordinate("0.0"),n=this.deegrees2meters(t),o=e.rectangle.getCoordinate("0.1"),r=this.deegrees2meters(o),i=-1*(Math.atan2(r[1]-n[1],r[0]-n[0])*180/Math.PI+90),c=i<0?i+360:i;e.angle=parseFloat(c.toFixed(2));},calculatepXY3:function(e,t,n){let o=e.rectangle.getCoordinate("0.0"),r=this.deegrees2meters(o),a=e.rectangle.getCoordinate("0.1"),i=this.deegrees2meters(a),c=this.deegrees2meters([t.lngLat.lng,t.lngLat.lat]),l=this.deegrees2meters([t.lngLat.lng,t.lngLat.lat]);if(r[0]===i[0])c=[l[0],i[1]];else if(r[1]===i[1])c=[i[0],l[1]];else {let y=-1/((i[1]-r[1])/(i[0]-r[0]));Math.abs(y)<1?c[1]=y*(l[0]-i[0])+i[1]:c[0]=i[0]+(c[1]-i[1])/y;}let s=[i[0]-r[0],i[1]-r[1]],u=[c[0]-s[0],c[1]-s[1]],d=this.meters2degress(c),M=this.meters2degress(u);return e.rectangle.updateCoordinate("0.2",d[0],d[1]),e.rectangle.updateCoordinate("0.3",M[0],M[1]),M},onKeyUp:function(e,t){if(t.keyCode===27)return this.changeMode("simple_select")},onStop:function(e){We.enable(this),this.updateUIClasses({mouse:"none"}),this.activateUIButton(),this.getFeature(e.rectangle.id)!==void 0&&(e.rectangle.removeCoordinate("0.4"),e.rectangle.isValid()?this.map.fire("draw.create",{features:[e.rectangle.toGeoJSON()]}):(this.deleteFeature([e.rectangle.id],{silent:true}),this.changeMode("simple_select",{},{silent:true})));},toDisplayFeatures:function(e,t,n){let o=t.properties.id===e.rectangle.id;if(t.properties.active=o?"true":"false",t.properties.angle=e.angle,t.angle=e.angle,!o)return n(t);let r=t.geometry.coordinates[0].length;if(r<3){let a=t.geometry.coordinates[0][0],i={type:"Feature",properties:t.properties,angle:e.angle,geometry:{coordinates:t.geometry.coordinates[0][0],type:"Point"}};a&&n(i);return}if(r>=3&&r<=4){let a=[[t.geometry.coordinates[0][0][0],t.geometry.coordinates[0][0][1]],[t.geometry.coordinates[0][1][0],t.geometry.coordinates[0][1][1]]];if(n({type:"Feature",properties:t.properties,angle:e.angle,geometry:{coordinates:a,type:"LineString"}}),r===3)return}return n(t)},onTrash:function(e){this.deleteFeature([e.rectangle.id],{silent:true}),this.changeMode("simple_select");}},He=In;var Qe=[{id:"measure-label",type:"symbol",filter:["all",["==","$type","Point"],["==","user_type","measure"]],layout:{"text-field":["get","user_value"],"text-anchor":["get","user_anchor"],"text-offset":["match",["get","user_anchor"],"bottom",[0,-0.5],[0,0]],"text-size":12,"text-allow-overlap":true,"text-ignore-placement":true},paint:{"text-halo-color":"rgba(255,255,255,0.75)","text-halo-width":2,"text-halo-blur":1,"text-color":"#000"}}];var $n=e=>{let[t]=a();t.isMapLibre&&e.lib.constants?.classes&&Object.assign(e.lib.constants.classes,{CANVAS:"maplibregl-canvas",CONTROL_BASE:"maplibregl-ctrl",CONTROL_PREFIX:"maplibregl-ctrl-",CONTROL_GROUP:"maplibregl-ctrl-group",ATTRIBUTION:"maplibregl-ctrl-attrib"});let n=new e.lib({styles:[...e.lib.lib.theme,...Qe],modes:{...e.lib.modes,draw_point:Ge(e.lib),draw_line_string:qe(e.lib),draw_polygon:Be(e.lib),multi_point:Re,radius:Ye(e.lib),rectangle:Xe(e.lib),rectangle_assisted:He},userProperties:{showLength:e.showLength||false,showArea:e.showArea||false},...e.options});t.map.addControl(n,e.position||"top-right"),e.getInstance&&e.getInstance(n);let o={};return ve.forEach(r=>{if(e[r]){let a=`draw.${r.slice(2).toLowerCase()}`,i=c=>e[r](c);o[a]=i,t.map.on(a,i);}}),onCleanup(()=>{Object.keys(o).forEach(r=>t.map.off(r,o[r])),t.map?.removeControl(n);}),null};var Fn=e=>{let[t]=a(),n;return H(()=>(n||(n=new e.overlay(e.props||{})),n)),createEffect(()=>n?.setProps(e.props||{})),null};
|
|
9
9
|
|
|
10
|
-
export {
|
|
10
|
+
export { Zt as Atmosphere, yn as Camera, Jt as Control, Fn as DeckOverlay, $n as Draw, un as Image, _t as Layer, Vt as Layer3D, bn as Light, nn as Marker, an as Popup, Mt as Source, Bt as Terrain, pt as default, re as disableRasterFade, Fe as patternList, G as settleAfterIdle, De as symbolList, Q as toSDF, zt as useScene, U as useSourceId, B as waitForIdleAndSettle };
|
package/dist/index/index.jsx
CHANGED
|
@@ -540,32 +540,48 @@ var MapGL = (props) => {
|
|
|
540
540
|
});
|
|
541
541
|
return list;
|
|
542
542
|
};
|
|
543
|
+
let pendingStyleLoadHandler = null;
|
|
543
544
|
createEffect((prev) => {
|
|
544
545
|
const style = getStyle(props.options?.style, props.darkStyle);
|
|
545
|
-
if (map
|
|
546
|
+
if (map && prev !== style) {
|
|
546
547
|
const oldStyle = map.getStyle();
|
|
547
548
|
const oldLayers = oldStyle.layers.filter(
|
|
548
549
|
(l) => map.layerIdList.includes(l.id)
|
|
549
550
|
);
|
|
550
551
|
const oldSources = Object.keys(oldStyle.sources).filter((s) => map.sourceIdList.includes(s)).reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {});
|
|
551
552
|
const diff2 = props.shouldDiffStyle ? props.shouldDiffStyle(prev, style) : true;
|
|
553
|
+
if (pendingStyleLoadHandler) {
|
|
554
|
+
map.off("style.load", pendingStyleLoadHandler);
|
|
555
|
+
pendingStyleLoadHandler = null;
|
|
556
|
+
}
|
|
552
557
|
map.setStyle(style, diff2 ? void 0 : { diff: false });
|
|
553
|
-
|
|
558
|
+
pendingStyleLoadHandler = () => {
|
|
559
|
+
pendingStyleLoadHandler = null;
|
|
554
560
|
if (!oldLayers) return;
|
|
555
561
|
const newStyle = map.getStyle();
|
|
556
|
-
map.setStyle(
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
562
|
+
map.setStyle(
|
|
563
|
+
{
|
|
564
|
+
...newStyle,
|
|
565
|
+
sources: { ...newStyle.sources, ...oldSources },
|
|
566
|
+
layers: insertLayers(newStyle.layers, oldLayers),
|
|
567
|
+
fog: oldStyle.fog,
|
|
568
|
+
terrain: oldStyle.terrain,
|
|
569
|
+
light: oldStyle.light
|
|
570
|
+
},
|
|
571
|
+
{ diff: false }
|
|
572
|
+
);
|
|
564
573
|
debug("Set Mapstyle to:", style);
|
|
565
|
-
}
|
|
574
|
+
};
|
|
575
|
+
map.once("style.load", pendingStyleLoadHandler);
|
|
566
576
|
}
|
|
567
577
|
return style;
|
|
568
578
|
}, props.options?.style);
|
|
579
|
+
onCleanup(() => {
|
|
580
|
+
if (pendingStyleLoadHandler) {
|
|
581
|
+
map?.off("style.load", pendingStyleLoadHandler);
|
|
582
|
+
pendingStyleLoadHandler = null;
|
|
583
|
+
}
|
|
584
|
+
});
|
|
569
585
|
[
|
|
570
586
|
"showTileBoundaries",
|
|
571
587
|
"showTerrainWireframe",
|
|
@@ -657,7 +673,9 @@ var Source = (props) => {
|
|
|
657
673
|
case "geojson":
|
|
658
674
|
createEffect2(() => {
|
|
659
675
|
const data = anySource().data;
|
|
660
|
-
ctx.map.getSource(props.id)
|
|
676
|
+
const source = ctx.map.getSource(props.id);
|
|
677
|
+
if (!source) return;
|
|
678
|
+
source.setData(data || {});
|
|
661
679
|
debug("Update GeoJSON Data:", props.id);
|
|
662
680
|
});
|
|
663
681
|
break;
|
|
@@ -665,7 +683,9 @@ var Source = (props) => {
|
|
|
665
683
|
createEffect2(() => {
|
|
666
684
|
const url = anySource().url;
|
|
667
685
|
const coords = anySource().coordinates;
|
|
668
|
-
ctx.map.getSource(props.id)
|
|
686
|
+
const source = ctx.map.getSource(props.id);
|
|
687
|
+
if (!source) return;
|
|
688
|
+
source.updateImage(url, coords);
|
|
669
689
|
debug("Update Image Data:", props.id);
|
|
670
690
|
});
|
|
671
691
|
break;
|
|
@@ -674,6 +694,7 @@ var Source = (props) => {
|
|
|
674
694
|
const url = anySource().url;
|
|
675
695
|
const tiles = anySource().tiles;
|
|
676
696
|
const source = ctx.map.getSource(props.id);
|
|
697
|
+
if (!source) return;
|
|
677
698
|
url ? source.setUrl(url) : source.setTiles(tiles);
|
|
678
699
|
debug("Update Vector Data:", props.id);
|
|
679
700
|
});
|
|
@@ -682,6 +703,7 @@ var Source = (props) => {
|
|
|
682
703
|
createEffect2(() => {
|
|
683
704
|
const src = lookup(anySource().url);
|
|
684
705
|
const source = ctx.map.getSource(props.id);
|
|
706
|
+
if (!source) return;
|
|
685
707
|
src.url ? source.setUrl(src.url) : source.setTiles(src.tiles);
|
|
686
708
|
debug("Update Raster Data:", props.id);
|
|
687
709
|
});
|
|
@@ -874,6 +896,14 @@ var Layer = (props) => {
|
|
|
874
896
|
const debug = (text, value) => {
|
|
875
897
|
(ctx.map.debug || ctx.map.debugEvents) && console.debug("%c[MapGL]", "color: #10b981", text, value || "");
|
|
876
898
|
};
|
|
899
|
+
const ignoringUnloadedStyle = (fn) => {
|
|
900
|
+
try {
|
|
901
|
+
fn();
|
|
902
|
+
} catch (err) {
|
|
903
|
+
if (!(err instanceof Error) || err.message !== "Style is not done loading") throw err;
|
|
904
|
+
debug(`Skipped map update (${layerId}) \u2014 style mid-swap`);
|
|
905
|
+
}
|
|
906
|
+
};
|
|
877
907
|
const getBeforeId = createMemo(
|
|
878
908
|
() => props.beforeType ? ctx.map.getStyle().layers.find((l) => l.type === props.beforeType)?.id : props.beforeId
|
|
879
909
|
);
|
|
@@ -884,6 +914,11 @@ var Layer = (props) => {
|
|
|
884
914
|
source: sourceId,
|
|
885
915
|
// `slot` is Mapbox Standard-Style-only — MapLibre has no equivalent (see .claude/dev-notes.md)
|
|
886
916
|
...ctx.isMapLibre ? {} : { slot: props.slot || "" },
|
|
917
|
+
// props.filter (independent from style.filter — see the "Update Filter" effect below) takes
|
|
918
|
+
// the same precedence here it takes there, so a filter provided at mount is fully in place
|
|
919
|
+
// from this one addLayer call instead of needing a follow-up setFilter — see that effect's
|
|
920
|
+
// own comment for why a redundant one is unsafe when a <Layer> mounts mid-style-swap.
|
|
921
|
+
...props.filter !== void 0 ? { filter: props.filter } : {},
|
|
887
922
|
metadata: {
|
|
888
923
|
smg: { beforeType: props.beforeType, beforeId: props.beforeId }
|
|
889
924
|
}
|
|
@@ -903,64 +938,76 @@ var Layer = (props) => {
|
|
|
903
938
|
});
|
|
904
939
|
}
|
|
905
940
|
});
|
|
941
|
+
let isFirstStyleUpdate = true;
|
|
906
942
|
createEffect3((prev) => {
|
|
907
943
|
ctx.themeVersion;
|
|
908
944
|
const style = updateStyle(props.style, ctx.constants, debug);
|
|
945
|
+
if (isFirstStyleUpdate) {
|
|
946
|
+
isFirstStyleUpdate = false;
|
|
947
|
+
return style;
|
|
948
|
+
}
|
|
909
949
|
if (style === prev) return;
|
|
910
950
|
if (style.layout !== prev?.layout)
|
|
911
951
|
diff(style.layout, prev?.layout).forEach(
|
|
912
|
-
([key, value]) =>
|
|
952
|
+
([key, value]) => ignoringUnloadedStyle(
|
|
953
|
+
() => ctx.map.setLayoutProperty(layerId, key, value, { validate: false })
|
|
954
|
+
)
|
|
913
955
|
);
|
|
914
956
|
if (style.paint !== prev?.paint)
|
|
915
957
|
diff(style.paint, prev?.paint).forEach(
|
|
916
|
-
([key, value]) =>
|
|
958
|
+
([key, value]) => ignoringUnloadedStyle(
|
|
959
|
+
() => ctx.map.setPaintProperty(layerId, key, value, { validate: false })
|
|
960
|
+
)
|
|
917
961
|
);
|
|
918
962
|
if (style.minzoom !== prev?.minzoom || style.maxzoom !== prev?.maxzoom)
|
|
919
|
-
ctx.map.setLayerZoomRange(layerId, style.minzoom, style.maxzoom);
|
|
963
|
+
ignoringUnloadedStyle(() => ctx.map.setLayerZoomRange(layerId, style.minzoom, style.maxzoom));
|
|
920
964
|
if (style.filter !== prev?.filter)
|
|
921
|
-
ctx.map.setFilter(layerId, style.filter, { validate: false });
|
|
965
|
+
ignoringUnloadedStyle(() => ctx.map.setFilter(layerId, style.filter, { validate: false }));
|
|
922
966
|
debug("Update Layer Style:", layerId);
|
|
923
967
|
return style;
|
|
924
968
|
}, updateStyle(props.style, ctx.constants, debug));
|
|
925
969
|
createEffect3((prev) => {
|
|
926
970
|
if (props.visible === prev) return;
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
971
|
+
ignoringUnloadedStyle(
|
|
972
|
+
() => ctx.map.setLayoutProperty(
|
|
973
|
+
layerId,
|
|
974
|
+
"visibility",
|
|
975
|
+
props.visible ? "visible" : "none",
|
|
976
|
+
{ validate: false }
|
|
977
|
+
)
|
|
932
978
|
);
|
|
933
979
|
debug(`Update Visibility (${layerId}):`, props.visible.toString());
|
|
934
980
|
return props.visible;
|
|
935
981
|
}, props.visible);
|
|
936
982
|
createEffect3((prev) => {
|
|
937
983
|
if (getBeforeId() === prev) return prev;
|
|
938
|
-
ctx.map.moveLayer(layerId, getBeforeId());
|
|
984
|
+
ignoringUnloadedStyle(() => ctx.map.moveLayer(layerId, getBeforeId()));
|
|
939
985
|
debug(`Update Layer Z-Index (${layerId}):`, getBeforeId());
|
|
940
986
|
return getBeforeId();
|
|
941
987
|
}, getBeforeId());
|
|
942
988
|
createEffect3((prev) => {
|
|
943
989
|
if (props.filter === prev) return prev;
|
|
944
990
|
if (prev === void 0 && !props.filter) return prev;
|
|
945
|
-
ctx.map.setFilter(layerId, props.filter ?? null);
|
|
991
|
+
ignoringUnloadedStyle(() => ctx.map.setFilter(layerId, props.filter ?? null));
|
|
946
992
|
debug(`Update Filter (${layerId}):`, props.filter);
|
|
947
993
|
return props.filter;
|
|
948
|
-
},
|
|
949
|
-
createEffect3(
|
|
994
|
+
}, props.filter);
|
|
995
|
+
createEffect3(() => {
|
|
950
996
|
if (!props.featureState || props.featureState.id === null) return;
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
source: sourceId,
|
|
954
|
-
sourceLayer: props.style["source-layer"]
|
|
955
|
-
});
|
|
956
|
-
ctx.map.setFeatureState(
|
|
957
|
-
{
|
|
997
|
+
ignoringUnloadedStyle(() => {
|
|
998
|
+
ctx.map.removeFeatureState({
|
|
958
999
|
source: sourceId,
|
|
959
|
-
sourceLayer: props.style["source-layer"]
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
1000
|
+
sourceLayer: props.style["source-layer"]
|
|
1001
|
+
});
|
|
1002
|
+
ctx.map.setFeatureState(
|
|
1003
|
+
{
|
|
1004
|
+
source: sourceId,
|
|
1005
|
+
sourceLayer: props.style["source-layer"],
|
|
1006
|
+
id: props.featureState.id
|
|
1007
|
+
},
|
|
1008
|
+
props.featureState.state
|
|
1009
|
+
);
|
|
1010
|
+
});
|
|
964
1011
|
});
|
|
965
1012
|
createEffect3(() => {
|
|
966
1013
|
if (!props.pulse) return;
|
|
@@ -971,11 +1018,15 @@ var Layer = (props) => {
|
|
|
971
1018
|
const to = resolveColor2(property, config.to);
|
|
972
1019
|
const rampMs = duration * (1 - holdFraction);
|
|
973
1020
|
const beat = () => {
|
|
974
|
-
|
|
975
|
-
|
|
1021
|
+
ignoringUnloadedStyle(() => {
|
|
1022
|
+
ctx.map.setPaintProperty(layerId, `${property}-transition`, { duration: 0, delay: 0 }, { validate: false });
|
|
1023
|
+
ctx.map.setPaintProperty(layerId, property, from, { validate: false });
|
|
1024
|
+
});
|
|
976
1025
|
requestAnimationFrame(() => {
|
|
977
|
-
|
|
978
|
-
|
|
1026
|
+
ignoringUnloadedStyle(() => {
|
|
1027
|
+
ctx.map.setPaintProperty(layerId, `${property}-transition`, { duration: rampMs, delay: 0 }, { validate: false });
|
|
1028
|
+
ctx.map.setPaintProperty(layerId, property, to, { validate: false });
|
|
1029
|
+
});
|
|
979
1030
|
});
|
|
980
1031
|
};
|
|
981
1032
|
beat();
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.2.
|
|
2
|
+
"version": "2.2.4",
|
|
3
3
|
"name": "solid-map-gl",
|
|
4
4
|
"description": "SolidJS Component Library for Mapbox GL JS & MapLibre GL JS",
|
|
5
5
|
"info": "SolidJS Component Library for Mapbox GL JS & MapLibre GL JS. Mapbox GL JS and MapLibre GL JS are JavaScript libraries that 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.",
|