@unovis/ts 1.6.8-stellar-beta.0 → 1.6.8-stellar-beta.2

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,10 +1,10 @@
1
1
  import { Selection } from 'd3-selection';
2
2
  import type L from 'leaflet';
3
- import { StyleSpecification } from 'maplibre-gl';
4
3
  import { ComponentCore } from "../../core/component";
5
4
  import { MapDataModel } from "../../data-models/map";
6
5
  import { ComponentType } from "../../types/component";
7
6
  import { GenericDataRecord } from "../../types/data";
7
+ import { StyleSpecification } from './renderer/map-style';
8
8
  import { Bounds, LeafletMapPoint } from './types';
9
9
  import { LeafletMapConfigInterface } from './config';
10
10
  import * as s from './style';
@@ -206,7 +206,11 @@ class LeafletMap extends ComponentCore {
206
206
  if (this.config.renderer === LeafletMapRenderer.MapLibre) {
207
207
  const maplibreMap = layer.getMaplibreMap();
208
208
  (_a = maplibreMap.setStyle) === null || _a === void 0 ? void 0 : _a.call(maplibreMap, theme);
209
- updateTopoJson(maplibreMap, this.config);
209
+ // `setStyle` reloads the style asynchronously, so we must wait until it's loaded before updating sources/layers
210
+ if (maplibreMap.isStyleLoaded())
211
+ updateTopoJson(maplibreMap, this.config);
212
+ else
213
+ maplibreMap.once('styledata', () => updateTopoJson(maplibreMap, this.config));
210
214
  }
211
215
  else {
212
216
  if (typeof theme !== 'string') {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/leaflet-map/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { packSiblings } from 'd3-hierarchy'\nimport type L from 'leaflet'\nimport Supercluster, { ClusterFeature, PointFeature } from 'supercluster'\nimport { StyleSpecification } from 'maplibre-gl'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Model\nimport { MapDataModel } from 'data-models/map'\n\n// Types\nimport { ComponentType } from 'types/component'\nimport { GenericDataRecord } from 'types/data'\n\n// Utils\nimport { ResizeObserver } from 'utils/resize-observer'\nimport { clamp, isNil, getNumber, getString, isString } from 'utils/data'\nimport { isDarkThemeEnabled } from 'utils/style'\nimport { constraintMapViewThrottled } from './renderer/mapboxgl-utils'\nimport {\n projectPoint,\n bBoxMerge,\n calculateClusterIndex,\n getNextZoomLevelOnClusterClick,\n findPointAndClusterByPointId,\n geoJsonPointToScreenPoint,\n getClusterRadius,\n getClustersAndPoints,\n getNodeRelativePosition,\n getPointRadius,\n shouldClusterExpand,\n} from './modules/utils'\n\n// Local Types\nimport {\n Bounds,\n LeafletMapClusterDatum,\n LeafletMapPoint,\n LeafletMapPointDatum,\n LeafletMapRenderer,\n LeafletMapExpandedCluster,\n MapZoomState,\n PointExpandedClusterProperties,\n} from './types'\n\n// Config\nimport { LeafletMapDefaultConfig, LeafletMapConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\n// Modules\nimport { initialMapCenter, initialMapZoom, setupMap, updateTopoJson } from './modules/map'\nimport { collideLabels, createNodes, removeNodes, updateNodes } from './modules/node'\nimport { createNodeSelectionRing, updateNodeSelectionRing } from './modules/selectionRing'\nimport { createBackgroundNode, updateBackgroundNode } from './modules/clusterBackground'\n\nexport class LeafletMap<Datum extends GenericDataRecord> extends ComponentCore<Datum[], LeafletMapConfigInterface<Datum>> {\n static selectors = s\n static cssVariables = s.variables\n protected _defaultConfig = LeafletMapDefaultConfig as LeafletMapConfigInterface<Datum>\n public config: LeafletMapConfigInterface<Datum> = this._defaultConfig\n\n g: Selection<HTMLElement, unknown, null, undefined>\n type = ComponentType.HTML\n element: HTMLElement\n datamodel: MapDataModel<Datum> = new MapDataModel()\n protected _container: HTMLElement\n protected _containerSelection: Selection<HTMLElement, unknown, null, undefined>\n public _onMapMoveEndInternal: (leaflet: L.Map) => void // Internal callback needed by Leaflet Flow Map\n private _map: {\n leaflet: L.Map;\n layer: L.Layer;\n svgOverlay: Selection<SVGSVGElement, unknown, null, undefined>;\n svgGroup: Selection<SVGGElement, unknown, SVGElement, undefined>;\n }\n\n private _clusterIndex: Supercluster<Datum>\n private _expandedCluster: LeafletMapExpandedCluster<Datum> = null\n private _cancelBackgroundClick = false\n private _hasBeenMoved = false\n private _hasBeenZoomed = false\n private _isMoving = false\n private _isZooming = false\n private _eventInitiatedByComponent = false\n private _triggerBackgroundClick = false\n private _externallySelectedPoint: LeafletMapPoint<Datum> | PointFeature<Datum> | null = null\n private _zoomingToExternallySelectedPoint = false\n private _forceExpandCluster = false\n private _pointGroup: Selection<SVGGElement, unknown, SVGElement, undefined>\n private _pointSelectionRing: Selection<SVGGElement, unknown, SVGElement, undefined>\n private _clusterBackground: Selection<SVGGElement, unknown, SVGElement, undefined>\n private _clusterBackgroundRadius = 0\n private _selectedPoint: LeafletMapPoint<Datum> = null\n private _currentZoomLevel: number | null = null\n private _firstRender = true\n private _isDarkThemeActive = false\n private resizeObserver: ResizeObserver\n private themeObserver: MutationObserver\n private _renderDataAnimationFrameId: number | null = null\n private _flyToBoundsAnimationFrameId: number | null = null\n readonly _leafletInitializationPromise: Promise<L.Map>\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 600\n\n protected events = {\n [LeafletMap.selectors.point]: {\n mouseup: this._onPointMouseUp.bind(this),\n mousedown: this._onPointMouseDown.bind(this),\n click: this._onPointClick.bind(this),\n },\n }\n\n constructor (container: HTMLElement, config?: LeafletMapConfigInterface<Datum>, data?: Datum[]) {\n super(ComponentType.HTML)\n this._container = container\n this._containerSelection = select(this._container).attr('role', 'figure')\n\n this._container.appendChild(this.element)\n this.g\n .attr('class', s.root)\n .attr('aria-hidden', true)\n\n if (config) this.setConfig(config)\n\n if (!this._container.clientWidth) {\n console.warn('Unovis | Leaflet Map: The width of the container is not set. Setting to 100%.')\n this._containerSelection.style('width', '100%')\n }\n\n if (!this._container.clientHeight) {\n console.warn(`Unovis | Leaflet Map: The height of the container is not set. Setting to ${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px.`)\n this._containerSelection.style('height', `${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px`)\n }\n\n // Initialize map asynchronously\n this._leafletInitializationPromise = new Promise((resolve) => {\n setupMap(this.element, this.config).then(map => {\n // Apply the `s.map` class to `tilePane` to allow tooltip interactions\n select(map.leaflet.getPanes().tilePane).classed(s.map, true)\n if (config) this.setConfig(config)\n\n this._map = map\n this._map.leaflet.on('drag', this._onMapDragLeaflet.bind(this))\n this._map.leaflet.on('move', this._onMapMove.bind(this))\n this._map.leaflet.on('movestart', this._onMapMoveStart.bind(this))\n this._map.leaflet.on('moveend', this._onMapMoveEnd.bind(this))\n this._map.leaflet.on('zoom', this._onMapZoom.bind(this))\n this._map.leaflet.on('zoomstart', this._onMapZoomStart.bind(this))\n this._map.leaflet.on('zoomend', this._onMapZoomEnd.bind(this))\n\n // We need to handle background click in a special way to deal\n // with d3 svg overlay that might have smaller size than the map itself\n // (see this._onNodeMouseDown() and this this._onNodeMouseDown())\n this._map.leaflet.on('mousedown', () => {\n if (!this._cancelBackgroundClick) this._triggerBackgroundClick = true\n })\n\n this._map.leaflet.on('mouseup', (e) => {\n if (this._triggerBackgroundClick) {\n this._triggerBackgroundClick = false\n const originalEvent = (e as any).originalEvent\n this._onBackgroundClick(originalEvent.target, originalEvent)\n }\n })\n\n this._map.svgOverlay\n .attr('class', s.svgOverlay)\n .insert('rect', ':first-child')\n .attr('class', s.backgroundRect)\n .attr('width', '100%')\n .attr('height', '100%')\n\n this._pointGroup = this._map.svgGroup.append('g').attr('class', s.points)\n this._clusterBackground = this._pointGroup.append('g')\n .attr('class', s.clusterBackground)\n .call(createBackgroundNode)\n this._pointSelectionRing = this._pointGroup.append('g')\n .attr('class', s.pointSelectionRing)\n .call(createNodeSelectionRing)\n\n this._map.leaflet.setView(initialMapCenter, initialMapZoom)\n\n if (isDarkThemeEnabled() && config.styleDarkTheme) {\n this._isDarkThemeActive = true\n this.setTheme(config.styleDarkTheme)\n }\n\n this.config.onMapInitialized?.()\n resolve(this._map.leaflet)\n })\n })\n\n\n // Set data and render the map when it's ready\n this.setData(data ?? [])\n\n // When the container size changes we have to initiate map resize in order to update its dimensions\n this.resizeObserver = new ResizeObserver(() => {\n this._map?.leaflet?.invalidateSize()\n this.config.tooltip?.hide()\n })\n this.resizeObserver.observe(container)\n\n // If dark theme is enabled, update map's style when document body's class list changes\n if (this.config.styleDarkTheme) {\n this.themeObserver = new MutationObserver((mutations) => {\n mutations.forEach(change => {\n if (change.attributeName === 'class') {\n const isDarkTheme = isDarkThemeEnabled(change.target as HTMLElement)\n if (this._isDarkThemeActive !== isDarkTheme) {\n this.setTheme(isDarkTheme ? this.config.styleDarkTheme : this.config.style)\n this._isDarkThemeActive = isDarkTheme\n }\n }\n })\n })\n this.themeObserver.observe(document.body, { attributes: true })\n this.themeObserver.observe(document.documentElement, { attributes: true })\n }\n }\n\n setConfig (config: LeafletMapConfigInterface<Datum>): void {\n super.setConfig(config)\n\n if (config.width) this._containerSelection.style('width', isString(config.width) ? config.width : `${config.width}px`)\n if (config.height) this._containerSelection.style('height', isString(config.height) ? config.height : `${config.height}px`)\n\n if (this._map && config.renderer === LeafletMapRenderer.MapLibre) {\n const layer = this._map.layer as any // Using any because the typings are not full\n const maplibreMap = layer.getMaplibreMap()\n if (maplibreMap.isStyleLoaded()) updateTopoJson(maplibreMap, this.config)\n }\n\n if (this.config.tooltip) {\n this.config.tooltip.setContainer(this._container)\n this.config.tooltip.setComponents([this])\n this.config.tooltip.update()\n }\n\n // Apply the `aria-label` attribute\n this._containerSelection.attr('aria-label', config.ariaLabel)\n }\n\n setData (data: Datum[]): void {\n const { config, datamodel } = this\n\n const dataValid = data.filter(d => {\n const lat = getNumber(d, config.pointLatitude)\n const lon = getNumber(d, config.pointLongitude)\n const valid = isFinite(lat) && isFinite(lon)\n\n if (!valid) console.warn('Unovis | Leaflet Map: Invalid point coordinates', d)\n return valid\n })\n\n datamodel.data = dataValid\n\n // We use Supercluster for real-time node clustering\n this._clusterIndex = calculateClusterIndex<Datum>(dataValid, this.config)\n\n // If there was an expanded cluster, try to find its successor and expand it too\n if (this._expandedCluster && this._map.leaflet) {\n // Reset expanded cluster before calling `_getPointData()` to get data with all clusters collapsed\n const expandedCluster = this._expandedCluster\n this._resetExpandedCluster()\n const pointData = this._getPointData()\n\n const expandedClusterCenterPx = projectPoint(expandedCluster.cluster, this._map.leaflet)\n const expandedClusterRadiusPx = expandedCluster.cluster.radius\n const cluster = pointData.find((c) => {\n if (!c.isCluster) return false\n const pos = projectPoint(c, this._map.leaflet)\n const r = c.radius\n const distance = Math.sqrt((expandedClusterCenterPx.x - pos.x) ** 2 + (expandedClusterCenterPx.y - pos.y) ** 2)\n return distance < (expandedClusterRadiusPx + r)\n })\n\n if (cluster) this._expandCluster(cluster, true)\n }\n\n // Render\n this._leafletInitializationPromise.then(() => {\n this.render()\n })\n }\n\n setTheme (theme: StyleSpecification | string): void {\n const layer = this._map.layer as any // Using any because the typings are not full\n if (this.config.renderer === LeafletMapRenderer.MapLibre) {\n const maplibreMap = layer.getMaplibreMap()\n maplibreMap.setStyle?.(theme)\n updateTopoJson(maplibreMap, this.config)\n } else {\n if (typeof theme !== 'string') {\n console.warn('Unovis | Leaflet Map: Invalid style. Provide a URL string for raster rendering mode.')\n return\n }\n layer.setUrl(theme)\n }\n }\n\n // We redefine the ComponentCore render function to bind event to newly created elements in this._renderData(),\n // which is being called after almost every map interaction\n render (): void {\n const { config } = this\n if (!this._map) return\n\n this._renderData()\n if (this._firstRender) {\n if (config.initialBounds) this.fitToBounds(config.initialBounds)\n else if (config.fitViewOnInit) this.fitToPoints(0, config.fitViewPadding)\n } else {\n if (config.fitViewOnUpdate) this.fitToPoints(0, config.fitViewPadding)\n else if (config.fitBoundsOnUpdate) this.fitToBounds(config.fitBoundsOnUpdate)\n }\n\n this._firstRender = false\n }\n\n public getLeafletInstancePromise (): Promise<L.Map> {\n return this._leafletInitializationPromise\n }\n\n public fitToPoints (duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { config, datamodel, datamodel: { data } } = this\n\n if (!this._map || !this._map.leaflet) return\n if (!data?.length) return\n const bounds = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n this._flyToBoundsAnimationFrameId = requestAnimationFrame(() => this._flyToBounds(bounds, duration, padding))\n }\n\n public fitToBounds (bounds: Bounds, duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { northEast, southWest } = bounds\n if (isNil(northEast) || isNil(southWest)) return\n if (isNil(northEast.lat) || isNil(northEast.lng)) return\n if (isNil(southWest.lat) || isNil(southWest.lng)) return\n if (!this._map || !this._map.leaflet) return\n this._flyToBoundsAnimationFrameId = requestAnimationFrame(() => this._flyToBounds([\n [northEast.lat, southWest.lng],\n [southWest.lat, northEast.lng],\n ], duration, padding))\n }\n\n /* Select a point by id and optionally center the map view.\n * This method was designed to be used mainly with the `[LeafletMap.selectors.point]` click events\n * (when the user actually clicks on a point) and the specified point is inside one of the collapsed\n * clusters it won't be selected. You can use the `zoomToPointById` method to achieve that.\n */\n public selectPointById (id: string, centerView = false): void {\n const { config } = this\n const pointData = this._getPointData()\n const foundPoint = pointData.find(d => (d.properties as LeafletMapPointDatum<Datum>).id === id)\n\n if (!foundPoint) {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n return\n }\n\n if ((foundPoint.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be selected')\n return\n }\n\n this._selectedPoint = foundPoint\n\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (!isPointInsideExpandedCluster) this._resetExpandedCluster()\n\n if (centerView) {\n const coordinates = {\n lng: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLongitude),\n lat: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLatitude),\n }\n\n const zoomLevel = this._map.leaflet.getZoom()\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n this._renderData()\n }\n }\n\n /* Get the id of the selected point */\n public getSelectedPointId (): string | number | undefined {\n return this._selectedPoint?.id\n }\n\n /* Unselect point if it was selected before */\n public unselectPoint (): void {\n this._selectedPoint = null\n this._externallySelectedPoint = null\n this.render()\n }\n\n /** Get the currently expanded cluster */\n public getExpandedCluster (): { id: string; points: Datum[] } | undefined {\n if (!this._expandedCluster) return\n const id = this._expandedCluster.cluster?.id as string\n const points = this._expandedCluster.cluster?.clusterPoints.map(d => this.datamodel.data[(d as LeafletMapPointDatum<Datum>)._index])\n return { id, points }\n }\n\n /* Zoom to a point by id and optionally select it.\n * If the point is inside a cluster, it'll be automatically expanded to show the enclosed point.\n * You can also force set the zoom level by providing the `customZoomLevel` argument.\n */\n public zoomToPointById (id: string, selectPoint = false, customZoomLevel?: number): void {\n const { config, datamodel } = this\n if (!datamodel.data.length) {\n console.warn('Unovis | Leaflet Map: There are no points on the map')\n return\n }\n const dataBoundsAll = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n const bounds: [number, number, number, number] = [dataBoundsAll[0][1], dataBoundsAll[1][0], dataBoundsAll[1][1], dataBoundsAll[0][0]]\n const pointDataAll = this._getPointData(bounds)\n\n let foundPoint: LeafletMapPoint<Datum> | PointFeature<Datum> = pointDataAll\n .find((d: LeafletMapPoint<Datum>) => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === id)\n\n // If point was found and it's a cluster -> do nothing\n if ((foundPoint?.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be zoomed in')\n return\n }\n\n // If point was not found -> search for it in all collapsed clusters\n if (!foundPoint) {\n const { point } = findPointAndClusterByPointId(pointDataAll, id, config.pointId)\n foundPoint = point\n }\n\n if (foundPoint) {\n // If point was found and it's inside an expanded cluster -> simply select it\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (isPointInsideExpandedCluster && selectPoint) {\n this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n this._renderData()\n return\n }\n\n // Else - trigger zoom\n this._externallySelectedPoint = foundPoint\n this._zoomingToExternallySelectedPoint = true\n\n this._forceExpandCluster = !isNil(customZoomLevel)\n if (selectPoint) this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n\n const zoomLevel = isNil(customZoomLevel) ? this._map.leaflet.getZoom() : customZoomLevel\n const pointDatum = foundPoint.properties as LeafletMapPointDatum<Datum>\n const coordinates = {\n lng: getNumber(pointDatum, config.pointLongitude),\n lat: getNumber(pointDatum, config.pointLatitude),\n }\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n }\n }\n\n public getNodeRelativePosition (node: LeafletMapPoint<Datum>): { x: number; y: number } {\n return getNodeRelativePosition(node, this._map.leaflet)\n }\n\n public hasBeenZoomed (): boolean {\n return this._hasBeenZoomed\n }\n\n public hasBeenMoved (): boolean {\n return this._hasBeenMoved\n }\n\n public isZooming (): boolean {\n return this._isZooming\n }\n\n public isMoving (): boolean {\n return this._isMoving\n }\n\n\n private _flyToBounds (bounds: [[number, number], [number, number]], durationMs: number, paddingPx?: [number, number]): void {\n this._eventInitiatedByComponent = true\n const duration = durationMs / 1000\n const padding: [number, number] | undefined = paddingPx ? [\n paddingPx[0] < this._container.clientWidth / 2 ? paddingPx[0] : this._container.clientWidth / 2,\n paddingPx[1] < this._container.clientHeight / 2 ? paddingPx[1] : this._container.clientHeight / 2,\n ] : undefined\n if (duration) {\n this._map.leaflet.flyToBounds(bounds, { duration, padding })\n } else {\n this._map.leaflet.fitBounds(bounds, { padding })\n }\n }\n\n private _renderData (mapMoveZoomUpdateOnly = false): void {\n const { config } = this\n\n const pointData = this._getPointData()\n const contentBBox = pointData.length ? bBoxMerge(pointData.map(d => d.bbox)) : { x: 0, y: 0, width: 0, height: 0 }\n\n // Set SVG size to match Leaflet transform\n const svgExtraPadding = 40 + this._clusterBackgroundRadius // We need it to fit point labels and expanded cluster background circle\n const dx = contentBBox.x - svgExtraPadding\n const dy = contentBBox.y - svgExtraPadding\n this._map.svgOverlay\n .attr('width', contentBBox.width + 2 * svgExtraPadding)\n .attr('height', contentBBox.height + 2 * svgExtraPadding)\n .style('left', `${dx}px`)\n .style('top', `${dy}px`)\n\n this._map.svgGroup\n .attr('transform', `translate(${-dx},${-dy})`)\n\n // Render content\n const points = this._pointGroup.selectAll<SVGGElement, LeafletMapPoint<Datum>>(`.${s.point}:not(.exit)`)\n .data(pointData, (d: LeafletMapPoint<Datum>, i) => `${d.id || d.geometry.coordinates.join('')}`)\n\n points.exit<LeafletMapPoint<Datum>>().classed('exit', true).call(removeNodes)\n const pointsEnter = points.enter().append('g').attr('class', s.point)\n .call(createNodes)\n\n const pointsMerged = points.merge(pointsEnter)\n pointsEnter.call(updateNodes, config, this._map.leaflet)\n points.call(updateNodes, config, this._map.leaflet, mapMoveZoomUpdateOnly)\n pointsMerged.call(collideLabels, this._map.leaflet)\n\n this._clusterBackground.call(updateBackgroundNode, this._expandedCluster, config, this._map.leaflet, this._clusterBackgroundRadius)\n if (this._expandedCluster && config.clusterBackground) {\n pointData.forEach((d, i) => { d._zIndex = (d.properties as LeafletMapPointDatum<Datum>)?.expandedClusterPoint ? 2 : 0 })\n this._pointGroup\n .selectAll<SVGGElement, LeafletMapPoint<Datum>>(`.${s.point}, .${s.clusterBackground}, .${s.pointSelectionRing}`)\n .sort((a: LeafletMapPoint<Datum>, b: LeafletMapPoint<Datum>) => a._zIndex - b._zIndex)\n }\n\n // Show selection border and hide it when the node\n // is out of visible box\n if (config.selectedPointId) {\n const foundPoint = pointData.find(d => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === config.selectedPointId)\n const { cluster } = findPointAndClusterByPointId(pointData, config.selectedPointId, config.pointId)\n if (foundPoint) this._selectedPoint = foundPoint\n else this._selectedPoint = cluster\n }\n this._pointSelectionRing.call(updateNodeSelectionRing, this._selectedPoint, pointData, config, this._map.leaflet)\n\n // Set up events and attributes for the rendered points\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n\n // Tooltip\n config.tooltip?.update()\n }\n\n private _zoomToExternallySelectedPoint (): void {\n const { config } = this\n if (!this._externallySelectedPoint) return\n\n const externallySelectedPointDatum = this._externallySelectedPoint.properties as LeafletMapPointDatum<Datum>\n const externallySelectedPointId = getString(externallySelectedPointDatum, config.pointId)\n const pointData = this._getPointData()\n const foundPoint: LeafletMapPoint<Datum> = pointData.find(\n d => getString(d.properties as Datum, config.pointId) === externallySelectedPointId\n )\n\n if (foundPoint) {\n this._zoomingToExternallySelectedPoint = false\n this._currentZoomLevel = null\n } else {\n const { cluster } = findPointAndClusterByPointId(pointData, externallySelectedPointId, config.pointId)\n if (!cluster) return\n\n const zoomLevel = this._map.leaflet.getZoom()\n // Expand cluster or fly further\n if (this._forceExpandCluster || shouldClusterExpand(cluster, zoomLevel, 8, 13)) {\n this._expandCluster(cluster)\n } else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n const coordinates = {\n lng: getNumber(externallySelectedPointDatum, config.pointLongitude),\n lat: getNumber(externallySelectedPointDatum, config.pointLatitude),\n }\n if (this._currentZoomLevel !== newZoomLevel) {\n this._currentZoomLevel = newZoomLevel\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: 0 })\n }\n }\n }\n }\n\n private _expandCluster (clusterPoint: LeafletMapPoint<Datum>, preventRender?: boolean): void {\n const { config, config: { clusterBackground } } = this\n const padding = 1\n\n config.tooltip?.hide()\n\n this._forceExpandCluster = false\n if (clusterPoint) {\n const points: PointFeature<PointExpandedClusterProperties<Datum>>[] =\n clusterPoint.clusterIndex.getLeaves((clusterPoint.properties as LeafletMapClusterDatum<Datum>).cluster_id as number, Infinity)\n const packPoints: {x: number; y: number; r: number }[] = points.map(p => ({\n x: null,\n y: null,\n r: getPointRadius(p, config.pointRadius, this._map.leaflet.getZoom()) + padding,\n }))\n packSiblings(packPoints)\n\n points.forEach((p, i) => {\n p.properties.expandedClusterPoint = clusterPoint\n p.properties.r = packPoints[i].r\n p.properties.dx = packPoints[i].x\n p.properties.dy = packPoints[i].y\n })\n\n this._resetExpandedCluster()\n this._expandedCluster = {\n cluster: clusterPoint,\n points,\n }\n\n if (clusterBackground) this._clusterBackgroundRadius = getClusterRadius(this._expandedCluster)\n\n if (!preventRender) this._renderData()\n }\n\n this._zoomingToExternallySelectedPoint = false\n }\n\n private _resetExpandedCluster (): void {\n this._expandedCluster?.points?.forEach(d => { delete d.properties.expandedClusterPoint })\n this._expandedCluster = null\n }\n\n private _getPointData (customBounds?: [number, number, number, number]): LeafletMapPoint<Datum>[] {\n const { config, datamodel: { data } } = this\n\n if (!data || !this._clusterIndex) return []\n\n let geoJSONPoints: (ClusterFeature<LeafletMapClusterDatum<Datum>> | PointFeature<PointExpandedClusterProperties<Datum>>)[] =\n getClustersAndPoints<Datum>(this._clusterIndex, this._map.leaflet, customBounds)\n\n if (this._expandedCluster) {\n // Remove expanded cluster from the data\n geoJSONPoints = geoJSONPoints.filter(c => (c as ClusterFeature<LeafletMapClusterDatum<Datum>>).properties.cluster_id !== (this._expandedCluster.cluster.properties as LeafletMapClusterDatum<Datum>).cluster_id)\n // Add points from the expanded cluster\n geoJSONPoints = geoJSONPoints.concat(this._expandedCluster.points)\n }\n\n const pointData = geoJSONPoints\n // Todo: Remove explicitly set ClusterFeature<LeafletMapPointDatum<Datum>> type\n .map((d, i: number) => {\n return geoJsonPointToScreenPoint(d as ClusterFeature<LeafletMapPointDatum<Datum>>, i, this._map.leaflet, config)\n })\n // .sort((a, b) => getPointDisplayOrder(a, config.pointStatus, config.colorMap) - getPointDisplayOrder(b, config.pointStatus, config.colorMap))\n\n return pointData\n }\n\n private _getMapZoomState (): MapZoomState {\n const leafletBounds = this._map.leaflet.getBounds()\n const southWest = leafletBounds.getSouthWest()\n const northEast = leafletBounds.getNorthEast()\n\n return {\n mapCenter: this._map.leaflet.getCenter(),\n zoomLevel: this._map.leaflet.getZoom(),\n bounds: { southWest, northEast },\n userDriven: !this._eventInitiatedByComponent,\n }\n }\n\n private _onMapDragLeaflet (): void {\n this._cancelBackgroundClick = true\n }\n\n private _onMapMove (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenMoved = true\n this._renderDataAnimationFrameId = requestAnimationFrame(() => {\n this._renderData(true)\n })\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onMapMoveStart (): void {\n const { config } = this\n if (!this._map) return\n this._isMoving = true\n config.onMapMoveStart?.(this._getMapZoomState())\n }\n\n private _onMapMoveEnd (): void {\n const { config } = this\n if (!this._map) return\n this._onMapMoveEndInternal?.(this._map.leaflet)\n config.onMapMoveEnd?.(this._getMapZoomState())\n\n constraintMapViewThrottled(this._map.leaflet)\n const events = this._map.layer.getEvents()\n\n if (events.zoomend) {\n const zoomEndEvent = events.zoomend.bind(this._map.layer)\n zoomEndEvent(null)\n }\n\n if (this._externallySelectedPoint || this._zoomingToExternallySelectedPoint) {\n this._zoomToExternallySelectedPoint()\n }\n\n this._isMoving = false\n this._eventInitiatedByComponent = false\n }\n\n private _onMapZoomStart (): void {\n const { config } = this\n if (!this._map) return\n this._isZooming = true\n config.onMapZoomStart?.(this._getMapZoomState())\n }\n\n private _onMapZoomEnd (): void {\n const { config } = this\n if (!this._map) return\n config.onMapZoomEnd?.(this._getMapZoomState())\n this._isZooming = false\n if (!this._isMoving) this._eventInitiatedByComponent = false\n }\n\n private _onMapZoom (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenZoomed = true\n\n if (!this._externallySelectedPoint) this._resetExpandedCluster()\n else if (!this._zoomingToExternallySelectedPoint) {\n this._externallySelectedPoint = null\n }\n\n config.tooltip?.hide()\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onBackgroundClick (el: HTMLElement, event: MouseEvent): void {\n const { config } = this\n\n if (this._cancelBackgroundClick) {\n this._cancelBackgroundClick = false\n return\n }\n\n this._externallySelectedPoint = null\n this._resetExpandedCluster()\n this._renderData()\n config.onMapClick?.(this._getMapZoomState())\n }\n\n private _onPointClick (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n const { config: { flyToDuration, clusterExpandOnClick } } = this\n this._externallySelectedPoint = null\n event.stopPropagation()\n\n if ((d.properties as LeafletMapClusterDatum<Datum>).cluster) {\n const zoomLevel = this._map.leaflet.getZoom()\n const coordinates = { lng: d.geometry.coordinates[0], lat: d.geometry.coordinates[1] }\n\n if (clusterExpandOnClick && shouldClusterExpand(d, zoomLevel)) this._expandCluster(d)\n else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: flyToDuration / 1000 })\n }\n }\n }\n\n private _onPointMouseDown (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = true\n }\n\n private _onPointMouseUp (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = false\n }\n\n public zoomIn (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() + increment)\n }\n\n public zoomOut (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() - increment)\n }\n\n public setZoom (zoomLevel: number): void {\n const leaflet = this._map?.leaflet\n if (!leaflet) return\n\n this._eventInitiatedByComponent = true\n leaflet.flyTo(\n leaflet.getCenter(),\n clamp(zoomLevel, leaflet.getMinZoom(), leaflet.getMaxZoom()),\n { duration: this.config.zoomDuration / 1000 }\n )\n }\n\n public fitView (): void {\n this.fitToPoints()\n }\n\n public destroy (): void {\n constraintMapViewThrottled.cancel()\n cancelAnimationFrame(this._renderDataAnimationFrameId)\n cancelAnimationFrame(this._flyToBoundsAnimationFrameId)\n const map = this._map?.leaflet\n this._map = undefined\n\n map?.stop()\n map?.remove()\n this.g.remove()\n this.resizeObserver.disconnect()\n this.themeObserver?.disconnect()\n }\n}\n"],"names":["s.root","map","s.map","s.svgOverlay","s.backgroundRect","s.points","s.clusterBackground","s.pointSelectionRing","s.point","s","s.variables"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/leaflet-map/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { packSiblings } from 'd3-hierarchy'\nimport type L from 'leaflet'\nimport Supercluster, { ClusterFeature, PointFeature } from 'supercluster'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Model\nimport { MapDataModel } from 'data-models/map'\n\n// Types\nimport { ComponentType } from 'types/component'\nimport { GenericDataRecord } from 'types/data'\n\n// Utils\nimport { ResizeObserver } from 'utils/resize-observer'\nimport { clamp, isNil, getNumber, getString, isString } from 'utils/data'\nimport { isDarkThemeEnabled } from 'utils/style'\nimport { StyleSpecification } from './renderer/map-style'\nimport { constraintMapViewThrottled } from './renderer/mapboxgl-utils'\nimport {\n projectPoint,\n bBoxMerge,\n calculateClusterIndex,\n getNextZoomLevelOnClusterClick,\n findPointAndClusterByPointId,\n geoJsonPointToScreenPoint,\n getClusterRadius,\n getClustersAndPoints,\n getNodeRelativePosition,\n getPointRadius,\n shouldClusterExpand,\n} from './modules/utils'\n\n// Local Types\nimport {\n Bounds,\n LeafletMapClusterDatum,\n LeafletMapPoint,\n LeafletMapPointDatum,\n LeafletMapRenderer,\n LeafletMapExpandedCluster,\n MapZoomState,\n PointExpandedClusterProperties,\n} from './types'\n\n// Config\nimport { LeafletMapDefaultConfig, LeafletMapConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\n// Modules\nimport { initialMapCenter, initialMapZoom, setupMap, updateTopoJson } from './modules/map'\nimport { collideLabels, createNodes, removeNodes, updateNodes } from './modules/node'\nimport { createNodeSelectionRing, updateNodeSelectionRing } from './modules/selectionRing'\nimport { createBackgroundNode, updateBackgroundNode } from './modules/clusterBackground'\n\nexport class LeafletMap<Datum extends GenericDataRecord> extends ComponentCore<Datum[], LeafletMapConfigInterface<Datum>> {\n static selectors = s\n static cssVariables = s.variables\n protected _defaultConfig = LeafletMapDefaultConfig as LeafletMapConfigInterface<Datum>\n public config: LeafletMapConfigInterface<Datum> = this._defaultConfig\n\n g: Selection<HTMLElement, unknown, null, undefined>\n type = ComponentType.HTML\n element: HTMLElement\n datamodel: MapDataModel<Datum> = new MapDataModel()\n protected _container: HTMLElement\n protected _containerSelection: Selection<HTMLElement, unknown, null, undefined>\n public _onMapMoveEndInternal: (leaflet: L.Map) => void // Internal callback needed by Leaflet Flow Map\n private _map: {\n leaflet: L.Map;\n layer: L.Layer;\n svgOverlay: Selection<SVGSVGElement, unknown, null, undefined>;\n svgGroup: Selection<SVGGElement, unknown, SVGElement, undefined>;\n }\n\n private _clusterIndex: Supercluster<Datum>\n private _expandedCluster: LeafletMapExpandedCluster<Datum> = null\n private _cancelBackgroundClick = false\n private _hasBeenMoved = false\n private _hasBeenZoomed = false\n private _isMoving = false\n private _isZooming = false\n private _eventInitiatedByComponent = false\n private _triggerBackgroundClick = false\n private _externallySelectedPoint: LeafletMapPoint<Datum> | PointFeature<Datum> | null = null\n private _zoomingToExternallySelectedPoint = false\n private _forceExpandCluster = false\n private _pointGroup: Selection<SVGGElement, unknown, SVGElement, undefined>\n private _pointSelectionRing: Selection<SVGGElement, unknown, SVGElement, undefined>\n private _clusterBackground: Selection<SVGGElement, unknown, SVGElement, undefined>\n private _clusterBackgroundRadius = 0\n private _selectedPoint: LeafletMapPoint<Datum> = null\n private _currentZoomLevel: number | null = null\n private _firstRender = true\n private _isDarkThemeActive = false\n private resizeObserver: ResizeObserver\n private themeObserver: MutationObserver\n private _renderDataAnimationFrameId: number | null = null\n private _flyToBoundsAnimationFrameId: number | null = null\n readonly _leafletInitializationPromise: Promise<L.Map>\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 600\n\n protected events = {\n [LeafletMap.selectors.point]: {\n mouseup: this._onPointMouseUp.bind(this),\n mousedown: this._onPointMouseDown.bind(this),\n click: this._onPointClick.bind(this),\n },\n }\n\n constructor (container: HTMLElement, config?: LeafletMapConfigInterface<Datum>, data?: Datum[]) {\n super(ComponentType.HTML)\n this._container = container\n this._containerSelection = select(this._container).attr('role', 'figure')\n\n this._container.appendChild(this.element)\n this.g\n .attr('class', s.root)\n .attr('aria-hidden', true)\n\n if (config) this.setConfig(config)\n\n if (!this._container.clientWidth) {\n console.warn('Unovis | Leaflet Map: The width of the container is not set. Setting to 100%.')\n this._containerSelection.style('width', '100%')\n }\n\n if (!this._container.clientHeight) {\n console.warn(`Unovis | Leaflet Map: The height of the container is not set. Setting to ${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px.`)\n this._containerSelection.style('height', `${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px`)\n }\n\n // Initialize map asynchronously\n this._leafletInitializationPromise = new Promise((resolve) => {\n setupMap(this.element, this.config).then(map => {\n // Apply the `s.map` class to `tilePane` to allow tooltip interactions\n select(map.leaflet.getPanes().tilePane).classed(s.map, true)\n if (config) this.setConfig(config)\n\n this._map = map\n this._map.leaflet.on('drag', this._onMapDragLeaflet.bind(this))\n this._map.leaflet.on('move', this._onMapMove.bind(this))\n this._map.leaflet.on('movestart', this._onMapMoveStart.bind(this))\n this._map.leaflet.on('moveend', this._onMapMoveEnd.bind(this))\n this._map.leaflet.on('zoom', this._onMapZoom.bind(this))\n this._map.leaflet.on('zoomstart', this._onMapZoomStart.bind(this))\n this._map.leaflet.on('zoomend', this._onMapZoomEnd.bind(this))\n\n // We need to handle background click in a special way to deal\n // with d3 svg overlay that might have smaller size than the map itself\n // (see this._onNodeMouseDown() and this this._onNodeMouseDown())\n this._map.leaflet.on('mousedown', () => {\n if (!this._cancelBackgroundClick) this._triggerBackgroundClick = true\n })\n\n this._map.leaflet.on('mouseup', (e) => {\n if (this._triggerBackgroundClick) {\n this._triggerBackgroundClick = false\n const originalEvent = (e as any).originalEvent\n this._onBackgroundClick(originalEvent.target, originalEvent)\n }\n })\n\n this._map.svgOverlay\n .attr('class', s.svgOverlay)\n .insert('rect', ':first-child')\n .attr('class', s.backgroundRect)\n .attr('width', '100%')\n .attr('height', '100%')\n\n this._pointGroup = this._map.svgGroup.append('g').attr('class', s.points)\n this._clusterBackground = this._pointGroup.append('g')\n .attr('class', s.clusterBackground)\n .call(createBackgroundNode)\n this._pointSelectionRing = this._pointGroup.append('g')\n .attr('class', s.pointSelectionRing)\n .call(createNodeSelectionRing)\n\n this._map.leaflet.setView(initialMapCenter, initialMapZoom)\n\n if (isDarkThemeEnabled() && config.styleDarkTheme) {\n this._isDarkThemeActive = true\n this.setTheme(config.styleDarkTheme)\n }\n\n this.config.onMapInitialized?.()\n resolve(this._map.leaflet)\n })\n })\n\n\n // Set data and render the map when it's ready\n this.setData(data ?? [])\n\n // When the container size changes we have to initiate map resize in order to update its dimensions\n this.resizeObserver = new ResizeObserver(() => {\n this._map?.leaflet?.invalidateSize()\n this.config.tooltip?.hide()\n })\n this.resizeObserver.observe(container)\n\n // If dark theme is enabled, update map's style when document body's class list changes\n if (this.config.styleDarkTheme) {\n this.themeObserver = new MutationObserver((mutations) => {\n mutations.forEach(change => {\n if (change.attributeName === 'class') {\n const isDarkTheme = isDarkThemeEnabled(change.target as HTMLElement)\n if (this._isDarkThemeActive !== isDarkTheme) {\n this.setTheme(isDarkTheme ? this.config.styleDarkTheme : this.config.style)\n this._isDarkThemeActive = isDarkTheme\n }\n }\n })\n })\n this.themeObserver.observe(document.body, { attributes: true })\n this.themeObserver.observe(document.documentElement, { attributes: true })\n }\n }\n\n setConfig (config: LeafletMapConfigInterface<Datum>): void {\n super.setConfig(config)\n\n if (config.width) this._containerSelection.style('width', isString(config.width) ? config.width : `${config.width}px`)\n if (config.height) this._containerSelection.style('height', isString(config.height) ? config.height : `${config.height}px`)\n\n if (this._map && config.renderer === LeafletMapRenderer.MapLibre) {\n const layer = this._map.layer as any // Using any because the typings are not full\n const maplibreMap = layer.getMaplibreMap()\n if (maplibreMap.isStyleLoaded()) updateTopoJson(maplibreMap, this.config)\n }\n\n if (this.config.tooltip) {\n this.config.tooltip.setContainer(this._container)\n this.config.tooltip.setComponents([this])\n this.config.tooltip.update()\n }\n\n // Apply the `aria-label` attribute\n this._containerSelection.attr('aria-label', config.ariaLabel)\n }\n\n setData (data: Datum[]): void {\n const { config, datamodel } = this\n\n const dataValid = data.filter(d => {\n const lat = getNumber(d, config.pointLatitude)\n const lon = getNumber(d, config.pointLongitude)\n const valid = isFinite(lat) && isFinite(lon)\n\n if (!valid) console.warn('Unovis | Leaflet Map: Invalid point coordinates', d)\n return valid\n })\n\n datamodel.data = dataValid\n\n // We use Supercluster for real-time node clustering\n this._clusterIndex = calculateClusterIndex<Datum>(dataValid, this.config)\n\n // If there was an expanded cluster, try to find its successor and expand it too\n if (this._expandedCluster && this._map.leaflet) {\n // Reset expanded cluster before calling `_getPointData()` to get data with all clusters collapsed\n const expandedCluster = this._expandedCluster\n this._resetExpandedCluster()\n const pointData = this._getPointData()\n\n const expandedClusterCenterPx = projectPoint(expandedCluster.cluster, this._map.leaflet)\n const expandedClusterRadiusPx = expandedCluster.cluster.radius\n const cluster = pointData.find((c) => {\n if (!c.isCluster) return false\n const pos = projectPoint(c, this._map.leaflet)\n const r = c.radius\n const distance = Math.sqrt((expandedClusterCenterPx.x - pos.x) ** 2 + (expandedClusterCenterPx.y - pos.y) ** 2)\n return distance < (expandedClusterRadiusPx + r)\n })\n\n if (cluster) this._expandCluster(cluster, true)\n }\n\n // Render\n this._leafletInitializationPromise.then(() => {\n this.render()\n })\n }\n\n setTheme (theme: StyleSpecification | string): void {\n const layer = this._map.layer as any // Using any because the typings are not full\n if (this.config.renderer === LeafletMapRenderer.MapLibre) {\n const maplibreMap = layer.getMaplibreMap()\n maplibreMap.setStyle?.(theme)\n // `setStyle` reloads the style asynchronously, so we must wait until it's loaded before updating sources/layers\n if (maplibreMap.isStyleLoaded()) updateTopoJson(maplibreMap, this.config)\n else maplibreMap.once('styledata', () => updateTopoJson(maplibreMap, this.config))\n } else {\n if (typeof theme !== 'string') {\n console.warn('Unovis | Leaflet Map: Invalid style. Provide a URL string for raster rendering mode.')\n return\n }\n layer.setUrl(theme)\n }\n }\n\n // We redefine the ComponentCore render function to bind event to newly created elements in this._renderData(),\n // which is being called after almost every map interaction\n render (): void {\n const { config } = this\n if (!this._map) return\n\n this._renderData()\n if (this._firstRender) {\n if (config.initialBounds) this.fitToBounds(config.initialBounds)\n else if (config.fitViewOnInit) this.fitToPoints(0, config.fitViewPadding)\n } else {\n if (config.fitViewOnUpdate) this.fitToPoints(0, config.fitViewPadding)\n else if (config.fitBoundsOnUpdate) this.fitToBounds(config.fitBoundsOnUpdate)\n }\n\n this._firstRender = false\n }\n\n public getLeafletInstancePromise (): Promise<L.Map> {\n return this._leafletInitializationPromise\n }\n\n public fitToPoints (duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { config, datamodel, datamodel: { data } } = this\n\n if (!this._map || !this._map.leaflet) return\n if (!data?.length) return\n const bounds = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n this._flyToBoundsAnimationFrameId = requestAnimationFrame(() => this._flyToBounds(bounds, duration, padding))\n }\n\n public fitToBounds (bounds: Bounds, duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { northEast, southWest } = bounds\n if (isNil(northEast) || isNil(southWest)) return\n if (isNil(northEast.lat) || isNil(northEast.lng)) return\n if (isNil(southWest.lat) || isNil(southWest.lng)) return\n if (!this._map || !this._map.leaflet) return\n this._flyToBoundsAnimationFrameId = requestAnimationFrame(() => this._flyToBounds([\n [northEast.lat, southWest.lng],\n [southWest.lat, northEast.lng],\n ], duration, padding))\n }\n\n /* Select a point by id and optionally center the map view.\n * This method was designed to be used mainly with the `[LeafletMap.selectors.point]` click events\n * (when the user actually clicks on a point) and the specified point is inside one of the collapsed\n * clusters it won't be selected. You can use the `zoomToPointById` method to achieve that.\n */\n public selectPointById (id: string, centerView = false): void {\n const { config } = this\n const pointData = this._getPointData()\n const foundPoint = pointData.find(d => (d.properties as LeafletMapPointDatum<Datum>).id === id)\n\n if (!foundPoint) {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n return\n }\n\n if ((foundPoint.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be selected')\n return\n }\n\n this._selectedPoint = foundPoint\n\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (!isPointInsideExpandedCluster) this._resetExpandedCluster()\n\n if (centerView) {\n const coordinates = {\n lng: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLongitude),\n lat: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLatitude),\n }\n\n const zoomLevel = this._map.leaflet.getZoom()\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n this._renderData()\n }\n }\n\n /* Get the id of the selected point */\n public getSelectedPointId (): string | number | undefined {\n return this._selectedPoint?.id\n }\n\n /* Unselect point if it was selected before */\n public unselectPoint (): void {\n this._selectedPoint = null\n this._externallySelectedPoint = null\n this.render()\n }\n\n /** Get the currently expanded cluster */\n public getExpandedCluster (): { id: string; points: Datum[] } | undefined {\n if (!this._expandedCluster) return\n const id = this._expandedCluster.cluster?.id as string\n const points = this._expandedCluster.cluster?.clusterPoints.map(d => this.datamodel.data[(d as LeafletMapPointDatum<Datum>)._index])\n return { id, points }\n }\n\n /* Zoom to a point by id and optionally select it.\n * If the point is inside a cluster, it'll be automatically expanded to show the enclosed point.\n * You can also force set the zoom level by providing the `customZoomLevel` argument.\n */\n public zoomToPointById (id: string, selectPoint = false, customZoomLevel?: number): void {\n const { config, datamodel } = this\n if (!datamodel.data.length) {\n console.warn('Unovis | Leaflet Map: There are no points on the map')\n return\n }\n const dataBoundsAll = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n const bounds: [number, number, number, number] = [dataBoundsAll[0][1], dataBoundsAll[1][0], dataBoundsAll[1][1], dataBoundsAll[0][0]]\n const pointDataAll = this._getPointData(bounds)\n\n let foundPoint: LeafletMapPoint<Datum> | PointFeature<Datum> = pointDataAll\n .find((d: LeafletMapPoint<Datum>) => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === id)\n\n // If point was found and it's a cluster -> do nothing\n if ((foundPoint?.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be zoomed in')\n return\n }\n\n // If point was not found -> search for it in all collapsed clusters\n if (!foundPoint) {\n const { point } = findPointAndClusterByPointId(pointDataAll, id, config.pointId)\n foundPoint = point\n }\n\n if (foundPoint) {\n // If point was found and it's inside an expanded cluster -> simply select it\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (isPointInsideExpandedCluster && selectPoint) {\n this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n this._renderData()\n return\n }\n\n // Else - trigger zoom\n this._externallySelectedPoint = foundPoint\n this._zoomingToExternallySelectedPoint = true\n\n this._forceExpandCluster = !isNil(customZoomLevel)\n if (selectPoint) this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n\n const zoomLevel = isNil(customZoomLevel) ? this._map.leaflet.getZoom() : customZoomLevel\n const pointDatum = foundPoint.properties as LeafletMapPointDatum<Datum>\n const coordinates = {\n lng: getNumber(pointDatum, config.pointLongitude),\n lat: getNumber(pointDatum, config.pointLatitude),\n }\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n }\n }\n\n public getNodeRelativePosition (node: LeafletMapPoint<Datum>): { x: number; y: number } {\n return getNodeRelativePosition(node, this._map.leaflet)\n }\n\n public hasBeenZoomed (): boolean {\n return this._hasBeenZoomed\n }\n\n public hasBeenMoved (): boolean {\n return this._hasBeenMoved\n }\n\n public isZooming (): boolean {\n return this._isZooming\n }\n\n public isMoving (): boolean {\n return this._isMoving\n }\n\n\n private _flyToBounds (bounds: [[number, number], [number, number]], durationMs: number, paddingPx?: [number, number]): void {\n this._eventInitiatedByComponent = true\n const duration = durationMs / 1000\n const padding: [number, number] | undefined = paddingPx ? [\n paddingPx[0] < this._container.clientWidth / 2 ? paddingPx[0] : this._container.clientWidth / 2,\n paddingPx[1] < this._container.clientHeight / 2 ? paddingPx[1] : this._container.clientHeight / 2,\n ] : undefined\n if (duration) {\n this._map.leaflet.flyToBounds(bounds, { duration, padding })\n } else {\n this._map.leaflet.fitBounds(bounds, { padding })\n }\n }\n\n private _renderData (mapMoveZoomUpdateOnly = false): void {\n const { config } = this\n\n const pointData = this._getPointData()\n const contentBBox = pointData.length ? bBoxMerge(pointData.map(d => d.bbox)) : { x: 0, y: 0, width: 0, height: 0 }\n\n // Set SVG size to match Leaflet transform\n const svgExtraPadding = 40 + this._clusterBackgroundRadius // We need it to fit point labels and expanded cluster background circle\n const dx = contentBBox.x - svgExtraPadding\n const dy = contentBBox.y - svgExtraPadding\n this._map.svgOverlay\n .attr('width', contentBBox.width + 2 * svgExtraPadding)\n .attr('height', contentBBox.height + 2 * svgExtraPadding)\n .style('left', `${dx}px`)\n .style('top', `${dy}px`)\n\n this._map.svgGroup\n .attr('transform', `translate(${-dx},${-dy})`)\n\n // Render content\n const points = this._pointGroup.selectAll<SVGGElement, LeafletMapPoint<Datum>>(`.${s.point}:not(.exit)`)\n .data(pointData, (d: LeafletMapPoint<Datum>, i) => `${d.id || d.geometry.coordinates.join('')}`)\n\n points.exit<LeafletMapPoint<Datum>>().classed('exit', true).call(removeNodes)\n const pointsEnter = points.enter().append('g').attr('class', s.point)\n .call(createNodes)\n\n const pointsMerged = points.merge(pointsEnter)\n pointsEnter.call(updateNodes, config, this._map.leaflet)\n points.call(updateNodes, config, this._map.leaflet, mapMoveZoomUpdateOnly)\n pointsMerged.call(collideLabels, this._map.leaflet)\n\n this._clusterBackground.call(updateBackgroundNode, this._expandedCluster, config, this._map.leaflet, this._clusterBackgroundRadius)\n if (this._expandedCluster && config.clusterBackground) {\n pointData.forEach((d, i) => { d._zIndex = (d.properties as LeafletMapPointDatum<Datum>)?.expandedClusterPoint ? 2 : 0 })\n this._pointGroup\n .selectAll<SVGGElement, LeafletMapPoint<Datum>>(`.${s.point}, .${s.clusterBackground}, .${s.pointSelectionRing}`)\n .sort((a: LeafletMapPoint<Datum>, b: LeafletMapPoint<Datum>) => a._zIndex - b._zIndex)\n }\n\n // Show selection border and hide it when the node\n // is out of visible box\n if (config.selectedPointId) {\n const foundPoint = pointData.find(d => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === config.selectedPointId)\n const { cluster } = findPointAndClusterByPointId(pointData, config.selectedPointId, config.pointId)\n if (foundPoint) this._selectedPoint = foundPoint\n else this._selectedPoint = cluster\n }\n this._pointSelectionRing.call(updateNodeSelectionRing, this._selectedPoint, pointData, config, this._map.leaflet)\n\n // Set up events and attributes for the rendered points\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n\n // Tooltip\n config.tooltip?.update()\n }\n\n private _zoomToExternallySelectedPoint (): void {\n const { config } = this\n if (!this._externallySelectedPoint) return\n\n const externallySelectedPointDatum = this._externallySelectedPoint.properties as LeafletMapPointDatum<Datum>\n const externallySelectedPointId = getString(externallySelectedPointDatum, config.pointId)\n const pointData = this._getPointData()\n const foundPoint: LeafletMapPoint<Datum> = pointData.find(\n d => getString(d.properties as Datum, config.pointId) === externallySelectedPointId\n )\n\n if (foundPoint) {\n this._zoomingToExternallySelectedPoint = false\n this._currentZoomLevel = null\n } else {\n const { cluster } = findPointAndClusterByPointId(pointData, externallySelectedPointId, config.pointId)\n if (!cluster) return\n\n const zoomLevel = this._map.leaflet.getZoom()\n // Expand cluster or fly further\n if (this._forceExpandCluster || shouldClusterExpand(cluster, zoomLevel, 8, 13)) {\n this._expandCluster(cluster)\n } else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n const coordinates = {\n lng: getNumber(externallySelectedPointDatum, config.pointLongitude),\n lat: getNumber(externallySelectedPointDatum, config.pointLatitude),\n }\n if (this._currentZoomLevel !== newZoomLevel) {\n this._currentZoomLevel = newZoomLevel\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: 0 })\n }\n }\n }\n }\n\n private _expandCluster (clusterPoint: LeafletMapPoint<Datum>, preventRender?: boolean): void {\n const { config, config: { clusterBackground } } = this\n const padding = 1\n\n config.tooltip?.hide()\n\n this._forceExpandCluster = false\n if (clusterPoint) {\n const points: PointFeature<PointExpandedClusterProperties<Datum>>[] =\n clusterPoint.clusterIndex.getLeaves((clusterPoint.properties as LeafletMapClusterDatum<Datum>).cluster_id as number, Infinity)\n const packPoints: {x: number; y: number; r: number }[] = points.map(p => ({\n x: null,\n y: null,\n r: getPointRadius(p, config.pointRadius, this._map.leaflet.getZoom()) + padding,\n }))\n packSiblings(packPoints)\n\n points.forEach((p, i) => {\n p.properties.expandedClusterPoint = clusterPoint\n p.properties.r = packPoints[i].r\n p.properties.dx = packPoints[i].x\n p.properties.dy = packPoints[i].y\n })\n\n this._resetExpandedCluster()\n this._expandedCluster = {\n cluster: clusterPoint,\n points,\n }\n\n if (clusterBackground) this._clusterBackgroundRadius = getClusterRadius(this._expandedCluster)\n\n if (!preventRender) this._renderData()\n }\n\n this._zoomingToExternallySelectedPoint = false\n }\n\n private _resetExpandedCluster (): void {\n this._expandedCluster?.points?.forEach(d => { delete d.properties.expandedClusterPoint })\n this._expandedCluster = null\n }\n\n private _getPointData (customBounds?: [number, number, number, number]): LeafletMapPoint<Datum>[] {\n const { config, datamodel: { data } } = this\n\n if (!data || !this._clusterIndex) return []\n\n let geoJSONPoints: (ClusterFeature<LeafletMapClusterDatum<Datum>> | PointFeature<PointExpandedClusterProperties<Datum>>)[] =\n getClustersAndPoints<Datum>(this._clusterIndex, this._map.leaflet, customBounds)\n\n if (this._expandedCluster) {\n // Remove expanded cluster from the data\n geoJSONPoints = geoJSONPoints.filter(c => (c as ClusterFeature<LeafletMapClusterDatum<Datum>>).properties.cluster_id !== (this._expandedCluster.cluster.properties as LeafletMapClusterDatum<Datum>).cluster_id)\n // Add points from the expanded cluster\n geoJSONPoints = geoJSONPoints.concat(this._expandedCluster.points)\n }\n\n const pointData = geoJSONPoints\n // Todo: Remove explicitly set ClusterFeature<LeafletMapPointDatum<Datum>> type\n .map((d, i: number) => {\n return geoJsonPointToScreenPoint(d as ClusterFeature<LeafletMapPointDatum<Datum>>, i, this._map.leaflet, config)\n })\n // .sort((a, b) => getPointDisplayOrder(a, config.pointStatus, config.colorMap) - getPointDisplayOrder(b, config.pointStatus, config.colorMap))\n\n return pointData\n }\n\n private _getMapZoomState (): MapZoomState {\n const leafletBounds = this._map.leaflet.getBounds()\n const southWest = leafletBounds.getSouthWest()\n const northEast = leafletBounds.getNorthEast()\n\n return {\n mapCenter: this._map.leaflet.getCenter(),\n zoomLevel: this._map.leaflet.getZoom(),\n bounds: { southWest, northEast },\n userDriven: !this._eventInitiatedByComponent,\n }\n }\n\n private _onMapDragLeaflet (): void {\n this._cancelBackgroundClick = true\n }\n\n private _onMapMove (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenMoved = true\n this._renderDataAnimationFrameId = requestAnimationFrame(() => {\n this._renderData(true)\n })\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onMapMoveStart (): void {\n const { config } = this\n if (!this._map) return\n this._isMoving = true\n config.onMapMoveStart?.(this._getMapZoomState())\n }\n\n private _onMapMoveEnd (): void {\n const { config } = this\n if (!this._map) return\n this._onMapMoveEndInternal?.(this._map.leaflet)\n config.onMapMoveEnd?.(this._getMapZoomState())\n\n constraintMapViewThrottled(this._map.leaflet)\n const events = this._map.layer.getEvents()\n\n if (events.zoomend) {\n const zoomEndEvent = events.zoomend.bind(this._map.layer)\n zoomEndEvent(null)\n }\n\n if (this._externallySelectedPoint || this._zoomingToExternallySelectedPoint) {\n this._zoomToExternallySelectedPoint()\n }\n\n this._isMoving = false\n this._eventInitiatedByComponent = false\n }\n\n private _onMapZoomStart (): void {\n const { config } = this\n if (!this._map) return\n this._isZooming = true\n config.onMapZoomStart?.(this._getMapZoomState())\n }\n\n private _onMapZoomEnd (): void {\n const { config } = this\n if (!this._map) return\n config.onMapZoomEnd?.(this._getMapZoomState())\n this._isZooming = false\n if (!this._isMoving) this._eventInitiatedByComponent = false\n }\n\n private _onMapZoom (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenZoomed = true\n\n if (!this._externallySelectedPoint) this._resetExpandedCluster()\n else if (!this._zoomingToExternallySelectedPoint) {\n this._externallySelectedPoint = null\n }\n\n config.tooltip?.hide()\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onBackgroundClick (el: HTMLElement, event: MouseEvent): void {\n const { config } = this\n\n if (this._cancelBackgroundClick) {\n this._cancelBackgroundClick = false\n return\n }\n\n this._externallySelectedPoint = null\n this._resetExpandedCluster()\n this._renderData()\n config.onMapClick?.(this._getMapZoomState())\n }\n\n private _onPointClick (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n const { config: { flyToDuration, clusterExpandOnClick } } = this\n this._externallySelectedPoint = null\n event.stopPropagation()\n\n if ((d.properties as LeafletMapClusterDatum<Datum>).cluster) {\n const zoomLevel = this._map.leaflet.getZoom()\n const coordinates = { lng: d.geometry.coordinates[0], lat: d.geometry.coordinates[1] }\n\n if (clusterExpandOnClick && shouldClusterExpand(d, zoomLevel)) this._expandCluster(d)\n else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: flyToDuration / 1000 })\n }\n }\n }\n\n private _onPointMouseDown (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = true\n }\n\n private _onPointMouseUp (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = false\n }\n\n public zoomIn (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() + increment)\n }\n\n public zoomOut (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() - increment)\n }\n\n public setZoom (zoomLevel: number): void {\n const leaflet = this._map?.leaflet\n if (!leaflet) return\n\n this._eventInitiatedByComponent = true\n leaflet.flyTo(\n leaflet.getCenter(),\n clamp(zoomLevel, leaflet.getMinZoom(), leaflet.getMaxZoom()),\n { duration: this.config.zoomDuration / 1000 }\n )\n }\n\n public fitView (): void {\n this.fitToPoints()\n }\n\n public destroy (): void {\n constraintMapViewThrottled.cancel()\n cancelAnimationFrame(this._renderDataAnimationFrameId)\n cancelAnimationFrame(this._flyToBoundsAnimationFrameId)\n const map = this._map?.leaflet\n this._map = undefined\n\n map?.stop()\n map?.remove()\n this.g.remove()\n this.resizeObserver.disconnect()\n this.themeObserver?.disconnect()\n }\n}\n"],"names":["s.root","map","s.map","s.svgOverlay","s.backgroundRect","s.points","s.clusterBackground","s.pointSelectionRing","s.point","s","s.variables"],"mappings":"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"}
@@ -105,9 +105,20 @@ function setupMap(mapContainer, config) {
105
105
  case LeafletMapRenderer.MapLibre:
106
106
  // eslint-disable-next-line no-case-declarations
107
107
  const maplibre = yield import('maplibre-gl');
108
+ // Bundlers (e.g. webpack) can't resolve maplibre-gl's worker via `import.meta.url` on their own,
109
+ // which silently breaks tile parsing (only the style background renders). Point it explicitly.
110
+ // The worker imports `maplibre-gl-shared.mjs` as a relative sibling but bundlers treat the
111
+ // worker as an opaque asset and don't follow that import, so we reference the sibling here too
112
+ // (same query marker) to get it emitted next to the worker. Its URL is unused on purpose.
113
+ if (!maplibre.getWorkerUrl()) {
114
+ const workerUrl = new URL('maplibre-gl/dist/maplibre-gl-worker.mjs?maplibreWorkerAsset', import.meta.url);
115
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
116
+ const sharedUrl = new URL('maplibre-gl/dist/maplibre-gl-shared.mjs?maplibreWorkerAsset', import.meta.url);
117
+ maplibre.setWorkerUrl(workerUrl.toString());
118
+ }
108
119
  // eslint-disable-next-line no-case-declarations
109
120
  const { getMaplibreGLLayer } = yield import('../renderer/mapboxgl-layer.js');
110
- layer = getMaplibreGLLayer(config, L, maplibre.default);
121
+ layer = getMaplibreGLLayer(config, L, maplibre);
111
122
  layer.addTo(leafletMap);
112
123
  maplibreMap = (_b = (_a = layer).getMaplibreMap) === null || _b === void 0 ? void 0 : _b.call(_a);
113
124
  select(mapContainer).on('wheel', (event) => {
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sources":["../../../../src/components/leaflet-map/modules/map.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { select, Selection } from 'd3-selection'\nimport type { GeoJSONSource, Map } from 'maplibre-gl'\nimport { feature } from 'topojson-client'\n\n// Types\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\n\n// Local Types\n\n// Utils\nimport { constraintMapView, mapboxglWheelEvent } from '../renderer/mapboxgl-utils'\n\n// Styles\nimport * as s from '../style'\nimport { LeafletMapRenderer } from '../types'\n\nexport const initialMapCenter: L.LatLngExpression = [36, 14]\nexport const initialMapZoom = 1.9\n\nexport function updateTopoJson<T extends GenericDataRecord> (maplibreMap: Map, config: LeafletMapConfigInterface<T>): void {\n const { topoJSONLayer } = config\n\n if (topoJSONLayer.sources) {\n const featureObject = topoJSONLayer.sources?.objects?.[topoJSONLayer.featureName]\n if (featureObject) {\n const mapSource = maplibreMap.getSource(topoJSONLayer.featureName) as GeoJSONSource\n const featureCollection = feature(topoJSONLayer.sources, featureObject)\n if (mapSource) {\n mapSource.setData(featureCollection)\n } else {\n maplibreMap.addSource(topoJSONLayer.featureName, { type: 'geojson', data: featureCollection })\n }\n }\n }\n\n const fillLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-area`)\n if (topoJSONLayer.fillProperty) {\n if (!fillLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-area`,\n type: 'fill',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-antialias': false,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-opacity': topoJSONLayer.fillOpacity,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-area`, 'fill-color', [\n 'case',\n ['!', ['has', topoJSONLayer.fillProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.fillProperty],\n ])\n } else if (fillLayer) maplibreMap.removeLayer(`${topoJSONLayer.featureName}-area`)\n\n const strokeLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-stroke`)\n if (topoJSONLayer.strokeProperty) {\n if (!strokeLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-stroke`,\n type: 'line',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-opacity': topoJSONLayer.strokeOpacity,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-width': topoJSONLayer.strokeWidth,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-stroke`, 'line-color', [\n 'case',\n ['!', ['has', topoJSONLayer.strokeProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.strokeProperty],\n ])\n } else if (strokeLayer) { maplibreMap.removeLayer(`${topoJSONLayer.featureName}-stroke`) }\n}\n\nexport async function setupMap<T extends GenericDataRecord> (mapContainer: HTMLElement, config: LeafletMapConfigInterface<T>): Promise<{\n leaflet: L.Map;\n layer: L.Layer;\n svgOverlay: Selection<SVGSVGElement, unknown, null, undefined>;\n svgGroup: Selection<SVGGElement, unknown, SVGElement, undefined>;\n}> {\n const { style, renderer, topoJSONLayer } = config\n const leaflet = await import('leaflet')\n const L = leaflet.default\n\n if (!style) {\n console.error('Unovis | Leaflet Map: Please provide style settings in the map configuration object')\n return\n }\n\n const leafletMap = L.map(mapContainer, {\n scrollWheelZoom: renderer === LeafletMapRenderer.Raster, // We define custom scroll event for MapboxGL to enabling smooth zooming\n zoomControl: false,\n zoomDelta: renderer === LeafletMapRenderer.Raster ? 1 : 0.5,\n zoomSnap: renderer === LeafletMapRenderer.Raster ? 1 : 0,\n attributionControl: true,\n center: initialMapCenter,\n zoom: initialMapZoom,\n minZoom: Math.sqrt(mapContainer.offsetWidth) / 17,\n maxZoom: 23,\n maxBounds: L.latLngBounds(\n [-75, -290],\n [85, 290]\n ),\n maxBoundsViscosity: 1,\n })\n\n for (const attr of config.attribution) {\n leafletMap.attributionControl.addAttribution(attr)\n }\n\n let layer: L.Layer | (L.Layer & { getMaplibreMap(): Map })\n let maplibreMap: Map = null\n\n switch (renderer) {\n case LeafletMapRenderer.MapLibre:\n // eslint-disable-next-line no-case-declarations\n const maplibre = await import('maplibre-gl')\n // eslint-disable-next-line no-case-declarations\n const { getMaplibreGLLayer } = await import('../renderer/mapboxgl-layer')\n layer = getMaplibreGLLayer(config, L, maplibre.default)\n layer.addTo(leafletMap)\n maplibreMap = (layer as ReturnType<typeof getMaplibreGLLayer>).getMaplibreMap?.()\n\n select(mapContainer).on('wheel', (event: WheelEvent) => {\n event.preventDefault()\n mapboxglWheelEvent(leafletMap, layer as (L.Layer & { getMaplibreMap(): Map }), event)\n })\n break\n case LeafletMapRenderer.Raster:\n layer = L.tileLayer(style as string)\n layer.addTo(leafletMap)\n break\n }\n // leaflet-mapbox-gl has a layer positioning issue on far zoom levels which leads to having wrong\n // map points projection. We constrain the view to prevent that.\n constraintMapView(leafletMap)\n\n if (maplibreMap && topoJSONLayer?.sources) {\n const canvas = maplibreMap.getCanvas()\n const canvasSelection = select(canvas).classed(s.mapboxglCanvas, true)\n const tilePaneSelection = select(leafletMap.getPanes().tilePane)\n\n maplibreMap.on('mousemove', (event) => {\n const layerName = `${topoJSONLayer.featureName}-area`\n const layer = maplibreMap.getLayer(layerName)\n if (!layer) return\n\n const features = maplibreMap.queryRenderedFeatures(event.point, { layers: [layerName] })\n tilePaneSelection.datum(features[0])\n canvasSelection.classed(s.onFeatureHover, Boolean(features[0]))\n })\n\n maplibreMap.on('load', () => {\n updateTopoJson(maplibreMap, config)\n })\n }\n\n const svgOverlay = select(leafletMap.getPanes().overlayPane).append('svg')\n const svgGroup = svgOverlay.append('g')\n\n return {\n leaflet: leafletMap,\n layer,\n svgOverlay,\n svgGroup,\n }\n}\n"],"names":["s.mapboxglCanvas","s.onFeatureHover"],"mappings":"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"}
1
+ {"version":3,"file":"map.js","sources":["../../../../src/components/leaflet-map/modules/map.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { select, Selection } from 'd3-selection'\nimport type { GeoJSONSource, Map } from 'maplibre-gl'\nimport { feature } from 'topojson-client'\n\n// Types\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\n\n// Local Types\n\n// Utils\nimport { constraintMapView, mapboxglWheelEvent } from '../renderer/mapboxgl-utils'\n\n// Styles\nimport * as s from '../style'\nimport { LeafletMapRenderer } from '../types'\n\nexport const initialMapCenter: L.LatLngExpression = [36, 14]\nexport const initialMapZoom = 1.9\n\nexport function updateTopoJson<T extends GenericDataRecord> (maplibreMap: Map, config: LeafletMapConfigInterface<T>): void {\n const { topoJSONLayer } = config\n\n if (topoJSONLayer.sources) {\n const featureObject = topoJSONLayer.sources?.objects?.[topoJSONLayer.featureName]\n if (featureObject) {\n const mapSource = maplibreMap.getSource(topoJSONLayer.featureName) as GeoJSONSource\n const featureCollection = feature(topoJSONLayer.sources, featureObject)\n if (mapSource) {\n mapSource.setData(featureCollection)\n } else {\n maplibreMap.addSource(topoJSONLayer.featureName, { type: 'geojson', data: featureCollection })\n }\n }\n }\n\n const fillLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-area`)\n if (topoJSONLayer.fillProperty) {\n if (!fillLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-area`,\n type: 'fill',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-antialias': false,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-opacity': topoJSONLayer.fillOpacity,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-area`, 'fill-color', [\n 'case',\n ['!', ['has', topoJSONLayer.fillProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.fillProperty],\n ])\n } else if (fillLayer) maplibreMap.removeLayer(`${topoJSONLayer.featureName}-area`)\n\n const strokeLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-stroke`)\n if (topoJSONLayer.strokeProperty) {\n if (!strokeLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-stroke`,\n type: 'line',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-opacity': topoJSONLayer.strokeOpacity,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-width': topoJSONLayer.strokeWidth,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-stroke`, 'line-color', [\n 'case',\n ['!', ['has', topoJSONLayer.strokeProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.strokeProperty],\n ])\n } else if (strokeLayer) { maplibreMap.removeLayer(`${topoJSONLayer.featureName}-stroke`) }\n}\n\nexport async function setupMap<T extends GenericDataRecord> (mapContainer: HTMLElement, config: LeafletMapConfigInterface<T>): Promise<{\n leaflet: L.Map;\n layer: L.Layer;\n svgOverlay: Selection<SVGSVGElement, unknown, null, undefined>;\n svgGroup: Selection<SVGGElement, unknown, SVGElement, undefined>;\n}> {\n const { style, renderer, topoJSONLayer } = config\n const leaflet = await import('leaflet')\n const L = leaflet.default\n\n if (!style) {\n console.error('Unovis | Leaflet Map: Please provide style settings in the map configuration object')\n return\n }\n\n const leafletMap = L.map(mapContainer, {\n scrollWheelZoom: renderer === LeafletMapRenderer.Raster, // We define custom scroll event for MapboxGL to enabling smooth zooming\n zoomControl: false,\n zoomDelta: renderer === LeafletMapRenderer.Raster ? 1 : 0.5,\n zoomSnap: renderer === LeafletMapRenderer.Raster ? 1 : 0,\n attributionControl: true,\n center: initialMapCenter,\n zoom: initialMapZoom,\n minZoom: Math.sqrt(mapContainer.offsetWidth) / 17,\n maxZoom: 23,\n maxBounds: L.latLngBounds(\n [-75, -290],\n [85, 290]\n ),\n maxBoundsViscosity: 1,\n })\n\n for (const attr of config.attribution) {\n leafletMap.attributionControl.addAttribution(attr)\n }\n\n let layer: L.Layer | (L.Layer & { getMaplibreMap(): Map })\n let maplibreMap: Map = null\n\n switch (renderer) {\n case LeafletMapRenderer.MapLibre:\n // eslint-disable-next-line no-case-declarations\n const maplibre = await import('maplibre-gl')\n // Bundlers (e.g. webpack) can't resolve maplibre-gl's worker via `import.meta.url` on their own,\n // which silently breaks tile parsing (only the style background renders). Point it explicitly.\n // The worker imports `maplibre-gl-shared.mjs` as a relative sibling but bundlers treat the\n // worker as an opaque asset and don't follow that import, so we reference the sibling here too\n // (same query marker) to get it emitted next to the worker. Its URL is unused on purpose.\n if (!maplibre.getWorkerUrl()) {\n const workerUrl = new URL('maplibre-gl/dist/maplibre-gl-worker.mjs?maplibreWorkerAsset', import.meta.url)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const sharedUrl = new URL('maplibre-gl/dist/maplibre-gl-shared.mjs?maplibreWorkerAsset', import.meta.url)\n maplibre.setWorkerUrl(workerUrl.toString())\n }\n // eslint-disable-next-line no-case-declarations\n const { getMaplibreGLLayer } = await import('../renderer/mapboxgl-layer')\n layer = getMaplibreGLLayer(config, L, maplibre)\n layer.addTo(leafletMap)\n maplibreMap = (layer as ReturnType<typeof getMaplibreGLLayer>).getMaplibreMap?.()\n\n select(mapContainer).on('wheel', (event: WheelEvent) => {\n event.preventDefault()\n mapboxglWheelEvent(leafletMap, layer as (L.Layer & { getMaplibreMap(): Map }), event)\n })\n break\n case LeafletMapRenderer.Raster:\n layer = L.tileLayer(style as string)\n layer.addTo(leafletMap)\n break\n }\n // leaflet-mapbox-gl has a layer positioning issue on far zoom levels which leads to having wrong\n // map points projection. We constrain the view to prevent that.\n constraintMapView(leafletMap)\n\n if (maplibreMap && topoJSONLayer?.sources) {\n const canvas = maplibreMap.getCanvas()\n const canvasSelection = select(canvas).classed(s.mapboxglCanvas, true)\n const tilePaneSelection = select(leafletMap.getPanes().tilePane)\n\n maplibreMap.on('mousemove', (event) => {\n const layerName = `${topoJSONLayer.featureName}-area`\n const layer = maplibreMap.getLayer(layerName)\n if (!layer) return\n\n const features = maplibreMap.queryRenderedFeatures(event.point, { layers: [layerName] })\n tilePaneSelection.datum(features[0])\n canvasSelection.classed(s.onFeatureHover, Boolean(features[0]))\n })\n\n maplibreMap.on('load', () => {\n updateTopoJson(maplibreMap, config)\n })\n }\n\n const svgOverlay = select(leafletMap.getPanes().overlayPane).append('svg')\n const svgGroup = svgOverlay.append('g')\n\n return {\n leaflet: leafletMap,\n layer,\n svgOverlay,\n svgGroup,\n }\n}\n"],"names":["s.mapboxglCanvas","s.onFeatureHover"],"mappings":"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"}
@@ -1,3 +1,8 @@
1
+ // maplibre-gl >= 6 no longer exposes `Map#transform` publicly; it lives on the internal `_camera`
2
+ function getGLTransform (gl) {
3
+ return gl.transform || gl._camera?.transform
4
+ }
5
+
1
6
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
2
7
  function MaplibreGLLayer (leaflet, maplibre, options) {
3
8
  // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -112,14 +117,14 @@ function MaplibreGLLayer (leaflet, maplibre, options) {
112
117
  center: [center.lng, center.lat],
113
118
  zoom: this._map.getZoom() - 1,
114
119
  attributionControl: false,
120
+ // maplibre-gl >= 5 made `transform.latRange` a getter-only prop (mutating it throws), so the
121
+ // old "allow GL base map to pan beyond min/max latitudes" hack no longer works. Override the
122
+ // constrain hook instead, keeping maplibre-gl's own zoom clamp (its defaults, since we don't set our own).
123
+ transformConstrain: (mapCenter, zoom) => ({ center: mapCenter, zoom: Math.min(Math.max(zoom, -2), 22) }),
115
124
  });
116
125
 
117
126
  this._glMap = new maplibre.Map(options);
118
127
 
119
- // allow GL base map to pan beyond min/max latitudes
120
- this._glMap.transform.latRange = null;
121
- this._glMap.transform.maxValidLatitude = Infinity;
122
-
123
128
  this._transformGL(this._glMap);
124
129
 
125
130
  if (this._glMap._canvas.canvas) {
@@ -159,7 +164,8 @@ function MaplibreGLLayer (leaflet, maplibre, options) {
159
164
 
160
165
  this._transformGL(gl);
161
166
 
162
- if (gl.transform.width !== size.x || gl.transform.height !== size.y) {
167
+ const tr = getGLTransform(gl);
168
+ if (tr.width !== size.x || tr.height !== size.y) {
163
169
  container.style.width = `${size.x}px`;
164
170
  container.style.height = `${size.y}px`;
165
171
  if (gl._resize !== null && gl._resize !== undefined) {
@@ -183,9 +189,14 @@ function MaplibreGLLayer (leaflet, maplibre, options) {
183
189
  // gl.setView([center.lat, center.lng], this._map.getZoom() - 1, 0);
184
190
  // calling setView directly causes sync issues because it uses requestAnimFrame
185
191
 
186
- const tr = gl.transform;
187
- tr.center = maplibre.LngLat.convert([center.lng, center.lat]);
188
- tr.zoom = this._map.getZoom() - 1;
192
+ const tr = getGLTransform(gl);
193
+ if (tr.setCenter) {
194
+ tr.setCenter(maplibre.LngLat.convert([center.lng, center.lat]));
195
+ tr.setZoom(this._map.getZoom() - 1);
196
+ } else {
197
+ tr.center = maplibre.LngLat.convert([center.lng, center.lat]);
198
+ tr.zoom = this._map.getZoom() - 1;
199
+ }
189
200
  },
190
201
 
191
202
  // update the map constantly during a pinch zoom
@@ -1 +1 @@
1
- {"version":3,"file":"leaflet-maplibre-gl.js","sources":["../../../../src/components/leaflet-map/renderer/leaflet-maplibre-gl.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function MaplibreGLLayer (leaflet, maplibre, options) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const Layer = leaflet.Layer.extend({\n options: {\n updateInterval: 32,\n // How much to extend the overlay view (relative to map size)\n // e.g. 0.1 would be 10% of map view in each direction\n padding: 0.1,\n // whether or not to register the mouse and keyboard\n // events on the maplibre overlay\n interactive: false,\n // set the tilepane as the default pane to draw gl tiles\n pane: 'tilePane',\n },\n\n initialize: function (options) {\n leaflet.setOptions(this, options)\n\n // setup throttling the update event when panning\n this._throttledUpdate = leaflet.Util.throttle(this._update, this.options.updateInterval, this)\n },\n\n onAdd: function (map) {\n if (!this._container) {\n this._initContainer()\n }\n\n const paneName = this.getPaneName()\n map.getPane(paneName).appendChild(this._container)\n\n this._initGL()\n\n this._offset = this._map.containerPointToLayerPoint([0, 0])\n\n // work around https://github.com/mapbox/mapbox-gl-leaflet/issues/47\n if (map.options.zoomAnimation) {\n leaflet.DomEvent.on(map._proxy, leaflet.DomUtil.TRANSITION_END, this._transitionEnd, this)\n }\n },\n\n onRemove: function (map) {\n if (this._map._proxy && this._map.options.zoomAnimation) {\n leaflet.DomEvent.off(this._map._proxy, leaflet.DomUtil.TRANSITION_END, this._transitionEnd, this)\n }\n const paneName = this.getPaneName()\n map.getPane(paneName).removeChild(this._container)\n\n this._glMap.remove()\n this._glMap = null\n },\n\n getEvents: function () {\n return {\n move: this._throttledUpdate, // sensibly throttle updating while panning\n zoomanim: this._animateZoom, // applys the zoom animation to the <canvas>\n zoom: this._pinchZoom, // animate every zoom event for smoother pinch-zooming\n zoomstart: this._zoomStart, // flag starting a zoom to disable panning\n zoomend: this._zoomEnd,\n resize: this._resize,\n }\n },\n\n getMaplibreMap: function () {\n return this._glMap\n },\n\n getCanvas: function () {\n return this._glMap.getCanvas()\n },\n\n getSize: function () {\n return this._map.getSize().multiplyBy(1 + this.options.padding * 2)\n },\n\n getBounds: function () {\n const halfSize = this.getSize().multiplyBy(0.5)\n const center = this._map.latLngToContainerPoint(this._map.getCenter())\n return leaflet.latLngBounds(\n this._map.containerPointToLatLng(center.subtract(halfSize)),\n this._map.containerPointToLatLng(center.add(halfSize))\n )\n },\n\n getContainer: function () {\n return this._container\n },\n\n // returns the pane name set in options if it is a valid pane, defaults to tilePane\n getPaneName: function () {\n return this._map.getPane(this.options.pane) ? this.options.pane : 'tilePane'\n },\n\n _initContainer: function () {\n const container = this._container = leaflet.DomUtil.create('div', 'leaflet-gl-layer')\n\n const size = this.getSize()\n const offset = this._map.getSize().multiplyBy(this.options.padding)\n container.style.width = `${size.x}px`\n container.style.height = `${size.y}px`\n\n const topLeft = this._map.containerPointToLayerPoint([0, 0]).subtract(offset)\n\n leaflet.DomUtil.setPosition(container, topLeft)\n },\n\n _initGL: function () {\n const center = this._map.getCenter()\n\n const options = leaflet.extend({}, this.options, {\n container: this._container,\n center: [center.lng, center.lat],\n zoom: this._map.getZoom() - 1,\n attributionControl: false,\n })\n\n this._glMap = new maplibre.Map(options)\n\n // allow GL base map to pan beyond min/max latitudes\n this._glMap.transform.latRange = null\n this._glMap.transform.maxValidLatitude = Infinity\n\n this._transformGL(this._glMap)\n\n if (this._glMap._canvas.canvas) {\n // older versions of mapbox-gl surfaced the canvas differently\n this._glMap._actualCanvas = this._glMap._canvas.canvas\n } else {\n this._glMap._actualCanvas = this._glMap._canvas\n }\n\n // treat child <canvas> element like leaflet.ImageOverlay\n const canvas = this._glMap._actualCanvas\n leaflet.DomUtil.addClass(canvas, 'leaflet-image-layer')\n leaflet.DomUtil.addClass(canvas, 'leaflet-zoom-animated')\n if (this.options.interactive) {\n leaflet.DomUtil.addClass(canvas, 'leaflet-interactive')\n }\n if (this.options.className) {\n leaflet.DomUtil.addClass(canvas, this.options.className)\n }\n },\n\n _update: function (e) {\n // update the offset so we can correct for it later when we zoom\n this._offset = this._map.containerPointToLayerPoint([0, 0])\n\n if (this._zooming) {\n return\n }\n\n const size = this.getSize()\n const container = this._container\n const gl = this._glMap\n const offset = this._map.getSize().multiplyBy(this.options.padding)\n const topLeft = this._map.containerPointToLayerPoint([0, 0]).subtract(offset)\n\n leaflet.DomUtil.setPosition(container, topLeft)\n\n this._transformGL(gl)\n\n if (gl.transform.width !== size.x || gl.transform.height !== size.y) {\n container.style.width = `${size.x}px`\n container.style.height = `${size.y}px`\n if (gl._resize !== null && gl._resize !== undefined) {\n gl._resize()\n } else {\n gl.resize()\n }\n } else {\n // older versions of mapbox-gl surfaced update publicly\n if (gl._update !== null && gl._update !== undefined) {\n gl._update()\n } else {\n gl.update()\n }\n }\n },\n\n _transformGL: function (gl) {\n const center = this._map.getCenter()\n\n // gl.setView([center.lat, center.lng], this._map.getZoom() - 1, 0);\n // calling setView directly causes sync issues because it uses requestAnimFrame\n\n const tr = gl.transform\n tr.center = maplibre.LngLat.convert([center.lng, center.lat])\n tr.zoom = this._map.getZoom() - 1\n },\n\n // update the map constantly during a pinch zoom\n _pinchZoom: function (e) {\n this._glMap.jumpTo({\n zoom: this._map.getZoom() - 1,\n center: this._map.getCenter(),\n })\n },\n\n // borrowed from leaflet.ImageOverlay\n // https://github.com/Leaflet/Leaflet/blob/master/src/layer/ImageOverlay.js#L139-L144\n _animateZoom: function (e) {\n const scale = this._map.getZoomScale(e.zoom)\n const padding = this._map.getSize().multiplyBy(this.options.padding * scale)\n const viewHalf = this.getSize()._divideBy(2)\n // corrections for padding (scaled), adapted from\n // https://github.com/Leaflet/Leaflet/blob/master/src/map/Map.js#L1490-L1508\n const topLeft = this._map.project(e.center, e.zoom)\n ._subtract(viewHalf)\n ._add(this._map._getMapPanePos()\n .add(padding))._round()\n const offset = this._map.project(this._map.getBounds().getNorthWest(), e.zoom)\n ._subtract(topLeft)\n\n leaflet.DomUtil.setTransform(\n this._glMap._actualCanvas,\n offset.subtract(this._offset),\n scale\n )\n },\n\n _zoomStart: function (e) {\n this._zooming = true\n },\n\n _zoomEnd: function () {\n const scale = this._map.getZoomScale(this._map.getZoom())\n\n leaflet.DomUtil.setTransform(\n this._glMap._actualCanvas,\n // https://github.com/mapbox/mapbox-gl-leaflet/pull/130\n null,\n scale\n )\n\n this._zooming = false\n\n this._update()\n },\n\n _transitionEnd: function (e) {\n leaflet.Util.requestAnimFrame(function () {\n const zoom = this._map.getZoom()\n const center = this._map.getCenter()\n const offset = this._map.latLngToContainerPoint(\n this._map.getBounds().getNorthWest()\n )\n\n // reset the scale and offset\n leaflet.DomUtil.setTransform(this._glMap._actualCanvas, offset, 1)\n\n // enable panning once the gl map is ready again\n this._glMap.once('moveend', leaflet.Util.bind(function () {\n this._zoomEnd()\n }, this))\n\n // update the map position\n this._glMap.jumpTo({\n center: center,\n zoom: zoom - 1,\n })\n }, this)\n },\n\n _resize: function (e) {\n this._transitionEnd(e)\n },\n })\n\n return new Layer(options)\n}\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"leaflet-maplibre-gl.js","sources":["../../../../src/components/leaflet-map/renderer/leaflet-maplibre-gl.js"],"sourcesContent":["// maplibre-gl >= 6 no longer exposes `Map#transform` publicly; it lives on the internal `_camera`\nfunction getGLTransform (gl) {\n return gl.transform || gl._camera?.transform\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function MaplibreGLLayer (leaflet, maplibre, options) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const Layer = leaflet.Layer.extend({\n options: {\n updateInterval: 32,\n // How much to extend the overlay view (relative to map size)\n // e.g. 0.1 would be 10% of map view in each direction\n padding: 0.1,\n // whether or not to register the mouse and keyboard\n // events on the maplibre overlay\n interactive: false,\n // set the tilepane as the default pane to draw gl tiles\n pane: 'tilePane',\n },\n\n initialize: function (options) {\n leaflet.setOptions(this, options)\n\n // setup throttling the update event when panning\n this._throttledUpdate = leaflet.Util.throttle(this._update, this.options.updateInterval, this)\n },\n\n onAdd: function (map) {\n if (!this._container) {\n this._initContainer()\n }\n\n const paneName = this.getPaneName()\n map.getPane(paneName).appendChild(this._container)\n\n this._initGL()\n\n this._offset = this._map.containerPointToLayerPoint([0, 0])\n\n // work around https://github.com/mapbox/mapbox-gl-leaflet/issues/47\n if (map.options.zoomAnimation) {\n leaflet.DomEvent.on(map._proxy, leaflet.DomUtil.TRANSITION_END, this._transitionEnd, this)\n }\n },\n\n onRemove: function (map) {\n if (this._map._proxy && this._map.options.zoomAnimation) {\n leaflet.DomEvent.off(this._map._proxy, leaflet.DomUtil.TRANSITION_END, this._transitionEnd, this)\n }\n const paneName = this.getPaneName()\n map.getPane(paneName).removeChild(this._container)\n\n this._glMap.remove()\n this._glMap = null\n },\n\n getEvents: function () {\n return {\n move: this._throttledUpdate, // sensibly throttle updating while panning\n zoomanim: this._animateZoom, // applys the zoom animation to the <canvas>\n zoom: this._pinchZoom, // animate every zoom event for smoother pinch-zooming\n zoomstart: this._zoomStart, // flag starting a zoom to disable panning\n zoomend: this._zoomEnd,\n resize: this._resize,\n }\n },\n\n getMaplibreMap: function () {\n return this._glMap\n },\n\n getCanvas: function () {\n return this._glMap.getCanvas()\n },\n\n getSize: function () {\n return this._map.getSize().multiplyBy(1 + this.options.padding * 2)\n },\n\n getBounds: function () {\n const halfSize = this.getSize().multiplyBy(0.5)\n const center = this._map.latLngToContainerPoint(this._map.getCenter())\n return leaflet.latLngBounds(\n this._map.containerPointToLatLng(center.subtract(halfSize)),\n this._map.containerPointToLatLng(center.add(halfSize))\n )\n },\n\n getContainer: function () {\n return this._container\n },\n\n // returns the pane name set in options if it is a valid pane, defaults to tilePane\n getPaneName: function () {\n return this._map.getPane(this.options.pane) ? this.options.pane : 'tilePane'\n },\n\n _initContainer: function () {\n const container = this._container = leaflet.DomUtil.create('div', 'leaflet-gl-layer')\n\n const size = this.getSize()\n const offset = this._map.getSize().multiplyBy(this.options.padding)\n container.style.width = `${size.x}px`\n container.style.height = `${size.y}px`\n\n const topLeft = this._map.containerPointToLayerPoint([0, 0]).subtract(offset)\n\n leaflet.DomUtil.setPosition(container, topLeft)\n },\n\n _initGL: function () {\n const center = this._map.getCenter()\n\n const options = leaflet.extend({}, this.options, {\n container: this._container,\n center: [center.lng, center.lat],\n zoom: this._map.getZoom() - 1,\n attributionControl: false,\n // maplibre-gl >= 5 made `transform.latRange` a getter-only prop (mutating it throws), so the\n // old \"allow GL base map to pan beyond min/max latitudes\" hack no longer works. Override the\n // constrain hook instead, keeping maplibre-gl's own zoom clamp (its defaults, since we don't set our own).\n transformConstrain: (mapCenter, zoom) => ({ center: mapCenter, zoom: Math.min(Math.max(zoom, -2), 22) }),\n })\n\n this._glMap = new maplibre.Map(options)\n\n this._transformGL(this._glMap)\n\n if (this._glMap._canvas.canvas) {\n // older versions of mapbox-gl surfaced the canvas differently\n this._glMap._actualCanvas = this._glMap._canvas.canvas\n } else {\n this._glMap._actualCanvas = this._glMap._canvas\n }\n\n // treat child <canvas> element like leaflet.ImageOverlay\n const canvas = this._glMap._actualCanvas\n leaflet.DomUtil.addClass(canvas, 'leaflet-image-layer')\n leaflet.DomUtil.addClass(canvas, 'leaflet-zoom-animated')\n if (this.options.interactive) {\n leaflet.DomUtil.addClass(canvas, 'leaflet-interactive')\n }\n if (this.options.className) {\n leaflet.DomUtil.addClass(canvas, this.options.className)\n }\n },\n\n _update: function (e) {\n // update the offset so we can correct for it later when we zoom\n this._offset = this._map.containerPointToLayerPoint([0, 0])\n\n if (this._zooming) {\n return\n }\n\n const size = this.getSize()\n const container = this._container\n const gl = this._glMap\n const offset = this._map.getSize().multiplyBy(this.options.padding)\n const topLeft = this._map.containerPointToLayerPoint([0, 0]).subtract(offset)\n\n leaflet.DomUtil.setPosition(container, topLeft)\n\n this._transformGL(gl)\n\n const tr = getGLTransform(gl)\n if (tr.width !== size.x || tr.height !== size.y) {\n container.style.width = `${size.x}px`\n container.style.height = `${size.y}px`\n if (gl._resize !== null && gl._resize !== undefined) {\n gl._resize()\n } else {\n gl.resize()\n }\n } else {\n // older versions of mapbox-gl surfaced update publicly\n if (gl._update !== null && gl._update !== undefined) {\n gl._update()\n } else {\n gl.update()\n }\n }\n },\n\n _transformGL: function (gl) {\n const center = this._map.getCenter()\n\n // gl.setView([center.lat, center.lng], this._map.getZoom() - 1, 0);\n // calling setView directly causes sync issues because it uses requestAnimFrame\n\n const tr = getGLTransform(gl)\n if (tr.setCenter) {\n tr.setCenter(maplibre.LngLat.convert([center.lng, center.lat]))\n tr.setZoom(this._map.getZoom() - 1)\n } else {\n tr.center = maplibre.LngLat.convert([center.lng, center.lat])\n tr.zoom = this._map.getZoom() - 1\n }\n },\n\n // update the map constantly during a pinch zoom\n _pinchZoom: function (e) {\n this._glMap.jumpTo({\n zoom: this._map.getZoom() - 1,\n center: this._map.getCenter(),\n })\n },\n\n // borrowed from leaflet.ImageOverlay\n // https://github.com/Leaflet/Leaflet/blob/master/src/layer/ImageOverlay.js#L139-L144\n _animateZoom: function (e) {\n const scale = this._map.getZoomScale(e.zoom)\n const padding = this._map.getSize().multiplyBy(this.options.padding * scale)\n const viewHalf = this.getSize()._divideBy(2)\n // corrections for padding (scaled), adapted from\n // https://github.com/Leaflet/Leaflet/blob/master/src/map/Map.js#L1490-L1508\n const topLeft = this._map.project(e.center, e.zoom)\n ._subtract(viewHalf)\n ._add(this._map._getMapPanePos()\n .add(padding))._round()\n const offset = this._map.project(this._map.getBounds().getNorthWest(), e.zoom)\n ._subtract(topLeft)\n\n leaflet.DomUtil.setTransform(\n this._glMap._actualCanvas,\n offset.subtract(this._offset),\n scale\n )\n },\n\n _zoomStart: function (e) {\n this._zooming = true\n },\n\n _zoomEnd: function () {\n const scale = this._map.getZoomScale(this._map.getZoom())\n\n leaflet.DomUtil.setTransform(\n this._glMap._actualCanvas,\n // https://github.com/mapbox/mapbox-gl-leaflet/pull/130\n null,\n scale\n )\n\n this._zooming = false\n\n this._update()\n },\n\n _transitionEnd: function (e) {\n leaflet.Util.requestAnimFrame(function () {\n const zoom = this._map.getZoom()\n const center = this._map.getCenter()\n const offset = this._map.latLngToContainerPoint(\n this._map.getBounds().getNorthWest()\n )\n\n // reset the scale and offset\n leaflet.DomUtil.setTransform(this._glMap._actualCanvas, offset, 1)\n\n // enable panning once the gl map is ready again\n this._glMap.once('moveend', leaflet.Util.bind(function () {\n this._zoomEnd()\n }, this))\n\n // update the map position\n this._glMap.jumpTo({\n center: center,\n zoom: zoom - 1,\n })\n }, this)\n },\n\n _resize: function (e) {\n this._transitionEnd(e)\n },\n })\n\n return new Layer(options)\n}\n\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
- import { StyleSpecification } from 'maplibre-gl';
1
+ export declare type LayerSpecification = Record<string, unknown>;
2
+ export interface StyleSpecification {
3
+ layers: LayerSpecification[];
4
+ sources?: Record<string, unknown>;
5
+ glyphs?: string;
6
+ [key: string]: unknown;
7
+ }
2
8
  export declare type MapLibreStyleSpecs = StyleSpecification;
3
9
  export declare const MapLibreArcticDark: MapLibreStyleSpecs;
4
10
  export declare const MapLibreArcticLight: MapLibreStyleSpecs;
@@ -1 +1 @@
1
- {"version":3,"file":"map-style.js","sources":["../../../../src/components/leaflet-map/renderer/map-style.ts"],"sourcesContent":["import { StyleSpecification, LayerSpecification } from 'maplibre-gl'\n\nimport mapLibreBaseSettings from './mapboxgl/mapboxgl-settings.json'\nimport mapLibreDarkTheme from './mapboxgl/mapboxgl-dark-theme.json'\nimport mapLibreLightTheme from './mapboxgl/mapboxgl-light-theme.json'\n\n\nexport type MapLibreStyleSpecs = StyleSpecification\n\nexport const MapLibreArcticDark: MapLibreStyleSpecs = {\n ...(mapLibreBaseSettings as StyleSpecification),\n layers: [\n ...mapLibreDarkTheme.layers,\n ...mapLibreBaseSettings.layers,\n ] as Array<LayerSpecification>,\n}\n\nexport const MapLibreArcticLight: MapLibreStyleSpecs = {\n ...(mapLibreBaseSettings as StyleSpecification),\n layers: [\n ...mapLibreLightTheme.layers,\n ...mapLibreBaseSettings.layers,\n ] as Array<LayerSpecification>,\n}\n"],"names":[],"mappings":";;;;AASa,MAAA,kBAAkB,mCACzB,oBAA2C,CAAA,EAAA,EAC/C,MAAM,EAAE;QACN,GAAG,iBAAiB,CAAC,MAAM;QAC3B,GAAG,oBAAoB,CAAC,MAAM;AACF,KAAA,EAAA,EAC/B;AAEY,MAAA,mBAAmB,mCAC1B,oBAA2C,CAAA,EAAA,EAC/C,MAAM,EAAE;QACN,GAAG,kBAAkB,CAAC,MAAM;QAC5B,GAAG,oBAAoB,CAAC,MAAM;AACF,KAAA,EAAA;;;;"}
1
+ {"version":3,"file":"map-style.js","sources":["../../../../src/components/leaflet-map/renderer/map-style.ts"],"sourcesContent":["import mapLibreBaseSettings from './mapboxgl/mapboxgl-settings.json'\nimport mapLibreDarkTheme from './mapboxgl/mapboxgl-dark-theme.json'\nimport mapLibreLightTheme from './mapboxgl/mapboxgl-light-theme.json'\n\n// Local, TypeScript 4.2-parseable aliases for the MapLibre style types. Importing them directly from\n// `@maplibre/maplibre-gl-style-spec` breaks the build because that package's `.d.ts` uses inline\n// `export { type ... }` syntax that requires TypeScript >= 4.5.\nexport type LayerSpecification = Record<string, unknown>\nexport interface StyleSpecification {\n layers: LayerSpecification[];\n sources?: Record<string, unknown>;\n glyphs?: string;\n [key: string]: unknown;\n}\n\nexport type MapLibreStyleSpecs = StyleSpecification\n\nexport const MapLibreArcticDark: MapLibreStyleSpecs = {\n ...(mapLibreBaseSettings as StyleSpecification),\n layers: [\n ...mapLibreDarkTheme.layers,\n ...mapLibreBaseSettings.layers,\n ] as Array<LayerSpecification>,\n}\n\nexport const MapLibreArcticLight: MapLibreStyleSpecs = {\n ...(mapLibreBaseSettings as StyleSpecification),\n layers: [\n ...mapLibreLightTheme.layers,\n ...mapLibreBaseSettings.layers,\n ] as Array<LayerSpecification>,\n}\n"],"names":[],"mappings":";;;;AAiBa,MAAA,kBAAkB,mCACzB,oBAA2C,CAAA,EAAA,EAC/C,MAAM,EAAE;QACN,GAAG,iBAAiB,CAAC,MAAM;QAC3B,GAAG,oBAAoB,CAAC,MAAM;AACF,KAAA,EAAA,EAC/B;AAEY,MAAA,mBAAmB,mCAC1B,oBAA2C,CAAA,EAAA,EAC/C,MAAM,EAAE;QACN,GAAG,kBAAkB,CAAC,MAAM;QAC5B,GAAG,oBAAoB,CAAC,MAAM;AACF,KAAA,EAAA;;;;"}
@@ -1996,7 +1996,7 @@ var layers = [
1996
1996
  visibility: "visible"
1997
1997
  },
1998
1998
  paint: {
1999
- "line-color": "rgba(163, 213, 217, .)",
1999
+ "line-color": "rgba(163, 213, 217, 1)",
2000
2000
  "line-width": {
2001
2001
  base: 1.2,
2002
2002
  stops: [
@@ -1,8 +1,11 @@
1
1
  import type L from 'leaflet';
2
- import type Maplibre from 'maplibre-gl';
3
- import type { Map } from 'maplibre-gl';
2
+ import type { Map, LngLat } from 'maplibre-gl';
4
3
  import { GenericDataRecord } from "../../../types/data";
5
4
  import { LeafletMapConfigInterface } from '../config';
6
- export declare function getMaplibreGLLayer<Datum extends GenericDataRecord>(config: LeafletMapConfigInterface<Datum>, leaflet: typeof L, maplibre: typeof Maplibre): L.Layer & {
5
+ export declare type MaplibreModule = {
6
+ Map: typeof Map;
7
+ LngLat: typeof LngLat;
8
+ };
9
+ export declare function getMaplibreGLLayer<Datum extends GenericDataRecord>(config: LeafletMapConfigInterface<Datum>, leaflet: typeof L, maplibre: MaplibreModule): L.Layer & {
7
10
  getMaplibreMap(): Map;
8
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mapboxgl-layer.js","sources":["../../../../src/components/leaflet-map/renderer/mapboxgl-layer.ts"],"sourcesContent":["import type L from 'leaflet'\nimport type Maplibre from 'maplibre-gl'\nimport type { Map } from 'maplibre-gl'\n\nimport { injectGlobal } from '@emotion/css'\n\n// Utils\nimport { isObject } from 'utils/data'\n\n// Types\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\nimport { MapLibreStyleSpecs } from './map-style'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { MaplibreGLLayer } from './leaflet-maplibre-gl'\n\n// Inject MapLibreGL global style\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport mapLibreStyles from './maplibre-gl.css.js'\ninjectGlobal(mapLibreStyles)\n\nexport function getMaplibreGLLayer<Datum extends GenericDataRecord> (\n config: LeafletMapConfigInterface<Datum>,\n leaflet: typeof L,\n maplibre: typeof Maplibre\n): L.Layer & { getMaplibreMap(): Map } {\n const { accessToken, style } = config\n\n if (isObject(style) && !(style as MapLibreStyleSpecs).glyphs) {\n console.warn('Unovis | Leaflet Map: Glyphs URL is required in order to show the map. Set `mapboxglGlyphs` URL in the style settings')\n return\n }\n\n if (isObject(style) && !(style as MapLibreStyleSpecs).sources) {\n console.warn('Unovis | Leaflet Map: Sources settings are required in order to show map. Set the `sources` property in the style settings')\n return\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const layer = MaplibreGLLayer(leaflet, maplibre, {\n style: style,\n accessToken: accessToken || 'not-needed',\n })\n\n return layer\n}\n"],"names":[],"mappings":";;;;;AAuBA,YAAY,CAAC,cAAc,CAAC,CAAA;SAEZ,kBAAkB,CAChC,MAAwC,EACxC,OAAiB,EACjB,QAAyB,EAAA;AAEzB,IAAA,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAErC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAE,KAA4B,CAAC,MAAM,EAAE;AAC5D,QAAA,OAAO,CAAC,IAAI,CAAC,uHAAuH,CAAC,CAAA;QACrI,OAAM;AACP,KAAA;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAE,KAA4B,CAAC,OAAO,EAAE;AAC7D,QAAA,OAAO,CAAC,IAAI,CAAC,4HAA4H,CAAC,CAAA;QAC1I,OAAM;AACP,KAAA;;;AAID,IAAA,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE;AAC/C,QAAA,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,WAAW,IAAI,YAAY;AACzC,KAAA,CAAC,CAAA;AAEF,IAAA,OAAO,KAAK,CAAA;AACd;;;;"}
1
+ {"version":3,"file":"mapboxgl-layer.js","sources":["../../../../src/components/leaflet-map/renderer/mapboxgl-layer.ts"],"sourcesContent":["import type L from 'leaflet'\nimport type { Map, LngLat } from 'maplibre-gl'\n\nimport { injectGlobal } from '@emotion/css'\n\n// Utils\nimport { isObject } from 'utils/data'\n\n// Types\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\nimport { MapLibreStyleSpecs } from './map-style'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { MaplibreGLLayer } from './leaflet-maplibre-gl'\n\n// Inject MapLibreGL global style\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport mapLibreStyles from './maplibre-gl.css.js'\ninjectGlobal(mapLibreStyles)\n\n// The subset of the MapLibre GL module that `leaflet-maplibre-gl` consumes at runtime\nexport type MaplibreModule = {\n /* eslint-disable @typescript-eslint/naming-convention -- matches the MapLibre GL export names */\n Map: typeof Map;\n LngLat: typeof LngLat;\n /* eslint-enable @typescript-eslint/naming-convention */\n}\n\nexport function getMaplibreGLLayer<Datum extends GenericDataRecord> (\n config: LeafletMapConfigInterface<Datum>,\n leaflet: typeof L,\n maplibre: MaplibreModule\n): L.Layer & { getMaplibreMap(): Map } {\n const { accessToken, style } = config\n\n if (isObject(style) && !(style as MapLibreStyleSpecs).glyphs) {\n console.warn('Unovis | Leaflet Map: Glyphs URL is required in order to show the map. Set `mapboxglGlyphs` URL in the style settings')\n return\n }\n\n if (isObject(style) && !(style as MapLibreStyleSpecs).sources) {\n console.warn('Unovis | Leaflet Map: Sources settings are required in order to show map. Set the `sources` property in the style settings')\n return\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const layer = MaplibreGLLayer(leaflet, maplibre, {\n style: style,\n accessToken: accessToken || 'not-needed',\n })\n\n return layer\n}\n"],"names":[],"mappings":";;;;;AAsBA,YAAY,CAAC,cAAc,CAAC,CAAA;SAUZ,kBAAkB,CAChC,MAAwC,EACxC,OAAiB,EACjB,QAAwB,EAAA;AAExB,IAAA,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAErC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAE,KAA4B,CAAC,MAAM,EAAE;AAC5D,QAAA,OAAO,CAAC,IAAI,CAAC,uHAAuH,CAAC,CAAA;QACrI,OAAM;AACP,KAAA;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAE,KAA4B,CAAC,OAAO,EAAE;AAC7D,QAAA,OAAO,CAAC,IAAI,CAAC,4HAA4H,CAAC,CAAA;QAC1I,OAAM;AACP,KAAA;;;AAID,IAAA,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE;AAC/C,QAAA,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,WAAW,IAAI,YAAY;AACzC,KAAA,CAAC,CAAA;AAEF,IAAA,OAAO,KAAK,CAAA;AACd;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@unovis/ts",
3
3
  "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript",
4
- "version": "1.6.8-stellar-beta.0",
4
+ "version": "1.6.8-stellar-beta.2",
5
5
  "packageManager": "pnpm@10.23.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -108,6 +108,7 @@
108
108
  "@types/topojson-specification": "^1.0.2",
109
109
  "@unovis/dagre-layout": "0.8.8-2",
110
110
  "@unovis/graphlibrary": "2.2.0-2",
111
+ "@maplibre/maplibre-gl-style-spec": "26.4.1",
111
112
  "d3": "^7.2.1",
112
113
  "d3-collection": "^1.0.7",
113
114
  "d3-geo-projection": "^4.0.0",
@@ -116,7 +117,7 @@
116
117
  "elkjs": "^0.10.0",
117
118
  "geojson": "^0.5.0",
118
119
  "leaflet": "1.7.1",
119
- "maplibre-gl": "^2.1.9",
120
+ "maplibre-gl": "6.7.0",
120
121
  "striptags": "^3.2.0",
121
122
  "supercluster": "^7.1.5",
122
123
  "three": "^0.135.0",