solid-map-gl 1.1.20 → 1.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{template,createComponent,memo,effect,classList,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=
|
|
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=e=>({id:e,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(r.id)),setTransitionType("jumpTo")},o=e=>{e.originalEvent&&r.onViewportChange(t(null)),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=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
|
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 from 'mapbox-gl/src/ui/map'\nimport type 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'\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 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%' }}></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","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":"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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\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":"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"}
|
|
@@ -114,7 +114,7 @@ const MapGL = props => {
|
|
|
114
114
|
});
|
|
115
115
|
return (<MapContext.Provider value={() => map}>
|
|
116
116
|
{props.children}
|
|
117
|
-
<section ref={mapRef} class={props.class || ''} classList={props.classList} style={{ height: '100%', width: '100%' }}></section>
|
|
117
|
+
<section ref={mapRef} class={props.class || ''} classList={props.classList} style={{ height: '100%', width: '100%', ...props.style }}></section>
|
|
118
118
|
</MapContext.Provider>);
|
|
119
119
|
};
|
|
120
120
|
export { MapGL as default, useMap };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Component } from 'solid-js';
|
|
2
2
|
import 'mapbox-gl/dist/mapbox-gl.css';
|
|
3
|
-
import type MapboxOptions from 'mapbox-gl/src/ui/map';
|
|
3
|
+
import type { MapboxOptions } from 'mapbox-gl/src/ui/map';
|
|
4
4
|
import type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js';
|
|
5
5
|
import type { LngLatBounds } from 'mapbox-gl/src/geo/lng_lat_bounds.js';
|
|
6
6
|
import type { PaddingOptions } from 'mapbox-gl/src/geo/edge_insets.js';
|
|
7
|
+
import type { JSX } from 'solid-js';
|
|
7
8
|
export declare type Viewport = {
|
|
8
9
|
id?: string;
|
|
9
10
|
center?: LngLatLike;
|
|
@@ -16,6 +17,7 @@ export declare type Viewport = {
|
|
|
16
17
|
declare const useMap: () => MapboxMap;
|
|
17
18
|
declare const MapGL: Component<{
|
|
18
19
|
id?: string;
|
|
20
|
+
style?: JSX.CSSProperties;
|
|
19
21
|
class?: string;
|
|
20
22
|
classList?: {
|
|
21
23
|
[k: string]: boolean | undefined;
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.1.
|
|
2
|
+
"version": "1.1.23",
|
|
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.",
|