solid-map-gl 1.1.10 → 1.1.13

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 CHANGED
@@ -10,6 +10,9 @@
10
10
 
11
11
  [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
12
 
13
+ ### [Examples & Playground](https://determined-mirzakhani-29bbc7.netlify.app/)
14
+ <br>
15
+
13
16
  - [Installation](#installation)
14
17
  - [Components](#components)
15
18
  - [Usage](#usage)
@@ -17,7 +20,6 @@
17
20
  - [Interactive Map](#interactive-map)
18
21
  - [Map with Source and Layer](#map-with-source-and-layer)
19
22
  - [Map with GeoJSON Source](#map-with-geojson-source)
20
- - [Examples](#examples)
21
23
  - [Roadmap](#roadmap)
22
24
 
23
25
  <br>
@@ -246,13 +248,6 @@ const myDeckLayer = new MapboxLayer({
246
248
  <Layer customLayer={myDeckLayer} />
247
249
  </MapGL>
248
250
  ```
249
-
250
- ## Examples
251
-
252
- #### Coming Soon
253
-
254
- <br>
255
-
256
251
  ## Roadmap
257
252
 
258
253
  - [x] Basic Mapbox GL Functionality
@@ -260,5 +255,6 @@ const myDeckLayer = new MapboxLayer({
260
255
  - [x] Include Fog, Sky, and Terrain
261
256
  - [x] Include Popup and Markers
262
257
  - [x] Minify bundle & reduce size
263
- - [ ] Add basemap switching
258
+ - [x] Add basemap switching
259
+ - [x] Include event handling
264
260
  - [ ] Add edit functionality
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{template,createComponent,memo,effect,classList,insert}from"solid-js/web";import{useTransition,createContext,useContext,onCleanup,onMount,createEffect,createMemo,createUniqueId,createSignal}from"solid-js";import mapboxgl from"mapbox-gl";const _tmpl$$2=template("<main></main>",2),[pending,start]=useTransition(),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=n=>{let a,t;onCleanup(()=>a.remove()),onMount(()=>{a=new mapboxgl.Map({...n.options,container:t,interactive:n.onViewportChange,bounds:n.viewport.bounds,center:n.viewport.center,zoom:n.viewport.zoom||null,pitch:n.viewport.pitch||null,bearing:n.viewport.bearing||null,fitBoundsOptions:{padding:n.viewport.padding}}),a.container=void 0}),createEffect(()=>a.on("mousemove",e=>n.onMouseMove(e.lngLat))),createMemo(()=>a&&a.setStyle(n.options.style));const e=e=>{e.isInternal||(e={center:a.getCenter(),zoom:a.getZoom(),pitch:a.getPitch(),bearing:a.getBearing(),padding:n.viewport.padding,bounds:n.viewport.bounds},n.onViewportChange(e))};createEffect(()=>n.onViewportChange&&a.on("dragend",e).on("moveend",e).on("zoomend",e).on("rotateend",e).on("pitchend",e).on("boxzoomend",e)),createMemo(()=>{var e;a&&(e=a.cameraForBounds(n.viewport.bounds,{padding:n.viewport.padding}),n.onViewportChange({...n.viewport,...e}))}),createEffect(async e=>{var t=n.viewport,o={...t.zoom!=e.zoom&&{zoom:t.zoom},...t.padding!=e.padding&&{padding:t.padding},...t.bearing!=e.bearing&&{bearing:t.bearing},...t.pitch!=e.pitch&&{pitch:t.pitch},...t.center!=e.center&&{center:t.center.lng?[t.center.lng,t.center.lat]:t.center}};if(Object.keys(o).length)switch(a.stop(),n.transitionType){case"easeTo":a.easeTo(o,{isInternal:!0});case"jumpTo":a.jumpTo(o,{isInternal:!0});default:a.flyTo(o,{isInternal:!0})}return t},n.viewport);let o=0;return createEffect(()=>{n.triggerResize&&(o=0,window.requestAnimationFrame(function e(){o<15&&(o++,window.requestAnimationFrame(e),start(()=>a.resize()))}))}),createComponent(MapContext.Provider,{value:()=>a,get children(){return[memo(()=>n.children),(()=>{const a=_tmpl$$2.cloneNode(!0),e=t;return"function"==typeof e?e(a):t=a,a.style.setProperty("height","100%"),a.style.setProperty("width","100%"),effect(e=>{var t=n.class||"",o=n.classList;return t!==e._v$&&(a.className=e._v$=t),e._v$2=classList(a,o,e._v$2),e},{_v$:void 0,_v$2: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().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=(a={},n={})=>{return[...new Set([...Object.keys(a),...Object.keys(n)])].reduce((e,t)=>{var o=a[t];return o!==n[t]&&e.push([t,o]),e},[])},Layer=o=>{const a=useMap(),t=useSource();return o.id=o.id||createUniqueId(),onMount(async()=>{a().isStyleLoaded()||await a().once("styledata"),a().getLayer(o.id)||a().addLayer(o.layer||{...o.style,id:o.id,source:t.id},o.beforeType?a().getStyle().layers.find(e=>e.type===o.beforeType).id:o.beforeId)}),createEffect(e=>{if(o.style&&a().getSource(t.id)&&a().getLayer(o.id))return o.style.layout!==(null==e?void 0:e.layout)&&diff(o.style.layout,null==e?void 0:e.layout).forEach(([e,t])=>a().setLayoutProperty(o.id,e,t,{validate:!1})),o.style.paint!==(null==e?void 0:e.paint)&&diff(o.style.paint,null==e?void 0:e.paint).forEach(([e,t])=>a().setPaintProperty(o.id,e,t,{validate:!1})),o.style.minzoom===(null==e?void 0:e.minzoom)&&o.style.maxzoom===(null==e?void 0:e.maxzoom)||a().setLayerZoomRange(o.id,o.style.minzoom,o.style.maxzoom),o.style.filter!==(null==e?void 0:e.filter)&&a().setFilter(o.id,o.style.filter,{validate:!1}),o.style},o.style),createEffect(e=>{if(void 0!==o.visible&&o.visible!==e&&a().getSource(t.id)&&a().getLayer(o.id))return a().setLayoutProperty(o.id,"visibility",o.visible?"visible":"none",{validate:!1}),o.visible},o.visible),createEffect(async()=>{o.filter&&(a().isStyleLoaded()||await a().once("styledata"),a().setFilter(o.id,o.filter))}),createEffect(async()=>{o.featureState&&o.featureState.id&&(a().isStyleLoaded()||await a().once("styledata"),a().removeFeatureState({source:t.id,sourceLayer:o.style["source-layer"]}),a().setFeatureState({source:t.id,sourceLayer:o.style["source-layer"],id:o.featureState.id},o.featureState.state))}),o.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=t=>{const o=useMap(),[e,a]=createSignal(null);return onMount(async()=>{let e;switch(t.type){case"navigation":e=new mapboxgl.NavigationControl(t.options);break;case"scale":e=new mapboxgl.ScaleControl(t.options);break;case"attribution":e=new mapboxgl.AttributionControl(t.options);break;case"fullscreen":e=new mapboxgl.FullscreenControl(t.options||{container:o().container});break;case"geolocate":e=new mapboxgl.GeolocateControl(t.options)}e&&o().addControl(e,t.position),a(e)}),onCleanup(()=>o().removeControl(e())),t.children},_tmpl$$1=template("<div></div>",2),Marker=t=>{const o=useMap();let a=null;return onMount(async()=>{var e;a=new mapboxgl.Marker(t.options).setLngLat(t.lnglat).setPopup(t.children?(new mapboxgl.Popup).setDOMContent((e=_tmpl$$1.cloneNode(!0),insert(e,()=>t.children),e)):null).addTo(o())}),onCleanup(()=>a.remove()),createEffect(()=>a.setLngLat(t.lnglat)),[]},_tmpl$=template("<div></div>",2),Popup=t=>{const o=useMap();let a=null;return onMount(async()=>{var e;a=new mapboxgl.Popup(t.options).setLngLat(t.lnglat).setDOMContent((e=_tmpl$.cloneNode(!0),insert(e,()=>t.children),e)).addTo(o())}),onCleanup(()=>a.remove()),createEffect(()=>a.setLngLat(t.lnglat)),createEffect(()=>a.setDOMContent((()=>{var e=_tmpl$.cloneNode(!0);return insert(e,()=>t.children),e})())),[]},Image=o=>{const a=useMap();return onMount(async()=>{a().isStyleLoaded()||await a().once("styledata"),o.url?a().loadImage(o.url,(e,t)=>{if(e)throw e;a().hasImage(o.id)||a().addImage(o.id,t)}):a().hasImage(o.id)||a().addImage(o.id,o.image,o.options)}),onCleanup(()=>a().hasImage(o.id)&&a().removeImage(o.id)),createEffect(async()=>{o.image&&o.url||(o.url?a().loadImage(o.url,(e,t)=>{if(e)throw e;a().hasImage(o.id)||a().updateImage(o.id,t)}):a().hasImage(o.id)&&a().updateImage(o.id,o.image))}),[]};export{Control,Fog,Image,Layer,Marker,Popup,Sky,SourceComponent as Source,Terrain,MapGL as default,useMap};
1
+ import{template,createComponent,memo,effect,classList,insert}from"solid-js/web";import{useTransition,createContext,useContext,onMount,onCleanup,createEffect,createUniqueId,createSignal}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"],viewportEvents=["dragend","moveend","zoomend","pitchend","rotateend","boxzoomend"],_tmpl$$2=template("<section></section>",2),[pending,start]=useTransition(),MapContext=createContext(),useMap=()=>useContext(MapContext),MapGL=a=>{let n,t,o=(onMount(()=>{n=new mapboxgl.Map({...a.options,container:t,interactive:!!a.onViewportChange,bounds:a.viewport.bounds,center:a.viewport.center,zoom:a.viewport.zoom||null,pitch:a.viewport.pitch||null,bearing:a.viewport.bearing||null,fitBoundsOptions:{padding:a.viewport.padding}})}),onCleanup(()=>{mapEvents.forEach(t=>{a[t]&&n.off(t.slice(2).toLowerCase(),e=>a[t](e))}),n.remove()}),createEffect(()=>mapEvents.forEach(t=>{var e;a[t]&&(e=t.slice(2).toLowerCase(),n.off(e,e=>a[t](e)).on(e,e=>a[t](e)))})),createEffect(()=>n.showTileBoundaries=a.showTileBoundaries),createEffect(()=>n.showTerrainWireframe=a.showTerrainWireframe),createEffect(()=>n.showPadding=a.showPadding),createEffect(()=>n.showCollisionBoxes=a.showCollisionBoxes),createEffect(()=>n.showOverdrawInspector=a.showOverdrawInspector),createEffect(()=>n.getCanvas().style.cursor=a.cursorStyle),createEffect(e=>e!==a.options.style&&n.setStyle(a.options.style),a.options.style),createEffect(()=>{a.onViewportChange&&viewportEvents.forEach(e=>n.on(e,e=>{e.originalEvent&&a.onViewportChange({center:n.getCenter(),zoom:n.getZoom(),pitch:n.getPitch(),bearing:n.getBearing(),padding:a.viewport.padding,bounds:a.viewport.bounds})}))}),createEffect(e=>{return a.viewport.bounds!=e&&(e=n.cameraForBounds(a.viewport.bounds,{padding:a.viewport.padding}),a.onViewportChange({...a.viewport,...e})),a.viewport.bounds},a.viewport.bounds),createEffect(async e=>{var t=a.viewport,o={...t.zoom!=e.zoom&&{zoom:t.zoom},...t.padding!=e.padding&&{padding:t.padding},...t.bearing!=e.bearing&&{bearing:t.bearing},...t.pitch!=e.pitch&&{pitch:t.pitch},...t.center!=e.center&&{center:t.center.lng?[t.center.lng,t.center.lat]:t.center}};if(Object.keys(o).length)switch(n.stop(),a.transitionType){case"easeTo":n.easeTo(o);case"jumpTo":n.jumpTo(o);default:n.flyTo(o)}return o},a.viewport),0);return createEffect(()=>{a.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(()=>a.children),(()=>{const n=_tmpl$$2.cloneNode(!0),e=t;return"function"==typeof e?e(n):t=n,n.style.setProperty("height","100%"),n.style.setProperty("width","100%"),effect(e=>{var t=a.class||"",o=a.classList;return t!==e._v$&&(n.className=e._v$=t),e._v$2=classList(n,o,e._v$2),e},{_v$:void 0,_v$2:void 0}),n})()]}})},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=t=>{const o=useMap(),[e,n]=createSignal(null);return onMount(()=>{var e=((e,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"fullscreen":return new mapboxgl.FullscreenControl(t||{container:o().container});case"geolocate":return new mapboxgl.GeolocateControl(t)}})(t.type,t.options);e&&o().addControl(e,t.position),n(e)}),onCleanup(()=>o().removeControl(e())),t.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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../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":["import {\n createEffect,\n createMemo,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n} from 'solid-js'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type MapboxOptions from 'mapbox-gl/src/ui/map'\nimport type MapMouseEvent from 'mapbox-gl/src/ui/events'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\nimport type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js'\n\nexport type Viewport = {\n center?: LngLatLike\n bounds?: LngLatBounds\n zoom?: number\n pitch?: number\n bearing?: number\n padding?: number\n}\n\nexport type TransitionType = 'flyTo' | 'easeTo' | 'jumpTo'\n\nconst [pending, start] = useTransition()\n\nconst MapContext = createContext<MapboxMap>()\nconst useMap = () => useContext(MapContext)\n\nconst MapGL: Component<{\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?: TransitionType\n onMouseMove?: (event: MapMouseEvent) => void\n onViewportChange?: (viewport: Viewport) => void\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLDivElement\n let containerRef: HTMLElement\n\n onCleanup(() => map.remove())\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 map.container = containerRef\n })\n\n createEffect(() => map.on('mousemove', evt => props.onMouseMove(evt.lngLat)))\n\n createMemo(() => map && map.setStyle(props.options.style))\n\n const _onViewportChange = evt => {\n if (evt.isInternal) return\n const viewport: Viewport = {\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 props.onViewportChange(viewport)\n }\n\n createEffect(\n () =>\n props.onViewportChange &&\n map\n .on('dragend', _onViewportChange)\n .on('moveend', _onViewportChange)\n .on('zoomend', _onViewportChange)\n .on('rotateend', _onViewportChange)\n .on('pitchend', _onViewportChange)\n .on('boxzoomend', _onViewportChange)\n )\n\n createMemo(() => {\n if (map) {\n const camera = map.cameraForBounds(props.viewport.bounds, {\n padding: props.viewport.padding,\n })\n props.onViewportChange({\n ...props.viewport,\n ...camera,\n })\n }\n })\n\n // createEffect(prev => {\n // if (props.viewport.bounds != prev) {\n // const camera = map.cameraForBounds(props.viewport.bounds, {\n // padding: props.viewport.padding,\n // })\n // props.onViewportChange({\n // ...props.viewport,\n // ...camera,\n // })\n // }\n // return props.viewport.bounds\n // }, props.viewport.bounds)\n\n createEffect(async (prev: Viewport) => {\n const vp: Viewport = props.viewport\n const nvp: Viewport = {\n ...(vp.zoom != prev.zoom && { zoom: vp.zoom }),\n ...(vp.padding != prev.padding && { padding: vp.padding }),\n ...(vp.bearing != prev.bearing && { bearing: vp.bearing }),\n ...(vp.pitch != prev.pitch && { pitch: vp.pitch }),\n ...(vp.center != prev.center && {\n center: vp.center.lng ? [vp.center.lng, vp.center.lat] : vp.center,\n }),\n }\n if (Object.keys(nvp).length) {\n map.stop()\n switch (props.transitionType) {\n case 'easeTo':\n map.easeTo(nvp, { isInternal: true })\n case 'jumpTo':\n map.jumpTo(nvp, { isInternal: true })\n default:\n map.flyTo(nvp, { isInternal: true })\n }\n }\n return vp\n }, props.viewport)\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 <main\n ref={mapRef}\n class={props.class || ''}\n classList={props.classList}\n style={{ height: '100%', width: '100%' }}></main>\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().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 { onMount, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSource } from '../Source'\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 // Update Style\n createEffect((prev: StyleSpecification) => {\n if (\n !props.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, lazy } 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 // Add Control\n onMount(async () => {\n let control\n\n switch (props.type) {\n case 'navigation':\n control = new mapboxgl.NavigationControl(props.options)\n break\n case 'scale':\n control = new mapboxgl.ScaleControl(props.options)\n break\n case 'attribution':\n control = new mapboxgl.AttributionControl(props.options)\n break\n case 'fullscreen':\n control = new mapboxgl.FullscreenControl(\n props.options || { container: map().container }\n )\n break\n case 'geolocate':\n control = new mapboxgl.GeolocateControl(props.options)\n break\n // case 'language':\n // // @ts-ignore\n // const MapboxLanguage = (await import('@mapbox/mapbox-gl-language'))\n // .default\n // control = new MapboxLanguage(props.options)\n // break\n // case 'traffic':\n // // @ts-ignore\n // const MapboxTraffic = (await import('@mapbox/mapbox-gl-traffic'))\n // .default\n // // @ts-ignore\n // await import('@mapbox/mapbox-gl-traffic/mapbox-gl-traffic.css')\n // control = new MapboxTraffic(props.options)\n // break\n }\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().hasImage(props.id) && map().updateImage(props.id, props.image)\n }\n })\n\n return <></>\n}\n\nexport default Image\n"],"names":["pending","start","useTransition","MapContext","createContext","useMap","useContext","MapGL","props","map","mapRef","onCleanup","remove","onMount","mapboxgl","Map","options","container","interactive","onViewportChange","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","containerRef","createEffect","on","evt","onMouseMove","lngLat","createMemo","setStyle","style","_onViewportChange","isInternal","getCenter","getZoom","getPitch","getBearing","camera","cameraForBounds","prev","vp","nvp","lng","lat","Object","keys","length","stop","transitionType","easeTo","jumpTo","flyTo","index","triggerResize","window","requestAnimationFrame","loop","resize","Provider","value","children","class","classList","SourceContext","useSource","SourceComponent","id","createUniqueId","async","isStyleLoaded","once","getSource","addSource","source","getStyle","layers","forEach","layer","removeLayer","removeSource","type","data","setData","diff","newProps","prevProps","Set","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","createSignal","NavigationControl","ScaleControl","AttributionControl","FullscreenControl","GeolocateControl","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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"}
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\nconst viewportEvents: string[] = [\n 'dragend',\n 'moveend',\n 'zoomend',\n 'pitchend',\n 'rotateend',\n 'boxzoomend',\n]\n\nexport { mapEvents, layerEvents, viewportEvents }\n","import {\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n} from 'solid-js'\nimport { mapEvents, viewportEvents } from '../../events'\nimport mapboxgl from 'mapbox-gl'\nimport 'mapbox-gl/dist/mapbox-gl.css'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type MapboxOptions from 'mapbox-gl/src/ui/map'\nimport type MapMouseEvent from 'mapbox-gl/src/ui/events'\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'\n\nexport type Viewport = {\n center?: LngLatLike\n bounds?: LngLatBounds\n zoom?: number\n pitch?: number\n bearing?: number\n padding?: PaddingOptions\n}\n\nconst [pending, start] = useTransition()\n\nconst MapContext = createContext<MapboxMap>()\nconst useMap = () => useContext(MapContext)\n\nconst MapGL: Component<{\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 onMouseMove?: (event: MapMouseEvent) => void\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\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(() => {\n mapEvents.forEach(item => {\n props[item] && map.off(item.slice(2).toLowerCase(), e => props[item](e))\n })\n map.remove()\n })\n\n // Hook up events\n createEffect(() =>\n mapEvents.forEach(item => {\n if (props[item]) {\n const eventString = item.slice(2).toLowerCase()\n map\n .off(eventString, e => props[item](e))\n .on(eventString, e => props[item](e))\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(\n prev => prev !== props.options.style && map.setStyle(props.options.style),\n props.options.style\n )\n\n // Update Viewport\n createEffect(() => {\n props.onViewportChange &&\n viewportEvents.forEach(item =>\n map.on(item, evt => {\n if (!evt.originalEvent) return\n props.onViewportChange({\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 )\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport.bounds != prev) {\n const camera = map.cameraForBounds(props.viewport.bounds, {\n padding: props.viewport.padding,\n })\n props.onViewportChange({\n ...props.viewport,\n ...camera,\n })\n }\n return props.viewport.bounds\n }, props.viewport.bounds)\n\n createEffect(async (prev: Viewport) => {\n const viewport: Viewport = props.viewport\n const newViewport: Viewport = {\n ...(viewport.zoom != prev.zoom && { zoom: viewport.zoom }),\n ...(viewport.padding != prev.padding && { padding: viewport.padding }),\n ...(viewport.bearing != prev.bearing && { bearing: viewport.bearing }),\n ...(viewport.pitch != prev.pitch && { pitch: viewport.pitch }),\n ...(viewport.center != prev.center && {\n center: viewport.center.lng\n ? [viewport.center.lng, viewport.center.lat]\n : viewport.center,\n }),\n }\n if (Object.keys(newViewport).length) {\n map.stop()\n switch (props.transitionType) {\n case 'easeTo':\n map.easeTo(newViewport)\n case 'jumpTo':\n map.jumpTo(newViewport)\n default:\n map.flyTo(newViewport)\n }\n }\n return newViewport\n }, props.viewport)\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%' }}></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 {\n onMount,\n onCleanup,\n createSignal,\n createEffect,\n Component,\n} 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 // createEffect(prev => {\n // console.log(prev)\n // if (prev.type === props.type) return\n // map().removeControl(control())\n // const contrl = getControl(props.type, props.options)\n // // contrl && map().addControl(contrl, props.position)\n // setControl(contrl)\n // return props\n // })\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","viewportEvents","pending","start","useTransition","MapContext","createContext","useMap","useContext","MapGL","props","map","mapRef","index","onMount","mapboxgl","Map","options","container","interactive","onViewportChange","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","onCleanup","forEach","item","off","slice","toLowerCase","e","remove","createEffect","eventString","on","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","style","cursor","cursorStyle","prev","setStyle","evt","originalEvent","getCenter","getZoom","getPitch","getBearing","camera","cameraForBounds","newViewport","lng","lat","Object","keys","length","stop","transitionType","easeTo","jumpTo","flyTo","triggerResize","window","requestAnimationFrame","loop","resize","Provider","value","children","class","classList","SourceContext","useSource","SourceComponent","id","createUniqueId","async","isStyleLoaded","once","getSource","addSource","source","getStyle","layers","layer","removeLayer","removeSource","type","data","setData","diff","newProps","prevProps","Set","reduce","acc","key","push","Layer","getLayer","addLayer","beforeType","find","l","beforeId","event","callback","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","createSignal","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":"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"}
@@ -1,47 +1,50 @@
1
- import { onMount, onCleanup, createSignal } from 'solid-js';
1
+ import { onMount, onCleanup, createSignal, } from 'solid-js';
2
2
  import { useMap } from '../MapGL';
3
3
  import mapboxgl from 'mapbox-gl';
4
4
  const Control = props => {
5
5
  const map = useMap();
6
6
  const [control, setControl] = createSignal(null);
7
- // Add Control
8
- onMount(async () => {
9
- let control;
10
- switch (props.type) {
7
+ const getControl = (type, options) => {
8
+ switch (type) {
11
9
  case 'navigation':
12
- control = new mapboxgl.NavigationControl(props.options);
13
- break;
10
+ return new mapboxgl.NavigationControl(options);
14
11
  case 'scale':
15
- control = new mapboxgl.ScaleControl(props.options);
16
- break;
12
+ return new mapboxgl.ScaleControl(options);
17
13
  case 'attribution':
18
- control = new mapboxgl.AttributionControl(props.options);
19
- break;
14
+ return new mapboxgl.AttributionControl(options);
20
15
  case 'fullscreen':
21
- control = new mapboxgl.FullscreenControl(props.options || { container: map().container });
22
- break;
16
+ return new mapboxgl.FullscreenControl(options || { container: map().container });
23
17
  case 'geolocate':
24
- control = new mapboxgl.GeolocateControl(props.options);
25
- break;
18
+ return new mapboxgl.GeolocateControl(options);
26
19
  // case 'language':
27
- // // @ts-ignore
28
- // const MapboxLanguage = (await import('@mapbox/mapbox-gl-language'))
29
- // .default
30
- // control = new MapboxLanguage(props.options)
31
- // break
20
+ // try {
21
+ // const MapboxLanguage = require('@mapbox/mapbox-gl-language').default
22
+ // return new MapboxLanguage(options)
23
+ // } catch (e) {}
32
24
  // case 'traffic':
33
- // // @ts-ignore
34
- // const MapboxTraffic = (await import('@mapbox/mapbox-gl-traffic'))
35
- // .default
36
- // // @ts-ignore
37
- // await import('@mapbox/mapbox-gl-traffic/mapbox-gl-traffic.css')
38
- // control = new MapboxTraffic(props.options)
39
- // break
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) {}
40
30
  }
31
+ };
32
+ // Add Control
33
+ onMount(() => {
34
+ const control = getControl(props.type, props.options);
41
35
  control && map().addControl(control, props.position);
42
36
  setControl(control);
43
37
  });
44
38
  onCleanup(() => map().removeControl(control()));
39
+ // createEffect(prev => {
40
+ // console.log(prev)
41
+ // if (prev.type === props.type) return
42
+ // map().removeControl(control())
43
+ // const contrl = getControl(props.type, props.options)
44
+ // // contrl && map().addControl(contrl, props.position)
45
+ // setControl(contrl)
46
+ // return props
47
+ // })
45
48
  return props.children;
46
49
  };
47
50
  export default Control;
@@ -31,7 +31,9 @@ const Image = props => {
31
31
  });
32
32
  }
33
33
  else {
34
- map().hasImage(props.id) && map().updateImage(props.id, props.image);
34
+ map().style &&
35
+ map().hasImage(props.id) &&
36
+ map().updateImage(props.id, props.image);
35
37
  }
36
38
  });
37
39
  return <></>;
@@ -1,6 +1,7 @@
1
- import { onMount, createEffect, createUniqueId } from 'solid-js';
1
+ import { onMount, onCleanup, createEffect, createUniqueId, } from 'solid-js';
2
2
  import { useMap } from '../MapGL';
3
3
  import { useSource } from '../Source';
4
+ import { layerEvents } from '../../events';
4
5
  const diff = (newProps = {}, prevProps = {}) => {
5
6
  const keys = new Set([...Object.keys(newProps), ...Object.keys(prevProps)]);
6
7
  return [...keys].reduce((acc, key) => {
@@ -30,9 +31,20 @@ const Layer = props => {
30
31
  .layers.find(l => l.type === props.beforeType).id
31
32
  : props.beforeId);
32
33
  });
34
+ onCleanup(() => map().removeLayer(props.id));
35
+ // Hook up events
36
+ createEffect(() => layerEvents.forEach(item => {
37
+ if (props[item]) {
38
+ const event = item.slice(2).toLowerCase();
39
+ const callback = e => props[item](e);
40
+ map().on(event, props.id, callback);
41
+ onCleanup(() => map().off(event, props.id, callback));
42
+ }
43
+ }));
33
44
  // Update Style
34
45
  createEffect((prev) => {
35
46
  if (!props.style ||
47
+ !map().style ||
36
48
  !map().getSource(source.id) ||
37
49
  !map().getLayer(props.id))
38
50
  return;
@@ -1,4 +1,5 @@
1
- import { createEffect, createMemo, onMount, onCleanup, createContext, useContext, useTransition, } from 'solid-js';
1
+ import { createEffect, onMount, onCleanup, createContext, useContext, useTransition, } from 'solid-js';
2
+ import { mapEvents, viewportEvents } from '../../events';
2
3
  import mapboxgl from 'mapbox-gl';
3
4
  import 'mapbox-gl/dist/mapbox-gl.css';
4
5
  const [pending, start] = useTransition();
@@ -7,13 +8,11 @@ const useMap = () => useContext(MapContext);
7
8
  const MapGL = props => {
8
9
  let map;
9
10
  let mapRef;
10
- let containerRef;
11
- onCleanup(() => map.remove());
12
11
  onMount(() => {
13
12
  map = new mapboxgl.Map({
14
13
  ...props.options,
15
14
  container: mapRef,
16
- interactive: props.onViewportChange,
15
+ interactive: !!props.onViewportChange,
17
16
  bounds: props.viewport.bounds,
18
17
  center: props.viewport.center,
19
18
  zoom: props.viewport.zoom || null,
@@ -21,33 +20,50 @@ const MapGL = props => {
21
20
  bearing: props.viewport.bearing || null,
22
21
  fitBoundsOptions: { padding: props.viewport.padding },
23
22
  });
24
- map.container = containerRef;
25
23
  });
26
- createEffect(() => map.on('mousemove', evt => props.onMouseMove(evt.lngLat)));
27
- createMemo(() => map && map.setStyle(props.options.style));
28
- const _onViewportChange = evt => {
29
- if (evt.isInternal)
30
- return;
31
- const viewport = {
32
- center: map.getCenter(),
33
- zoom: map.getZoom(),
34
- pitch: map.getPitch(),
35
- bearing: map.getBearing(),
36
- padding: props.viewport.padding,
37
- bounds: props.viewport.bounds,
38
- };
39
- props.onViewportChange(viewport);
40
- };
41
- createEffect(() => props.onViewportChange &&
42
- map
43
- .on('dragend', _onViewportChange)
44
- .on('moveend', _onViewportChange)
45
- .on('zoomend', _onViewportChange)
46
- .on('rotateend', _onViewportChange)
47
- .on('pitchend', _onViewportChange)
48
- .on('boxzoomend', _onViewportChange));
49
- createMemo(() => {
50
- if (map) {
24
+ onCleanup(() => {
25
+ mapEvents.forEach(item => {
26
+ props[item] && map.off(item.slice(2).toLowerCase(), e => props[item](e));
27
+ });
28
+ map.remove();
29
+ });
30
+ // Hook up events
31
+ createEffect(() => mapEvents.forEach(item => {
32
+ if (props[item]) {
33
+ const eventString = item.slice(2).toLowerCase();
34
+ map
35
+ .off(eventString, e => props[item](e))
36
+ .on(eventString, e => props[item](e));
37
+ }
38
+ }));
39
+ // Update debug features
40
+ createEffect(() => (map.showTileBoundaries = props.showTileBoundaries));
41
+ createEffect(() => (map.showTerrainWireframe = props.showTerrainWireframe));
42
+ createEffect(() => (map.showPadding = props.showPadding));
43
+ createEffect(() => (map.showCollisionBoxes = props.showCollisionBoxes));
44
+ createEffect(() => (map.showOverdrawInspector = props.showOverdrawInspector));
45
+ createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle));
46
+ // Update map style
47
+ createEffect(prev => prev !== props.options.style && map.setStyle(props.options.style), props.options.style);
48
+ // Update Viewport
49
+ createEffect(() => {
50
+ props.onViewportChange &&
51
+ viewportEvents.forEach(item => map.on(item, evt => {
52
+ if (!evt.originalEvent)
53
+ return;
54
+ props.onViewportChange({
55
+ center: map.getCenter(),
56
+ zoom: map.getZoom(),
57
+ pitch: map.getPitch(),
58
+ bearing: map.getBearing(),
59
+ padding: props.viewport.padding,
60
+ bounds: props.viewport.bounds,
61
+ });
62
+ }));
63
+ });
64
+ // Update boundaries
65
+ createEffect(prev => {
66
+ if (props.viewport.bounds != prev) {
51
67
  const camera = map.cameraForBounds(props.viewport.bounds, {
52
68
  padding: props.viewport.padding,
53
69
  });
@@ -56,42 +72,33 @@ const MapGL = props => {
56
72
  ...camera,
57
73
  });
58
74
  }
59
- });
60
- // createEffect(prev => {
61
- // if (props.viewport.bounds != prev) {
62
- // const camera = map.cameraForBounds(props.viewport.bounds, {
63
- // padding: props.viewport.padding,
64
- // })
65
- // props.onViewportChange({
66
- // ...props.viewport,
67
- // ...camera,
68
- // })
69
- // }
70
- // return props.viewport.bounds
71
- // }, props.viewport.bounds)
75
+ return props.viewport.bounds;
76
+ }, props.viewport.bounds);
72
77
  createEffect(async (prev) => {
73
- const vp = props.viewport;
74
- const nvp = {
75
- ...(vp.zoom != prev.zoom && { zoom: vp.zoom }),
76
- ...(vp.padding != prev.padding && { padding: vp.padding }),
77
- ...(vp.bearing != prev.bearing && { bearing: vp.bearing }),
78
- ...(vp.pitch != prev.pitch && { pitch: vp.pitch }),
79
- ...(vp.center != prev.center && {
80
- center: vp.center.lng ? [vp.center.lng, vp.center.lat] : vp.center,
78
+ const viewport = props.viewport;
79
+ const newViewport = {
80
+ ...(viewport.zoom != prev.zoom && { zoom: viewport.zoom }),
81
+ ...(viewport.padding != prev.padding && { padding: viewport.padding }),
82
+ ...(viewport.bearing != prev.bearing && { bearing: viewport.bearing }),
83
+ ...(viewport.pitch != prev.pitch && { pitch: viewport.pitch }),
84
+ ...(viewport.center != prev.center && {
85
+ center: viewport.center.lng
86
+ ? [viewport.center.lng, viewport.center.lat]
87
+ : viewport.center,
81
88
  }),
82
89
  };
83
- if (Object.keys(nvp).length) {
90
+ if (Object.keys(newViewport).length) {
84
91
  map.stop();
85
92
  switch (props.transitionType) {
86
93
  case 'easeTo':
87
- map.easeTo(nvp, { isInternal: true });
94
+ map.easeTo(newViewport);
88
95
  case 'jumpTo':
89
- map.jumpTo(nvp, { isInternal: true });
96
+ map.jumpTo(newViewport);
90
97
  default:
91
- map.flyTo(nvp, { isInternal: true });
98
+ map.flyTo(newViewport);
92
99
  }
93
100
  }
94
- return vp;
101
+ return newViewport;
95
102
  }, props.viewport);
96
103
  let index = 0;
97
104
  createEffect(() => {
@@ -108,7 +115,7 @@ const MapGL = props => {
108
115
  });
109
116
  return (<MapContext.Provider value={() => map}>
110
117
  {props.children}
111
- <main ref={mapRef} class={props.class || ''} classList={props.classList} style={{ height: '100%', width: '100%' }}></main>
118
+ <section ref={mapRef} class={props.class || ''} classList={props.classList} style={{ height: '100%', width: '100%' }}></section>
112
119
  </MapContext.Provider>);
113
120
  };
114
121
  export { MapGL as default, useMap };
@@ -21,7 +21,8 @@ const SourceComponent = props => {
21
21
  createEffect(async () => {
22
22
  if (props.source.type !== 'geojson' && !props.source.data)
23
23
  return;
24
- map().getSource(props.id) &&
24
+ map().style &&
25
+ map().getSource(props.id) &&
25
26
  map().getSource(props.id).setData(props.source.data);
26
27
  });
27
28
  return (<SourceContext.Provider value={{ id: props.id }}>
@@ -0,0 +1,75 @@
1
+ const mapEvents = [
2
+ 'onMouseDown',
3
+ 'onMouseUp',
4
+ 'onMouseOver',
5
+ 'onMouseOut',
6
+ 'onMouseMove',
7
+ 'onMouseEnter',
8
+ 'onMouseLeave',
9
+ 'onPreClick',
10
+ 'onClick',
11
+ 'onDblClick',
12
+ 'onContextMenu',
13
+ 'onTouchStart',
14
+ 'onTouchEnd',
15
+ 'onTouchCancel',
16
+ 'onWheel',
17
+ 'onResize',
18
+ 'onRemove',
19
+ 'onTouchMove',
20
+ 'onMoveStart',
21
+ 'onMove',
22
+ 'onMoveEnd',
23
+ 'onDragStart',
24
+ 'onDrag',
25
+ 'onDragEnd',
26
+ 'onZoomStart',
27
+ 'onZoom',
28
+ 'onZoomEnd',
29
+ 'onRotateStart',
30
+ 'onRotate',
31
+ 'onRotatEnd',
32
+ 'onPitchStart',
33
+ 'onPitch',
34
+ 'onPitchEnd',
35
+ 'onBoxZoomStart',
36
+ 'onBoxZoomEnd',
37
+ 'onBoxZoomCancel',
38
+ 'onWebglContextLost',
39
+ 'onWebglContextRestored',
40
+ 'onLoad',
41
+ 'onRender',
42
+ 'onIdle',
43
+ 'onError',
44
+ 'onData',
45
+ 'onStyleData',
46
+ 'onSourceData',
47
+ 'onDataLoading',
48
+ 'onStyleDataLoading',
49
+ 'onSourceDataLoading',
50
+ 'onStyleImageMissing',
51
+ ];
52
+ const layerEvents = [
53
+ 'onMouseDown',
54
+ 'onMouseUp',
55
+ 'onMouseOver',
56
+ 'onMouseOut',
57
+ 'onMouseMove',
58
+ 'onMouseEnter',
59
+ 'onMouseLeave',
60
+ 'onClick',
61
+ 'onDblClick',
62
+ 'onContextMenu',
63
+ 'onTouchStart',
64
+ 'onTouchEnd',
65
+ 'onTouchCancel',
66
+ ];
67
+ const viewportEvents = [
68
+ 'dragend',
69
+ 'moveend',
70
+ 'zoomend',
71
+ 'pitchend',
72
+ 'rotateend',
73
+ 'boxzoomend',
74
+ ];
75
+ export { mapEvents, layerEvents, viewportEvents };
@@ -4,15 +4,15 @@ import type MapboxOptions from 'mapbox-gl/src/ui/map';
4
4
  import type MapMouseEvent from 'mapbox-gl/src/ui/events';
5
5
  import type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js';
6
6
  import type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js';
7
+ import type { PaddingOptions } from 'mapbox-gl/src/geo/edge_insets.js';
7
8
  export declare type Viewport = {
8
9
  center?: LngLatLike;
9
10
  bounds?: LngLatBounds;
10
11
  zoom?: number;
11
12
  pitch?: number;
12
13
  bearing?: number;
13
- padding?: number;
14
+ padding?: PaddingOptions;
14
15
  };
15
- export declare type TransitionType = 'flyTo' | 'easeTo' | 'jumpTo';
16
16
  declare const useMap: () => MapboxMap;
17
17
  declare const MapGL: Component<{
18
18
  class?: string;
@@ -23,8 +23,15 @@ declare const MapGL: Component<{
23
23
  options?: MapboxOptions;
24
24
  children?: Element | Element[];
25
25
  triggerResize?: boolean;
26
- transitionType?: TransitionType;
26
+ transitionType?: 'flyTo' | 'easeTo' | 'jumpTo';
27
27
  onMouseMove?: (event: MapMouseEvent) => void;
28
28
  onViewportChange?: (viewport: Viewport) => void;
29
+ showTileBoundaries?: boolean;
30
+ showTerrainWireframe?: boolean;
31
+ showPadding?: boolean;
32
+ showCollisionBoxes?: boolean;
33
+ showOverdrawInspector?: boolean;
34
+ repaint?: boolean;
35
+ cursorStyle?: string;
29
36
  }>;
30
37
  export { MapGL as default, useMap };
@@ -0,0 +1,4 @@
1
+ declare const mapEvents: string[];
2
+ declare const layerEvents: string[];
3
+ declare const viewportEvents: string[];
4
+ export { mapEvents, layerEvents, viewportEvents };
package/package.json CHANGED
@@ -1,8 +1,27 @@
1
1
  {
2
- "version": "1.1.10",
2
+ "version": "1.1.13",
3
3
  "name": "solid-map-gl",
4
4
  "description": "Solid Component Library for Mapbox GL JS",
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.",
6
+ "homepage": "https://determined-mirzakhani-29bbc7.netlify.app",
5
7
  "author": "kaihuebner",
8
+ "contributors": [
9
+ {
10
+ "name": "Kai Huebner",
11
+ "email": "kai.huebner@gmail.com"
12
+ }
13
+ ],
14
+ "keywords": [
15
+ "gis",
16
+ "map",
17
+ "webgl",
18
+ "mapbox-gl",
19
+ "mapbox-gl-js",
20
+ "mapbox",
21
+ "solidjs",
22
+ "solidhack",
23
+ "best_ecosystem"
24
+ ],
6
25
  "license": "MIT",
7
26
  "type": "module",
8
27
  "files": [
@@ -24,29 +43,20 @@
24
43
  "type": "git",
25
44
  "url": "git+https://github.com/gishub4/solid-map-gl.git"
26
45
  },
27
- "keywords": [
28
- "map",
29
- "webgl",
30
- "mapbox-gl",
31
- "mapbox-gl-js",
32
- "mapbox",
33
- "solidjs"
34
- ],
35
- "homepage": "https://github.com/gishub4/solid-map-gl#readme",
36
46
  "browserList": [
37
47
  "defaults",
38
48
  "not ie 11"
39
49
  ],
40
50
  "dependencies": {
41
51
  "mapbox-gl": "^2.7.0",
42
- "solid-js": "^1.3.7"
52
+ "solid-js": "^1.3.9"
43
53
  },
44
54
  "devDependencies": {
45
55
  "@types/mapbox-gl": "^2.6.1",
46
- "rollup": "^2.67.3",
56
+ "rollup": "^2.68.0",
47
57
  "rollup-plugin-import-css": "^3.0.2",
48
58
  "rollup-plugin-uglify": "^6.0.4",
49
- "rollup-preset-solid": "^1.2.2",
59
+ "rollup-preset-solid": "^1.4.0",
50
60
  "typescript": "^4.5.5"
51
61
  }
52
62
  }