solid-map-gl 1.1.23 → 1.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -17
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/source/components/Control/index.jsx +6 -13
- package/dist/source/components/MapGL/index.jsx +5 -5
- package/dist/types/components/Control/index.d.ts +3 -2
- package/dist/types/components/MapGL/index.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
# Solid Mapbox GL JS
|
|
4
4
|
|
|
5
|
-
[
|
|
5
|
+
[
|
|
6
6
|
](https://www.npmjs.com/package/solid-map-gl)
|
|
7
7
|
[](./LICENSE)
|
|
8
|
-
[
|
|
9
|
+
](https://bundlephobia.com/package/solid-map-gl)
|
|
10
|
+

|
|
10
11
|
|
|
11
12
|
[Solid](https://www.solidjs.com/) Component Library for [Mapbox GL JS.](https://github.com/mapbox/mapbox-gl-js) Mapbox GL JS is a JavaScript library that renders interactive maps from vector tiles and Mapbox styles using WebGL. This project is intended to be as close as possible to the [Mapbox GL JS API.](https://docs.mapbox.com/mapbox-gl-js/api/)
|
|
12
13
|
|
|
@@ -36,7 +37,7 @@ yarn add solid-map-gl
|
|
|
36
37
|
npm install --save solid-map-gl
|
|
37
38
|
```
|
|
38
39
|
|
|
39
|
-
### Optional Dependencies
|
|
40
|
+
<!-- ### Optional Dependencies
|
|
40
41
|
|
|
41
42
|
If you want to use `LanguageControl` and `TrafficControl`:
|
|
42
43
|
|
|
@@ -46,7 +47,7 @@ yarn add @mapbox/mapbox-gl-language @mapbox/mapbox-gl-traffic
|
|
|
46
47
|
|
|
47
48
|
```shell
|
|
48
49
|
npm install --save @mapbox/mapbox-gl-language @mapbox/mapbox-gl-traffic
|
|
49
|
-
```
|
|
50
|
+
``` -->
|
|
50
51
|
|
|
51
52
|
## Components
|
|
52
53
|
|
|
@@ -73,15 +74,16 @@ By default, `MapGL` component renders in a static mode. That means that the user
|
|
|
73
74
|
|
|
74
75
|
```jsx
|
|
75
76
|
import MapGL from 'solid-map-gl'
|
|
76
|
-
|
|
77
|
+
<MapGL
|
|
77
78
|
options={{
|
|
78
|
-
accessToken:
|
|
79
|
+
accessToken: MAPBOX_ACCESS_TOKEN,
|
|
79
80
|
style: 'mapbox://styles/mapbox/light-v10',
|
|
80
81
|
}}
|
|
81
82
|
viewport={{
|
|
82
83
|
center: [-122.41, 37.78],
|
|
83
84
|
zoom: 11,
|
|
84
|
-
}}
|
|
85
|
+
}}>
|
|
86
|
+
</MapGL>
|
|
85
87
|
```
|
|
86
88
|
|
|
87
89
|
### Interactive Map
|
|
@@ -90,7 +92,8 @@ In most cases, you will want the user to interact with the map. To do this, you
|
|
|
90
92
|
|
|
91
93
|
```jsx
|
|
92
94
|
import { createSignal } from 'solid-js'
|
|
93
|
-
import MapGL
|
|
95
|
+
import MapGL from 'solid-map-gl'
|
|
96
|
+
import type { Viewport } from 'solid-map-gl'
|
|
94
97
|
|
|
95
98
|
const [viewport, setViewport] = createSignal({
|
|
96
99
|
center: [-122.41, 37.78],
|
|
@@ -99,7 +102,7 @@ const [viewport, setViewport] = createSignal({
|
|
|
99
102
|
|
|
100
103
|
<MapGL
|
|
101
104
|
options={{
|
|
102
|
-
accessToken:
|
|
105
|
+
accessToken: MAPBOX_ACCESS_TOKEN,
|
|
103
106
|
style: 'mapbox://styles/mapbox/light-v10'
|
|
104
107
|
}}
|
|
105
108
|
viewport={viewport()}
|
|
@@ -120,13 +123,13 @@ import MapGL, { Source, Layer } from 'solid-map-gl';
|
|
|
120
123
|
|
|
121
124
|
<MapGL
|
|
122
125
|
options={{
|
|
123
|
-
accessToken:
|
|
126
|
+
accessToken: MAPBOX_ACCESS_TOKEN,
|
|
124
127
|
style: 'mapbox://styles/mapbox/light-v10'
|
|
125
128
|
}}>
|
|
126
129
|
<Source
|
|
127
130
|
source={{
|
|
128
131
|
type: 'vector',
|
|
129
|
-
url: 'mapbox://mapbox.mapbox-terrain-v2'
|
|
132
|
+
url: 'mapbox://mapbox.mapbox-terrain-v2',
|
|
130
133
|
}}>
|
|
131
134
|
<Layer style={{
|
|
132
135
|
type: 'line',
|
|
@@ -147,6 +150,7 @@ To draw a GeoJSON on a map, add `Source` with the `type` property set to `geojso
|
|
|
147
150
|
```jsx
|
|
148
151
|
import { createSignal } from 'solid-js'
|
|
149
152
|
import MapGL, { Source, Layer } from 'solid-map-gl'
|
|
153
|
+
import type { Viewport } from 'solid-map-gl'
|
|
150
154
|
|
|
151
155
|
const [viewport, setViewport] = createSignal({
|
|
152
156
|
center: [-122.486052, 37.830348],
|
|
@@ -183,9 +187,9 @@ const data = {
|
|
|
183
187
|
},
|
|
184
188
|
}
|
|
185
189
|
|
|
186
|
-
|
|
190
|
+
<MapGL
|
|
187
191
|
options={{
|
|
188
|
-
accessToken:
|
|
192
|
+
accessToken: MAPBOX_ACCESS_TOKEN,
|
|
189
193
|
style: 'mapbox://styles/mapbox/light-v10',
|
|
190
194
|
}}
|
|
191
195
|
viewport={viewport()}
|
|
@@ -223,6 +227,7 @@ import { createSignal } from 'solid-js'
|
|
|
223
227
|
import MapGL, { Source, Layer } from 'solid-map-gl'
|
|
224
228
|
import { MapboxLayer } from '@deck.gl/mapbox'
|
|
225
229
|
import { ScatterplotLayer } from '@deck.gl/layers'
|
|
230
|
+
import type { Viewport } from 'solid-map-gl'
|
|
226
231
|
|
|
227
232
|
const [viewport, setViewport] = createSignal({
|
|
228
233
|
center: [-74.5, 40],
|
|
@@ -238,9 +243,9 @@ const myDeckLayer = new MapboxLayer({
|
|
|
238
243
|
getColor: [255, 0, 0],
|
|
239
244
|
})
|
|
240
245
|
|
|
241
|
-
|
|
246
|
+
<MapGL
|
|
242
247
|
options={{
|
|
243
|
-
accessToken:
|
|
248
|
+
accessToken: MAPBOX_ACCESS_TOKEN,
|
|
244
249
|
style: 'mapbox://styles/mapbox/light-v10',
|
|
245
250
|
}}
|
|
246
251
|
viewport={viewport()}
|
|
@@ -257,4 +262,5 @@ const myDeckLayer = new MapboxLayer({
|
|
|
257
262
|
- [x] Minify bundle & reduce size
|
|
258
263
|
- [x] Add basemap switching
|
|
259
264
|
- [x] Include event handling
|
|
260
|
-
- [
|
|
265
|
+
- [x] Sync Maps
|
|
266
|
+
- [ ] Add draw functionality
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{template,createComponent,memo,effect,classList,style,insert}from"solid-js/web";import{useTransition,createSignal,createContext,useContext,createUniqueId,onMount,onCleanup,createEffect,untrack}from"solid-js";import mapboxgl from"mapbox-gl";const mapEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onPreClick","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel","onWheel","onResize","onRemove","onTouchMove","onMoveStart","onMove","onMoveEnd","onDragStart","onDrag","onDragEnd","onZoomStart","onZoom","onZoomEnd","onRotateStart","onRotate","onRotatEnd","onPitchStart","onPitch","onPitchEnd","onBoxZoomStart","onBoxZoomEnd","onBoxZoomCancel","onWebglContextLost","onWebglContextRestored","onLoad","onRender","onIdle","onError","onData","onStyleData","onSourceData","onDataLoading","onStyleDataLoading","onSourceDataLoading","onStyleImageMissing"],layerEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],_tmpl$$2=template("<section></section>",2),[pending,start]=useTransition(),[transitionType,setTransitionType]=createSignal("flyTo"),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=r=>{let n,t,o=(r.id=r.id||createUniqueId(),onMount(()=>{n=new mapboxgl.Map({...r.options,container:t,interactive:!!r.onViewportChange,bounds:r.viewport.bounds,center:r.viewport.center,zoom:r.viewport.zoom||null,pitch:r.viewport.pitch||null,bearing:r.viewport.bearing||null,fitBoundsOptions:{padding:r.viewport.padding}})}),onCleanup(()=>n.remove()),createEffect(()=>mapEvents.forEach(t=>{if(r[t]){const e=t.slice(2).toLowerCase(),o=e=>r[t](e);n.on(e,o),onCleanup(()=>n.off(e,o))}})),createEffect(()=>n.showTileBoundaries=r.showTileBoundaries),createEffect(()=>n.showTerrainWireframe=r.showTerrainWireframe),createEffect(()=>n.showPadding=r.showPadding),createEffect(()=>n.showCollisionBoxes=r.showCollisionBoxes),createEffect(()=>n.showOverdrawInspector=r.showOverdrawInspector),createEffect(()=>n.getCanvas().style.cursor=r.cursorStyle),createEffect(e=>{e!==r.options.style&&n.setStyle(r.options.style)},r.options.style),createEffect(e=>{e!==r.options.projection&&n.setProjection(r.options.projection)},r.options.projection),createEffect(()=>setTransitionType(r.transitionType)),createEffect(()=>{const t=
|
|
1
|
+
import{template,createComponent,memo,effect,classList,style,insert}from"solid-js/web";import{useTransition,createSignal,createContext,useContext,createUniqueId,onMount,onCleanup,createEffect,untrack}from"solid-js";import mapboxgl from"mapbox-gl";const mapEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onPreClick","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel","onWheel","onResize","onRemove","onTouchMove","onMoveStart","onMove","onMoveEnd","onDragStart","onDrag","onDragEnd","onZoomStart","onZoom","onZoomEnd","onRotateStart","onRotate","onRotatEnd","onPitchStart","onPitch","onPitchEnd","onBoxZoomStart","onBoxZoomEnd","onBoxZoomCancel","onWebglContextLost","onWebglContextRestored","onLoad","onRender","onIdle","onError","onData","onStyleData","onSourceData","onDataLoading","onStyleDataLoading","onSourceDataLoading","onStyleImageMissing"],layerEvents=["onMouseDown","onMouseUp","onMouseOver","onMouseOut","onMouseMove","onMouseEnter","onMouseLeave","onClick","onDblClick","onContextMenu","onTouchStart","onTouchEnd","onTouchCancel"],_tmpl$$2=template("<section></section>",2),[pending,start]=useTransition(),[transitionType,setTransitionType]=createSignal("flyTo"),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=r=>{let n,t,o=(r.id=r.id||createUniqueId(),onMount(()=>{n=new mapboxgl.Map({...r.options,container:t,interactive:!!r.onViewportChange,bounds:r.viewport.bounds,center:r.viewport.center,zoom:r.viewport.zoom||null,pitch:r.viewport.pitch||null,bearing:r.viewport.bearing||null,fitBoundsOptions:{padding:r.viewport.padding}})}),onCleanup(()=>n.remove()),createEffect(()=>mapEvents.forEach(t=>{if(r[t]){const e=t.slice(2).toLowerCase(),o=e=>r[t](e);n.on(e,o),onCleanup(()=>n.off(e,o))}})),createEffect(()=>n.showTileBoundaries=r.showTileBoundaries),createEffect(()=>n.showTerrainWireframe=r.showTerrainWireframe),createEffect(()=>n.showPadding=r.showPadding),createEffect(()=>n.showCollisionBoxes=r.showCollisionBoxes),createEffect(()=>n.showOverdrawInspector=r.showOverdrawInspector),createEffect(()=>n.getCanvas().style.cursor=r.cursorStyle),createEffect(e=>{e!==r.options.style&&n.setStyle(r.options.style)},r.options.style),createEffect(e=>{e!==r.options.projection&&n.setProjection(r.options.projection)},r.options.projection),createEffect(()=>setTransitionType(r.transitionType)),createEffect(()=>{const t={id:null,center:n.getCenter(),zoom:n.getZoom(),pitch:n.getPitch(),bearing:n.getBearing(),padding:r.viewport.padding,bounds:r.viewport.bounds},e=e=>{e.originalEvent&&r.onViewportChange({...t,id:r.id}),setTransitionType("jumpTo")},o=e=>{e.originalEvent&&r.onViewportChange(t),setTransitionType(r.transitionType)};n.on("move",e).on("moveend",o),onCleanup(()=>n.off("move",e).off("moveend",o))}),createEffect(e=>(r.viewport.bounds!=e&&r.onViewportChange({...r.viewport,...n.cameraForBounds(r.viewport.bounds,{padding:r.viewport.padding})}),r.viewport.bounds),r.viewport.bounds),createEffect(()=>{if(r.id!==r.viewport.id){var e={...r.viewport,padding:r.viewport.padding||0};switch(untrack(transitionType)){case"easeTo":n.stop().easeTo(e);case"jumpTo":n.stop().jumpTo(e);default:n.stop().flyTo(e)}}}),0);return createEffect(()=>{r.triggerResize&&(o=0,window.requestAnimationFrame(function e(){o<15&&(o++,window.requestAnimationFrame(e),start(()=>n.resize()))}))}),createComponent(MapContext.Provider,{value:()=>n,get children(){return[memo(()=>r.children),(()=>{const a=_tmpl$$2.cloneNode(!0),e=t;return"function"==typeof e?e(a):t=a,effect(e=>{var t=r.class||"",o=r.classList,n={height:"100%",width:"100%",...r.style};return t!==e._v$&&(a.className=e._v$=t),e._v$2=classList(a,o,e._v$2),e._v$3=style(a,n,e._v$3),e},{_v$:void 0,_v$2:void 0,_v$3:void 0}),a})()]}})},SourceContext=createContext(),useSource=()=>useContext(SourceContext),SourceComponent=t=>{const o=useMap();return t.id=t.id||createUniqueId(),onMount(async()=>{o().isStyleLoaded()||await o().once("styledata"),o().getSource(t.id)||o().addSource(t.id,t.source)}),onCleanup(()=>{o().getStyle().layers.forEach(e=>e.source===t.id&&o().removeLayer(e.id)),o().getSource(t.id)&&o().removeSource(t.id)}),createEffect(async()=>{("geojson"===t.source.type||t.source.data)&&o().style&&o().getSource(t.id)&&o().getSource(t.id).setData(t.source.data)}),createComponent(SourceContext.Provider,{get value(){return{id:t.id}},get children(){return t.children}})},diff=(n={},a={})=>{return[...new Set([...Object.keys(n),...Object.keys(a)])].reduce((e,t)=>{var o=n[t];return o!==a[t]&&e.push([t,o]),e},[])},Layer=n=>{const a=useMap(),t=useSource();return n.id=n.id||createUniqueId(),onMount(async()=>{a().isStyleLoaded()||await a().once("styledata"),a().getLayer(n.id)||a().addLayer(n.layer||{...n.style,id:n.id,source:t.id},n.beforeType?a().getStyle().layers.find(e=>e.type===n.beforeType).id:n.beforeId)}),onCleanup(()=>a().removeLayer(n.id)),createEffect(()=>layerEvents.forEach(t=>{if(n[t]){const e=t.slice(2).toLowerCase(),o=e=>n[t](e);a().on(e,n.id,o),onCleanup(()=>a().off(e,n.id,o))}})),createEffect(e=>{if(n.style&&a().style&&a().getSource(t.id)&&a().getLayer(n.id))return n.style.layout!==(null==e?void 0:e.layout)&&diff(n.style.layout,null==e?void 0:e.layout).forEach(([e,t])=>a().setLayoutProperty(n.id,e,t,{validate:!1})),n.style.paint!==(null==e?void 0:e.paint)&&diff(n.style.paint,null==e?void 0:e.paint).forEach(([e,t])=>a().setPaintProperty(n.id,e,t,{validate:!1})),n.style.minzoom===(null==e?void 0:e.minzoom)&&n.style.maxzoom===(null==e?void 0:e.maxzoom)||a().setLayerZoomRange(n.id,n.style.minzoom,n.style.maxzoom),n.style.filter!==(null==e?void 0:e.filter)&&a().setFilter(n.id,n.style.filter,{validate:!1}),n.style},n.style),createEffect(e=>{if(void 0!==n.visible&&n.visible!==e&&a().getSource(t.id)&&a().getLayer(n.id))return a().setLayoutProperty(n.id,"visibility",n.visible?"visible":"none",{validate:!1}),n.visible},n.visible),createEffect(async()=>{n.filter&&(a().isStyleLoaded()||await a().once("styledata"),a().setFilter(n.id,n.filter))}),createEffect(async()=>{n.featureState&&n.featureState.id&&(a().isStyleLoaded()||await a().once("styledata"),a().removeFeatureState({source:t.id,sourceLayer:n.style["source-layer"]}),a().setFeatureState({source:t.id,sourceLayer:n.style["source-layer"],id:n.featureState.id},n.featureState.state))}),n.children},Fog=e=>{const t=useMap();return onMount(async()=>{t().isStyleLoaded()||await t().once("styledata"),t().setFog(e.style)}),onCleanup(()=>t().setFog(null)),createEffect(async()=>{void 0!==e.visible&&(t().isStyleLoaded()||await t().once("styledata"),t().setFog(e.visible?e.style:null))}),e.children},Sky=e=>{const t=useMap(),o="_sky";return onMount(async()=>{t().isStyleLoaded()||await t().once("styledata"),t().getLayer(o)||t().addLayer({...e.style,id:o})}),onCleanup(()=>t().getLayer(o)&&t().removeLayer(o)),createEffect(async()=>{void 0!==e.visible&&(t().isStyleLoaded()||await t().once("styledata"),t().setLayoutProperty(o,"visibility",e.visible?"visible":"none"))}),e.children},Terrain=e=>{const t=useMap(),o=useSource();return onMount(async()=>{t().isStyleLoaded()||await t().once("styledata"),t().setTerrain({...e.style,source:o.id})}),onCleanup(()=>t().setTerrain(null)),createEffect(async()=>{void 0!==e.visible&&(t().isStyleLoaded()||await t().once("styledata"),t().setTerrain(e.visible?e.style:null))}),e.children},Control=o=>{const n=useMap(),[e,t]=createSignal(null);return onMount(()=>{var e=((e,t)=>{if(o.custom)return new o.custom(t);switch(e){case"navigation":return new mapboxgl.NavigationControl(t);case"scale":return new mapboxgl.ScaleControl(t);case"attribution":return new mapboxgl.AttributionControl(t);case"geolocate":return new mapboxgl.GeolocateControl(t);case"fullscreen":return new mapboxgl.FullscreenControl(t||{container:n().container});default:throw new Error("Unknown control type: "+e)}})(o.type,o.options);e&&n().addControl(e,o.position),t(e)}),onCleanup(()=>n().removeControl(e())),o.children},_tmpl$$1=template("<div></div>",2),Marker=t=>{const o=useMap();let n=null;return onMount(async()=>{var e;n=new mapboxgl.Marker(t.options).setLngLat(t.lnglat).setPopup(t.children?(new mapboxgl.Popup).setDOMContent((e=_tmpl$$1.cloneNode(!0),insert(e,()=>t.children),e)):null).addTo(o())}),onCleanup(()=>n.remove()),createEffect(()=>n.setLngLat(t.lnglat)),[]},_tmpl$=template("<div></div>",2),Popup=t=>{const o=useMap();let n=null;return onMount(async()=>{var e;n=new mapboxgl.Popup(t.options).setLngLat(t.lnglat).setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e)).addTo(o())}),onCleanup(()=>n.remove()),createEffect(()=>n.setLngLat(t.lnglat)),createEffect(()=>n.setDOMContent((()=>{var e=_tmpl$.cloneNode(!0);return insert(e,()=>t.children),e})())),[]},Image=o=>{const n=useMap();return onMount(async()=>{n().isStyleLoaded()||await n().once("styledata"),o.url?n().loadImage(o.url,(e,t)=>{if(e)throw e;n().hasImage(o.id)||n().addImage(o.id,t)}):n().hasImage(o.id)||n().addImage(o.id,o.image,o.options)}),onCleanup(()=>n().hasImage(o.id)&&n().removeImage(o.id)),createEffect(async()=>{o.image&&o.url||(o.url?n().loadImage(o.url,(e,t)=>{if(e)throw e;n().hasImage(o.id)||n().updateImage(o.id,t)}):n().style&&n().hasImage(o.id)&&n().updateImage(o.id,o.image))}),[]};export{Control,Fog,Image,Layer,Marker,Popup,Sky,SourceComponent as Source,Terrain,MapGL as default,useMap};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Fog/index.tsx","../../src/components/Sky/index.tsx","../../src/components/Terrain/index.tsx","../../src/components/Control/index.tsx","../../src/components/Marker/index.tsx","../../src/components/Popup/index.tsx","../../src/components/Image/index.tsx"],"sourcesContent":["const mapEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onPreClick',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n 'onWheel',\n 'onResize',\n 'onRemove',\n 'onTouchMove',\n 'onMoveStart',\n 'onMove',\n 'onMoveEnd',\n 'onDragStart',\n 'onDrag',\n 'onDragEnd',\n 'onZoomStart',\n 'onZoom',\n 'onZoomEnd',\n 'onRotateStart',\n 'onRotate',\n 'onRotatEnd',\n 'onPitchStart',\n 'onPitch',\n 'onPitchEnd',\n 'onBoxZoomStart',\n 'onBoxZoomEnd',\n 'onBoxZoomCancel',\n 'onWebglContextLost',\n 'onWebglContextRestored',\n 'onLoad',\n 'onRender',\n 'onIdle',\n 'onError',\n 'onData',\n 'onStyleData',\n 'onSourceData',\n 'onDataLoading',\n 'onStyleDataLoading',\n 'onSourceDataLoading',\n 'onStyleImageMissing',\n]\n\nconst layerEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n]\n\nexport { mapEvents, layerEvents }\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\nimport type { MapboxMap, MapboxOptions } from 'mapbox-gl/src/ui/map'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\nimport type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js'\nimport type { PaddingOptions } from 'mapbox-gl/src/geo/edge_insets.js'\nimport type { JSX } from 'solid-js'\n\nexport type Viewport = {\n id?: string\n center?: LngLatLike\n bounds?: LngLatBounds\n zoom?: number\n pitch?: number\n bearing?: number\n padding?: PaddingOptions\n}\n\nconst [pending, start] = useTransition()\nconst [transitionType, setTransitionType] = createSignal('flyTo')\n\nconst MapContext = createContext<MapboxMap>()\nconst useMap = () => useContext(MapContext)\n\nconst MapGL: Component<{\n id?: string\n style?: JSX.CSSProperties\n class?: string\n classList?: {\n [k: string]: boolean | undefined\n }\n viewport?: Viewport\n options?: MapboxOptions\n children?: Element | Element[]\n triggerResize?: boolean\n transitionType?: 'flyTo' | 'easeTo' | 'jumpTo'\n onViewportChange?: (viewport: Viewport) => void\n showTileBoundaries?: boolean\n showTerrainWireframe?: boolean\n showPadding?: boolean\n showCollisionBoxes?: boolean\n showOverdrawInspector?: boolean\n repaint?: boolean\n cursorStyle?: string\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLDivElement\n props.id = props.id || createUniqueId()\n\n onMount(() => {\n map = new mapboxgl.Map({\n ...props.options,\n container: mapRef,\n interactive: !!props.onViewportChange,\n bounds: props.viewport.bounds,\n center: props.viewport.center,\n zoom: props.viewport.zoom || null,\n pitch: props.viewport.pitch || null,\n bearing: props.viewport.bearing || null,\n fitBoundsOptions: { padding: props.viewport.padding },\n } as MapboxOptions)\n })\n\n onCleanup(() => map.remove())\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\n }\n })\n )\n\n // Update debug features\n createEffect(() => (map.showTileBoundaries = props.showTileBoundaries))\n createEffect(() => (map.showTerrainWireframe = props.showTerrainWireframe))\n createEffect(() => (map.showPadding = props.showPadding))\n createEffect(() => (map.showCollisionBoxes = props.showCollisionBoxes))\n createEffect(() => (map.showOverdrawInspector = props.showOverdrawInspector))\n createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle))\n\n // Update map style\n createEffect(prev => {\n prev !== props.options.style && map.setStyle(props.options.style)\n }, props.options.style)\n\n // Update projection\n createEffect(prev => {\n prev !== props.options.projection &&\n map.setProjection(props.options.projection)\n }, props.options.projection)\n\n createEffect(() => setTransitionType(props.transitionType))\n\n // Hook up viewport events\n createEffect(() => {\n const getViewport = id => ({\n id: id,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport.padding,\n bounds: props.viewport.bounds,\n })\n\n const callMove = event => {\n if (event.originalEvent) props.onViewportChange(getViewport(props.id))\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent) props.onViewportChange(getViewport(null))\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport.bounds, {\n padding: props.viewport.padding,\n }),\n })\n return props.viewport.bounds\n }, props.viewport.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport.id) return\n const viewport = { ...props.viewport, padding: props.viewport.padding || 0 }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n\n let index = 0\n\n createEffect(() => {\n if (props.triggerResize) {\n index = 0\n window.requestAnimationFrame(function loop() {\n if (index < 15) {\n index++\n window.requestAnimationFrame(loop)\n start(() => map.resize())\n }\n })\n }\n })\n\n return (\n <MapContext.Provider value={() => map}>\n {props.children}\n <section\n ref={mapRef}\n class={props.class || ''}\n classList={props.classList}\n style={{ height: '100%', width: '100%', ...props.style }}></section>\n </MapContext.Provider>\n )\n}\n\nexport { MapGL as default, useMap }\n","import {\n onMount,\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n Source,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nconst SourceContext = createContext<Source>()\n\nconst useSource = (): Source => useContext(SourceContext)\n\nconst SourceComponent: Component<{\n id?: string\n source: SourceSpecification\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n // Add Source\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n !map().getSource(props.id) && map().addSource(props.id, props.source)\n })\n\n // Remove Source\n onCleanup(() => {\n map()\n .getStyle()\n .layers.forEach(\n layer => layer.source === props.id && map().removeLayer(layer.id)\n )\n map().getSource(props.id) && map().removeSource(props.id)\n })\n\n // Update GeoJSON Data\n createEffect(async () => {\n if (props.source.type !== 'geojson' && !props.source.data) return\n\n map().style &&\n map().getSource(props.id) &&\n map().getSource(props.id).setData(props.source.data)\n })\n\n return (\n <SourceContext.Provider value={{ id: props.id }}>\n {props.children}\n </SourceContext.Provider>\n )\n}\n\nexport { SourceComponent as default, useSource }\n","import {\n onMount,\n onCleanup,\n createEffect,\n Component,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSource } from '../Source'\nimport { layerEvents } from '../../events'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n FilterSpecification,\n StyleSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\nimport type { CustomLayerInterface } from 'mapbox-gl/src/style/style_layer/custom_style_layer'\n\nconst diff = (\n newProps: StyleSpecification = {},\n prevProps: StyleSpecification = {}\n) => {\n const keys = new Set([...Object.keys(newProps), ...Object.keys(prevProps)])\n return [...keys].reduce((acc, key: string) => {\n const value = newProps[key]\n if (value !== prevProps[key]) {\n acc.push([key, value])\n }\n return acc\n }, [])\n}\n\nconst Layer: Component<{\n id?: string\n style?: StyleSpecification\n layer?: CustomLayerInterface\n filter?: FilterSpecification\n visible?: boolean\n sourceId?: string\n beforeType?:\n | 'background'\n | 'fill'\n | 'line'\n | 'symbol'\n | 'raster'\n | 'circle'\n | 'fill-extrusion'\n | 'heatmap'\n | 'hillshade'\n | 'sky'\n beforeId?: string\n featureState?: { id: number | string; state: object }\n}> = props => {\n const map: MapboxMap = useMap()\n const source: SourceSpecification = useSource()\n props.id = props.id || createUniqueId()\n // Add Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n if (map().getLayer(props.id)) return\n\n map().addLayer(\n props.layer || {\n ...props.style,\n id: props.id,\n source: source.id,\n },\n props.beforeType\n ? map()\n .getStyle()\n .layers.find(l => l.type === props.beforeType).id\n : props.beforeId\n )\n })\n\n onCleanup(() => map().removeLayer(props.id))\n\n // Hook up events\n createEffect(() =>\n layerEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map().on(event, props.id, callback)\n onCleanup(() => map().off(event, props.id, callback))\n }\n })\n )\n\n // Update Style\n createEffect((prev: StyleSpecification) => {\n if (\n !props.style ||\n !map().style ||\n !map().getSource(source.id) ||\n !map().getLayer(props.id)\n )\n return\n\n if (props.style.layout !== prev?.layout)\n diff(props.style.layout, prev?.layout).forEach(([key, value]) =>\n map().setLayoutProperty(props.id, key, value, { validate: false })\n )\n\n if (props.style.paint !== prev?.paint)\n diff(props.style.paint, prev?.paint).forEach(([key, value]) =>\n map().setPaintProperty(props.id, key, value, { validate: false })\n )\n\n if (\n props.style.minzoom !== prev?.minzoom ||\n props.style.maxzoom !== prev?.maxzoom\n )\n map().setLayerZoomRange(\n props.id,\n props.style.minzoom,\n props.style.maxzoom\n )\n\n if (props.style.filter !== prev?.filter)\n map().setFilter(props.id, props.style.filter, { validate: false })\n\n return props.style\n }, props.style)\n\n // Update Visibility\n createEffect((prev: boolean) => {\n if (\n props.visible === undefined ||\n props.visible === prev ||\n !map().getSource(source.id) ||\n !map().getLayer(props.id)\n )\n return\n\n map().setLayoutProperty(\n props.id,\n 'visibility',\n props.visible ? 'visible' : 'none',\n { validate: false }\n )\n return props.visible\n }, props.visible)\n\n // Update Filter\n createEffect(async () => {\n if (!props.filter) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFilter(props.id, props.filter)\n })\n\n // Update Feature State\n createEffect(async () => {\n if (!props.featureState || !props.featureState.id) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n map().removeFeatureState({\n source: source.id,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: source.id,\n sourceLayer: props.style['source-layer'],\n id: props.featureState.id,\n },\n props.featureState.state\n )\n })\n\n return props.children\n}\n\nexport default Layer\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { FogSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nconst Fog: Component<{\n style: FogSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFog(props.style)\n })\n // Remove Fog Layer\n onCleanup(() => map().setFog(null))\n\n // Update Visibility\n createEffect(async () => {\n if (props.visible === undefined) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFog(props.visible ? props.style : null)\n })\n\n return props.children\n}\n\nexport default Fog\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nconst Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n // Add Sky Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n !map().getLayer(layerId) && map().addLayer({ ...props.style, id: layerId })\n })\n\n // Remove Sky Layer\n onCleanup(() => map().getLayer(layerId) && map().removeLayer(layerId))\n\n // Update Visibility\n createEffect(async () => {\n if (props.visible === undefined) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n\nexport default Sky\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSource } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n TerrainSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nconst Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()\n const source: SourceSpecification = useSource()\n\n // Add Terrain Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setTerrain({ ...props.style, source: source.id })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(async () => {\n if (props.visible === undefined) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n\nexport default Terrain\n","import { onMount, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { Options as AttributionOptions } from 'mapbox-gl/src/ui/control/attribution_control'\nimport type { Options as FullscreenOptions } from 'mapbox-gl/src/ui/control/fullscreen_control'\nimport type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolocate_control'\nimport type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control'\nimport type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control'\n\nconst Control: Component<{\n type:\n | 'navigation'\n | 'scale'\n | 'attribution'\n | 'fullscreen'\n | 'geolocate'\n | 'language'\n | 'traffic'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n const getControl = (type, options) => {\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl(\n options || { container: map().container }\n )\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n // case 'language':\n // try {\n // const MapboxLanguage = require('@mapbox/mapbox-gl-language').default\n // return new MapboxLanguage(options)\n // } catch (e) {}\n // case 'traffic':\n // try {\n // const MapboxTraffic = require('@mapbox/mapbox-gl-traffic').default\n // require('@mapbox/mapbox-gl-traffic/mapbox-gl-traffic.css')\n // return new MapboxTraffic(options)\n // } catch (e) {}\n }\n }\n\n // Add Control\n onMount(() => {\n const control = getControl(props.type, props.options)\n control && map().addControl(control, props.position)\n setControl(control)\n })\n\n onCleanup(() => map().removeControl(control()))\n\n return props.children\n}\n\nexport default Control\n","import { onMount, onCleanup, createEffect, Component, children } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { MarkerSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nconst Marker: Component<{\n options?: MarkerSpecification\n lnglat: LngLatLike\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n onMount(async () => {\n marker = new mapboxgl.Marker(props.options)\n .setLngLat(props.lnglat)\n .setPopup(\n props.children\n ? new mapboxgl.Popup().setDOMContent(<div>{props.children}</div>)\n : null\n )\n .addTo(map())\n })\n // Remove Marker\n onCleanup(() => marker.remove())\n\n // Update Position\n createEffect(() => marker.setLngLat(props.lnglat))\n\n return <></>\n}\n\nexport default Marker\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { PopupSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nconst Popup: Component<{\n options?: PopupSpecification\n lnglat: LngLatLike\n}> = props => {\n const map: MapboxMap = useMap()\n let popup = null\n\n // Add Popup\n onMount(async () => {\n popup = new mapboxgl.Popup(props.options)\n .setLngLat(props.lnglat)\n .setDOMContent(<div>{props.children}</div>)\n .addTo(map())\n })\n // Remove Popup\n onCleanup(() => popup.remove())\n\n // Update Position\n createEffect(() => popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n\nexport default Popup\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n StyleImageInterface,\n StyleImageMetadata,\n} from 'mapbox-gl/src/style/style_image'\n\nconst Image: Component<{\n id: string\n url?: string\n image?:\n | HTMLImageElement\n | ImageBitmap\n | ImageData\n | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }\n | StyleImageInterface\n options?: StyleImageMetadata\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Image\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n if (props.url) {\n map().loadImage(props.url, (error, image) => {\n if (error) throw error\n !map().hasImage(props.id) && map().addImage(props.id, image)\n })\n } else {\n !map().hasImage(props.id) &&\n map().addImage(props.id, props.image, props.options)\n }\n })\n // Remove Image\n onCleanup(() => map().hasImage(props.id) && map().removeImage(props.id))\n\n // Update Image\n createEffect(async () => {\n if (props.image && props.url) return\n\n if (props.url) {\n map().loadImage(props.url, (error, image) => {\n if (error) throw error\n !map().hasImage(props.id) && map().updateImage(props.id, image)\n })\n } else {\n map().style &&\n map().hasImage(props.id) &&\n map().updateImage(props.id, props.image)\n }\n })\n\n return <></>\n}\n\nexport default Image\n"],"names":["mapEvents","layerEvents","pending","start","useTransition","transitionType","setTransitionType","createSignal","MapContext","createContext","useMap","useContext","MapGL","props","map","mapRef","index","id","createUniqueId","onMount","mapboxgl","Map","options","container","interactive","onViewportChange","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","style","cursor","cursorStyle","prev","setStyle","projection","setProjection","getViewport","getCenter","getZoom","getPitch","getBearing","callMove","originalEvent","callEnd","cameraForBounds","untrack","stop","easeTo","jumpTo","flyTo","triggerResize","window","requestAnimationFrame","loop","resize","Provider","value","children","class","classList","height","width","SourceContext","useSource","SourceComponent","async","isStyleLoaded","once","getSource","addSource","source","getStyle","layers","layer","removeLayer","removeSource","type","data","setData","diff","newProps","prevProps","Set","Object","keys","reduce","acc","key","push","Layer","getLayer","addLayer","beforeType","find","l","beforeId","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","filter","setFilter","undefined","visible","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","NavigationControl","ScaleControl","AttributionControl","FullscreenControl","GeolocateControl","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","url","loadImage","error","image","hasImage","addImage","removeImage","updateImage"],"mappings":"sPAAA,MAAMA,UAAsB,CAC1B,cACA,YACA,cACA,aACA,cACA,eACA,eACA,aACA,UACA,aACA,gBACA,eACA,aACA,gBACA,UACA,WACA,WACA,cACA,cACA,SACA,YACA,cACA,SACA,YACA,cACA,SACA,YACA,gBACA,WACA,aACA,eACA,UACA,aACA,iBACA,eACA,kBACA,qBACA,yBACA,SACA,WACA,SACA,UACA,SACA,cACA,eACA,gBACA,qBACA,sBACA,uBAGIC,YAAwB,CAC5B,cACA,YACA,cACA,aACA,cACA,eACA,eACA,UACA,aACA,gBACA,eACA,aACA,4DClCI,CAACC,QAASC,OAASC,gBACnB,CAACC,eAAgBC,mBAAqBC,aAAa,SAEnDC,WAAaC,gBACbC,OAAS,IAAMC,WAAWH,YAE1BI,MAoBDC,QACCC,EACAC,EAwGAC,GAvGJH,EAAMI,GAAKJ,EAAMI,IAAMC,iBAEvBC,QAAQ,KACNL,EAAM,IAAIM,SAASC,IAAI,IAClBR,EAAMS,QACTC,UAAWR,EACXS,cAAeX,EAAMY,iBACrBC,OAAQb,EAAMc,SAASD,OACvBE,OAAQf,EAAMc,SAASC,OACvBC,KAAMhB,EAAMc,SAASE,MAAQ,KAC7BC,MAAOjB,EAAMc,SAASG,OAAS,KAC/BC,QAASlB,EAAMc,SAASI,SAAW,KACnCC,iBAAkB,CAAEC,QAASpB,EAAMc,SAASM,aAIhDC,UAAU,IAAMpB,EAAIqB,UAGpBC,aAAa,IACXpC,UAAUqC,QAAQC,OACZzB,EAAMyB,GAAO,OACTC,EAAQD,EAAKE,MAAM,GAAGC,cACtBC,EAAWC,GAAK9B,EAAMyB,GAAMK,GAClC7B,EAAI8B,GAAGL,EAAOG,GACdR,UAAU,IAAMpB,EAAI+B,IAAIN,EAAOG,QAMrCN,aAAa,IAAOtB,EAAIgC,mBAAqBjC,EAAMiC,oBACnDV,aAAa,IAAOtB,EAAIiC,qBAAuBlC,EAAMkC,sBACrDX,aAAa,IAAOtB,EAAIkC,YAAcnC,EAAMmC,aAC5CZ,aAAa,IAAOtB,EAAImC,mBAAqBpC,EAAMoC,oBACnDb,aAAa,IAAOtB,EAAIoC,sBAAwBrC,EAAMqC,uBACtDd,aAAa,IAAOtB,EAAIqC,YAAYC,MAAMC,OAASxC,EAAMyC,aAGzDlB,aAAamB,IACXA,IAAS1C,EAAMS,QAAQ8B,OAAStC,EAAI0C,SAAS3C,EAAMS,QAAQ8B,QAC1DvC,EAAMS,QAAQ8B,OAGjBhB,aAAamB,IACXA,IAAS1C,EAAMS,QAAQmC,YACrB3C,EAAI4C,cAAc7C,EAAMS,QAAQmC,aACjC5C,EAAMS,QAAQmC,YAEjBrB,aAAa,IAAM9B,kBAAkBO,EAAMR,iBAG3C+B,aAAa,WACLuB,EAAc1C,KAClBA,GAAIA,EACJW,OAAQd,EAAI8C,YACZ/B,KAAMf,EAAI+C,UACV/B,MAAOhB,EAAIgD,WACX/B,QAASjB,EAAIiD,aACb9B,QAASpB,EAAMc,SAASM,QACxBP,OAAQb,EAAMc,SAASD,SAGnBsC,EAAWzB,IACXA,EAAM0B,eAAepD,EAAMY,iBAAiBkC,EAAY9C,EAAMI,KAClEX,kBAAkB,WAGd4D,EAAU3B,IACVA,EAAM0B,eAAepD,EAAMY,iBAAiBkC,EAAY,OAC5DrD,kBAAkBO,EAAMR,iBAG1BS,EAAI8B,GAAG,OAAQoB,GAAUpB,GAAG,UAAWsB,GACvChC,UAAU,IAAMpB,EAAI+B,IAAI,OAAQmB,GAAUnB,IAAI,UAAWqB,MAI3D9B,aAAamB,IACP1C,EAAMc,SAASD,QAAU6B,GAC3B1C,EAAMY,iBAAiB,IAClBZ,EAAMc,YACNb,EAAIqD,gBAAgBtD,EAAMc,SAASD,OAAQ,CAC5CO,QAASpB,EAAMc,SAASM,YAGvBpB,EAAMc,SAASD,QACrBb,EAAMc,SAASD,QAGlBU,aAAa,QACPvB,EAAMI,KAAOJ,EAAMc,SAASV,QAC1BU,EAAW,IAAKd,EAAMc,SAAUM,QAASpB,EAAMc,SAASM,SAAW,UACjEmC,QAAQ/D,qBACT,SACHS,EAAIuD,OAAOC,OAAO3C,OACf,SACHb,EAAIuD,OAAOE,OAAO5C,WAElBb,EAAIuD,OAAOG,MAAM7C,OAIX,UAEZS,aAAa,KACPvB,EAAM4D,gBACRzD,EAAQ,EACR0D,OAAOC,sBAAsB,SAASC,IAChC5D,EAAQ,KACVA,IACA0D,OAAOC,sBAAsBC,GAC7BzE,MAAM,IAAMW,EAAI+D,gCAOrBrE,WAAWsE,UAASC,MAAO,IAAMjE,iCAC/BD,EAAMmE,iDAEAjE,kCAAAA,qBACEF,EAAMoE,OAAS,KACXpE,EAAMqE,YACV,CAAEC,OAAQ,OAAQC,MAAO,UAAWvE,EAAMuC,yJCzKnDiC,cAAgB5E,gBAEhB6E,UAAY,IAAc3E,WAAW0E,eAErCE,gBAGD1E,UACGC,EAAiBJ,gBACvBG,EAAMI,GAAKJ,EAAMI,IAAMC,iBAEvBC,QAAQqE,UACL1E,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC3C5E,IAAM6E,UAAU9E,EAAMI,KAAOH,IAAM8E,UAAU/E,EAAMI,GAAIJ,EAAMgF,UAIhE3D,UAAU,KACRpB,IACGgF,WACAC,OAAO1D,QACN2D,GAASA,EAAMH,SAAWhF,EAAMI,IAAMH,IAAMmF,YAAYD,EAAM/E,KAElEH,IAAM6E,UAAU9E,EAAMI,KAAOH,IAAMoF,aAAarF,EAAMI,MAIxDmB,aAAaoD,WACe,YAAtB3E,EAAMgF,OAAOM,MAAuBtF,EAAMgF,OAAOO,OAErDtF,IAAMsC,OACJtC,IAAM6E,UAAU9E,EAAMI,KACtBH,IAAM6E,UAAU9E,EAAMI,IAAIoF,QAAQxF,EAAMgF,OAAOO,wBAIhDf,cAAcP,4BAAgB,CAAE7D,GAAIJ,EAAMI,2BACxCJ,EAAMmE,aCnCPsB,KAAO,CACXC,EAA+B,GAC/BC,EAAgC,YAGzB,IADM,IAAIC,IAAI,IAAIC,OAAOC,KAAKJ,MAAcG,OAAOC,KAAKH,MAC9CI,OAAO,CAACC,EAAKC,SACtB/B,EAAQwB,EAASO,UACnB/B,IAAUyB,EAAUM,IACtBD,EAAIE,KAAK,CAACD,EAAK/B,IAEV8B,GACN,KAGCG,MAoBDnG,UACGC,EAAiBJ,SACjBmF,EAA8BP,mBACpCzE,EAAMI,GAAKJ,EAAMI,IAAMC,iBAEvBC,QAAQqE,UACL1E,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAExC5E,IAAMmG,SAASpG,EAAMI,KAEzBH,IAAMoG,SACJrG,EAAMmF,OAAS,IACVnF,EAAMuC,MACTnC,GAAIJ,EAAMI,GACV4E,OAAQA,EAAO5E,IAEjBJ,EAAMsG,WACFrG,IACGgF,WACAC,OAAOqB,KAAKC,GAAKA,EAAElB,OAAStF,EAAMsG,YAAYlG,GACjDJ,EAAMyG,YAIdpF,UAAU,IAAMpB,IAAMmF,YAAYpF,EAAMI,KAGxCmB,aAAa,IACXnC,YAAYoC,QAAQC,OACdzB,EAAMyB,GAAO,OACTC,EAAQD,EAAKE,MAAM,GAAGC,cACtBC,EAAWC,GAAK9B,EAAMyB,GAAMK,GAClC7B,IAAM8B,GAAGL,EAAO1B,EAAMI,GAAIyB,GAC1BR,UAAU,IAAMpB,IAAM+B,IAAIN,EAAO1B,EAAMI,GAAIyB,QAMjDN,aAAcmB,OAET1C,EAAMuC,OACNtC,IAAMsC,OACNtC,IAAM6E,UAAUE,EAAO5E,KACvBH,IAAMmG,SAASpG,EAAMI,WAIpBJ,EAAMuC,MAAMmE,UAAWhE,MAAAA,SAAAA,EAAMgE,SAC/BjB,KAAKzF,EAAMuC,MAAMmE,OAAQhE,MAAAA,SAAAA,EAAMgE,QAAQlF,QAAQ,CAAA,CAAEyE,EAAK/B,KACpDjE,IAAM0G,kBAAkB3G,EAAMI,GAAI6F,EAAK/B,EAAO,CAAE0C,UAAU,KAG1D5G,EAAMuC,MAAMsE,SAAUnE,MAAAA,SAAAA,EAAMmE,QAC9BpB,KAAKzF,EAAMuC,MAAMsE,MAAOnE,MAAAA,SAAAA,EAAMmE,OAAOrF,QAAQ,CAAA,CAAEyE,EAAK/B,KAClDjE,IAAM6G,iBAAiB9G,EAAMI,GAAI6F,EAAK/B,EAAO,CAAE0C,UAAU,KAI3D5G,EAAMuC,MAAMwE,WAAYrE,MAAAA,SAAAA,EAAMqE,UAC9B/G,EAAMuC,MAAMyE,WAAYtE,MAAAA,SAAAA,EAAMsE,UAE9B/G,IAAMgH,kBACJjH,EAAMI,GACNJ,EAAMuC,MAAMwE,QACZ/G,EAAMuC,MAAMyE,SAGZhH,EAAMuC,MAAM2E,UAAWxE,MAAAA,SAAAA,EAAMwE,SAC/BjH,IAAMkH,UAAUnH,EAAMI,GAAIJ,EAAMuC,MAAM2E,OAAQ,CAAEN,UAAU,IAErD5G,EAAMuC,OACZvC,EAAMuC,OAGThB,aAAcmB,YAEQ0E,IAAlBpH,EAAMqH,SACNrH,EAAMqH,UAAY3E,GACjBzC,IAAM6E,UAAUE,EAAO5E,KACvBH,IAAMmG,SAASpG,EAAMI,WAIxBH,IAAM0G,kBACJ3G,EAAMI,GACN,aACAJ,EAAMqH,QAAU,UAAY,OAC5B,CAAET,UAAU,IAEP5G,EAAMqH,SACZrH,EAAMqH,SAGT9F,aAAaoD,UACN3E,EAAMkH,SAEVjH,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC5C5E,IAAMkH,UAAUnH,EAAMI,GAAIJ,EAAMkH,WAIlC3F,aAAaoD,UACN3E,EAAMsH,cAAiBtH,EAAMsH,aAAalH,KAE9CH,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAE5C5E,IAAMsH,mBAAmB,CACvBvC,OAAQA,EAAO5E,GACfoH,YAAaxH,EAAMuC,MAAM,kBAE3BtC,IAAMwH,gBACJ,CACEzC,OAAQA,EAAO5E,GACfoH,YAAaxH,EAAMuC,MAAM,gBACzBnC,GAAIJ,EAAMsH,aAAalH,IAEzBJ,EAAMsH,aAAaI,UAIhB1H,EAAMmE,UCxKTwD,IAGD3H,UACGC,EAAiBJ,gBAEvBS,QAAQqE,UACL1E,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC5C5E,IAAM2H,OAAO5H,EAAMuC,SAGrBlB,UAAU,IAAMpB,IAAM2H,OAAO,OAG7BrG,aAAaoD,eACWyC,IAAlBpH,EAAMqH,UAETpH,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC5C5E,IAAM2H,OAAO5H,EAAMqH,QAAUrH,EAAMuC,MAAQ,SAGtCvC,EAAMmE,UCrBT0D,IAGD7H,UACGC,EAAiBJ,SACjBiI,EAAU,cAEhBxH,QAAQqE,UACL1E,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC3C5E,IAAMmG,SAAS0B,IAAY7H,IAAMoG,SAAS,IAAKrG,EAAMuC,MAAOnC,GAAI0H,MAInEzG,UAAU,IAAMpB,IAAMmG,SAAS0B,IAAY7H,IAAMmF,YAAY0C,IAG7DvG,aAAaoD,eACWyC,IAAlBpH,EAAMqH,UAETpH,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC5C5E,IAAM0G,kBACJmB,EACA,aACA9H,EAAMqH,QAAU,UAAY,WAIzBrH,EAAMmE,UCvBT4D,QAGD/H,UACGC,EAAiBJ,SACjBmF,EAA8BP,mBAGpCnE,QAAQqE,UACL1E,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC5C5E,IAAM+H,WAAW,IAAKhI,EAAMuC,MAAOyC,OAAQA,EAAO5E,OAIpDiB,UAAU,IAAMpB,IAAM+H,WAAW,OAGjCzG,aAAaoD,eACWyC,IAAlBpH,EAAMqH,UAETpH,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aAC5C5E,IAAM+H,WAAWhI,EAAMqH,QAAUrH,EAAMuC,MAAQ,SAG1CvC,EAAMmE,UCvBT8D,QAgBDjI,UACGC,EAAiBJ,SACjB,CAACqI,EAASC,GAAczI,aAAa,aA+B3CY,QAAQ,SACA4H,GA9BW,CAAC5C,EAAM7E,YAChB6E,OACD,oBACI,IAAI/E,SAAS6H,kBAAkB3H,OACnC,eACI,IAAIF,SAAS8H,aAAa5H,OAC9B,qBACI,IAAIF,SAAS+H,mBAAmB7H,OACpC,oBACI,IAAIF,SAASgI,kBAClB9H,GAAW,CAAEC,UAAWT,IAAMS,gBAE7B,mBACI,IAAIH,SAASiI,iBAAiB/H,KAiBzBgI,CAAWzI,EAAMsF,KAAMtF,EAAMS,SAC7CyH,GAAWjI,IAAMyI,WAAWR,EAASlI,EAAM2I,UAC3CR,EAAWD,KAGb7G,UAAU,IAAMpB,IAAM2I,cAAcV,MAE7BlI,EAAMmE,6CC5DT0E,OAGD7I,UACGC,EAAiBJ,aACnBiJ,EAAS,YAGbxI,QAAQqE,gBACNmE,EAAS,IAAIvI,SAASsI,OAAO7I,EAAMS,SAChCsI,UAAU/I,EAAMgJ,QAChBC,SACCjJ,EAAMmE,UACF,IAAI5D,SAAS2I,OAAQC,qDAAoBnJ,EAAMmE,cAC/C,MAELiF,MAAMnJ,OAGXoB,UAAU,IAAMyH,EAAOxH,UAGvBC,aAAa,IAAMuH,EAAOC,UAAU/I,EAAMgJ,8CCtBtCE,MAGDlJ,UACGC,EAAiBJ,aACnBwJ,EAAQ,YAGZ/I,QAAQqE,gBACN0E,EAAQ,IAAI9I,SAAS2I,MAAMlJ,EAAMS,SAC9BsI,UAAU/I,EAAMgJ,QAChBG,mDAAoBnJ,EAAMmE,cAC1BiF,MAAMnJ,OAGXoB,UAAU,IAAMgI,EAAM/H,UAGtBC,aAAa,IAAM8H,EAAMN,UAAU/I,EAAMgJ,SAGzCzH,aAAa,IAAM8H,EAAMF,mEAAoBnJ,EAAMmE,sBCpB/CmF,MAUDtJ,UACGC,EAAiBJ,gBAEvBS,QAAQqE,UACL1E,IAAM2E,uBAA0B3E,IAAM4E,KAAK,aACxC7E,EAAMuJ,IACRtJ,IAAMuJ,UAAUxJ,EAAMuJ,IAAK,CAACE,EAAOC,QAC7BD,EAAO,MAAMA,EAChBxJ,IAAM0J,SAAS3J,EAAMI,KAAOH,IAAM2J,SAAS5J,EAAMI,GAAIsJ,KAGvDzJ,IAAM0J,SAAS3J,EAAMI,KACpBH,IAAM2J,SAAS5J,EAAMI,GAAIJ,EAAM0J,MAAO1J,EAAMS,WAIlDY,UAAU,IAAMpB,IAAM0J,SAAS3J,EAAMI,KAAOH,IAAM4J,YAAY7J,EAAMI,KAGpEmB,aAAaoD,UACP3E,EAAM0J,OAAS1J,EAAMuJ,MAErBvJ,EAAMuJ,IACRtJ,IAAMuJ,UAAUxJ,EAAMuJ,IAAK,CAACE,EAAOC,QAC7BD,EAAO,MAAMA,EAChBxJ,IAAM0J,SAAS3J,EAAMI,KAAOH,IAAM6J,YAAY9J,EAAMI,GAAIsJ,KAG3DzJ,IAAMsC,OACJtC,IAAM0J,SAAS3J,EAAMI,KACrBH,IAAM6J,YAAY9J,EAAMI,GAAIJ,EAAM0J"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/components/MapGL/index.tsx","../../src/components/Source/index.tsx","../../src/components/Layer/index.tsx","../../src/components/Fog/index.tsx","../../src/components/Sky/index.tsx","../../src/components/Terrain/index.tsx","../../src/components/Control/index.tsx","../../src/components/Marker/index.tsx","../../src/components/Popup/index.tsx","../../src/components/Image/index.tsx"],"sourcesContent":["const mapEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onPreClick',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n 'onWheel',\n 'onResize',\n 'onRemove',\n 'onTouchMove',\n 'onMoveStart',\n 'onMove',\n 'onMoveEnd',\n 'onDragStart',\n 'onDrag',\n 'onDragEnd',\n 'onZoomStart',\n 'onZoom',\n 'onZoomEnd',\n 'onRotateStart',\n 'onRotate',\n 'onRotatEnd',\n 'onPitchStart',\n 'onPitch',\n 'onPitchEnd',\n 'onBoxZoomStart',\n 'onBoxZoomEnd',\n 'onBoxZoomCancel',\n 'onWebglContextLost',\n 'onWebglContextRestored',\n 'onLoad',\n 'onRender',\n 'onIdle',\n 'onError',\n 'onData',\n 'onStyleData',\n 'onSourceData',\n 'onDataLoading',\n 'onStyleDataLoading',\n 'onSourceDataLoading',\n 'onStyleImageMissing',\n]\n\nconst layerEvents: string[] = [\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onClick',\n 'onDblClick',\n 'onContextMenu',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchCancel',\n]\n\nexport { mapEvents, layerEvents }\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\nimport type { MapboxMap, MapboxOptions } from 'mapbox-gl/src/ui/map'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\nimport type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js'\nimport type { PaddingOptions } from 'mapbox-gl/src/geo/edge_insets.js'\nimport type { JSX } from 'solid-js'\n\nexport type Viewport = {\n id?: string\n center?: LngLatLike\n bounds?: LngLatBounds\n zoom?: number\n pitch?: number\n bearing?: number\n padding?: PaddingOptions\n}\n\nconst [pending, start] = useTransition()\nconst [transitionType, setTransitionType] = createSignal('flyTo')\n\nconst MapContext = createContext<MapboxMap>()\nconst useMap = () => useContext(MapContext)\n\nconst MapGL: Component<{\n id?: string\n style?: JSX.CSSProperties\n class?: string\n classList?: {\n [k: string]: boolean | undefined\n }\n viewport?: Viewport\n options?: MapboxOptions\n children?: Element | Element[]\n triggerResize?: boolean\n transitionType?: 'flyTo' | 'easeTo' | 'jumpTo'\n onViewportChange?: (viewport: Viewport) => void\n showTileBoundaries?: boolean\n showTerrainWireframe?: boolean\n showPadding?: boolean\n showCollisionBoxes?: boolean\n showOverdrawInspector?: boolean\n repaint?: boolean\n cursorStyle?: string\n ref?: HTMLDivElement\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLDivElement\n props.id = props.id || createUniqueId()\n\n onMount(() => {\n map = new mapboxgl.Map({\n ...props.options,\n container: mapRef,\n interactive: !!props.onViewportChange,\n bounds: props.viewport.bounds,\n center: props.viewport.center,\n zoom: props.viewport.zoom || null,\n pitch: props.viewport.pitch || null,\n bearing: props.viewport.bearing || null,\n fitBoundsOptions: { padding: props.viewport.padding },\n } as MapboxOptions)\n })\n\n onCleanup(() => map.remove())\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map.on(event, callback)\n onCleanup(() => map.off(event, callback))\n }\n })\n )\n\n // Update debug features\n createEffect(() => (map.showTileBoundaries = props.showTileBoundaries))\n createEffect(() => (map.showTerrainWireframe = props.showTerrainWireframe))\n createEffect(() => (map.showPadding = props.showPadding))\n createEffect(() => (map.showCollisionBoxes = props.showCollisionBoxes))\n createEffect(() => (map.showOverdrawInspector = props.showOverdrawInspector))\n createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle))\n\n // Update map style\n createEffect(prev => {\n prev !== props.options.style && map.setStyle(props.options.style)\n }, props.options.style)\n\n // Update projection\n createEffect(prev => {\n prev !== props.options.projection &&\n map.setProjection(props.options.projection)\n }, props.options.projection)\n\n createEffect(() => setTransitionType(props.transitionType))\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport.padding,\n bounds: props.viewport.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent) props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport.bounds, {\n padding: props.viewport.padding,\n }),\n })\n return props.viewport.bounds\n }, props.viewport.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport.id) return\n const viewport = { ...props.viewport, padding: props.viewport.padding || 0 }\n switch (untrack(transitionType)) {\n case 'easeTo':\n map.stop().easeTo(viewport)\n case 'jumpTo':\n map.stop().jumpTo(viewport)\n default:\n map.stop().flyTo(viewport)\n }\n })\n\n let index = 0\n\n createEffect(() => {\n if (props.triggerResize) {\n index = 0\n window.requestAnimationFrame(function loop() {\n if (index < 15) {\n index++\n window.requestAnimationFrame(loop)\n start(() => map.resize())\n }\n })\n }\n })\n\n return (\n <MapContext.Provider value={() => map}>\n {props.children}\n <section\n ref={mapRef}\n class={props.class || ''}\n classList={props.classList}\n style={{ height: '100%', width: '100%', ...props.style }}></section>\n </MapContext.Provider>\n )\n}\n\nexport { MapGL as default, useMap }\n","import {\n onMount,\n onCleanup,\n createEffect,\n Component,\n createContext,\n useContext,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n Source,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nconst SourceContext = createContext<Source>()\n\nconst useSource = (): Source => useContext(SourceContext)\n\nconst SourceComponent: Component<{\n id?: string\n source: SourceSpecification\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n // Add Source\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n !map().getSource(props.id) && map().addSource(props.id, props.source)\n })\n\n // Remove Source\n onCleanup(() => {\n map()\n .getStyle()\n .layers.forEach(\n layer => layer.source === props.id && map().removeLayer(layer.id)\n )\n map().getSource(props.id) && map().removeSource(props.id)\n })\n\n // Update GeoJSON Data\n createEffect(async () => {\n if (props.source.type !== 'geojson' && !props.source.data) return\n\n map().style &&\n map().getSource(props.id) &&\n map().getSource(props.id).setData(props.source.data)\n })\n\n return (\n <SourceContext.Provider value={{ id: props.id }}>\n {props.children}\n </SourceContext.Provider>\n )\n}\n\nexport { SourceComponent as default, useSource }\n","import {\n onMount,\n onCleanup,\n createEffect,\n Component,\n createUniqueId,\n} from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSource } from '../Source'\nimport { layerEvents } from '../../events'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n FilterSpecification,\n StyleSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\nimport type { CustomLayerInterface } from 'mapbox-gl/src/style/style_layer/custom_style_layer'\n\nconst diff = (\n newProps: StyleSpecification = {},\n prevProps: StyleSpecification = {}\n) => {\n const keys = new Set([...Object.keys(newProps), ...Object.keys(prevProps)])\n return [...keys].reduce((acc, key: string) => {\n const value = newProps[key]\n if (value !== prevProps[key]) {\n acc.push([key, value])\n }\n return acc\n }, [])\n}\n\nconst Layer: Component<{\n id?: string\n style?: StyleSpecification\n layer?: CustomLayerInterface\n filter?: FilterSpecification\n visible?: boolean\n sourceId?: string\n beforeType?:\n | 'background'\n | 'fill'\n | 'line'\n | 'symbol'\n | 'raster'\n | 'circle'\n | 'fill-extrusion'\n | 'heatmap'\n | 'hillshade'\n | 'sky'\n beforeId?: string\n featureState?: { id: number | string; state: object }\n}> = props => {\n const map: MapboxMap = useMap()\n const source: SourceSpecification = useSource()\n props.id = props.id || createUniqueId()\n // Add Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n if (map().getLayer(props.id)) return\n\n map().addLayer(\n props.layer || {\n ...props.style,\n id: props.id,\n source: source.id,\n },\n props.beforeType\n ? map()\n .getStyle()\n .layers.find(l => l.type === props.beforeType).id\n : props.beforeId\n )\n })\n\n onCleanup(() => map().removeLayer(props.id))\n\n // Hook up events\n createEffect(() =>\n layerEvents.forEach(item => {\n if (props[item]) {\n const event = item.slice(2).toLowerCase()\n const callback = e => props[item](e)\n map().on(event, props.id, callback)\n onCleanup(() => map().off(event, props.id, callback))\n }\n })\n )\n\n // Update Style\n createEffect((prev: StyleSpecification) => {\n if (\n !props.style ||\n !map().style ||\n !map().getSource(source.id) ||\n !map().getLayer(props.id)\n )\n return\n\n if (props.style.layout !== prev?.layout)\n diff(props.style.layout, prev?.layout).forEach(([key, value]) =>\n map().setLayoutProperty(props.id, key, value, { validate: false })\n )\n\n if (props.style.paint !== prev?.paint)\n diff(props.style.paint, prev?.paint).forEach(([key, value]) =>\n map().setPaintProperty(props.id, key, value, { validate: false })\n )\n\n if (\n props.style.minzoom !== prev?.minzoom ||\n props.style.maxzoom !== prev?.maxzoom\n )\n map().setLayerZoomRange(\n props.id,\n props.style.minzoom,\n props.style.maxzoom\n )\n\n if (props.style.filter !== prev?.filter)\n map().setFilter(props.id, props.style.filter, { validate: false })\n\n return props.style\n }, props.style)\n\n // Update Visibility\n createEffect((prev: boolean) => {\n if (\n props.visible === undefined ||\n props.visible === prev ||\n !map().getSource(source.id) ||\n !map().getLayer(props.id)\n )\n return\n\n map().setLayoutProperty(\n props.id,\n 'visibility',\n props.visible ? 'visible' : 'none',\n { validate: false }\n )\n return props.visible\n }, props.visible)\n\n // Update Filter\n createEffect(async () => {\n if (!props.filter) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFilter(props.id, props.filter)\n })\n\n // Update Feature State\n createEffect(async () => {\n if (!props.featureState || !props.featureState.id) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n\n map().removeFeatureState({\n source: source.id,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: source.id,\n sourceLayer: props.style['source-layer'],\n id: props.featureState.id,\n },\n props.featureState.state\n )\n })\n\n return props.children\n}\n\nexport default Layer\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { FogSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nconst Fog: Component<{\n style: FogSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFog(props.style)\n })\n // Remove Fog Layer\n onCleanup(() => map().setFog(null))\n\n // Update Visibility\n createEffect(async () => {\n if (props.visible === undefined) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setFog(props.visible ? props.style : null)\n })\n\n return props.children\n}\n\nexport default Fog\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { StyleSpecification } from 'mapbox-gl/src/style-spec/types.js'\n\nconst Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n // Add Sky Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n !map().getLayer(layerId) && map().addLayer({ ...props.style, id: layerId })\n })\n\n // Remove Sky Layer\n onCleanup(() => map().getLayer(layerId) && map().removeLayer(layerId))\n\n // Update Visibility\n createEffect(async () => {\n if (props.visible === undefined) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n\nexport default Sky\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSource } from '../Source'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n TerrainSpecification,\n SourceSpecification,\n} from 'mapbox-gl/src/style-spec/types.js'\n\nconst Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n}> = props => {\n const map: MapboxMap = useMap()\n const source: SourceSpecification = useSource()\n\n // Add Terrain Layer\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setTerrain({ ...props.style, source: source.id })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(async () => {\n if (props.visible === undefined) return\n\n !map().isStyleLoaded() && (await map().once('styledata'))\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n\nexport default Terrain\n","import { onMount, onCleanup, createSignal, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { Options as AttributionOptions } from 'mapbox-gl/src/ui/control/attribution_control'\nimport type { Options as FullscreenOptions } from 'mapbox-gl/src/ui/control/fullscreen_control'\nimport type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolocate_control'\nimport type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control'\nimport type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control'\n\nconst Control: Component<{\n type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n | object\n custom?: any\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl(\n options || { container: map().container }\n )\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n // Add Control\n onMount(() => {\n const control = getControl(props.type, props.options)\n control && map().addControl(control, props.position)\n setControl(control)\n })\n\n onCleanup(() => map().removeControl(control()))\n\n return props.children\n}\n\nexport default Control\n","import { onMount, onCleanup, createEffect, Component, children } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { MarkerSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nconst Marker: Component<{\n options?: MarkerSpecification\n lnglat: LngLatLike\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n onMount(async () => {\n marker = new mapboxgl.Marker(props.options)\n .setLngLat(props.lnglat)\n .setPopup(\n props.children\n ? new mapboxgl.Popup().setDOMContent(<div>{props.children}</div>)\n : null\n )\n .addTo(map())\n })\n // Remove Marker\n onCleanup(() => marker.remove())\n\n // Update Position\n createEffect(() => marker.setLngLat(props.lnglat))\n\n return <></>\n}\n\nexport default Marker\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport mapboxgl from 'mapbox-gl'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type { PopupSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nconst Popup: Component<{\n options?: PopupSpecification\n lnglat: LngLatLike\n}> = props => {\n const map: MapboxMap = useMap()\n let popup = null\n\n // Add Popup\n onMount(async () => {\n popup = new mapboxgl.Popup(props.options)\n .setLngLat(props.lnglat)\n .setDOMContent(<div>{props.children}</div>)\n .addTo(map())\n })\n // Remove Popup\n onCleanup(() => popup.remove())\n\n // Update Position\n createEffect(() => popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n\nexport default Popup\n","import { onMount, onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n StyleImageInterface,\n StyleImageMetadata,\n} from 'mapbox-gl/src/style/style_image'\n\nconst Image: Component<{\n id: string\n url?: string\n image?:\n | HTMLImageElement\n | ImageBitmap\n | ImageData\n | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }\n | StyleImageInterface\n options?: StyleImageMetadata\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Image\n onMount(async () => {\n !map().isStyleLoaded() && (await map().once('styledata'))\n if (props.url) {\n map().loadImage(props.url, (error, image) => {\n if (error) throw error\n !map().hasImage(props.id) && map().addImage(props.id, image)\n })\n } else {\n !map().hasImage(props.id) &&\n map().addImage(props.id, props.image, props.options)\n }\n })\n // Remove Image\n onCleanup(() => map().hasImage(props.id) && map().removeImage(props.id))\n\n // Update Image\n createEffect(async () => {\n if (props.image && props.url) return\n\n if (props.url) {\n map().loadImage(props.url, (error, image) => {\n if (error) throw error\n !map().hasImage(props.id) && map().updateImage(props.id, image)\n })\n } else {\n map().style &&\n map().hasImage(props.id) &&\n map().updateImage(props.id, props.image)\n }\n })\n\n return <></>\n}\n\nexport default Image\n"],"names":["mapEvents","layerEvents","pending","start","useTransition","transitionType","setTransitionType","createSignal","MapContext","createContext","useMap","useContext","MapGL","props","map","mapRef","index","id","createUniqueId","onMount","mapboxgl","Map","options","container","interactive","onViewportChange","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","style","cursor","cursorStyle","prev","setStyle","projection","setProjection","getCenter","getZoom","getPitch","getBearing","callMove","originalEvent","callEnd","cameraForBounds","untrack","stop","easeTo","jumpTo","flyTo","triggerResize","window","requestAnimationFrame","loop","resize","Provider","value","children","class","classList","height","width","SourceContext","useSource","SourceComponent","async","isStyleLoaded","once","getSource","addSource","source","getStyle","layers","layer","removeLayer","removeSource","type","data","setData","diff","newProps","prevProps","Set","Object","keys","reduce","acc","key","push","Layer","getLayer","addLayer","beforeType","find","l","beforeId","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","filter","setFilter","undefined","visible","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","url","loadImage","error","image","hasImage","addImage","removeImage","updateImage"],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ const Control = props => {
|
|
|
5
5
|
const map = useMap();
|
|
6
6
|
const [control, setControl] = createSignal(null);
|
|
7
7
|
const getControl = (type, options) => {
|
|
8
|
+
if (props.custom)
|
|
9
|
+
return new props.custom(options);
|
|
8
10
|
switch (type) {
|
|
9
11
|
case 'navigation':
|
|
10
12
|
return new mapboxgl.NavigationControl(options);
|
|
@@ -12,21 +14,12 @@ const Control = props => {
|
|
|
12
14
|
return new mapboxgl.ScaleControl(options);
|
|
13
15
|
case 'attribution':
|
|
14
16
|
return new mapboxgl.AttributionControl(options);
|
|
15
|
-
case 'fullscreen':
|
|
16
|
-
return new mapboxgl.FullscreenControl(options || { container: map().container });
|
|
17
17
|
case 'geolocate':
|
|
18
18
|
return new mapboxgl.GeolocateControl(options);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// } catch (e) {}
|
|
24
|
-
// case 'traffic':
|
|
25
|
-
// try {
|
|
26
|
-
// const MapboxTraffic = require('@mapbox/mapbox-gl-traffic').default
|
|
27
|
-
// require('@mapbox/mapbox-gl-traffic/mapbox-gl-traffic.css')
|
|
28
|
-
// return new MapboxTraffic(options)
|
|
29
|
-
// } catch (e) {}
|
|
19
|
+
case 'fullscreen':
|
|
20
|
+
return new mapboxgl.FullscreenControl(options || { container: map().container });
|
|
21
|
+
default:
|
|
22
|
+
throw new Error(`Unknown control type: ${type}`);
|
|
30
23
|
}
|
|
31
24
|
};
|
|
32
25
|
// Add Control
|
|
@@ -52,23 +52,23 @@ const MapGL = props => {
|
|
|
52
52
|
createEffect(() => setTransitionType(props.transitionType));
|
|
53
53
|
// Hook up viewport events
|
|
54
54
|
createEffect(() => {
|
|
55
|
-
const
|
|
56
|
-
id:
|
|
55
|
+
const viewport = {
|
|
56
|
+
id: null,
|
|
57
57
|
center: map.getCenter(),
|
|
58
58
|
zoom: map.getZoom(),
|
|
59
59
|
pitch: map.getPitch(),
|
|
60
60
|
bearing: map.getBearing(),
|
|
61
61
|
padding: props.viewport.padding,
|
|
62
62
|
bounds: props.viewport.bounds,
|
|
63
|
-
}
|
|
63
|
+
};
|
|
64
64
|
const callMove = event => {
|
|
65
65
|
if (event.originalEvent)
|
|
66
|
-
props.onViewportChange(
|
|
66
|
+
props.onViewportChange({ ...viewport, id: props.id });
|
|
67
67
|
setTransitionType('jumpTo');
|
|
68
68
|
};
|
|
69
69
|
const callEnd = event => {
|
|
70
70
|
if (event.originalEvent)
|
|
71
|
-
props.onViewportChange(
|
|
71
|
+
props.onViewportChange(viewport);
|
|
72
72
|
setTransitionType(props.transitionType);
|
|
73
73
|
};
|
|
74
74
|
map.on('move', callMove).on('moveend', callEnd);
|
|
@@ -5,8 +5,9 @@ import type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolo
|
|
|
5
5
|
import type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control';
|
|
6
6
|
import type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control';
|
|
7
7
|
declare const Control: Component<{
|
|
8
|
-
type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'
|
|
9
|
-
options?: NavigationOptions | ScaleOptions | AttributionOptions | FullscreenOptions | GeolocateOptions;
|
|
8
|
+
type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate';
|
|
9
|
+
options?: NavigationOptions | ScaleOptions | AttributionOptions | FullscreenOptions | GeolocateOptions | object;
|
|
10
|
+
custom?: any;
|
|
10
11
|
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
11
12
|
}>;
|
|
12
13
|
export default Control;
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.1.
|
|
2
|
+
"version": "1.1.26",
|
|
3
3
|
"name": "solid-map-gl",
|
|
4
4
|
"description": "Solid Component Library for Mapbox GL JS",
|
|
5
5
|
"info": "Solid Component Library for Mapbox GL JS. Mapbox GL JS is a JavaScript library that renders interactive maps from vector tiles and Mapbox styles using WebGL. This project is intended to be as close as possible to the Mapbox GL JS API.",
|