solid-map-gl 1.0.0
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/LICENSE +21 -0
- package/README.md +250 -0
- package/dist/esm/index.js +386 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/source/components/Control/index.jsx +43 -0
- package/dist/source/components/Fog/index.jsx +21 -0
- package/dist/source/components/Image/index.jsx +38 -0
- package/dist/source/components/Layer/index.jsx +75 -0
- package/dist/source/components/MapGL/index.jsx +69 -0
- package/dist/source/components/Marker/index.jsx +22 -0
- package/dist/source/components/Popup/index.jsx +22 -0
- package/dist/source/components/Sky/index.jsx +22 -0
- package/dist/source/components/Source/index.jsx +31 -0
- package/dist/source/components/Terrain/index.jsx +23 -0
- package/dist/source/index.jsx +10 -0
- package/dist/types/components/Control/index.d.ts +12 -0
- package/dist/types/components/Fog/index.d.ts +7 -0
- package/dist/types/components/Image/index.d.ts +13 -0
- package/dist/types/components/Layer/index.d.ts +18 -0
- package/dist/types/components/MapGL/index.d.ts +23 -0
- package/dist/types/components/Marker/index.d.ts +7 -0
- package/dist/types/components/Popup/index.d.ts +8 -0
- package/dist/types/components/Sky/index.d.ts +7 -0
- package/dist/types/components/Source/index.d.ts +8 -0
- package/dist/types/components/Terrain/index.d.ts +7 -0
- package/dist/types/index.d.ts +11 -0
- package/package.json +47 -0
|
@@ -0,0 +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 onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n} from 'solid-js'\nimport mapboxgl from 'mapbox-gl'\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'\n\nexport type Viewport = {\n center?: object\n zoom?: number\n bounds?: number[][]\n pitch?: number\n bearing?: number\n padding?: number\n}\n\nconst [pending, start] = useTransition()\n\nconst MapContext = createContext<MapboxMap>()\nconst useMap = () => useContext(MapContext)\n\nconst MapGL: Component<{\n class?: string\n classList?: any\n viewport?: Viewport\n options?: MapboxOptions\n children?: any[] | any\n triggerResize?: boolean\n onMouseMove?: (event: MapMouseEvent) => void\n onViewportChange?: (viewport: Viewport) => void\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLElement\n\n onCleanup(() => map.remove())\n\n onMount(() => {\n map = new mapboxgl.Map({\n ...props.options,\n container: mapRef,\n bounds: props.viewport.bounds,\n center: props.viewport.center,\n zoom: props.viewport.zoom || null,\n pitch: props.viewport.pitch || null,\n bearing: props.viewport.bearing || null,\n fitBoundsOptions: { padding: props.viewport.padding },\n } as MapboxOptions)\n })\n\n createEffect(\n () =>\n props.onMouseMove &&\n map.on('mousemove', event => props.onMouseMove(event.lngLat))\n )\n\n const _onViewportChange = () => {\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 }\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 createEffect(async () => {\n if (!props.viewport.bounds) return\n // await map.once('idle')\n map.fitBounds(props.viewport.bounds, {\n padding: props.viewport.padding,\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 <main\n ref={mapRef}\n class={props.class || ''}\n classList={props.classList}\n style={{ height: '100%', width: '100%' }}>\n {props.children}\n </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={{ source: 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\ntype KV = {\n string?: any\n}\n\nconst diff = (newProps: KV = {}, prevProps: KV = {}) => {\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?: string\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.source,\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: any) => {\n if (!props.style && map().getLayer(props.id)) return\n\n diff(props.style.paint, prev.paint).forEach(([key, value]) =>\n map().setPaintProperty(props.id, key, value)\n )\n\n diff(props.style.layout, prev.layout).forEach(([key, value]) =>\n map().setLayoutProperty(props.id, key, value)\n )\n\n if (\n props.style.minzoom !== prev.minzoom ||\n props.style.maxzoom !== prev.max\n )\n map().setLayerZoomRange(\n props.id,\n props.style.minzoom,\n props.style.maxzoom\n )\n\n return props.style\n }, props.style)\n\n // Update Visibility\n createEffect(async () => {\n if (!props.visible) return\n\n !map().loaded() && (await map().once('styledata'))\n map().setLayoutProperty(\n props.id,\n 'visibility',\n props.visible ? 'visible' : 'none',\n { validate: false }\n )\n })\n\n // Update Filter\n createEffect(async () => {\n if (!props.filter) return\n\n !map().loaded() && (await map().once('styledata'))\n map().setFilter(props.id, props.filter)\n })\n\n // Update Feature State\n createEffect(async () => {\n if (!props.featureState?.id) return\n\n map().loaded() ? null : await map().once('render')\n\n map().removeFeatureState({\n source: source.source,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: source.source,\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.source })\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 '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(props.options)\n break\n case 'geolocate':\n control = new mapboxgl.GeolocateControl(props.options)\n break\n default:\n control = new mapboxgl.NavigationControl(props.options)\n // case 'language':\n // const MapboxLanguage = (await import('@mapbox/mapbox-gl-language'))\n // .default\n // control = new MapboxLanguage(props.options)\n // break\n // case 'traffic':\n // const MapboxTraffic = (await import('@mapbox/mapbox-gl-traffic'))\n // .default\n // await import('@mapbox/mapbox-gl-traffic/mapbox-gl-traffic.css')\n // control = new MapboxTraffic(props.options)\n // break\n }\n 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'\n\nconst Marker: Component<{\n options?: MarkerSpecification\n lnglat: number[]\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(() => {\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","bounds","viewport","center","zoom","pitch","bearing","fitBoundsOptions","padding","createEffect","onMouseMove","on","event","lngLat","_onViewportChange","getCenter","getZoom","getPitch","getBearing","onViewportChange","fitBounds","index","triggerResize","window","requestAnimationFrame","loop","resize","children","class","classList","SourceContext","useSource","SourceComponent","id","createUniqueId","isStyleLoaded","once","getSource","addSource","source","getStyle","layers","forEach","layer","removeLayer","removeSource","type","data","setData","diff","newProps","prevProps","keys","Set","Object","reduce","acc","key","value","push","Layer","getLayer","addLayer","style","beforeType","find","l","beforeId","prev","paint","setPaintProperty","layout","setLayoutProperty","minzoom","maxzoom","max","setLayerZoomRange","visible","loaded","validate","filter","setFilter","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","undefined","Sky","layerId","Terrain","setTerrain","Control","control","setControl","createSignal","ScaleControl","AttributionControl","FullscreenControl","GeolocateControl","NavigationControl","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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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { onMount, onCleanup, createSignal } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
import mapboxgl from 'mapbox-gl';
|
|
4
|
+
const Control = props => {
|
|
5
|
+
const map = useMap();
|
|
6
|
+
const [control, setControl] = createSignal(null);
|
|
7
|
+
// Add Control
|
|
8
|
+
onMount(async () => {
|
|
9
|
+
let control;
|
|
10
|
+
switch (props.type) {
|
|
11
|
+
case 'scale':
|
|
12
|
+
control = new mapboxgl.ScaleControl(props.options);
|
|
13
|
+
break;
|
|
14
|
+
case 'attribution':
|
|
15
|
+
control = new mapboxgl.AttributionControl(props.options);
|
|
16
|
+
break;
|
|
17
|
+
case 'fullscreen':
|
|
18
|
+
control = new mapboxgl.FullscreenControl(props.options);
|
|
19
|
+
break;
|
|
20
|
+
case 'geolocate':
|
|
21
|
+
control = new mapboxgl.GeolocateControl(props.options);
|
|
22
|
+
break;
|
|
23
|
+
default:
|
|
24
|
+
control = new mapboxgl.NavigationControl(props.options);
|
|
25
|
+
// case 'language':
|
|
26
|
+
// const MapboxLanguage = (await import('@mapbox/mapbox-gl-language'))
|
|
27
|
+
// .default
|
|
28
|
+
// control = new MapboxLanguage(props.options)
|
|
29
|
+
// break
|
|
30
|
+
// case 'traffic':
|
|
31
|
+
// const MapboxTraffic = (await import('@mapbox/mapbox-gl-traffic'))
|
|
32
|
+
// .default
|
|
33
|
+
// await import('@mapbox/mapbox-gl-traffic/mapbox-gl-traffic.css')
|
|
34
|
+
// control = new MapboxTraffic(props.options)
|
|
35
|
+
// break
|
|
36
|
+
}
|
|
37
|
+
map().addControl(control, props.position);
|
|
38
|
+
setControl(control);
|
|
39
|
+
});
|
|
40
|
+
onCleanup(() => map().removeControl(control()));
|
|
41
|
+
return props.children;
|
|
42
|
+
};
|
|
43
|
+
export default Control;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { onMount, onCleanup, createEffect } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
const Fog = props => {
|
|
4
|
+
const map = useMap();
|
|
5
|
+
// Add Fog Layer
|
|
6
|
+
onMount(async () => {
|
|
7
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
8
|
+
map().setFog(props.style);
|
|
9
|
+
});
|
|
10
|
+
// Remove Fog Layer
|
|
11
|
+
onCleanup(() => map().setFog(null));
|
|
12
|
+
// Update Visibility
|
|
13
|
+
createEffect(async () => {
|
|
14
|
+
if (props.visible === undefined)
|
|
15
|
+
return;
|
|
16
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
17
|
+
map().setFog(props.visible ? props.style : null);
|
|
18
|
+
});
|
|
19
|
+
return props.children;
|
|
20
|
+
};
|
|
21
|
+
export default Fog;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { onMount, onCleanup, createEffect } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
const Image = props => {
|
|
4
|
+
const map = useMap();
|
|
5
|
+
// Add Image
|
|
6
|
+
onMount(() => {
|
|
7
|
+
if (props.url) {
|
|
8
|
+
map().loadImage(props.url, (error, image) => {
|
|
9
|
+
if (error)
|
|
10
|
+
throw error;
|
|
11
|
+
!map().hasImage(props.id) && map().addImage(props.id, image);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
!map().hasImage(props.id) &&
|
|
16
|
+
map().addImage(props.id, props.image, props.options);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
// Remove Image
|
|
20
|
+
onCleanup(() => map().hasImage(props.id) && map().removeImage(props.id));
|
|
21
|
+
// Update Image
|
|
22
|
+
createEffect(async () => {
|
|
23
|
+
if (props.image && props.url)
|
|
24
|
+
return;
|
|
25
|
+
if (props.url) {
|
|
26
|
+
map().loadImage(props.url, (error, image) => {
|
|
27
|
+
if (error)
|
|
28
|
+
throw error;
|
|
29
|
+
!map().hasImage(props.id) && map().updateImage(props.id, image);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
map().hasImage(props.id) && map().updateImage(props.id, props.image);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return <></>;
|
|
37
|
+
};
|
|
38
|
+
export default Image;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { onMount, createEffect, createUniqueId } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
import { useSource } from '../Source';
|
|
4
|
+
const diff = (newProps = {}, prevProps = {}) => {
|
|
5
|
+
const keys = new Set([...Object.keys(newProps), ...Object.keys(prevProps)]);
|
|
6
|
+
return [...keys].reduce((acc, key) => {
|
|
7
|
+
const value = newProps[key];
|
|
8
|
+
if (value !== prevProps[key]) {
|
|
9
|
+
acc.push([key, value]);
|
|
10
|
+
}
|
|
11
|
+
return acc;
|
|
12
|
+
}, []);
|
|
13
|
+
};
|
|
14
|
+
const Layer = props => {
|
|
15
|
+
const map = useMap();
|
|
16
|
+
const source = useSource();
|
|
17
|
+
props.id = props.id || createUniqueId();
|
|
18
|
+
// Add Layer
|
|
19
|
+
onMount(async () => {
|
|
20
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
21
|
+
if (map().getLayer(props.id))
|
|
22
|
+
return;
|
|
23
|
+
map().addLayer(props.layer || {
|
|
24
|
+
...props.style,
|
|
25
|
+
id: props.id,
|
|
26
|
+
source: source.source,
|
|
27
|
+
}, props.beforeType
|
|
28
|
+
? map()
|
|
29
|
+
.getStyle()
|
|
30
|
+
.layers.find(l => l.type === props.beforeType).id
|
|
31
|
+
: props.beforeId);
|
|
32
|
+
});
|
|
33
|
+
// Update Style
|
|
34
|
+
createEffect((prev) => {
|
|
35
|
+
if (!props.style && map().getLayer(props.id))
|
|
36
|
+
return;
|
|
37
|
+
diff(props.style.paint, prev.paint).forEach(([key, value]) => map().setPaintProperty(props.id, key, value));
|
|
38
|
+
diff(props.style.layout, prev.layout).forEach(([key, value]) => map().setLayoutProperty(props.id, key, value));
|
|
39
|
+
if (props.style.minzoom !== prev.minzoom ||
|
|
40
|
+
props.style.maxzoom !== prev.max)
|
|
41
|
+
map().setLayerZoomRange(props.id, props.style.minzoom, props.style.maxzoom);
|
|
42
|
+
return props.style;
|
|
43
|
+
}, props.style);
|
|
44
|
+
// Update Visibility
|
|
45
|
+
createEffect(async () => {
|
|
46
|
+
if (!props.visible)
|
|
47
|
+
return;
|
|
48
|
+
!map().loaded() && (await map().once('styledata'));
|
|
49
|
+
map().setLayoutProperty(props.id, 'visibility', props.visible ? 'visible' : 'none', { validate: false });
|
|
50
|
+
});
|
|
51
|
+
// Update Filter
|
|
52
|
+
createEffect(async () => {
|
|
53
|
+
if (!props.filter)
|
|
54
|
+
return;
|
|
55
|
+
!map().loaded() && (await map().once('styledata'));
|
|
56
|
+
map().setFilter(props.id, props.filter);
|
|
57
|
+
});
|
|
58
|
+
// Update Feature State
|
|
59
|
+
createEffect(async () => {
|
|
60
|
+
if (!props.featureState?.id)
|
|
61
|
+
return;
|
|
62
|
+
map().loaded() ? null : await map().once('render');
|
|
63
|
+
map().removeFeatureState({
|
|
64
|
+
source: source.source,
|
|
65
|
+
sourceLayer: props.style['source-layer'],
|
|
66
|
+
});
|
|
67
|
+
map().setFeatureState({
|
|
68
|
+
source: source.source,
|
|
69
|
+
sourceLayer: props.style['source-layer'],
|
|
70
|
+
id: props.featureState.id,
|
|
71
|
+
}, props.featureState.state);
|
|
72
|
+
});
|
|
73
|
+
return props.children;
|
|
74
|
+
};
|
|
75
|
+
export default Layer;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createEffect, onMount, onCleanup, createContext, useContext, useTransition, } from 'solid-js';
|
|
2
|
+
import mapboxgl from 'mapbox-gl';
|
|
3
|
+
const [pending, start] = useTransition();
|
|
4
|
+
const MapContext = createContext();
|
|
5
|
+
const useMap = () => useContext(MapContext);
|
|
6
|
+
const MapGL = props => {
|
|
7
|
+
let map;
|
|
8
|
+
let mapRef;
|
|
9
|
+
onCleanup(() => map.remove());
|
|
10
|
+
onMount(() => {
|
|
11
|
+
map = new mapboxgl.Map({
|
|
12
|
+
...props.options,
|
|
13
|
+
container: mapRef,
|
|
14
|
+
bounds: props.viewport.bounds,
|
|
15
|
+
center: props.viewport.center,
|
|
16
|
+
zoom: props.viewport.zoom || null,
|
|
17
|
+
pitch: props.viewport.pitch || null,
|
|
18
|
+
bearing: props.viewport.bearing || null,
|
|
19
|
+
fitBoundsOptions: { padding: props.viewport.padding },
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
createEffect(() => props.onMouseMove &&
|
|
23
|
+
map.on('mousemove', event => props.onMouseMove(event.lngLat)));
|
|
24
|
+
const _onViewportChange = () => {
|
|
25
|
+
const viewport = {
|
|
26
|
+
center: map.getCenter(),
|
|
27
|
+
zoom: map.getZoom(),
|
|
28
|
+
pitch: map.getPitch(),
|
|
29
|
+
bearing: map.getBearing(),
|
|
30
|
+
padding: props.viewport.padding,
|
|
31
|
+
};
|
|
32
|
+
props.onViewportChange(viewport);
|
|
33
|
+
};
|
|
34
|
+
createEffect(() => props.onViewportChange &&
|
|
35
|
+
map
|
|
36
|
+
.on('dragend', _onViewportChange)
|
|
37
|
+
.on('moveend', _onViewportChange)
|
|
38
|
+
.on('zoomend', _onViewportChange)
|
|
39
|
+
.on('rotateend', _onViewportChange)
|
|
40
|
+
.on('pitchend', _onViewportChange)
|
|
41
|
+
.on('boxzoomend', _onViewportChange));
|
|
42
|
+
createEffect(async () => {
|
|
43
|
+
if (!props.viewport.bounds)
|
|
44
|
+
return;
|
|
45
|
+
// await map.once('idle')
|
|
46
|
+
map.fitBounds(props.viewport.bounds, {
|
|
47
|
+
padding: props.viewport.padding,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
let index = 0;
|
|
51
|
+
createEffect(() => {
|
|
52
|
+
if (props.triggerResize) {
|
|
53
|
+
index = 0;
|
|
54
|
+
window.requestAnimationFrame(function loop() {
|
|
55
|
+
if (index < 15) {
|
|
56
|
+
index++;
|
|
57
|
+
window.requestAnimationFrame(loop);
|
|
58
|
+
start(() => map.resize());
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return (<MapContext.Provider value={() => map}>
|
|
64
|
+
<main ref={mapRef} class={props.class || ''} classList={props.classList} style={{ height: '100%', width: '100%' }}>
|
|
65
|
+
{props.children}
|
|
66
|
+
</main>
|
|
67
|
+
</MapContext.Provider>);
|
|
68
|
+
};
|
|
69
|
+
export { MapGL as default, useMap };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { onMount, onCleanup, createEffect } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
import mapboxgl from 'mapbox-gl';
|
|
4
|
+
const Marker = props => {
|
|
5
|
+
const map = useMap();
|
|
6
|
+
let marker = null;
|
|
7
|
+
// Add Marker
|
|
8
|
+
onMount(async () => {
|
|
9
|
+
marker = new mapboxgl.Marker(props.options)
|
|
10
|
+
.setLngLat(props.lnglat)
|
|
11
|
+
.setPopup(props.children
|
|
12
|
+
? new mapboxgl.Popup().setDOMContent(<div>{props.children}</div>)
|
|
13
|
+
: null)
|
|
14
|
+
.addTo(map());
|
|
15
|
+
});
|
|
16
|
+
// Remove Marker
|
|
17
|
+
onCleanup(() => marker.remove());
|
|
18
|
+
// Update Position
|
|
19
|
+
createEffect(() => marker.setLngLat(props.lnglat));
|
|
20
|
+
return <></>;
|
|
21
|
+
};
|
|
22
|
+
export default Marker;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { onMount, onCleanup, createEffect } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
import mapboxgl from 'mapbox-gl';
|
|
4
|
+
const Popup = props => {
|
|
5
|
+
const map = useMap();
|
|
6
|
+
let popup = null;
|
|
7
|
+
// Add Popup
|
|
8
|
+
onMount(async () => {
|
|
9
|
+
popup = new mapboxgl.Popup(props.options)
|
|
10
|
+
.setLngLat(props.lnglat)
|
|
11
|
+
.setDOMContent(<div>{props.children}</div>)
|
|
12
|
+
.addTo(map());
|
|
13
|
+
});
|
|
14
|
+
// Remove Popup
|
|
15
|
+
onCleanup(() => popup.remove());
|
|
16
|
+
// Update Position
|
|
17
|
+
createEffect(() => popup.setLngLat(props.lnglat));
|
|
18
|
+
// Update Content
|
|
19
|
+
createEffect(() => popup.setDOMContent(<div>{props.children}</div>));
|
|
20
|
+
return <></>;
|
|
21
|
+
};
|
|
22
|
+
export default Popup;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { onMount, onCleanup, createEffect } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
const Sky = props => {
|
|
4
|
+
const map = useMap();
|
|
5
|
+
const layerId = '_sky';
|
|
6
|
+
// Add Sky Layer
|
|
7
|
+
onMount(async () => {
|
|
8
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
9
|
+
!map().getLayer(layerId) && map().addLayer({ ...props.style, id: layerId });
|
|
10
|
+
});
|
|
11
|
+
// Remove Sky Layer
|
|
12
|
+
onCleanup(() => map().getLayer(layerId) && map().removeLayer(layerId));
|
|
13
|
+
// Update Visibility
|
|
14
|
+
createEffect(async () => {
|
|
15
|
+
if (props.visible === undefined)
|
|
16
|
+
return;
|
|
17
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
18
|
+
map().setLayoutProperty(layerId, 'visibility', props.visible ? 'visible' : 'none');
|
|
19
|
+
});
|
|
20
|
+
return props.children;
|
|
21
|
+
};
|
|
22
|
+
export default Sky;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { onMount, onCleanup, createEffect, createContext, useContext, createUniqueId, } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
const SourceContext = createContext();
|
|
4
|
+
const useSource = () => useContext(SourceContext);
|
|
5
|
+
const SourceComponent = props => {
|
|
6
|
+
const map = useMap();
|
|
7
|
+
props.id = props.id || createUniqueId();
|
|
8
|
+
// Add Source
|
|
9
|
+
onMount(async () => {
|
|
10
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
11
|
+
!map().getSource(props.id) && map().addSource(props.id, props.source);
|
|
12
|
+
});
|
|
13
|
+
// Remove Source
|
|
14
|
+
onCleanup(() => {
|
|
15
|
+
map()
|
|
16
|
+
.getStyle()
|
|
17
|
+
.layers.forEach(layer => layer.source === props.id && map().removeLayer(layer.id));
|
|
18
|
+
map().getSource(props.id) && map().removeSource(props.id);
|
|
19
|
+
});
|
|
20
|
+
// Update GeoJSON Data
|
|
21
|
+
createEffect(async () => {
|
|
22
|
+
if (props.source.type !== 'geojson' && !props.source.data)
|
|
23
|
+
return;
|
|
24
|
+
map().getSource(props.id) &&
|
|
25
|
+
map().getSource(props.id).setData(props.source.data);
|
|
26
|
+
});
|
|
27
|
+
return (<SourceContext.Provider value={{ source: props.id }}>
|
|
28
|
+
{props.children}
|
|
29
|
+
</SourceContext.Provider>);
|
|
30
|
+
};
|
|
31
|
+
export { SourceComponent as default, useSource };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { onMount, onCleanup, createEffect } from 'solid-js';
|
|
2
|
+
import { useMap } from '../MapGL';
|
|
3
|
+
import { useSource } from '../Source';
|
|
4
|
+
const Terrain = props => {
|
|
5
|
+
const map = useMap();
|
|
6
|
+
const source = useSource();
|
|
7
|
+
// Add Terrain Layer
|
|
8
|
+
onMount(async () => {
|
|
9
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
10
|
+
map().setTerrain({ ...props.style, source: source.source });
|
|
11
|
+
});
|
|
12
|
+
// Remove Terrain Layer
|
|
13
|
+
onCleanup(() => map().setTerrain(null));
|
|
14
|
+
// Update Visibility
|
|
15
|
+
createEffect(async () => {
|
|
16
|
+
if (props.visible === undefined)
|
|
17
|
+
return;
|
|
18
|
+
!map().isStyleLoaded() && (await map().once('styledata'));
|
|
19
|
+
map().setTerrain(props.visible ? props.style : null);
|
|
20
|
+
});
|
|
21
|
+
return props.children;
|
|
22
|
+
};
|
|
23
|
+
export default Terrain;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { default } from './components/MapGL';
|
|
2
|
+
export { default as Source } from './components/Source';
|
|
3
|
+
export { default as Layer } from './components/Layer';
|
|
4
|
+
export { default as Fog } from './components/Fog';
|
|
5
|
+
export { default as Sky } from './components/Sky';
|
|
6
|
+
export { default as Terrain } from './components/Terrain';
|
|
7
|
+
export { default as Control } from './components/Control';
|
|
8
|
+
export { default as Marker } from './components/Marker';
|
|
9
|
+
export { default as Popup } from './components/Popup';
|
|
10
|
+
export { default as Image } from './components/Image';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Component } from 'solid-js';
|
|
2
|
+
import type { Options as AttributionOptions } from 'mapbox-gl/src/ui/control/attribution_control';
|
|
3
|
+
import type { Options as FullscreenOptions } from 'mapbox-gl/src/ui/control/fullscreen_control';
|
|
4
|
+
import type { Options as GeolocateOptions } from 'mapbox-gl/src/ui/control/geolocate_control';
|
|
5
|
+
import type { Options as NavigationOptions } from 'mapbox-gl/src/ui/control/navigation_control';
|
|
6
|
+
import type { Options as ScaleOptions } from 'mapbox-gl/src/ui/control/scale_control';
|
|
7
|
+
declare const Control: Component<{
|
|
8
|
+
type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate' | 'language' | 'traffic';
|
|
9
|
+
options?: NavigationOptions | ScaleOptions | AttributionOptions | FullscreenOptions | GeolocateOptions;
|
|
10
|
+
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
11
|
+
}>;
|
|
12
|
+
export default Control;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Component } from 'solid-js';
|
|
2
|
+
import type { StyleImageInterface, StyleImageMetadata } from 'mapbox-gl/src/style/style_image';
|
|
3
|
+
declare const Image: Component<{
|
|
4
|
+
id: string;
|
|
5
|
+
url?: string;
|
|
6
|
+
image?: HTMLImageElement | ImageBitmap | ImageData | {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
data: Uint8Array | Uint8ClampedArray;
|
|
10
|
+
} | StyleImageInterface;
|
|
11
|
+
options?: StyleImageMetadata;
|
|
12
|
+
}>;
|
|
13
|
+
export default Image;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Component } from 'solid-js';
|
|
2
|
+
import type { FilterSpecification, StyleSpecification } from 'mapbox-gl/src/style-spec/types.js';
|
|
3
|
+
import type { CustomLayerInterface } from 'mapbox-gl/src/style/style_layer/custom_style_layer';
|
|
4
|
+
declare const Layer: Component<{
|
|
5
|
+
id?: string;
|
|
6
|
+
style?: StyleSpecification;
|
|
7
|
+
layer?: CustomLayerInterface;
|
|
8
|
+
filter?: FilterSpecification;
|
|
9
|
+
visible?: boolean;
|
|
10
|
+
sourceId?: string;
|
|
11
|
+
beforeType?: string;
|
|
12
|
+
beforeId?: string;
|
|
13
|
+
featureState?: {
|
|
14
|
+
id: number | string;
|
|
15
|
+
state: object;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
export default Layer;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component } from 'solid-js';
|
|
2
|
+
import type MapboxOptions from 'mapbox-gl/src/ui/map';
|
|
3
|
+
import type MapMouseEvent from 'mapbox-gl/src/ui/events';
|
|
4
|
+
export declare type Viewport = {
|
|
5
|
+
center?: object;
|
|
6
|
+
zoom?: number;
|
|
7
|
+
bounds?: number[][];
|
|
8
|
+
pitch?: number;
|
|
9
|
+
bearing?: number;
|
|
10
|
+
padding?: number;
|
|
11
|
+
};
|
|
12
|
+
declare const useMap: () => MapboxMap;
|
|
13
|
+
declare const MapGL: Component<{
|
|
14
|
+
class?: string;
|
|
15
|
+
classList?: any;
|
|
16
|
+
viewport?: Viewport;
|
|
17
|
+
options?: MapboxOptions;
|
|
18
|
+
children?: any[] | any;
|
|
19
|
+
triggerResize?: boolean;
|
|
20
|
+
onMouseMove?: (event: MapMouseEvent) => void;
|
|
21
|
+
onViewportChange?: (viewport: Viewport) => void;
|
|
22
|
+
}>;
|
|
23
|
+
export { MapGL as default, useMap };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Component } from 'solid-js';
|
|
2
|
+
import type { PopupSpecification } from 'mapbox-gl/src/style-spec/types.js';
|
|
3
|
+
import type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js';
|
|
4
|
+
declare const Popup: Component<{
|
|
5
|
+
options?: PopupSpecification;
|
|
6
|
+
lnglat: LngLatLike;
|
|
7
|
+
}>;
|
|
8
|
+
export default Popup;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Component } from 'solid-js';
|
|
2
|
+
import type { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js';
|
|
3
|
+
declare const useSource: () => Source;
|
|
4
|
+
declare const SourceComponent: Component<{
|
|
5
|
+
id?: string;
|
|
6
|
+
source: SourceSpecification;
|
|
7
|
+
}>;
|
|
8
|
+
export { SourceComponent as default, useSource };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { default } from './components/MapGL';
|
|
2
|
+
export { default as Source } from './components/Source';
|
|
3
|
+
export { default as Layer } from './components/Layer';
|
|
4
|
+
export { default as Fog } from './components/Fog';
|
|
5
|
+
export { default as Sky } from './components/Sky';
|
|
6
|
+
export { default as Terrain } from './components/Terrain';
|
|
7
|
+
export { default as Control } from './components/Control';
|
|
8
|
+
export { default as Marker } from './components/Marker';
|
|
9
|
+
export { default as Popup } from './components/Popup';
|
|
10
|
+
export { default as Image } from './components/Image';
|
|
11
|
+
export type { Viewport } from './components/MapGL';
|