solid-map-gl 1.2.0 → 1.2.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/styles.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","../../src/components/Camera/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","const mapBase = 'mapbox://styles/mapbox'\nconst gitBase = 'https://raw.githubusercontent.com'\n\nexport const vectorStyleList = {\n 'mb:light': `${mapBase}/light-v10`,\n 'mb:dark': `${mapBase}/dark-v10`,\n 'mb:streets': `${mapBase}/streets-v11`,\n 'mb:outdoor': `${mapBase}/outdoors-v11`,\n 'mb:sat': `${mapBase}/satellite-v9`,\n 'mb:sat-streets': `${mapBase}/satellite-streets-v11`,\n 'mb:nav': `${mapBase}/navigation-guidance-day-v4`,\n 'mb:nav-night': `${mapBase}/navigation-guidance-night-v4`,\n\n 'mb:basic': `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n 'mb:monochrome': `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n 'mb:leshine': `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n 'mb:icecream': `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n 'mb:cali': `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n 'mb:northstar': `${mapBase}/cj44mfrt20f082snokim4ungi`,\n 'mb:mineral': `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n 'mb:moonlight': `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n 'mb:frank': `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n 'mb:minimo': `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n 'mb:decimal': `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n 'mb:standard': `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n 'mb:blueprint': `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n 'mb:bubble': `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n 'mb:pencil': `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n\n 'mb:swiss-ski': `${gitBase}/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n 'mb:vintage': `${gitBase}/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n 'mb:whaam': `${gitBase}/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n 'mb:neon': `${gitBase}/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n 'mb:camoflauge': `${gitBase}/jingsam/mapbox-gl-styles/master/Camouflage.json`,\n 'mb:emerald': `${gitBase}/jingsam/mapbox-gl-styles/master/Emerald.json`,\n 'mb:runner': `${gitBase}/jingsam/mapbox-gl-styles/master/Runner.json`,\n 'mb:x-ray': `${gitBase}/jingsam/mapbox-gl-styles/master/X-ray.json`,\n}\n\nexport const rasterStyleList = {\n 'osm:org': [\n 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"https://www.openstreetmap.org\"><em>OpenStreetMap</em></a>',\n ],\n 'osm:human': [\n 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"http://hot.openstreetmap.org\"><em>Humanitarian OpenStreetMap Team</em></a>',\n ],\n 'osm:cycle': [\n 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://www.cyclosm.org\" target=\"_blank\"><em>CyclOSM</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'carto:voyager': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:positron': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:dark': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'open:topo': [\n 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://opentopomap.org/credits\"><em>OpenTopoMap</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner-lite': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:watercolor': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:terrain': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:cycle': [\n 'https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans': [\n 'https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans-dark': [\n 'https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:landscape': [\n 'https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:outdoors': [\n 'https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:neighbourhood': [\n 'https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:spinal': [\n 'https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:pioneer': [\n 'https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:atlas': [\n 'https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:mobile': [\n 'https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n on,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../styles'\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 MapContext = createContext<MapboxMap>()\n/** Provides the Mapbox Map Object */\nexport const useMap = (): MapboxMap => useContext(MapContext)\n\n/** Creates a new Map Container */\nexport const MapGL: Component<{\n id?: string\n /** Map Container CSS Style */\n style?: JSX.CSSProperties\n /** Map Container CSS Class */\n class?: string\n /** SolidJS Class List for Map Container */\n classList?: {\n [k: string]: boolean | undefined\n }\n /** Current Map View */\n viewport?: Viewport\n /** Mapbox Options\n * @see https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters\n */\n options?: MapboxOptions\n /** Type for pan, move and zoom transitions */\n transitionType?: 'flyTo' | 'easeTo' | 'jumpTo'\n /** Event listener for Viewport updates */\n onViewportChange?: (viewport: Viewport) => void\n /** Displays Map Tile Borders */\n showTileBoundaries?: boolean\n /** Displays Wireframe if Terrain is visible */\n showTerrainWireframe?: boolean\n /** Displays Borders if Padding is set */\n showPadding?: boolean\n /** Displays Label Collision Boxes */\n showCollisionBoxes?: boolean\n /** Displays all feature outlines even if normally not drawn by style rules */\n showOverdrawInspector?: boolean\n triggerResize?: boolean\n repaint?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: Element | Element[]\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLDivElement\n let containerRef: HTMLElement\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [pending, start] = useTransition()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n\n onMount(async () => {\n map = new mapboxgl.Map({\n ...props.options,\n style: vectorStyleList[props.options?.style] ||\n props.options?.style || { version: 8, sources: {}, layers: [] },\n container: mapRef,\n interactive: !!props.onViewportChange,\n bounds: props.viewport?.bounds,\n center: props.viewport?.center,\n zoom: props.viewport?.zoom || null,\n pitch: props.viewport?.pitch || null,\n bearing: props.viewport?.bearing || null,\n fitBoundsOptions: { padding: props.viewport?.padding },\n } as MapboxOptions)\n\n map.container = containerRef\n\n await map.once('styledata')\n setMapRoot(map)\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\n createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle))\n createEffect(() => setTransitionType(props.transitionType))\n\n // Update projection\n createEffect(\n on(\n () => props.options?.projection,\n proj => map.setProjection(proj),\n { defer: true }\n )\n )\n\n // Update map style\n createEffect(\n on(\n () => props.options?.style,\n style => {\n const oldStyle = map.getStyle()\n const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n const oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {})\n map.setStyle(\n vectorStyleList[style] ||\n style || { version: 8, sources: {}, layers: [] }\n )\n map.once('styledata', () => {\n const newStyle = map.getStyle()\n map.setStyle({\n ...newStyle,\n sources: { ...newStyle.sources, ...oldSources },\n layers: [...newStyle.layers, ...oldLayers],\n })\n })\n },\n { defer: true }\n )\n )\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\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={mapRoot}>\n <section\n ref={containerRef}\n style={{ position: 'absolute', 'z-index': 1 }}>\n {props.children || null}\n </section>\n <div\n ref={mapRef}\n class={props.class || null}\n classList={props.classList || null}\n style={{ height: '100%', width: '100%', ...props.style }}\n />\n </MapContext.Provider>\n )\n}\n","import {\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 { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../styles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url =>\n rasterStyleList[url]\n ? {\n ...props.source,\n url: '',\n tiles: [\n rasterStyleList[url][0].replace('{apikey}', props.source.apikey),\n ],\n attribution: rasterStyleList[url][1],\n }\n : props.source\n\n // Add Source\n createEffect(() => {\n if (!map()) return\n const source = lookup(props.source.url)\n source.tiles &&\n (source.tiles = ['a', 'b', 'c'].map(i =>\n source.tiles[0].replace('{s}', i)\n ))\n !map().getSource(props.id) && map().addSource(props.id, 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\n createEffect(() => {\n if (!map()) return\n const source = map().getSource(props.id)\n if (!source) return\n\n // Update GeoJSON Data\n if (props.source.type === 'geojson' && props.source.data)\n source.setData(props.source.data)\n\n // Update Image URL\n if (\n props.source.type === 'image' &&\n (props.source.url || props.source.coordinates)\n )\n source.updateImage(props.source.url, props.source.coordinates)\n\n // Update Vector URL or Tiles\n if (\n props.source.type === 'vector' &&\n (props.source.url || props.source.tiles)\n )\n props.source.url\n ? source.setUrl(props.source.url)\n : source.setTiles(props.source.tiles)\n\n // Update Raster URL or Tiles\n if (\n props.source.type === 'raster' &&\n (props.source.url || props.source.tiles)\n ) {\n const src = lookup(props.source.url)\n src.tiles &&\n (src.tiles = ['a', 'b', 'c'].map(i => src.tiles[0].replace('{s}', i)))\n source._tileJSONRequest?.cancel()\n source.url = src.url\n source.scheme = src.scheme\n source._options = { ...source._options, ...src }\n map().style._sourceCaches[`other:${props.id}`]?.clearTiles()\n source.load()\n }\n })\n\n return (\n <SourceContext.Provider value={props.id}>\n {props.children}\n </SourceContext.Provider>\n )\n}\n","import { onCleanup, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport { layerEvents } from '../../events'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n FilterSpecification,\n StyleSpecification,\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\nexport const Layer: Component<{\n id?: string\n style?: StyleSpecification\n customLayer?: 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 children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: string = useSourceId()\n props.id = props.id || createUniqueId()\n\n // Add Layer\n createEffect(() => {\n if (!map()) return\n !map().getLayer(props.id) &&\n map().addLayer(\n props.customLayer || {\n ...props.style,\n id: props.id,\n source: sourceId,\n metadata: {\n smg: { beforeType: props.beforeType, beforeId: props.beforeId },\n },\n },\n props.beforeType\n ? map()\n ?.getStyle()\n .layers.find(l => l.type === props.beforeType).id\n : props.beforeId\n )\n })\n\n //Remove Layer\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 (!map()) return\n if (\n !props.style ||\n !map().style ||\n !map().getSource(sourceId) ||\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(sourceId) ||\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: sourceId,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: sourceId,\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","import { 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\nexport const Fog: Component<{\n style: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n createEffect(() => {\n if (!map()) return\n map().setFog(props.style)\n })\n\n // Remove Fog Layer\n onCleanup(() => map().setFog(null))\n\n // Update Visibility\n createEffect(() => {\n if (!map()) return\n props.visible !== undefined &&\n map().setFog(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { 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\nexport const Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n\n // Add Sky Layer\n createEffect(() => {\n if (!map()) return\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(() => {\n if (!map()) return\n props.visible !== undefined &&\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } 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\nexport const Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n if (!map()) return\n map().setTerrain({ ...props.style, source: sourceId })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n if (!map()) return\n props.visible !== undefined &&\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { createEffect, 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\nexport const Control: Component<{\n type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n | object\n custom?: any\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n // Add Control\n createEffect(() => {\n if (!map()) return\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","import { 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 { MarkerSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Marker: Component<{\n options?: MarkerSpecification\n lnglat: LngLatLike\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n createEffect(() => {\n if (!map()) return\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 && marker.setLngLat(props.lnglat))\n\n return <></>\n}\n","import { 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\nexport const Popup: Component<{\n options?: PopupSpecification\n lnglat: LngLatLike\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let popup = null\n\n // Add Popup\n createEffect(() => {\n if (!map()) return\n popup = new mapboxgl.Popup(props.options)\n .setLngLat(props.lnglat)\n .setDOMContent(<div>{props.children}</div>)\n .addTo(map())\n })\n\n // Remove Popup\n onCleanup(() => popup.remove())\n\n // Update Position\n createEffect(() => popup && popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup && popup.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n","import { 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\nexport const 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 createEffect(() => {\n if (!map()) return\n if (props.url) {\n map().loadImage(\n props.url,\n (_, image) =>\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\n // Remove Image\n onCleanup(() => map().hasImage(props.id) && map().removeImage(props.id))\n\n // Update Image\n createEffect(async () => {\n if (!map()) return\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","import { createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type LngLatLike from 'mapbox-gl/src/geo/lng_lat.js'\nimport { MercatorCoordinate } from 'mapbox-gl'\n\n// linearly interpolate between two positions [x,y,z] based on time\nconst lerp = (a, b, t) => a.map((_, idx) => (1.0 - t) * a[idx] + t * b[idx])\n\n// sphericaly interpolate between two positions [x,y,z] based on time\nconst slerp = (a, b, t) => {\n const omega = 0.075\n // TODO: Proper Calculation\n // a.map((_, idx) => a[idx] * b[idx]).reduce((m, n) => m + n)\n\n return a.map(\n (_, idx) =>\n (Math.sin((1 - t) * omega) / Math.sin(omega)) * a[idx] +\n (Math.sin(t * omega) / Math.sin(omega)) * b[idx]\n )\n}\n\n// calculations from: https://easings.net\nconst easeQuad = {\n in: (x: number): number => x * x,\n out: (x: number): number => 1 - (1 - x) * (1 - x),\n inOut: (x: number): number =>\n x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n}\n\nexport const Camera: Component<{\n animate: boolean\n translate?: {\n type?: 'line' | 'sphere'\n start: [number, number, number]\n end: [number, number, number]\n target: LngLatLike\n targetEnd?: LngLatLike\n easing?: 'in' | 'out' | 'inOut'\n loop?: boolean\n duration: number\n }\n}> = props => {\n const map: MapboxMap = useMap()\n let animationTime = 0.1\n let isReverse = false\n\n const updateCameraPosition = ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = MercatorCoordinate.fromLngLat([lng, lat], alt)\n camera.lookAtPoint(target)\n map().setFreeCameraOptions(camera)\n }\n\n const frame = (time: number) => {\n props.animate && window.requestAnimationFrame(frame)\n const params = [\n props.translate.start,\n props.translate.end,\n props.translate.easing\n ? easeQuad[props.translate.easing](animationTime)\n : animationTime,\n ] as const\n const position =\n props.translate.type === 'line' ? lerp(...params) : slerp(...params)\n\n updateCameraPosition(position, props.translate.target)\n\n if (!props.translate.loop && (animationTime > 1.0 || animationTime < 0.0))\n isReverse = !isReverse\n animationTime = isReverse ? animationTime - 0.001 : animationTime + 0.001\n }\n\n createEffect(async () => {\n props.animate && window.requestAnimationFrame(frame)\n })\n\n return props.children\n}\n"],"names":["mapEvents","layerEvents","mapBase","gitBase","vectorStyleList","mb:light","mb:dark","mb:streets","mb:outdoor","mb:sat","mb:sat-streets","mb:nav","mb:nav-night","mb:basic","mb:monochrome","mb:leshine","mb:icecream","mb:cali","mb:northstar","mb:mineral","mb:moonlight","mb:frank","mb:minimo","mb:decimal","mb:standard","mb:blueprint","mb:bubble","mb:pencil","mb:swiss-ski","mb:vintage","mb:whaam","mb:neon","mb:camoflauge","mb:emerald","mb:runner","mb:x-ray","rasterStyleList","osm:org","osm:human","osm:cycle","carto:voyager","carto:positron","carto:dark","open:topo","stamen:toner","stamen:toner-lite","stamen:watercolor","stamen:terrain","tf:cycle","tf:trans","tf:trans-dark","tf:landscape","tf:outdoors","tf:neighbourhood","tf:spinal","tf:pioneer","tf:atlas","tf:mobile","MapContext","createContext","useMap","useContext","MapGL","props","_props$viewport13","let","map","mapRef","containerRef","id","createUniqueId","mapRoot","setMapRoot","createSignal","start","useTransition","transitionType","setTransitionType","onMount","async","_props$viewport6","mapboxgl","Map","options","style","_props$options","_props$options2","version","sources","layers","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","once","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","cursor","cursorStyle","_props$options3","projection","proj","setProjection","defer","_props$options4","oldStyle","getStyle","oldLayers","filter","l","startsWith","oldSources","Object","keys","s","reduce","obj","key","setStyle","newStyle","_props$viewport8","getCenter","getZoom","getPitch","getBearing","_props$viewport7","callMove","originalEvent","callEnd","prev","_props$viewport12","_props$viewport9","cameraForBounds","_props$viewport10","_props$viewport11","_props$viewport15","_props$viewport14","untrack","stop","easeTo","jumpTo","flyTo","index","triggerResize","window","requestAnimationFrame","loop","resize","_$createComponent","Provider","value","children","_el$","_tmpl$","cloneNode","_ref$","setProperty","_$insert","_el$2","_tmpl$2","_ref$2","_$effect","_p$","_v$","class","_v$2","classList","_v$3","height","width","_$className","_$classList","_$style","undefined","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","attribution","i","getSource","addSource","layer","removeLayer","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","_map$style$_sourceCac","src","_source$_tileJSONRequ","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","_map","getLayer","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","_map2","_map3","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","isStyleLoaded","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","loadImage","_","image","hasImage","addImage","removeImage","error","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","params","translate","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/events.ts","../../src/styles.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","../../src/components/Camera/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","const mapBase = 'mapbox://styles/mapbox'\nconst gitBase = 'https://raw.githubusercontent.com'\n\nexport const vectorStyleList = {\n 'mb:light': `${mapBase}/light-v10`,\n 'mb:dark': `${mapBase}/dark-v10`,\n 'mb:streets': `${mapBase}/streets-v11`,\n 'mb:outdoor': `${mapBase}/outdoors-v11`,\n 'mb:sat': `${mapBase}/satellite-v9`,\n 'mb:sat-streets': `${mapBase}/satellite-streets-v11`,\n 'mb:nav': `${mapBase}/navigation-guidance-day-v4`,\n 'mb:nav-night': `${mapBase}/navigation-guidance-night-v4`,\n\n 'mb:basic': `${mapBase}/cjf4m44iw0uza2spb3q0a7s41`,\n 'mb:monochrome': `${mapBase}/cjv6rzz4j3m4b1fqcchuxclhb`,\n 'mb:leshine': `${mapBase}/cjcunv5ae262f2sm9tfwg8i0w`,\n 'mb:icecream': `${mapBase}/cj7t3i5yj0unt2rmt3y4b5e32`,\n 'mb:cali': `${mapBase}/cjerxnqt3cgvp2rmyuxbeqme7`,\n 'mb:northstar': `${mapBase}/cj44mfrt20f082snokim4ungi`,\n 'mb:mineral': `${mapBase}/cjtep62gq54l21frr1whf27ak`,\n 'mb:moonlight': `${mapBase}/cj3kbeqzo00022smj7akz3o1e`,\n 'mb:frank': `${mapBase}-map-design/ckshxkppe0gge18nz20i0nrwq`,\n 'mb:minimo': `${mapBase}-map-design/cksjc2nsq1bg117pnekb655h1`,\n 'mb:decimal': `${mapBase}-map-design/ck4014y110wt61ctt07egsel6`,\n 'mb:standard': `${mapBase}-map-design/ckr0svm3922ki18qntevm857n`,\n 'mb:blueprint': `${mapBase}-map-design/cks97e1e37nsd17nzg7p0308g`,\n 'mb:bubble': `${mapBase}-map-design/cksysy2nl62zp17quosctdtcc`,\n 'mb:pencil': `${mapBase}-map-design/cks9iema71es417mlrft4go2k`,\n\n 'mb:swiss-ski': `${gitBase}/mapbox/mapbox-gl-swiss-ski-style/master/cij1zoclj002y8rkkdjl69psd.json`,\n 'mb:vintage': `${gitBase}/mapbox/mapbox-gl-vintage-style/master/cif5p01n202nisaktvljx9mv3.json`,\n 'mb:whaam': `${gitBase}/mapbox/mapbox-gl-whaam-style/master/cii8323c8004w0nlvtss3dbm2.json`,\n 'mb:neon': `${gitBase}/NatEvatt/awesome-mapbox-gl-styles/master/styles/Neon/style.json`,\n 'mb:camoflauge': `${gitBase}/jingsam/mapbox-gl-styles/master/Camouflage.json`,\n 'mb:emerald': `${gitBase}/jingsam/mapbox-gl-styles/master/Emerald.json`,\n 'mb:runner': `${gitBase}/jingsam/mapbox-gl-styles/master/Runner.json`,\n 'mb:x-ray': `${gitBase}/jingsam/mapbox-gl-styles/master/X-ray.json`,\n}\n\nexport const rasterStyleList = {\n 'osm:org': [\n 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"https://www.openstreetmap.org\"><em>OpenStreetMap</em></a>',\n ],\n 'osm:human': [\n 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n 'Map &copy; <a href=\"http://hot.openstreetmap.org\"><em>Humanitarian OpenStreetMap Team</em></a>',\n ],\n 'osm:cycle': [\n 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://www.cyclosm.org\" target=\"_blank\"><em>CyclOSM</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'carto:voyager': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:positron': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'carto:dark': [\n 'https://{s}.basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://carto.com/attribution\"><em>Carto</em></a>',\n ],\n 'open:topo': [\n 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://opentopomap.org/credits\"><em>OpenTopoMap</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:toner-lite': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:watercolor': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'stamen:terrain': [\n 'https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.jpg',\n 'Maps &copy; <a href=\"https://stamen.com\" target=\"_blank\"><em>Stamen Design</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:cycle': [\n 'https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}@2x.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans': [\n 'https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:trans-dark': [\n 'https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:landscape': [\n 'https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:outdoors': [\n 'https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:neighbourhood': [\n 'https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:spinal': [\n 'https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:pioneer': [\n 'https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:atlas': [\n 'https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n 'tf:mobile': [\n 'https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',\n 'Maps &copy; <a href=\"https://thunderforest.com\" target=\"_blank\"><em>Thunderforest</em></a>, Data &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\"><em>OpenStreetMap</em></a>',\n ],\n}\n","import {\n createSignal,\n createEffect,\n onMount,\n onCleanup,\n createContext,\n useContext,\n Component,\n useTransition,\n createUniqueId,\n untrack,\n on,\n} from 'solid-js'\nimport { mapEvents } from '../../events'\nimport { vectorStyleList } from '../../styles'\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 MapContext = createContext<MapboxMap>()\n/** Provides the Mapbox Map Object */\nexport const useMap = (): MapboxMap => useContext(MapContext)\n\n/** Creates a new Map Container */\nexport const MapGL: Component<{\n id?: string\n /** Map Container CSS Style */\n style?: JSX.CSSProperties\n /** Map Container CSS Class */\n class?: string\n /** SolidJS Class List for Map Container */\n classList?: {\n [k: string]: boolean | undefined\n }\n /** Current Map View */\n viewport?: Viewport\n /** Mapbox Options\n * @see https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters\n */\n options?: MapboxOptions\n /** Type for pan, move and zoom transitions */\n transitionType?: 'flyTo' | 'easeTo' | 'jumpTo'\n /** Event listener for Viewport updates */\n onViewportChange?: (viewport: Viewport) => void\n /** Displays Map Tile Borders */\n showTileBoundaries?: boolean\n /** Displays Wireframe if Terrain is visible */\n showTerrainWireframe?: boolean\n /** Displays Borders if Padding is set */\n showPadding?: boolean\n /** Displays Label Collision Boxes */\n showCollisionBoxes?: boolean\n /** Displays all feature outlines even if normally not drawn by style rules */\n showOverdrawInspector?: boolean\n triggerResize?: boolean\n repaint?: boolean\n /** Mouse Cursor Style */\n cursorStyle?: string\n ref?: HTMLDivElement\n /** Children within the Map Container */\n children?: Element | Element[]\n}> = props => {\n let map: MapboxMap\n let mapRef: HTMLDivElement\n let containerRef: HTMLElement\n props.id = props.id || createUniqueId()\n\n const [mapRoot, setMapRoot] = createSignal<MapboxMap>()\n const [pending, start] = useTransition()\n const [transitionType, setTransitionType] = createSignal('flyTo')\n\n onMount(() => {\n map = new mapboxgl.Map({\n ...props.options,\n style: vectorStyleList[props.options?.style] ||\n props.options?.style || { version: 8, sources: {}, layers: [] },\n container: mapRef,\n interactive: !!props.onViewportChange,\n bounds: props.viewport?.bounds,\n center: props.viewport?.center,\n zoom: props.viewport?.zoom || null,\n pitch: props.viewport?.pitch || null,\n bearing: props.viewport?.bearing || null,\n fitBoundsOptions: { padding: props.viewport?.padding },\n } as MapboxOptions)\n\n map.container = containerRef\n\n map.once('styledata').then(() => setMapRoot(map))\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(() => {\n map.showTileBoundaries = props.showTileBoundaries\n map.showTerrainWireframe = props.showTerrainWireframe\n map.showPadding = props.showPadding\n map.showCollisionBoxes = props.showCollisionBoxes\n map.showOverdrawInspector = props.showOverdrawInspector\n })\n\n // Update cursor\n createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle))\n //Update transition type\n createEffect(() => setTransitionType(props.transitionType))\n // Update projection\n createEffect(\n on(\n () => props.options?.projection,\n proj => map.setProjection(proj),\n { defer: true }\n )\n )\n\n // Update map style\n createEffect(\n on(\n () => props.options?.style,\n style => {\n const oldStyle = map.getStyle()\n const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'))\n const oldSources = Object.keys(oldStyle.sources)\n .filter(s => s.startsWith('cl-'))\n .reduce(\n (obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }),\n {}\n )\n map.setStyle(\n vectorStyleList[style] ||\n style || { version: 8, sources: {}, layers: [] }\n )\n map.once('styledata', () => {\n const newStyle = map.getStyle()\n map.setStyle({\n ...newStyle,\n sources: { ...newStyle.sources, ...oldSources },\n layers: [...newStyle.layers, ...oldLayers],\n })\n })\n },\n { defer: true }\n )\n )\n\n // Hook up viewport events\n createEffect(() => {\n const viewport = {\n id: null,\n center: map.getCenter(),\n zoom: map.getZoom(),\n pitch: map.getPitch(),\n bearing: map.getBearing(),\n padding: props.viewport?.padding,\n bounds: props.viewport?.bounds,\n }\n\n const callMove = event => {\n if (event.originalEvent)\n props.onViewportChange &&\n props.onViewportChange({ ...viewport, id: props.id })\n setTransitionType('jumpTo')\n }\n\n const callEnd = event => {\n if (event.originalEvent)\n props.onViewportChange && props.onViewportChange(viewport)\n setTransitionType(props.transitionType)\n }\n\n map.on('move', callMove).on('moveend', callEnd)\n onCleanup(() => map.off('move', callMove).off('moveend', callEnd))\n })\n\n // Update boundaries\n createEffect(prev => {\n if (props.viewport?.bounds != prev)\n props.onViewportChange({\n ...props.viewport,\n ...map.cameraForBounds(props.viewport?.bounds, {\n padding: props.viewport?.padding,\n }),\n })\n return props.viewport?.bounds\n }, props.viewport?.bounds)\n\n // Update Viewport\n createEffect(() => {\n if (props.id === props.viewport?.id) return\n const viewport = {\n ...props.viewport,\n padding: props.viewport?.padding || 0,\n }\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\n return (\n <MapContext.Provider value={mapRoot}>\n <section\n ref={containerRef}\n style={{ position: 'absolute', 'z-index': 1 }}>\n {mapRoot() ? props.children : null}\n </section>\n <div\n id='map'\n ref={mapRef}\n class={props.class || null}\n classList={props.classList || null}\n style={{ height: '100%', width: '100%', ...props.style }}\n />\n </MapContext.Provider>\n )\n}\n","import {\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 { SourceSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport { rasterStyleList } from '../../styles'\n\nconst SourceContext = createContext<string>()\nexport const useSourceId = (): string => useContext(SourceContext)\n\nexport const Source: Component<{\n /** @optional Source ID for referencing non nexted Layers */\n id?: string\n /** @see https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/ */\n source: SourceSpecification\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n props.id = props.id || createUniqueId()\n\n const lookup = url =>\n rasterStyleList[url]\n ? {\n ...props.source,\n url: '',\n tiles: [\n rasterStyleList[url][0].replace('{apikey}', props.source.apikey),\n ],\n attribution: rasterStyleList[url][1],\n }\n : props.source\n\n // Add Source\n createEffect(() => {\n const source = lookup(props.source.url)\n source.tiles &&\n (source.tiles = ['a', 'b', 'c'].map(i =>\n source.tiles[0].replace('{s}', i)\n ))\n !map().getSource(props.id) && map().addSource(props.id, 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\n createEffect(() => {\n const source = map().getSource(props.id)\n if (!source) return\n\n // Update GeoJSON Data\n if (props.source.type === 'geojson' && props.source.data)\n source.setData(props.source.data)\n\n // Update Image URL\n if (\n props.source.type === 'image' &&\n (props.source.url || props.source.coordinates)\n )\n source.updateImage(props.source.url, props.source.coordinates)\n\n // Update Vector URL or Tiles\n if (\n props.source.type === 'vector' &&\n (props.source.url || props.source.tiles)\n )\n props.source.url\n ? source.setUrl(props.source.url)\n : source.setTiles(props.source.tiles)\n\n // Update Raster URL or Tiles\n if (\n props.source.type === 'raster' &&\n (props.source.url || props.source.tiles)\n ) {\n const src = lookup(props.source.url)\n src.tiles &&\n (src.tiles = ['a', 'b', 'c'].map(i => src.tiles[0].replace('{s}', i)))\n source._tileJSONRequest?.cancel()\n source.url = src.url\n source.scheme = src.scheme\n source._options = { ...source._options, ...src }\n map().style._sourceCaches[`other:${props.id}`]?.clearTiles()\n source.load()\n }\n })\n\n return (\n <SourceContext.Provider value={props.id}>\n {props.children}\n </SourceContext.Provider>\n )\n}\n","import { onCleanup, createEffect, Component, createUniqueId } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } from '../Source'\nimport { layerEvents } from '../../events'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type {\n FilterSpecification,\n StyleSpecification,\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\nexport const Layer: Component<{\n id?: string\n style?: StyleSpecification\n customLayer?: 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 children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: string = useSourceId()\n props.id = props.id || createUniqueId()\n\n // Add Layer\n createEffect(() => {\n !map().getLayer(props.id) &&\n map().addLayer(\n props.customLayer || {\n ...props.style,\n id: props.id,\n source: sourceId,\n metadata: {\n smg: { beforeType: props.beforeType, beforeId: props.beforeId },\n },\n },\n props.beforeType\n ? map()\n ?.getStyle()\n .layers.find(l => l.type === props.beforeType).id\n : props.beforeId\n )\n })\n\n //Remove Layer\n onCleanup(() => map().getLayer(props.id) && 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(sourceId) ||\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(sourceId) ||\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: sourceId,\n sourceLayer: props.style['source-layer'],\n })\n map().setFeatureState(\n {\n source: sourceId,\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","import { 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\nexport const Fog: Component<{\n style: FogSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n // Add Fog Layer\n createEffect(() => {\n map().setFog(props.style)\n })\n\n // Remove Fog Layer\n onCleanup(() => map().setFog(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setFog(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { 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\nexport const Sky: Component<{\n style: StyleSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const layerId = '_sky'\n\n // Add Sky Layer\n createEffect(() => {\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(() => {\n props.visible !== undefined &&\n map().setLayoutProperty(\n layerId,\n 'visibility',\n props.visible ? 'visible' : 'none'\n )\n })\n\n return props.children\n}\n","import { onCleanup, createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport { useSourceId } 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\nexport const Terrain: Component<{\n style: TerrainSpecification\n visible?: boolean\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const sourceId: SourceSpecification = useSourceId()\n\n // Add Terrain Layer\n createEffect(() => {\n map().setTerrain({ ...props.style, source: sourceId })\n })\n\n // Remove Terrain Layer\n onCleanup(() => map().setTerrain(null))\n\n // Update Visibility\n createEffect(() => {\n props.visible !== undefined &&\n map().setTerrain(props.visible ? props.style : null)\n })\n\n return props.children\n}\n","import { createEffect, 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\nexport const Control: Component<{\n type: 'navigation' | 'scale' | 'attribution' | 'fullscreen' | 'geolocate'\n options?:\n | NavigationOptions\n | ScaleOptions\n | AttributionOptions\n | FullscreenOptions\n | GeolocateOptions\n | object\n custom?: any\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n const [control, setControl] = createSignal(null)\n\n const getControl = (type, options) => {\n if (props.custom) return new props.custom(options)\n switch (type) {\n case 'navigation':\n return new mapboxgl.NavigationControl(options)\n case 'scale':\n return new mapboxgl.ScaleControl(options)\n case 'attribution':\n return new mapboxgl.AttributionControl(options)\n case 'geolocate':\n return new mapboxgl.GeolocateControl(options)\n case 'fullscreen':\n return new mapboxgl.FullscreenControl()\n // options || { container: map().container }\n default:\n throw new Error(`Unknown control type: ${type}`)\n }\n }\n\n // Add Control\n createEffect(() => {\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","import { 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 { MarkerSpecification } from 'mapbox-gl/src/style-spec/types.js'\nimport type { LngLatLike } from 'mapbox-gl/src/geo/lng_lat.js'\n\nexport const Marker: Component<{\n options?: MarkerSpecification\n lnglat: LngLatLike\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let marker = null\n\n // Add Marker\n createEffect(() => {\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 && marker.setLngLat(props.lnglat))\n\n return <></>\n}\n","import { 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\nexport const Popup: Component<{\n options?: PopupSpecification\n lnglat: LngLatLike\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let popup = null\n\n // Add Popup\n createEffect(() => {\n popup = new mapboxgl.Popup(props.options)\n .setLngLat(props.lnglat)\n .setDOMContent(<div>{props.children}</div>)\n .addTo(map())\n })\n\n // Remove Popup\n onCleanup(() => popup.remove())\n\n // Update Position\n createEffect(() => popup && popup.setLngLat(props.lnglat))\n\n // Update Content\n createEffect(() => popup && popup.setDOMContent(<div>{props.children}</div>))\n\n return <></>\n}\n","import { 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\nexport const 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 createEffect(() => {\n if (props.url) {\n map().loadImage(\n props.url,\n (_, image) =>\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\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","import { createEffect, Component } from 'solid-js'\nimport { useMap } from '../MapGL'\nimport type MapboxMap from 'mapbox-gl/src/ui/map'\nimport type LngLatLike from 'mapbox-gl/src/geo/lng_lat.js'\nimport { MercatorCoordinate } from 'mapbox-gl'\n\n// linearly interpolate between two positions [x,y,z] based on time\nconst lerp = (a, b, t) => a.map((_, idx) => (1.0 - t) * a[idx] + t * b[idx])\n\n// sphericaly interpolate between two positions [x,y,z] based on time\nconst slerp = (a, b, t) => {\n const omega = 0.075\n // TODO: Proper Calculation\n // a.map((_, idx) => a[idx] * b[idx]).reduce((m, n) => m + n)\n\n return a.map(\n (_, idx) =>\n (Math.sin((1 - t) * omega) / Math.sin(omega)) * a[idx] +\n (Math.sin(t * omega) / Math.sin(omega)) * b[idx]\n )\n}\n\n// calculations from: https://easings.net\nconst easeQuad = {\n in: (x: number): number => x * x,\n out: (x: number): number => 1 - (1 - x) * (1 - x),\n inOut: (x: number): number =>\n x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n}\n\nexport const Camera: Component<{\n animate: boolean\n translate?: {\n type?: 'line' | 'sphere'\n start: [number, number, number]\n end: [number, number, number]\n target: LngLatLike\n targetEnd?: LngLatLike\n easing?: 'in' | 'out' | 'inOut'\n loop?: boolean\n duration: number\n }\n children?: any\n}> = props => {\n const map: MapboxMap = useMap()\n let animationTime = 0.1\n let isReverse = false\n\n const updateCameraPosition = ([lng, lat, alt], target) => {\n const camera = map().getFreeCameraOptions()\n camera.position = MercatorCoordinate.fromLngLat([lng, lat], alt)\n camera.lookAtPoint(target)\n map().setFreeCameraOptions(camera)\n }\n\n const frame = (time: number) => {\n props.animate && window.requestAnimationFrame(frame)\n const params = [\n props.translate.start,\n props.translate.end,\n props.translate.easing\n ? easeQuad[props.translate.easing](animationTime)\n : animationTime,\n ] as const\n const position =\n props.translate.type === 'line' ? lerp(...params) : slerp(...params)\n\n updateCameraPosition(position, props.translate.target)\n\n if (!props.translate.loop && (animationTime > 1.0 || animationTime < 0.0))\n isReverse = !isReverse\n animationTime = isReverse ? animationTime - 0.001 : animationTime + 0.001\n }\n\n createEffect(async () => {\n props.animate && window.requestAnimationFrame(frame)\n })\n\n return props.children\n}\n"],"names":["mapEvents","layerEvents","mapBase","gitBase","vectorStyleList","mb:light","mb:dark","mb:streets","mb:outdoor","mb:sat","mb:sat-streets","mb:nav","mb:nav-night","mb:basic","mb:monochrome","mb:leshine","mb:icecream","mb:cali","mb:northstar","mb:mineral","mb:moonlight","mb:frank","mb:minimo","mb:decimal","mb:standard","mb:blueprint","mb:bubble","mb:pencil","mb:swiss-ski","mb:vintage","mb:whaam","mb:neon","mb:camoflauge","mb:emerald","mb:runner","mb:x-ray","rasterStyleList","osm:org","osm:human","osm:cycle","carto:voyager","carto:positron","carto:dark","open:topo","stamen:toner","stamen:toner-lite","stamen:watercolor","stamen:terrain","tf:cycle","tf:trans","tf:trans-dark","tf:landscape","tf:outdoors","tf:neighbourhood","tf:spinal","tf:pioneer","tf:atlas","tf:mobile","MapContext","createContext","useMap","useContext","MapGL","props","let","map","mapRef","containerRef","id","createUniqueId","mapRoot","setMapRoot","createSignal","start","useTransition","transitionType","setTransitionType","onMount","_props$viewport13","mapboxgl","Map","options","style","_props$options","_props$options2","version","sources","layers","container","interactive","onViewportChange","bounds","viewport","_props$viewport","center","_props$viewport2","zoom","pitch","bearing","fitBoundsOptions","padding","_props$viewport6","once","then","onCleanup","remove","createEffect","forEach","item","event","slice","toLowerCase","callback","e","on","off","showTileBoundaries","showTerrainWireframe","showPadding","showCollisionBoxes","showOverdrawInspector","getCanvas","cursor","cursorStyle","_props$options3","projection","proj","setProjection","defer","_props$options4","oldStyle","getStyle","oldLayers","filter","l","startsWith","oldSources","Object","keys","s","reduce","obj","key","setStyle","newStyle","_props$viewport8","getCenter","getZoom","getPitch","getBearing","_props$viewport7","callMove","originalEvent","callEnd","prev","_props$viewport12","_props$viewport9","cameraForBounds","_props$viewport10","_props$viewport11","_props$viewport15","_props$viewport14","untrack","stop","easeTo","jumpTo","flyTo","index","triggerResize","window","requestAnimationFrame","loop","resize","_$createComponent","Provider","value","children","_el$","_tmpl$","cloneNode","_ref$","setProperty","_$insert","_el$2","_tmpl$2","_ref$2","_$effect","_p$","_v$","class","_v$2","classList","_v$3","height","width","_$className","_$classList","_$style","undefined","SourceContext","useSourceId","Source","lookup","url","source","tiles","replace","apikey","attribution","i","getSource","addSource","layer","removeLayer","removeSource","type","data","setData","coordinates","updateImage","setUrl","setTiles","_map$style$_sourceCac","src","_source$_tileJSONRequ","_tileJSONRequest","cancel","scheme","_options","_sourceCaches","clearTiles","load","diff","newProps","prevProps","Set","acc","push","Layer","sourceId","_map","getLayer","addLayer","customLayer","metadata","smg","beforeType","beforeId","find","_map2","_map3","layout","setLayoutProperty","validate","paint","setPaintProperty","minzoom","maxzoom","setLayerZoomRange","setFilter","visible","async","isStyleLoaded","featureState","removeFeatureState","sourceLayer","setFeatureState","state","Fog","setFog","Sky","layerId","Terrain","setTerrain","Control","control","setControl","custom","NavigationControl","ScaleControl","AttributionControl","GeolocateControl","FullscreenControl","Error","getControl","addControl","position","removeControl","Marker","marker","setLngLat","lnglat","setPopup","Popup","setDOMContent","addTo","popup","Image","loadImage","_","image","hasImage","addImage","removeImage","error","lerp","a","b","t","idx","slerp","Math","sin","easeQuad","in","x","out","inOut","pow","Camera","animationTime","isReverse","frame","time","animate","params","translate","end","easing","updateCameraPosition","lng","lat","alt","target","camera","getFreeCameraOptions","MercatorCoordinate","fromLngLat","lookAtPoint","setFreeCameraOptions"],"mappings":"kRAAA,MAAMA,UAAsB,CAC1B,cACA,YACA,cACA,aACA,cACA,eACA,eACA,aACA,UACA,aACA,gBACA,eACA,aACA,gBACA,UACA,WACA,WACA,cACA,cACA,SACA,YACA,cACA,SACA,YACA,cACA,SACA,YACA,gBACA,WACA,aACA,eACA,UACA,aACA,iBACA,eACA,kBACA,qBACA,yBACA,SACA,WACA,SACA,UACA,SACA,cACA,eACA,gBACA,qBACA,sBACA,uBAGIC,YAAwB,CAC5B,cACA,YACA,cACA,aACA,cACA,eACA,eACA,UACA,aACA,gBACA,eACA,aACA,iBCjEIC,QAAU,yBACVC,QAAU,oCAEHC,gBAAkB,CAC7BC,WAAeH,QAAF,aACbI,UAAcJ,QAAF,YACZK,aAAiBL,QAAF,eACfM,aAAiBN,QAAF,gBACfO,SAAaP,QAAF,gBACXQ,iBAAqBR,QAAF,yBACnBS,SAAaT,QAAF,8BACXU,eAAmBV,QAAF,gCAEjBW,WAAeX,QAAF,6BACbY,gBAAoBZ,QAAF,6BAClBa,aAAiBb,QAAF,6BACfc,cAAkBd,QAAF,6BAChBe,UAAcf,QAAF,6BACZgB,eAAmBhB,QAAF,6BACjBiB,aAAiBjB,QAAF,6BACfkB,eAAmBlB,QAAF,6BACjBmB,WAAenB,QAAF,wCACboB,YAAgBpB,QAAF,wCACdqB,aAAiBrB,QAAF,wCACfsB,cAAkBtB,QAAF,wCAChBuB,eAAmBvB,QAAF,wCACjBwB,YAAgBxB,QAAF,wCACdyB,YAAgBzB,QAAF,wCAEd0B,eAAmBzB,QAAF,0EACjB0B,aAAiB1B,QAAF,wEACf2B,WAAe3B,QAAF,sEACb4B,UAAc5B,QAAF,mEACZ6B,gBAAoB7B,QAAF,mDAClB8B,aAAiB9B,QAAF,gDACf+B,YAAgB/B,QAAF,+CACdgC,WAAehC,QAAF,+CAGFiC,gBAAkB,CAC7BC,UAAW,CACT,iDACA,iFAEFC,YAAa,CACX,wDACA,kGAEFC,YAAa,CACX,oEACA,+LAEFC,gBAAiB,CACf,qFACA,0EAEFC,iBAAkB,CAChB,0EACA,0EAEFC,aAAc,CACZ,yEACA,0EAEFC,YAAa,CACX,mDACA,2LAEFC,eAAgB,CACd,kEACA,gMAEFC,oBAAqB,CACnB,uEACA,gMAEFC,oBAAqB,CACnB,uEACA,gMAEFC,iBAAkB,CAChB,oEACA,gMAEFC,WAAY,CACV,8EACA,uMAEFC,WAAY,CACV,+EACA,uMAEFC,gBAAiB,CACf,oFACA,uMAEFC,eAAgB,CACd,+EACA,uMAEFC,cAAe,CACb,8EACA,uMAEFC,mBAAoB,CAClB,mFACA,uMAEFC,YAAa,CACX,gFACA,uMAEFC,aAAc,CACZ,6EACA,uMAEFC,WAAY,CACV,2EACA,uMAEFC,YAAa,CACX,kFACA,8RCzFEC,WAAaC,gBAENC,OAAS,IAAiBC,WAAWH,YAGrCI,MAqCRC,IACHC,IAAIC,EACAC,EACAC,EACJJ,EAAMK,GAAKL,EAAMK,IAAMC,iBAEvB,KAAM,CAACC,EAASC,GAAcC,eACxB,CAAA,CAAUC,GAASC,gBACnB,CAACC,EAAgBC,GAAqBJ,aAAa,SAiKzD,OA/JAK,QAAQ,KAAM,IAAAC,GACZb,EAAM,IAAIc,SAASC,IAAI,IAClBjB,EAAMkB,QACTC,MAAO9E,gBAAe,OAAA+E,EAACpB,EAAMkB,cAAN,EAAAE,EAAeD,kBACpCnB,EAAMkB,cAAN,EAAAG,EAAeF,QAAS,CAAEG,QAAS,EAAGC,QAAS,GAAIC,OAAQ,IAC7DC,UAAWtB,EACXuB,cAAe1B,EAAM2B,iBACrBC,gBAAQ5B,EAAM6B,eAAR,EAAEC,EAAgBF,OACxBG,gBAAQ/B,EAAM6B,eAAR,EAAEG,EAAgBD,OACxBE,eAAMjC,EAAM6B,eAAUI,EAAAA,EAAAA,OAAQ,KAC9BC,gBAAOlC,EAAM6B,eAAUK,EAAAA,EAAAA,QAAS,KAChCC,kBAASnC,EAAM6B,eAAUM,EAAAA,EAAAA,UAAW,KACpCC,iBAAkB,CAAEC,QAASrC,OAAAA,EAAAA,EAAM6B,iBAANS,EAAgBD,YAG3CZ,UAAYrB,EAEhBF,EAAIqC,KAAK,aAAaC,KAAK,IAAMhC,EAAWN,IAE5CuC,UAAU,IAAMvC,EAAIwC,UAGpBC,aAAa,IACX1G,UAAU2G,QAAQC,IAChB,GAAI7C,EAAM6C,GAAO,CACf,MAAMC,EAAQD,EAAKE,MAAM,GAAGC,cACtBC,EAAWC,GAAKlD,EAAM6C,GAAMK,GAClChD,EAAIiD,GAAGL,EAAOG,GACdR,UAAU,IAAMvC,EAAIkD,IAAIN,EAAOG,QAMrCN,aAAa,KACXzC,EAAImD,mBAAqBrD,EAAMqD,mBAC/BnD,EAAIoD,qBAAuBtD,EAAMsD,qBACjCpD,EAAIqD,YAAcvD,EAAMuD,YACxBrD,EAAIsD,mBAAqBxD,EAAMwD,mBAC/BtD,EAAIuD,sBAAwBzD,EAAMyD,wBAIpCd,aAAa,IAAOzC,EAAIwD,YAAYvC,MAAMwC,OAAS3D,EAAM4D,aAEzDjB,aAAa,IAAM9B,EAAkBb,EAAMY,iBAE3C+B,aACEQ,GACE,KAAA,IAAAU,EAAA,OAAA,OAAAA,EAAM7D,EAAMkB,cAAZ,EAAM2C,EAAeC,YACrBC,GAAQ7D,EAAI8D,cAAcD,GAC1B,CAAEE,OAAO,KAKbtB,aACEQ,GACE,KAAA,IAAAe,EAAA,OAAA,OAAAA,EAAMlE,EAAMkB,cAAZ,EAAMgD,EAAe/C,OACrBA,IACE,MAAMgD,EAAWjE,EAAIkE,WACfC,EAAYF,EAAS3C,OAAO8C,OAAOC,GAAKA,EAAElE,GAAGmE,WAAW,QACxDC,EAAaC,OAAOC,KAAKR,EAAS5C,SACrC+C,OAAOM,GAAKA,EAAEJ,WAAW,QACzBK,OACC,CAACC,EAAKC,KAAS,IAAKD,GAAMC,GAAMZ,EAAS5C,QAAQwD,KACjD,IAEJ7E,EAAI8E,SACF3I,gBAAgB8E,IACdA,GAAS,CAAEG,QAAS,EAAGC,QAAS,GAAIC,OAAQ,KAEhDtB,EAAIqC,KAAK,YAAa,KACpB,IAAM0C,EAAW/E,EAAIkE,WACrBlE,EAAI8E,SAAS,IACRC,EACH1D,QAAS,IAAK0D,EAAS1D,WAAYkD,GACnCjD,OAAQ,IAAIyD,EAASzD,UAAW6C,QAItC,CAAEJ,OAAO,KAKbtB,aAAa,KAAM,IAAAuC,EACjB,MAAMrD,EAAW,CACfxB,GAAI,KACJ0B,OAAQ7B,EAAIiF,YACZlD,KAAM/B,EAAIkF,UACVlD,MAAOhC,EAAImF,WACXlD,QAASjC,EAAIoF,aACbjD,iBAASrC,EAAM6B,eAAR,EAAE0D,EAAgBlD,QACzBT,OAAQ5B,OAAAA,EAAAA,EAAM6B,iBAANqD,EAAgBtD,QAGpB4D,EAAW1C,IACXA,EAAM2C,eACRzF,EAAM2B,kBACJ3B,EAAM2B,iBAAiB,IAAKE,EAAUxB,GAAIL,EAAMK,KACpDQ,EAAkB,WAGd6E,EAAU5C,IACVA,EAAM2C,eACRzF,EAAM2B,kBAAoB3B,EAAM2B,iBAAiBE,GACnDhB,EAAkBb,EAAMY,iBAG1BV,EAAIiD,GAAG,OAAQqC,GAAUrC,GAAG,UAAWuC,GACvCjD,UAAU,IAAMvC,EAAIkD,IAAI,OAAQoC,GAAUpC,IAAI,UAAWsC,MAI3D/C,aAAagD,IAAQ,IAAAC,EAQnB,gBAPI5F,EAAM6B,eAAN,EAAAgE,EAAgBjE,SAAU+D,GAC5B3F,EAAM2B,iBAAiB,IAClB3B,EAAM6B,YACN3B,EAAI4F,gBAAgB9F,OAAAA,EAAAA,EAAM6B,eAA1B,EAAoBkE,EAAgBnE,OAAQ,CAC7CS,QAASrC,OAAAA,EAAAA,EAAM6B,iBAANmE,EAAgB3D,YAG/B,OAAAuD,EAAO5F,EAAM6B,eAAb,EAAO+D,EAAgBhE,QARb,OAAAb,EASTf,EAAM6B,iBAANd,EAAgBa,QAGnBe,aAAa,KAAM,IAAAsD,EACjB,GAAIjG,EAAMK,MAAOL,OAAAA,EAAAA,EAAM6B,eAAN,EAAAqE,EAAgB7F,IAAjC,CACA,IAAMwB,EAAW,IACZ7B,EAAM6B,SACTQ,SAASrC,OAAAA,EAAAA,EAAM6B,eAAN,EAAAoE,EAAgB5D,UAAW,GAEtC,OAAQ8D,QAAQvF,IACd,IAAK,SACHV,EAAIkG,OAAOC,OAAOxE,GACpB,IAAK,SACH3B,EAAIkG,OAAOE,OAAOzE,GACpB,QACE3B,EAAIkG,OAAOG,MAAM1E,OAIvB5B,IAAIuG,EAAQ,EAEZ7D,aAAa,KACP3C,EAAMyG,gBACRD,EAAQ,EACRE,OAAOC,sBAAsB,SAASC,IAChCJ,EAAQ,KACVA,IACAE,OAAOC,sBAAsBC,GAC7BlG,EAAM,IAAMR,EAAI2G,kBAQvBC,gBAAAnH,WAAWoH,SADd,CACuBC,MAAOzG,EAD9B0G,eAAA,MAAA,EAAA,KAAA,MAAAC,EAAAC,SAAAC,WAAA,GAAAC,EAGWjH,EAHX,MAAA,mBAAAiH,EAAAA,EAAAH,GAGW9G,EAHX8G,EAAAA,EAAA/F,MAAAmG,YAAA,WAAA,YAAAJ,EAAA/F,MAAAmG,YAAA,UAAA,KAAAC,OAAAL,EAAA,IAKO3G,IAAYP,EAAMiH,SAAW,MALpCC,GAAA,IAAA,KAAA,MAAAM,EAAAC,QAAAL,WAAA,GAAAM,EASWvH,EATX,MAAA,mBAAAuH,EAAAA,EAAAF,GASWrH,EATXqH,EAAAG,OAAAC,IAAA,IAAAC,EAUa7H,EAAM8H,OAAS,KAV5BC,EAWiB/H,EAAMgI,WAAa,KACvBC,EAAA,CAAEC,OAAQ,OAAQC,MAAO,UAAWnI,EAAMmB,OAZvD,OAAA0G,IAAAD,EAAAC,KAAAO,UAAAZ,EAAAI,EAAAC,IAAAA,GAAAD,EAAAG,KAAAM,UAAAb,EAAAO,EAAAH,EAAAG,MAAAH,EAAAK,KAAAK,MAAAd,EAAAS,EAAAL,EAAAK,MAAAL,GAAA,CAAAC,SAAAU,EAAAR,UAAAQ,EAAAN,UAAAM,IAAAf,GAAA,QCvOIgB,cAAgB5I,gBACT6I,YAAc,IAAc3I,WAAW0I,eAEvCE,OAMR1I,IACH,MAAME,EAAiBL,SAGjB8I,GAFN3I,EAAMK,GAAKL,EAAMK,IAAMC,iBAERsI,GACbvK,gBAAgBuK,GACZ,IACK5I,EAAM6I,OACTD,IAAK,GACLE,MAAO,CACLzK,gBAAgBuK,GAAK,GAAGG,QAAQ,WAAY/I,EAAM6I,OAAOG,SAE3DC,YAAa5K,gBAAgBuK,GAAK,IAEpC5I,EAAM6I,QAgEZ,OA7DAlG,aAAa,KACX,MAAMkG,EAASF,EAAO3I,EAAM6I,OAAOD,KACnCC,EAAOC,QACJD,EAAOC,MAAQ,CAAC,IAAK,IAAK,KAAK5I,IAAIgJ,GAClCL,EAAOC,MAAM,GAAGC,QAAQ,MAAOG,KAElChJ,IAAMiJ,UAAUnJ,EAAMK,KAAOH,IAAMkJ,UAAUpJ,EAAMK,GAAIwI,KAI1DpG,UAAU,KACRvC,IACGkE,WACA5C,OAAOoB,QACNyG,GAASA,EAAMR,SAAW7I,EAAMK,IAAMH,IAAMoJ,YAAYD,EAAMhJ,KAElEH,IAAMiJ,UAAUnJ,EAAMK,KAAOH,IAAMqJ,aAAavJ,EAAMK,MAIxDsC,aAAa,KACX,MAAMkG,EAAS3I,IAAMiJ,UAAUnJ,EAAMK,IACrC,GAAKwI,IAGqB,YAAtB7I,EAAM6I,OAAOW,MAAsBxJ,EAAM6I,OAAOY,MAClDZ,EAAOa,QAAQ1J,EAAM6I,OAAOY,MAIN,UAAtBzJ,EAAM6I,OAAOW,OACZxJ,EAAM6I,OAAOD,KAAO5I,EAAM6I,OAAOc,cAElCd,EAAOe,YAAY5J,EAAM6I,OAAOD,IAAK5I,EAAM6I,OAAOc,aAI5B,WAAtB3J,EAAM6I,OAAOW,OACZxJ,EAAM6I,OAAOD,KAAO5I,EAAM6I,OAAOC,SAElC9I,EAAM6I,OAAOD,IACTC,EAAOgB,OAAO7J,EAAM6I,OAAOD,KAC3BC,EAAOiB,SAAS9J,EAAM6I,OAAOC,QAIX,WAAtB9I,EAAM6I,OAAOW,OACZxJ,EAAM6I,OAAOD,KAAO5I,EAAM6I,OAAOC,QAClC,CAAA,IAAAiB,EACA,MAAMC,EAAMrB,EAAO3I,EAAM6I,OAAOD,KAChCoB,EAAIlB,QACDkB,EAAIlB,MAAQ,CAAC,IAAK,IAAK,KAAK5I,IAAIgJ,GAAKc,EAAIlB,MAAM,GAAGC,QAAQ,MAAOG,KACpE,OAAAe,EAAApB,EAAOqB,mBAAPD,EAAyBE,SACzBtB,EAAOD,IAAMoB,EAAIpB,IACjBC,EAAOuB,OAASJ,EAAII,OACpBvB,EAAOwB,SAAW,IAAKxB,EAAOwB,YAAaL,GAC3C,OAAAD,EAAA7J,IAAMiB,MAAMmJ,cAAe,SAAQtK,EAAMK,MAAzC0J,EAAgDQ,aAChD1B,EAAO2B,UAKR1D,gBAAA0B,cAAczB,SADjB,CAAAC,YAAA,OACiChH,EAAMK,IADvC4G,eAAA,OAEKjH,EAAMiH,aC3FPwD,KAAO,CACXC,EAA+B,GAC/BC,EAAgC,MAGhC,MAAO,IADM,IAAIC,IAAI,IAAIlG,OAAOC,KAAK+F,MAAchG,OAAOC,KAAKgG,MAC9C9F,OAAO,CAACgG,EAAK9F,KAC5B,IAAMiC,EAAQ0D,EAAS3F,GAIvB,OAHIiC,IAAU2D,EAAU5F,IACtB8F,EAAIC,KAAK,CAAC/F,EAAKiC,IAEV6D,GACN,KAGQE,MAqBR/K,IACH,MAAME,EAAiBL,SACjBmL,EAAmBvC,cAyHzB,OAxHAzI,EAAMK,GAAKL,EAAMK,IAAMC,iBAGvBqC,aAAa,KAAM,IAAAsI,EAChB/K,IAAMgL,SAASlL,EAAMK,KACpBH,IAAMiL,SACJnL,EAAMoL,aAAe,IAChBpL,EAAMmB,MACTd,GAAIL,EAAMK,GACVwI,OAAQmC,EACRK,SAAU,CACRC,IAAK,CAAEC,WAAYvL,EAAMuL,WAAYC,SAAUxL,EAAMwL,YAGzDxL,EAAMuL,WACFrL,OAAAA,EAAAA,UADJ,EACI+K,EACI7G,WACD5C,OAAOiK,KAAKlH,GAAKA,EAAEiF,OAASxJ,EAAMuL,YAAYlL,GACjDL,EAAMwL,YAKhB/I,UAAU,IAAMvC,IAAMgL,SAASlL,EAAMK,KAAOH,IAAMoJ,YAAYtJ,EAAMK,KAGpEsC,aAAa,IACXzG,YAAY0G,QAAQC,IAClB,GAAI7C,EAAM6C,GAAO,CAAA,IAAA6I,EACf,MAAM5I,EAAQD,EAAKE,MAAM,GAAGC,cACtBC,EAAWC,GAAKlD,EAAM6C,GAAMK,GAClC,OAAAhD,EAAAA,MAAAwL,EAAOvI,GAAGL,EAAO9C,EAAMK,GAAI4C,GAC3BR,UAAU,KAAA,IAAAkJ,EAAA,OAAA,OAAAA,EAAMzL,UAAA,EAAAyL,EAAOvI,IAAIN,EAAO9C,EAAMK,GAAI4C,SAMlDN,aAAcgD,IACZ,GACG3F,EAAMmB,OACNjB,IAAMiB,OACNjB,IAAMiJ,UAAU6B,IAChB9K,IAAMgL,SAASlL,EAAMK,IA2BxB,OAvBIL,EAAMmB,MAAMyK,UAAWjG,MAAAA,OAAvB,EAAuBA,EAAMiG,SAC/BnB,KAAKzK,EAAMmB,MAAMyK,OAAQjG,MAAAA,SAAAA,EAAMiG,QAAQhJ,QAAQ,CAAA,CAAEmC,EAAKiC,KACpD9G,IAAM2L,kBAAkB7L,EAAMK,GAAI0E,EAAKiC,EAAO,CAAE8E,UAAU,KAG1D9L,EAAMmB,MAAM4K,SAAUpG,MAAAA,OAAtB,EAAsBA,EAAMoG,QAC9BtB,KAAKzK,EAAMmB,MAAM4K,MAAOpG,MAAAA,SAAAA,EAAMoG,OAAOnJ,QAAQ,CAAA,CAAEmC,EAAKiC,KAClD9G,IAAM8L,iBAAiBhM,EAAMK,GAAI0E,EAAKiC,EAAO,CAAE8E,UAAU,KAI3D9L,EAAMmB,MAAM8K,WAAYtG,MAAAA,OAAxB,EAAwBA,EAAMsG,UAC9BjM,EAAMmB,MAAM+K,WAAYvG,MAAAA,SAAAA,EAAMuG,UAE9BhM,IAAMiM,kBACJnM,EAAMK,GACNL,EAAMmB,MAAM8K,QACZjM,EAAMmB,MAAM+K,SAGZlM,EAAMmB,MAAMmD,UAAWqB,MAAAA,OAAvB,EAAuBA,EAAMrB,SAC/BpE,IAAMkM,UAAUpM,EAAMK,GAAIL,EAAMmB,MAAMmD,OAAQ,CAAEwH,UAAU,IAErD9L,EAAMmB,OACZnB,EAAMmB,OAGTwB,aAAcgD,IACZ,QACoB4C,IAAlBvI,EAAMqM,SACNrM,EAAMqM,UAAY1G,GACjBzF,IAAMiJ,UAAU6B,IAChB9K,IAAMgL,SAASlL,EAAMK,IAUxB,OANAH,IAAM2L,kBACJ7L,EAAMK,GACN,aACAL,EAAMqM,QAAU,UAAY,OAC5B,CAAEP,UAAU,IAEP9L,EAAMqM,SACZrM,EAAMqM,SAGT1J,aAAa2J,UACNtM,EAAMsE,SAEVpE,IAAMqM,uBAA0BrM,IAAMqC,KAAK,aAC5CrC,IAAMkM,UAAUpM,EAAMK,GAAIL,EAAMsE,WAIlC3B,aAAa2J,UACNtM,EAAMwM,cAAiBxM,EAAMwM,aAAanM,KAE9CH,IAAMqM,uBAA0BrM,IAAMqC,KAAK,aAE5CrC,IAAMuM,mBAAmB,CACvB5D,OAAQmC,EACR0B,YAAa1M,EAAMmB,MAAM,kBAE3BjB,IAAMyM,gBACJ,CACE9D,OAAQmC,EACR0B,YAAa1M,EAAMmB,MAAM,gBACzBd,GAAIL,EAAMwM,aAAanM,IAEzBL,EAAMwM,aAAaI,UAIhB5M,EAAMiH,UCpKF4F,IAIR7M,IACH,MAAME,EAAiBL,SAevB,OAbA8C,aAAa,KACXzC,IAAM4M,OAAO9M,EAAMmB,SAIrBsB,UAAU,IAAMvC,IAAM4M,OAAO,OAG7BnK,aAAa,UACO4F,IAAlBvI,EAAMqM,SACJnM,IAAM4M,OAAO9M,EAAMqM,QAAUrM,EAAMmB,MAAQ,QAGxCnB,EAAMiH,UCpBF8F,IAIR/M,IACH,MAAME,EAAiBL,SACjBmN,EAAU,OAoBhB,OAjBArK,aAAa,KACXzC,IAAMgL,SAAS8B,IAAY9M,IAAMiL,SAAS,IAAKnL,EAAMmB,MAAOd,GAAI2M,MAIlEvK,UAAU,IAAMvC,IAAMgL,SAAS8B,IAAY9M,IAAMoJ,YAAY0D,IAG7DrK,aAAa,UACO4F,IAAlBvI,EAAMqM,SACJnM,IAAM2L,kBACJmB,EACA,aACAhN,EAAMqM,QAAU,UAAY,UAI3BrM,EAAMiH,UCtBFgG,QAIRjN,IACH,MAAME,EAAiBL,SACjBmL,EAAgCvC,cAgBtC,OAbA9F,aAAa,KACXzC,IAAMgN,WAAW,IAAKlN,EAAMmB,MAAO0H,OAAQmC,MAI7CvI,UAAU,IAAMvC,IAAMgN,WAAW,OAGjCvK,aAAa,UACO4F,IAAlBvI,EAAMqM,SACJnM,IAAMgN,WAAWlN,EAAMqM,QAAUrM,EAAMmB,MAAQ,QAG5CnB,EAAMiH,UCrBFkG,QAYRnN,IACH,MAAME,EAAiBL,SACjB,CAACuN,EAASC,GAAc5M,aAAa,MA8B3C,OARAkC,aAAa,KAAM,IAAAsI,EACXmC,GArBW,CAAC5D,EAAMtI,KACxB,GAAIlB,EAAMsN,OAAQ,OAAO,IAAItN,EAAMsN,OAAOpM,GAC1C,OAAQsI,GACN,IAAK,aACH,OAAO,IAAIxI,SAASuM,kBAAkBrM,GACxC,IAAK,QACH,OAAO,IAAIF,SAASwM,aAAatM,GACnC,IAAK,cACH,OAAO,IAAIF,SAASyM,mBAAmBvM,GACzC,IAAK,YACH,OAAO,IAAIF,SAAS0M,iBAAiBxM,GACvC,IAAK,aACH,OAAO,IAAIF,SAAS2M,kBAEtB,QACE,MAAM,IAAIC,MAAO,yBAAwBpE,KAM7BqE,CAAW7N,EAAMwJ,KAAMxJ,EAAMkB,SAC7CkM,GAAWlN,OAAAA,EAAAA,MAAA+K,EAAO6C,WAAWV,EAASpN,EAAM+N,UAC5CV,EAAWD,KAGb3K,UAAU,IAAMvC,IAAM8N,cAAcZ,MAE7BpN,EAAMiH,6CC/CFgH,OAIRjO,IACH,MAAME,EAAiBL,SACvBI,IAAIiO,EAAS,KAmBb,OAhBAvL,aAAa,KAKH,IAAAuE,EAJRgH,EAAS,IAAIlN,SAASiN,OAAOjO,EAAMkB,SAChCiN,UAAUnO,EAAMoO,QAChBC,SACCrO,EAAMiH,UACF,IAAIjG,SAASsN,OAAQC,eAArBrH,EAAAC,SAAAC,WAAA,GAAAG,OAAyCvH,EAAAA,IAAAA,EAAMiH,UAA/CC,IACA,MAELsH,MAAMtO,OAGXuC,UAAU,IAAMyL,EAAOxL,UAGvBC,aAAa,IAAMuL,GAAUA,EAAOC,UAAUnO,EAAMoO,SAEpD,qCCzBWE,MAIRtO,IACH,MAAME,EAAiBL,SACvBI,IAAIwO,EAAQ,KAmBZ,OAhBA9L,aAAa,KACH,IAAAuE,EAARuH,EAAQ,IAAIzN,SAASsN,MAAMtO,EAAMkB,SAC9BiN,UAAUnO,EAAMoO,QAChBG,eAFKrH,EAAAC,OAAAC,WAAA,GAAAG,OAEevH,EAAAA,IAAAA,EAAMiH,UAFrBC,IAGLsH,MAAMtO,OAIXuC,UAAU,IAAMgM,EAAM/L,UAGtBC,aAAa,IAAM8L,GAASA,EAAMN,UAAUnO,EAAMoO,SAGlDzL,aAAa,IAAM8L,GAASA,EAAMF,eAAN,KAAA,IAAA/G,EAAAL,OAAAC,WAAA,GAAA,OAAAG,OAA0BvH,EAAAA,IAAAA,EAAMiH,UAAhCO,GAAA,KAE5B,ICxBWkH,MAUR1O,IACH,MAAME,EAAiBL,SAkCvB,OAhCA8C,aAAa,KACP3C,EAAM4I,IACR1I,IAAMyO,UACJ3O,EAAM4I,IACN,CAACgG,EAAGC,KACD3O,IAAM4O,SAAS9O,EAAMK,KAAOH,IAAM6O,SAAS/O,EAAMK,GAAIwO,IAGzD3O,IAAM4O,SAAS9O,EAAMK,KACpBH,IAAM6O,SAAS/O,EAAMK,GAAIL,EAAM6O,MAAO7O,EAAMkB,WAKlDuB,UAAU,IAAMvC,IAAM4O,SAAS9O,EAAMK,KAAOH,IAAM8O,YAAYhP,EAAMK,KAGpEsC,aAAa2J,UACPtM,EAAM6O,OAAS7O,EAAM4I,MAErB5I,EAAM4I,IACR1I,IAAMyO,UAAU3O,EAAM4I,IAAK,CAACqG,EAAOJ,KACjC,GAAII,EAAO,MAAMA,EAChB/O,IAAM4O,SAAS9O,EAAMK,KAAOH,IAAM0J,YAAY5J,EAAMK,GAAIwO,KAG3D3O,IAAMiB,OACJjB,IAAM4O,SAAS9O,EAAMK,KACrBH,IAAM0J,YAAY5J,EAAMK,GAAIL,EAAM6O,UAIxC,IC9CIK,KAAO,CAACC,EAAGC,EAAGC,IAAMF,EAAEjP,IAAI,CAAC0O,EAAGU,KAAS,EAAMD,GAAKF,EAAEG,GAAOD,EAAID,EAAEE,IAGjEC,MAAQ,CAACJ,EAAGC,EAAGC,KAKnB,OAAOF,EAAEjP,IACP,CAAC0O,EAAGU,IACDE,KAAKC,IANI,MAMC,EAAIJ,IAAcG,KAAKC,IANxB,MAMsCN,EAAEG,GACjDE,KAAKC,IAPI,KAOAJ,GAAaG,KAAKC,IAPlB,MAOgCL,EAAEE,KAK5CI,SAAW,CACfC,GAAKC,GAAsBA,EAAIA,EAC/BC,IAAMD,GAAsB,GAAK,EAAIA,IAAM,EAAIA,GAC/CE,MAAQF,GACNA,EAAI,GAAM,EAAIA,EAAIA,EAAI,EAAIJ,KAAKO,KAAK,EAAIH,EAAI,EAAG,GAAK,GAG3CI,OAaRhQ,IACH,MAAME,EAAiBL,SACvBI,IAAIgQ,EAAgB,GAChBC,GAAY,EAEhB,MAOMC,EAASC,IACbpQ,EAAMqQ,SAAW3J,OAAOC,sBAAsBwJ,GAC9C,IAAMG,EAAS,CACbtQ,EAAMuQ,UAAU7P,MAChBV,EAAMuQ,UAAUC,IAChBxQ,EAAMuQ,UAAUE,OACZf,SAAS1P,EAAMuQ,UAAUE,QAAQR,GACjCA,GAEAlC,GACqB,SAAzB/N,EAAMuQ,UAAU/G,KAAkB0F,KAAkBK,UAAVe,GAE5CI,CAAAA,GAAAA,CAnB4B,CAACC,EAAKC,EAAKC,GAAMC,GAmB7CJ,CAAqB3C,EAAU/N,EAAMuQ,UAAUO,QAlB/C,MAAMC,EAAS7Q,IAAM8Q,uBACrBD,EAAOhD,SAAWkD,mBAAmBC,WAAW,CAACP,EAAKC,GAAMC,GAC5DE,EAAOI,YAAYL,GACnB5Q,IAAMkR,qBAAqBL,IAiBtB/Q,EAAMuQ,UAAU3J,OAAyB,EAAhBqJ,GAAuBA,EAAgB,KACnEC,GAAaA,GACfD,EAAgBC,EAAYD,EAAgB,KAAQA,EAAgB,MAOtE,OAJAtN,aAAa2J,UACXtM,EAAMqQ,SAAW3J,OAAOC,sBAAsBwJ,KAGzCnQ,EAAMiH"}
@@ -12,4 +12,5 @@ export declare const Camera: Component<{
12
12
  loop?: boolean;
13
13
  duration: number;
14
14
  };
15
+ children?: any;
15
16
  }>;
@@ -25,8 +25,6 @@ export const Control = props => {
25
25
  };
26
26
  // Add Control
27
27
  createEffect(() => {
28
- if (!map())
29
- return;
30
28
  const control = getControl(props.type, props.options);
31
29
  control && map()?.addControl(control, props.position);
32
30
  setControl(control);
@@ -4,16 +4,12 @@ export const Fog = props => {
4
4
  const map = useMap();
5
5
  // Add Fog Layer
6
6
  createEffect(() => {
7
- if (!map())
8
- return;
9
7
  map().setFog(props.style);
10
8
  });
11
9
  // Remove Fog Layer
12
10
  onCleanup(() => map().setFog(null));
13
11
  // Update Visibility
14
12
  createEffect(() => {
15
- if (!map())
16
- return;
17
13
  props.visible !== undefined &&
18
14
  map().setFog(props.visible ? props.style : null);
19
15
  });
@@ -4,8 +4,6 @@ export const Image = props => {
4
4
  const map = useMap();
5
5
  // Add Image
6
6
  createEffect(() => {
7
- if (!map())
8
- return;
9
7
  if (props.url) {
10
8
  map().loadImage(props.url, (_, image) => !map().hasImage(props.id) && map().addImage(props.id, image));
11
9
  }
@@ -18,8 +16,6 @@ export const Image = props => {
18
16
  onCleanup(() => map().hasImage(props.id) && map().removeImage(props.id));
19
17
  // Update Image
20
18
  createEffect(async () => {
21
- if (!map())
22
- return;
23
19
  if (props.image && props.url)
24
20
  return;
25
21
  if (props.url) {
@@ -18,8 +18,6 @@ export const Layer = props => {
18
18
  props.id = props.id || createUniqueId();
19
19
  // Add Layer
20
20
  createEffect(() => {
21
- if (!map())
22
- return;
23
21
  !map().getLayer(props.id) &&
24
22
  map().addLayer(props.customLayer || {
25
23
  ...props.style,
@@ -35,7 +33,7 @@ export const Layer = props => {
35
33
  : props.beforeId);
36
34
  });
37
35
  //Remove Layer
38
- onCleanup(() => map().removeLayer(props.id));
36
+ onCleanup(() => map().getLayer(props.id) && map().removeLayer(props.id));
39
37
  // Hook up events
40
38
  createEffect(() => layerEvents.forEach(item => {
41
39
  if (props[item]) {
@@ -47,8 +45,6 @@ export const Layer = props => {
47
45
  }));
48
46
  // Update Style
49
47
  createEffect((prev) => {
50
- if (!map())
51
- return;
52
48
  if (!props.style ||
53
49
  !map().style ||
54
50
  !map().getSource(sourceId) ||
@@ -15,7 +15,7 @@ export const MapGL = props => {
15
15
  const [mapRoot, setMapRoot] = createSignal();
16
16
  const [pending, start] = useTransition();
17
17
  const [transitionType, setTransitionType] = createSignal('flyTo');
18
- onMount(async () => {
18
+ onMount(() => {
19
19
  map = new mapboxgl.Map({
20
20
  ...props.options,
21
21
  style: vectorStyleList[props.options?.style] ||
@@ -30,117 +30,120 @@ export const MapGL = props => {
30
30
  fitBoundsOptions: { padding: props.viewport?.padding },
31
31
  });
32
32
  map.container = containerRef;
33
- await map.once('styledata');
34
- setMapRoot(map);
35
- });
36
- onCleanup(() => map.remove());
37
- // Hook up events
38
- createEffect(() => mapEvents.forEach(item => {
39
- if (props[item]) {
40
- const event = item.slice(2).toLowerCase();
41
- const callback = e => props[item](e);
42
- map.on(event, callback);
43
- onCleanup(() => map.off(event, callback));
44
- }
45
- }));
46
- // Update debug features
47
- createEffect(() => (map.showTileBoundaries = props.showTileBoundaries));
48
- createEffect(() => (map.showTerrainWireframe = props.showTerrainWireframe));
49
- createEffect(() => (map.showPadding = props.showPadding));
50
- createEffect(() => (map.showCollisionBoxes = props.showCollisionBoxes));
51
- createEffect(() => (map.showOverdrawInspector = props.showOverdrawInspector));
52
- createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle));
53
- createEffect(() => setTransitionType(props.transitionType));
54
- // Update projection
55
- createEffect(on(() => props.options?.projection, proj => map.setProjection(proj), { defer: true }));
56
- // Update map style
57
- createEffect(on(() => props.options?.style, style => {
58
- const oldStyle = map.getStyle();
59
- const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'));
60
- const oldSources = Object.keys(oldStyle.sources)
61
- .filter(s => s.startsWith('cl-'))
62
- .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {});
63
- map.setStyle(vectorStyleList[style] ||
64
- style || { version: 8, sources: {}, layers: [] });
65
- map.once('styledata', () => {
66
- const newStyle = map.getStyle();
67
- map.setStyle({
68
- ...newStyle,
69
- sources: { ...newStyle.sources, ...oldSources },
70
- layers: [...newStyle.layers, ...oldLayers],
33
+ map.once('styledata').then(() => setMapRoot(map));
34
+ onCleanup(() => map.remove());
35
+ // Hook up events
36
+ createEffect(() => mapEvents.forEach(item => {
37
+ if (props[item]) {
38
+ const event = item.slice(2).toLowerCase();
39
+ const callback = e => props[item](e);
40
+ map.on(event, callback);
41
+ onCleanup(() => map.off(event, callback));
42
+ }
43
+ }));
44
+ // Update debug features
45
+ createEffect(() => {
46
+ map.showTileBoundaries = props.showTileBoundaries;
47
+ map.showTerrainWireframe = props.showTerrainWireframe;
48
+ map.showPadding = props.showPadding;
49
+ map.showCollisionBoxes = props.showCollisionBoxes;
50
+ map.showOverdrawInspector = props.showOverdrawInspector;
51
+ });
52
+ // Update cursor
53
+ createEffect(() => (map.getCanvas().style.cursor = props.cursorStyle));
54
+ //Update transition type
55
+ createEffect(() => setTransitionType(props.transitionType));
56
+ // Update projection
57
+ createEffect(on(() => props.options?.projection, proj => map.setProjection(proj), { defer: true }));
58
+ // Update map style
59
+ createEffect(on(() => props.options?.style, style => {
60
+ const oldStyle = map.getStyle();
61
+ const oldLayers = oldStyle.layers.filter(l => l.id.startsWith('cl-'));
62
+ const oldSources = Object.keys(oldStyle.sources)
63
+ .filter(s => s.startsWith('cl-'))
64
+ .reduce((obj, key) => ({ ...obj, [key]: oldStyle.sources[key] }), {});
65
+ map.setStyle(vectorStyleList[style] ||
66
+ style || { version: 8, sources: {}, layers: [] });
67
+ map.once('styledata', () => {
68
+ const newStyle = map.getStyle();
69
+ map.setStyle({
70
+ ...newStyle,
71
+ sources: { ...newStyle.sources, ...oldSources },
72
+ layers: [...newStyle.layers, ...oldLayers],
73
+ });
71
74
  });
75
+ }, { defer: true }));
76
+ // Hook up viewport events
77
+ createEffect(() => {
78
+ const viewport = {
79
+ id: null,
80
+ center: map.getCenter(),
81
+ zoom: map.getZoom(),
82
+ pitch: map.getPitch(),
83
+ bearing: map.getBearing(),
84
+ padding: props.viewport?.padding,
85
+ bounds: props.viewport?.bounds,
86
+ };
87
+ const callMove = event => {
88
+ if (event.originalEvent)
89
+ props.onViewportChange &&
90
+ props.onViewportChange({ ...viewport, id: props.id });
91
+ setTransitionType('jumpTo');
92
+ };
93
+ const callEnd = event => {
94
+ if (event.originalEvent)
95
+ props.onViewportChange && props.onViewportChange(viewport);
96
+ setTransitionType(props.transitionType);
97
+ };
98
+ map.on('move', callMove).on('moveend', callEnd);
99
+ onCleanup(() => map.off('move', callMove).off('moveend', callEnd));
72
100
  });
73
- }, { defer: true }));
74
- // Hook up viewport events
75
- createEffect(() => {
76
- const viewport = {
77
- id: null,
78
- center: map.getCenter(),
79
- zoom: map.getZoom(),
80
- pitch: map.getPitch(),
81
- bearing: map.getBearing(),
82
- padding: props.viewport?.padding,
83
- bounds: props.viewport?.bounds,
84
- };
85
- const callMove = event => {
86
- if (event.originalEvent)
87
- props.onViewportChange &&
88
- props.onViewportChange({ ...viewport, id: props.id });
89
- setTransitionType('jumpTo');
90
- };
91
- const callEnd = event => {
92
- if (event.originalEvent)
93
- props.onViewportChange && props.onViewportChange(viewport);
94
- setTransitionType(props.transitionType);
95
- };
96
- map.on('move', callMove).on('moveend', callEnd);
97
- onCleanup(() => map.off('move', callMove).off('moveend', callEnd));
98
- });
99
- // Update boundaries
100
- createEffect(prev => {
101
- if (props.viewport?.bounds != prev)
102
- props.onViewportChange({
101
+ // Update boundaries
102
+ createEffect(prev => {
103
+ if (props.viewport?.bounds != prev)
104
+ props.onViewportChange({
105
+ ...props.viewport,
106
+ ...map.cameraForBounds(props.viewport?.bounds, {
107
+ padding: props.viewport?.padding,
108
+ }),
109
+ });
110
+ return props.viewport?.bounds;
111
+ }, props.viewport?.bounds);
112
+ // Update Viewport
113
+ createEffect(() => {
114
+ if (props.id === props.viewport?.id)
115
+ return;
116
+ const viewport = {
103
117
  ...props.viewport,
104
- ...map.cameraForBounds(props.viewport?.bounds, {
105
- padding: props.viewport?.padding,
106
- }),
107
- });
108
- return props.viewport?.bounds;
109
- }, props.viewport?.bounds);
110
- // Update Viewport
111
- createEffect(() => {
112
- if (props.id === props.viewport?.id)
113
- return;
114
- const viewport = {
115
- ...props.viewport,
116
- padding: props.viewport?.padding || 0,
117
- };
118
- switch (untrack(transitionType)) {
119
- case 'easeTo':
120
- map.stop().easeTo(viewport);
121
- case 'jumpTo':
122
- map.stop().jumpTo(viewport);
123
- default:
124
- map.stop().flyTo(viewport);
125
- }
126
- });
127
- let index = 0;
128
- createEffect(() => {
129
- if (props.triggerResize) {
130
- index = 0;
131
- window.requestAnimationFrame(function loop() {
132
- if (index < 15) {
133
- index++;
134
- window.requestAnimationFrame(loop);
135
- start(() => map.resize());
136
- }
137
- });
138
- }
118
+ padding: props.viewport?.padding || 0,
119
+ };
120
+ switch (untrack(transitionType)) {
121
+ case 'easeTo':
122
+ map.stop().easeTo(viewport);
123
+ case 'jumpTo':
124
+ map.stop().jumpTo(viewport);
125
+ default:
126
+ map.stop().flyTo(viewport);
127
+ }
128
+ });
129
+ let index = 0;
130
+ createEffect(() => {
131
+ if (props.triggerResize) {
132
+ index = 0;
133
+ window.requestAnimationFrame(function loop() {
134
+ if (index < 15) {
135
+ index++;
136
+ window.requestAnimationFrame(loop);
137
+ start(() => map.resize());
138
+ }
139
+ });
140
+ }
141
+ });
139
142
  });
140
143
  return (<MapContext.Provider value={mapRoot}>
141
144
  <section ref={containerRef} style={{ position: 'absolute', 'z-index': 1 }}>
142
- {props.children || null}
145
+ {mapRoot() ? props.children : null}
143
146
  </section>
144
- <div ref={mapRef} class={props.class || null} classList={props.classList || null} style={{ height: '100%', width: '100%', ...props.style }}/>
147
+ <div id='map' ref={mapRef} class={props.class || null} classList={props.classList || null} style={{ height: '100%', width: '100%', ...props.style }}/>
145
148
  </MapContext.Provider>);
146
149
  };