@unovis/ts 1.1.1-beta.9 → 1.1.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/components/axis/index.js +8 -4
  2. package/components/axis/index.js.map +1 -1
  3. package/components/leaflet-map/index.d.ts +5 -0
  4. package/components/leaflet-map/index.js +9 -0
  5. package/components/leaflet-map/index.js.map +1 -1
  6. package/components/leaflet-map/modules/utils.d.ts +1 -1
  7. package/components/leaflet-map/modules/utils.js +3 -3
  8. package/components/leaflet-map/modules/utils.js.map +1 -1
  9. package/components/leaflet-map/types.d.ts +1 -0
  10. package/components/leaflet-map/types.js.map +1 -1
  11. package/components.d.ts +0 -2
  12. package/components.js +0 -1
  13. package/components.js.map +1 -1
  14. package/containers/single-container/index.js +3 -0
  15. package/containers/single-container/index.js.map +1 -1
  16. package/core/container/index.d.ts +2 -1
  17. package/core/container/index.js +4 -0
  18. package/core/container/index.js.map +1 -1
  19. package/index.js +0 -2
  20. package/index.js.map +1 -1
  21. package/package.json +1 -1
  22. package/types.d.ts +0 -1
  23. package/types.js +0 -1
  24. package/types.js.map +1 -1
  25. package/utils/data.js +3 -0
  26. package/utils/data.js.map +1 -1
  27. package/utils/style.d.ts +1 -1
  28. package/utils/style.js.map +1 -1
  29. package/components/nested-donut/config.d.ts +0 -59
  30. package/components/nested-donut/config.js +0 -19
  31. package/components/nested-donut/config.js.map +0 -1
  32. package/components/nested-donut/index.d.ts +0 -38
  33. package/components/nested-donut/index.js +0 -133
  34. package/components/nested-donut/index.js.map +0 -1
  35. package/components/nested-donut/modules/arc.d.ts +0 -17
  36. package/components/nested-donut/modules/arc.js +0 -50
  37. package/components/nested-donut/modules/arc.js.map +0 -1
  38. package/components/nested-donut/modules/label.d.ts +0 -7
  39. package/components/nested-donut/modules/label.js +0 -34
  40. package/components/nested-donut/modules/label.js.map +0 -1
  41. package/components/nested-donut/style.d.ts +0 -26
  42. package/components/nested-donut/style.js +0 -70
  43. package/components/nested-donut/style.js.map +0 -1
  44. package/components/nested-donut/types.d.ts +0 -24
  45. package/components/nested-donut/types.js +0 -11
  46. package/components/nested-donut/types.js.map +0 -1
@@ -6,6 +6,7 @@ import { Position } from '../../types/position.js';
6
6
  import { FitMode, VerticalAlign, TextAlign } from '../../types/text.js';
7
7
  import { smartTransition } from '../../utils/d3.js';
8
8
  import { trimSVGText, renderTextToSvgTextElement } from '../../utils/text.js';
9
+ import { isEqual } from '../../utils/data.js';
9
10
  import { AxisType } from './types.js';
10
11
  import { AxisConfig } from './config.js';
11
12
  import * as style from './style.js';
@@ -152,18 +153,21 @@ class Axis extends XYComponentCore {
152
153
  _renderAxis(selection = this.axisGroup, duration = this.config.duration) {
153
154
  const { config } = this;
154
155
  const axisGen = this._buildAxis();
155
- axisGen.tickValues(this._getConfiguredTickValues());
156
+ const tickValues = this._getConfiguredTickValues() || axisGen.scale().ticks(this._getNumTicks());
157
+ axisGen.tickValues(tickValues);
156
158
  // Interrupting all active transitions first to prevent them from being stuck.
157
159
  // Somehow we see it happening in Angular apps.
158
160
  selection.selectAll('*').interrupt();
159
161
  smartTransition(selection, duration).call(axisGen);
160
162
  const ticks = selection.selectAll('g.tick');
161
- const tickValues = ticks.data();
162
163
  ticks
163
164
  .classed(tick, true)
164
165
  .style('font-size', config.tickTextFontSize);
165
- // We interrupt transition on tick Text to make it 'wrappable'
166
- const tickText = selection.selectAll('g.tick > text');
166
+ // Selecting the <text> elements of the ticks to apply formatting. By default, this selection
167
+ // will include exiting elements, so we're filtering them out.
168
+ const tickText = selection.selectAll('g.tick > text')
169
+ .filter(tickValue => tickValues.some(t => isEqual(tickValue, t))); // We use isEqual to compare Dates
170
+ // We interrupt the transition on tick's <text> to make it 'wrappable'
167
171
  tickText.nodes().forEach(node => interrupt(node));
168
172
  tickText.each((value, i, elements) => {
169
173
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/axis/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { Axis as D3Axis, axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Types\nimport { Position } from 'types/position'\nimport { Spacing } from 'types/spacing'\nimport { FitMode, TextAlign, UnovisText, UnovisTextOptions, VerticalAlign } from 'types/text'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { renderTextToSvgTextElement, trimSVGText } from 'utils/text'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisConfig, AxisConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Axis<Datum> extends XYComponentCore<Datum, AxisConfig<Datum>, AxisConfigInterface<Datum>> {\n static selectors = s\n config: AxisConfig<Datum> = new AxisConfig<Datum>()\n axisGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n gridGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n\n private _axisRawBBox: DOMRect\n private _axisSizeBBox: SVGRect\n private _requiredMargin: Spacing\n private _defaultNumTicks = 3\n private _minMaxTicksOnlyEnforceWidth = 250\n\n events = {}\n\n constructor (config?: AxisConfigInterface<Datum>) {\n super()\n if (config) this.config.init(config)\n\n this.axisGroup = this.g.append('g')\n this.gridGroup = this.g.append('g')\n .attr('class', s.grid)\n }\n\n /** Renders axis to an invisible grouped to calculate automatic chart margins */\n preRender (): void {\n const { config } = this\n const axisRenderHelperGroup = this.g.append('g').attr('opacity', 0)\n\n this._renderAxis(axisRenderHelperGroup, 0)\n\n // Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)\n this._axisRawBBox = axisRenderHelperGroup.node().getBBox()\n\n // Align tick text\n if (config.tickTextAlign) this._alignTickLabels()\n\n // Render label and store total axis size and required margins\n this._renderAxisLabel(axisRenderHelperGroup)\n this._axisSizeBBox = this._getAxisSize(axisRenderHelperGroup)\n this._requiredMargin = this._getRequiredMargin(this._axisSizeBBox)\n\n axisRenderHelperGroup.remove()\n }\n\n getPosition (): Position {\n const { config: { type, position } } = this\n return (position ?? ((type === AxisType.X) ? Position.Bottom : Position.Left)) as Position\n }\n\n _getAxisSize (selection: Selection<SVGGElement, unknown, SVGGElement, undefined>): SVGRect {\n const bBox = selection.node().getBBox()\n return bBox\n }\n\n _getRequiredMargin (axisSize = this._axisSizeBBox): Spacing {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X: {\n const tolerancePx = 1\n const xEnd = this._axisSizeBBox.x + this._axisSizeBBox.width\n\n const left = this._axisSizeBBox.x < 0 ? Math.abs(this._axisSizeBBox.x) : 0\n const right = (xEnd - this._width) > tolerancePx ? xEnd - this._width : 0\n\n switch (position) {\n case Position.Top: return { top: axisSize.height, left, right }\n case Position.Bottom: default: return { bottom: axisSize.height, left, right }\n }\n }\n case AxisType.Y: {\n const bleedY = axisSize.height > this._height ? (axisSize.height - this._height) / 2 : 0\n const top = bleedY\n const bottom = bleedY\n\n switch (position) {\n case Position.Right: return { right: axisSize.width, top, bottom }\n case Position.Left: default: return { left: axisSize.width, top, bottom }\n }\n }\n }\n }\n\n getRequiredMargin (): Spacing {\n return this._requiredMargin\n }\n\n /** Calculates axis transform:translate offset based on passed container margins */\n getOffset (containerMargin: Spacing): {left: number; top: number} {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return { top: containerMargin.top, left: containerMargin.left }\n case Position.Bottom: default: return { top: containerMargin.top + this._height, left: containerMargin.left }\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return { top: containerMargin.top, left: containerMargin.left + this._width }\n case Position.Left: default: return { top: containerMargin.top, left: containerMargin.left }\n }\n }\n }\n\n _render (duration = this.config.duration, selection = this.axisGroup): void {\n const { config } = this\n\n this._renderAxis(selection, duration)\n this._renderAxisLabel(selection)\n\n if (config.gridLine) {\n const gridGen = this._buildGrid().tickFormat(() => '')\n gridGen.tickValues(this._getConfiguredTickValues())\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n this.gridGroup.selectAll('*').interrupt()\n smartTransition(this.gridGroup, duration).call(gridGen).style('opacity', 1)\n } else {\n smartTransition(this.gridGroup, duration).style('opacity', 0)\n }\n\n if (config.tickTextAlign) this._alignTickLabels()\n }\n\n _buildAxis (): D3Axis<any> {\n const { config: { type, position, tickPadding } } = this\n\n const ticks = this._getNumTicks()\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return axisTop(this.xScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Bottom: default: return axisBottom(this.xScale).ticks(ticks).tickPadding(tickPadding)\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return axisRight(this.yScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Left: default: return axisLeft(this.yScale).ticks(ticks).tickPadding(tickPadding)\n }\n }\n }\n\n _buildGrid (): D3Axis<any> {\n const { config: { type, position } } = this\n\n const ticks = this._getNumTicks()\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return axisTop(this.xScale).ticks(ticks * 2).tickSize(-this._height).tickSizeOuter(0)\n case Position.Bottom: default: return axisBottom(this.xScale).ticks(ticks * 2).tickSize(-this._height).tickSizeOuter(0)\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return axisRight(this.yScale).ticks(ticks * 2).tickSize(-this._width).tickSizeOuter(0)\n case Position.Left: default: return axisLeft(this.yScale).ticks(ticks * 2).tickSize(-this._width).tickSizeOuter(0)\n }\n }\n }\n\n _renderAxis (selection = this.axisGroup, duration = this.config.duration): void {\n const { config } = this\n\n const axisGen = this._buildAxis()\n axisGen.tickValues(this._getConfiguredTickValues())\n\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n selection.selectAll('*').interrupt()\n smartTransition(selection, duration).call(axisGen)\n\n const ticks = selection.selectAll<SVGGElement, number | Date>('g.tick')\n const tickValues = ticks.data()\n\n ticks\n .classed(s.tick, true)\n .style('font-size', config.tickTextFontSize)\n\n // We interrupt transition on tick Text to make it 'wrappable'\n const tickText = selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n tickText.nodes().forEach(node => interrupt(node))\n\n tickText.each((value, i, elements) => {\n const text = config.tickFormat?.(value, i, tickValues) ?? `${value}`\n const textElement = elements[i]\n const textMaxWidth = config.tickTextWidth || (config.type === AxisType.X ? this._containerWidth / (ticks.size() + 1) : this._containerWidth / 5)\n const styleDeclaration = getComputedStyle(textElement)\n const fontSize = Number.parseFloat(styleDeclaration.fontSize)\n const fontFamily = styleDeclaration.fontFamily\n\n if (config.tickTextFitMode === FitMode.Trim) {\n const textElementSelection = select(textElement).text(text)\n trimSVGText(textElementSelection, textMaxWidth, config.tickTextTrimType, true, fontSize, 0.58)\n } else {\n const textBlock: UnovisText = { text, fontFamily, fontSize }\n const textOptions: UnovisTextOptions = {\n verticalAlign: config.type === AxisType.X ? VerticalAlign.Top : VerticalAlign.Middle,\n width: textMaxWidth,\n }\n renderTextToSvgTextElement(textElement, textBlock, textOptions)\n }\n })\n\n selection\n .classed(s.axis, true)\n .classed(s.hideTickLine, !config.tickLine)\n .classed(s.hideDomain, !config.domainLine)\n\n if (config.fullSize) {\n const path = this._getFullDomainPath(0)\n smartTransition(selection.select('.domain'), duration).attr('d', path)\n }\n }\n\n _getNumTicks (): number {\n const { config: { type, numTicks } } = this\n\n if (numTicks) return numTicks\n\n if (type === AxisType.X) {\n const xRange = this.xScale.range() as [number, number]\n const width = xRange[1] - xRange[0]\n return Math.floor(width / 175)\n }\n\n if (type === AxisType.Y) {\n const yRange = this.yScale.range() as [number, number]\n const height = Math.abs(yRange[0] - yRange[1])\n return Math.pow(height, 0.85) / 25\n }\n\n return this._defaultNumTicks\n }\n\n _getConfiguredTickValues (): number[] | null {\n const { config: { tickValues, type, minMaxTicksOnly } } = this\n const scale = type === AxisType.X ? this.xScale : this.yScale\n const scaleDomain = scale?.domain()\n\n if (tickValues) {\n return tickValues.filter(v => (v >= scaleDomain[0]) && (v <= scaleDomain[1]))\n }\n\n if (minMaxTicksOnly || (type === AxisType.X && this._width < this._minMaxTicksOnlyEnforceWidth)) {\n return scaleDomain as number[]\n }\n\n return null\n }\n\n _getFullDomainPath (tickSize = 0): string {\n const { config: { type } } = this\n switch (type) {\n case AxisType.X: return `M0.5, ${tickSize} V0.5 H${this._width + 0.5} V${tickSize}`\n case AxisType.Y: return `M${-tickSize}, ${this._height + 0.5} H0.5 V0.5 H${-tickSize}`\n }\n }\n\n _renderAxisLabel (selection = this.axisGroup): void {\n const { type, label, labelMargin, labelFontSize } = this.config\n\n // Remove the old label first to calculate the axis size properly\n selection.selectAll(`.${s.label}`).remove()\n\n // Calculate label position and rotation\n const axisPosition = this.getPosition()\n // We always use this.axisRenderHelperGroup to calculate the size of the axis because\n // this.axisGroup will give us incorrect values due to animation\n const { width: axisWidth, height: axisHeight } = this._axisRawBBox ?? selection.node().getBBox()\n\n const offsetX = type === AxisType.X ? this._width / 2 : (-1) ** (+(axisPosition === Position.Left)) * axisWidth\n const offsetY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * axisHeight : this._height / 2\n\n const marginX = type === AxisType.X ? 0 : (-1) ** (+(axisPosition === Position.Left)) * labelMargin\n const marginY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * labelMargin : 0\n\n const rotation = type === AxisType.Y ? -90 : 0\n\n // Append new label\n selection\n .append('text')\n .attr('class', s.label)\n .text(label)\n .style('font-size', labelFontSize)\n .attr('dy', `${this._getLabelDY()}em`)\n .attr('transform', `translate(${offsetX + marginX},${offsetY + marginY}) rotate(${rotation})`)\n }\n\n _getLabelDY (): number {\n const { type, position } = this.config\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return 0\n case Position.Bottom: default: return 0.75\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return 0.75\n case Position.Left: default: return -0.25\n }\n }\n }\n\n _alignTickLabels (): void {\n const { config: { type, tickTextAlign, position } } = this\n\n const tickText = this.g.selectAll('g.tick > text')\n const textAnchor = this._getTickTextAnchor(tickTextAlign)\n const translateX = type === AxisType.X ? 0 : this._getYTickTextTranslate(tickTextAlign, position)\n\n tickText\n .attr('text-anchor', textAnchor)\n .attr('transform', `translate(${translateX},0)`)\n }\n\n _getTickTextAnchor (textAlign: TextAlign): string {\n switch (textAlign) {\n case TextAlign.Left: return 'start'\n case TextAlign.Right: return 'end'\n case TextAlign.Center: return 'middle'\n default: return null\n }\n }\n\n _getYTickTextTranslate (textAlign: TextAlign, axisPosition: Position = Position.Left): number {\n const defaultTickTextSpacingPx = 9 // Default in D3\n const width = this._axisRawBBox.width - defaultTickTextSpacingPx\n\n switch (textAlign) {\n case TextAlign.Left: return axisPosition === Position.Left ? width * -1 : 0\n case TextAlign.Right: return axisPosition === Position.Left ? 0 : width\n case TextAlign.Center: return axisPosition === Position.Left ? width * (-0.5) : width * 0.5\n default: return 0\n }\n }\n}\n"],"names":["s.grid","s.tick","s.axis","s.hideTickLine","s.hideDomain","label","s.label","s"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/axis/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { Axis as D3Axis, axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Types\nimport { Position } from 'types/position'\nimport { ContinuousScale } from 'types/scale'\nimport { Spacing } from 'types/spacing'\nimport { FitMode, TextAlign, UnovisText, UnovisTextOptions, VerticalAlign } from 'types/text'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { renderTextToSvgTextElement, trimSVGText } from 'utils/text'\nimport { isEqual } from 'utils/data'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisConfig, AxisConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Axis<Datum> extends XYComponentCore<Datum, AxisConfig<Datum>, AxisConfigInterface<Datum>> {\n static selectors = s\n config: AxisConfig<Datum> = new AxisConfig<Datum>()\n axisGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n gridGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n\n private _axisRawBBox: DOMRect\n private _axisSizeBBox: SVGRect\n private _requiredMargin: Spacing\n private _defaultNumTicks = 3\n private _minMaxTicksOnlyEnforceWidth = 250\n\n events = {}\n\n constructor (config?: AxisConfigInterface<Datum>) {\n super()\n if (config) this.config.init(config)\n\n this.axisGroup = this.g.append('g')\n this.gridGroup = this.g.append('g')\n .attr('class', s.grid)\n }\n\n /** Renders axis to an invisible grouped to calculate automatic chart margins */\n preRender (): void {\n const { config } = this\n const axisRenderHelperGroup = this.g.append('g').attr('opacity', 0)\n\n this._renderAxis(axisRenderHelperGroup, 0)\n\n // Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)\n this._axisRawBBox = axisRenderHelperGroup.node().getBBox()\n\n // Align tick text\n if (config.tickTextAlign) this._alignTickLabels()\n\n // Render label and store total axis size and required margins\n this._renderAxisLabel(axisRenderHelperGroup)\n this._axisSizeBBox = this._getAxisSize(axisRenderHelperGroup)\n this._requiredMargin = this._getRequiredMargin(this._axisSizeBBox)\n\n axisRenderHelperGroup.remove()\n }\n\n getPosition (): Position {\n const { config: { type, position } } = this\n return (position ?? ((type === AxisType.X) ? Position.Bottom : Position.Left)) as Position\n }\n\n _getAxisSize (selection: Selection<SVGGElement, unknown, SVGGElement, undefined>): SVGRect {\n const bBox = selection.node().getBBox()\n return bBox\n }\n\n _getRequiredMargin (axisSize = this._axisSizeBBox): Spacing {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X: {\n const tolerancePx = 1\n const xEnd = this._axisSizeBBox.x + this._axisSizeBBox.width\n\n const left = this._axisSizeBBox.x < 0 ? Math.abs(this._axisSizeBBox.x) : 0\n const right = (xEnd - this._width) > tolerancePx ? xEnd - this._width : 0\n\n switch (position) {\n case Position.Top: return { top: axisSize.height, left, right }\n case Position.Bottom: default: return { bottom: axisSize.height, left, right }\n }\n }\n case AxisType.Y: {\n const bleedY = axisSize.height > this._height ? (axisSize.height - this._height) / 2 : 0\n const top = bleedY\n const bottom = bleedY\n\n switch (position) {\n case Position.Right: return { right: axisSize.width, top, bottom }\n case Position.Left: default: return { left: axisSize.width, top, bottom }\n }\n }\n }\n }\n\n getRequiredMargin (): Spacing {\n return this._requiredMargin\n }\n\n /** Calculates axis transform:translate offset based on passed container margins */\n getOffset (containerMargin: Spacing): {left: number; top: number} {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return { top: containerMargin.top, left: containerMargin.left }\n case Position.Bottom: default: return { top: containerMargin.top + this._height, left: containerMargin.left }\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return { top: containerMargin.top, left: containerMargin.left + this._width }\n case Position.Left: default: return { top: containerMargin.top, left: containerMargin.left }\n }\n }\n }\n\n _render (duration = this.config.duration, selection = this.axisGroup): void {\n const { config } = this\n\n this._renderAxis(selection, duration)\n this._renderAxisLabel(selection)\n\n if (config.gridLine) {\n const gridGen = this._buildGrid().tickFormat(() => '')\n gridGen.tickValues(this._getConfiguredTickValues())\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n this.gridGroup.selectAll('*').interrupt()\n smartTransition(this.gridGroup, duration).call(gridGen).style('opacity', 1)\n } else {\n smartTransition(this.gridGroup, duration).style('opacity', 0)\n }\n\n if (config.tickTextAlign) this._alignTickLabels()\n }\n\n _buildAxis (): D3Axis<any> {\n const { config: { type, position, tickPadding } } = this\n\n const ticks = this._getNumTicks()\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return axisTop(this.xScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Bottom: default: return axisBottom(this.xScale).ticks(ticks).tickPadding(tickPadding)\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return axisRight(this.yScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Left: default: return axisLeft(this.yScale).ticks(ticks).tickPadding(tickPadding)\n }\n }\n }\n\n _buildGrid (): D3Axis<any> {\n const { config: { type, position } } = this\n\n const ticks = this._getNumTicks()\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return axisTop(this.xScale).ticks(ticks * 2).tickSize(-this._height).tickSizeOuter(0)\n case Position.Bottom: default: return axisBottom(this.xScale).ticks(ticks * 2).tickSize(-this._height).tickSizeOuter(0)\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return axisRight(this.yScale).ticks(ticks * 2).tickSize(-this._width).tickSizeOuter(0)\n case Position.Left: default: return axisLeft(this.yScale).ticks(ticks * 2).tickSize(-this._width).tickSizeOuter(0)\n }\n }\n }\n\n _renderAxis (selection = this.axisGroup, duration = this.config.duration): void {\n const { config } = this\n\n const axisGen = this._buildAxis()\n const tickValues: (number | Date)[] = this._getConfiguredTickValues() || axisGen.scale<ContinuousScale>().ticks(this._getNumTicks())\n axisGen.tickValues(tickValues)\n\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n selection.selectAll('*').interrupt()\n smartTransition(selection, duration).call(axisGen)\n\n const ticks = selection.selectAll<SVGGElement, number | Date>('g.tick')\n\n ticks\n .classed(s.tick, true)\n .style('font-size', config.tickTextFontSize)\n\n // Selecting the <text> elements of the ticks to apply formatting. By default, this selection\n // will include exiting elements, so we're filtering them out.\n const tickText = selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => tickValues.some(t => isEqual(tickValue, t))) // We use isEqual to compare Dates\n\n // We interrupt the transition on tick's <text> to make it 'wrappable'\n tickText.nodes().forEach(node => interrupt(node))\n\n tickText.each((value, i, elements) => {\n const text = config.tickFormat?.(value, i, tickValues) ?? `${value}`\n const textElement = elements[i]\n const textMaxWidth = config.tickTextWidth || (config.type === AxisType.X ? this._containerWidth / (ticks.size() + 1) : this._containerWidth / 5)\n const styleDeclaration = getComputedStyle(textElement)\n const fontSize = Number.parseFloat(styleDeclaration.fontSize)\n const fontFamily = styleDeclaration.fontFamily\n\n if (config.tickTextFitMode === FitMode.Trim) {\n const textElementSelection = select<SVGTextElement, string>(textElement).text(text)\n trimSVGText(textElementSelection, textMaxWidth, config.tickTextTrimType, true, fontSize, 0.58)\n } else {\n const textBlock: UnovisText = { text, fontFamily, fontSize }\n const textOptions: UnovisTextOptions = {\n verticalAlign: config.type === AxisType.X ? VerticalAlign.Top : VerticalAlign.Middle,\n width: textMaxWidth,\n }\n renderTextToSvgTextElement(textElement, textBlock, textOptions)\n }\n })\n\n selection\n .classed(s.axis, true)\n .classed(s.hideTickLine, !config.tickLine)\n .classed(s.hideDomain, !config.domainLine)\n\n if (config.fullSize) {\n const path = this._getFullDomainPath(0)\n smartTransition(selection.select('.domain'), duration).attr('d', path)\n }\n }\n\n _getNumTicks (): number {\n const { config: { type, numTicks } } = this\n\n if (numTicks) return numTicks\n\n if (type === AxisType.X) {\n const xRange = this.xScale.range() as [number, number]\n const width = xRange[1] - xRange[0]\n return Math.floor(width / 175)\n }\n\n if (type === AxisType.Y) {\n const yRange = this.yScale.range() as [number, number]\n const height = Math.abs(yRange[0] - yRange[1])\n return Math.pow(height, 0.85) / 25\n }\n\n return this._defaultNumTicks\n }\n\n _getConfiguredTickValues (): number[] | null {\n const { config: { tickValues, type, minMaxTicksOnly } } = this\n const scale = type === AxisType.X ? this.xScale : this.yScale\n const scaleDomain = scale?.domain()\n\n if (tickValues) {\n return tickValues.filter(v => (v >= scaleDomain[0]) && (v <= scaleDomain[1]))\n }\n\n if (minMaxTicksOnly || (type === AxisType.X && this._width < this._minMaxTicksOnlyEnforceWidth)) {\n return scaleDomain as number[]\n }\n\n return null\n }\n\n _getFullDomainPath (tickSize = 0): string {\n const { config: { type } } = this\n switch (type) {\n case AxisType.X: return `M0.5, ${tickSize} V0.5 H${this._width + 0.5} V${tickSize}`\n case AxisType.Y: return `M${-tickSize}, ${this._height + 0.5} H0.5 V0.5 H${-tickSize}`\n }\n }\n\n _renderAxisLabel (selection = this.axisGroup): void {\n const { type, label, labelMargin, labelFontSize } = this.config\n\n // Remove the old label first to calculate the axis size properly\n selection.selectAll(`.${s.label}`).remove()\n\n // Calculate label position and rotation\n const axisPosition = this.getPosition()\n // We always use this.axisRenderHelperGroup to calculate the size of the axis because\n // this.axisGroup will give us incorrect values due to animation\n const { width: axisWidth, height: axisHeight } = this._axisRawBBox ?? selection.node().getBBox()\n\n const offsetX = type === AxisType.X ? this._width / 2 : (-1) ** (+(axisPosition === Position.Left)) * axisWidth\n const offsetY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * axisHeight : this._height / 2\n\n const marginX = type === AxisType.X ? 0 : (-1) ** (+(axisPosition === Position.Left)) * labelMargin\n const marginY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * labelMargin : 0\n\n const rotation = type === AxisType.Y ? -90 : 0\n\n // Append new label\n selection\n .append('text')\n .attr('class', s.label)\n .text(label)\n .style('font-size', labelFontSize)\n .attr('dy', `${this._getLabelDY()}em`)\n .attr('transform', `translate(${offsetX + marginX},${offsetY + marginY}) rotate(${rotation})`)\n }\n\n _getLabelDY (): number {\n const { type, position } = this.config\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return 0\n case Position.Bottom: default: return 0.75\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return 0.75\n case Position.Left: default: return -0.25\n }\n }\n }\n\n _alignTickLabels (): void {\n const { config: { type, tickTextAlign, position } } = this\n\n const tickText = this.g.selectAll('g.tick > text')\n const textAnchor = this._getTickTextAnchor(tickTextAlign)\n const translateX = type === AxisType.X ? 0 : this._getYTickTextTranslate(tickTextAlign, position)\n\n tickText\n .attr('text-anchor', textAnchor)\n .attr('transform', `translate(${translateX},0)`)\n }\n\n _getTickTextAnchor (textAlign: TextAlign): string {\n switch (textAlign) {\n case TextAlign.Left: return 'start'\n case TextAlign.Right: return 'end'\n case TextAlign.Center: return 'middle'\n default: return null\n }\n }\n\n _getYTickTextTranslate (textAlign: TextAlign, axisPosition: Position = Position.Left): number {\n const defaultTickTextSpacingPx = 9 // Default in D3\n const width = this._axisRawBBox.width - defaultTickTextSpacingPx\n\n switch (textAlign) {\n case TextAlign.Left: return axisPosition === Position.Left ? width * -1 : 0\n case TextAlign.Right: return axisPosition === Position.Left ? 0 : width\n case TextAlign.Center: return axisPosition === Position.Left ? width * (-0.5) : width * 0.5\n default: return 0\n }\n }\n}\n"],"names":["s.grid","s.tick","s.axis","s.hideTickLine","s.hideDomain","label","s.label","s"],"mappings":"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"}
@@ -95,6 +95,11 @@ export declare class LeafletMap<Datum extends GenericDataRecord> extends Compone
95
95
  selectPointById(id: string, centerView?: boolean): void;
96
96
  getSelectedPointId(): string | number | undefined;
97
97
  unselectPoint(): void;
98
+ /** Get the currently expanded cluster */
99
+ getExpandedCluster(): {
100
+ id: string;
101
+ points: Datum[];
102
+ };
98
103
  zoomToPointById(id: string, selectPoint?: boolean, customZoomLevel?: number): void;
99
104
  getNodeRelativePosition(node: LeafletMapPoint<Datum>): {
100
105
  x: number;
@@ -303,6 +303,15 @@ class LeafletMap extends ComponentCore {
303
303
  this._externallySelectedPoint = null;
304
304
  this.render();
305
305
  }
306
+ /** Get the currently expanded cluster */
307
+ getExpandedCluster() {
308
+ var _a, _b;
309
+ if (!this._expandedCluster)
310
+ return;
311
+ const id = (_a = this._expandedCluster.cluster) === null || _a === void 0 ? void 0 : _a.id;
312
+ const points = (_b = this._expandedCluster.cluster) === null || _b === void 0 ? void 0 : _b.clusterPoints.map(d => this.datamodel.data[d._index]);
313
+ return { id, points };
314
+ }
306
315
  /* Zoom to a point by id and optionally select it.
307
316
  * If the point is inside a cluster, it'll be automatically expanded to show the enclosed point.
308
317
  * You can also force set the zoom level by providing the `customZoomLevel` argument.
@@ -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 { ResizeObserver } from '@juggle/resize-observer'\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 { clamp, isNil, getNumber, getString, isString } from 'utils/data'\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 MapZoomState,\n PointExpandedClusterProperties,\n} from './types'\n\n// Config\nimport { LeafletMapConfig, 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[], LeafletMapConfig<Datum>, LeafletMapConfigInterface<Datum>> {\n static selectors = s\n static cssVariables = s.variables\n type = ComponentType.HTML\n element: HTMLElement\n config: LeafletMapConfig<Datum> = new LeafletMapConfig()\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: { points: PointFeature<PointExpandedClusterProperties<Datum>>[]; cluster: LeafletMapPoint<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 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)\n\n this._container.appendChild(this.element)\n this.g.attr('class', s.root)\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 (document.body.classList.contains('theme-dark') && 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 = (change.target as HTMLElement).classList.contains('theme-dark')\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 }\n }\n\n setConfig (config: LeafletMapConfigInterface<Datum>): void {\n this.config = new LeafletMapConfig<Datum>().init(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\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 /* 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 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'\nimport { ResizeObserver } from '@juggle/resize-observer'\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 { clamp, isNil, getNumber, getString, isString } from 'utils/data'\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 MapZoomState,\n PointExpandedClusterProperties,\n} from './types'\n\n// Config\nimport { LeafletMapConfig, 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[], LeafletMapConfig<Datum>, LeafletMapConfigInterface<Datum>> {\n static selectors = s\n static cssVariables = s.variables\n type = ComponentType.HTML\n element: HTMLElement\n config: LeafletMapConfig<Datum> = new LeafletMapConfig()\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: { points: PointFeature<PointExpandedClusterProperties<Datum>>[]; cluster: LeafletMapPoint<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 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)\n\n this._container.appendChild(this.element)\n this.g.attr('class', s.root)\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 (document.body.classList.contains('theme-dark') && 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 = (change.target as HTMLElement).classList.contains('theme-dark')\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 }\n }\n\n setConfig (config: LeafletMapConfigInterface<Datum>): void {\n this.config = new LeafletMapConfig<Datum>().init(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\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[] } {\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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"}
@@ -26,7 +26,7 @@ export declare function getPointPos<D extends GenericDataRecord>(point: LeafletM
26
26
  y: number;
27
27
  };
28
28
  export declare function getPointDisplayOrder<D extends GenericDataRecord>(d: LeafletMapPoint<D>, pointStatus: StringAccessor<LeafletMapPointDatum<D> | LeafletMapClusterDatum<D>>, colorMap: LeafletMapPointStyles<D>): number;
29
- export declare function toGeoJSONPoint<D extends GenericDataRecord>(d: D, pointLatitude: NumericAccessor<D>, pointLongitude: NumericAccessor<D>): PointFeature<D>;
29
+ export declare function toGeoJSONPoint<D extends GenericDataRecord>(d: D, i: number, pointLatitude: NumericAccessor<D>, pointLongitude: NumericAccessor<D>): PointFeature<D>;
30
30
  export declare function calculateClusterIndex<D extends GenericDataRecord>(data: D[], config: LeafletMapConfig<D>, maxClusterZoomLevel?: number): Supercluster<D>;
31
31
  export declare function getNodePathData({ x, y }: {
32
32
  x: number;
@@ -64,12 +64,12 @@ function getPointDisplayOrder(d, pointStatus, colorMap) {
64
64
  const statusList = Object.keys(colorMap);
65
65
  return Object.keys(statusList).indexOf(status);
66
66
  }
67
- function toGeoJSONPoint(d, pointLatitude, pointLongitude) {
67
+ function toGeoJSONPoint(d, i, pointLatitude, pointLongitude) {
68
68
  const lat = getNumber(d, pointLatitude);
69
69
  const lon = getNumber(d, pointLongitude);
70
70
  return {
71
71
  type: 'Feature',
72
- properties: Object.assign({}, d),
72
+ properties: Object.assign(Object.assign({}, d), { _index: i }),
73
73
  geometry: {
74
74
  type: 'Point',
75
75
  coordinates: [lon, lat],
@@ -97,7 +97,7 @@ function calculateClusterIndex(data, config, maxClusterZoomLevel = 23) {
97
97
  acc[key] += clusterPoint[key];
98
98
  }
99
99
  },
100
- }).load(data.map(d => toGeoJSONPoint(d, pointLatitude, pointLongitude)));
100
+ }).load(data.map((d, i) => toGeoJSONPoint(d, i, pointLatitude, pointLongitude)));
101
101
  }
102
102
  function getNodePathData({ x, y }, radius, shape) {
103
103
  switch (shape) {