@unovis/ts 1.1.0 → 1.1.1-beta.1

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.
@@ -158,16 +158,19 @@ class Axis extends XYComponentCore {
158
158
  const axisGen = this._buildAxis();
159
159
  axisGen.tickValues(this._getConfiguredTickValues());
160
160
  // Interrupting all active transitions first to prevent them from being stuck.
161
- // Somehow we see it happening in in Angular apps.
161
+ // Somehow we see it happening in Angular apps.
162
162
  selection.selectAll('*').interrupt();
163
163
  smartTransition(selection, duration).call(axisGen);
164
164
  const ticks = selection.selectAll('g.tick');
165
- const tickValues = ticks.data();
166
165
  ticks
167
166
  .classed(tick, true)
168
167
  .style('font-size', config.tickTextFontSize);
169
- // We interrupt transition on tick Text to make it 'wrappable'
170
- const tickText = selection.selectAll('g.tick > text');
168
+ // Selecting the <text> elements of the ticks to apply formatting. By default, this selection
169
+ // will include exiting elements, so we're filtering them out.
170
+ const tickValues = axisGen.scale().ticks(this._getNumTicks());
171
+ const tickText = selection.selectAll('g.tick > text')
172
+ .filter(tickValue => tickValues.includes(tickValue));
173
+ // We interrupt the transition on tick's <text> to make it 'wrappable'
171
174
  tickText.nodes().forEach(node => interrupt(node));
172
175
  tickText.text((value, i) => { var _a, _b; return (_b = (_a = config.tickFormat) === null || _a === void 0 ? void 0 : _a.call(config, value, i, tickValues)) !== null && _b !== void 0 ? _b : value; });
173
176
  tickText
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/axis/index.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { axisLeft, axisTop, axisRight, axisBottom, Axis as D3Axis } 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 { TextAlign } from 'types/text'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisConfig, AxisConfigInterface } from './config'\n\n// Modules\nimport { wrapTickText, getWrapOptions } from './modules/tick'\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 [Axis.selectors.tick]: {\n mouseover: this._onTickMouseOver.bind(this),\n mouseout: this._onTickMouseOut.bind(this),\n },\n }\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 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 in Angular apps.\n selection.selectAll('*').interrupt()\n smartTransition(selection, duration).call(axisGen)\n\n const ticks = selection.selectAll<SVGGElement, unknown>('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, unknown>('g.tick > text')\n tickText.nodes().forEach(node => interrupt(node))\n tickText.text((value, i) => config.tickFormat?.(value, i, tickValues) ?? value)\n tickText\n .call(wrapTickText, getWrapOptions(ticks, config, this._width))\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\n _onTickMouseOver (d: any, event: MouseEvent): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n _onTickMouseOut (d: any, event: MouseEvent): void {\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 { Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { axisLeft, axisTop, axisRight, axisBottom, Axis as D3Axis } 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 { TextAlign } from 'types/text'\nimport { ContinuousScale } from 'types/scale'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisConfig, AxisConfigInterface } from './config'\n\n// Modules\nimport { wrapTickText, getWrapOptions } from './modules/tick'\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 [Axis.selectors.tick]: {\n mouseover: this._onTickMouseOver.bind(this),\n mouseout: this._onTickMouseOut.bind(this),\n },\n }\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 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\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 tickValues: (number | Date)[] = axisGen.scale<ContinuousScale>().ticks(this._getNumTicks())\n const tickText = selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => tickValues.includes(tickValue))\n\n // We interrupt the transition on tick's <text> to make it 'wrappable'\n tickText.nodes().forEach(node => interrupt(node))\n tickText.text((value, i) => config.tickFormat?.(value, i, tickValues) ?? value)\n tickText\n .call(wrapTickText, getWrapOptions(ticks, config, this._width))\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\n _onTickMouseOver (d: any, event: MouseEvent): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n _onTickMouseOut (d: any, event: MouseEvent): void {\n }\n}\n"],"names":["s.grid","s.tick","s.axis","s.hideTickLine","s.hideDomain","label","s.label","s"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Selection } from 'd3-selection';
2
2
  import { WrapTextOptions } from "../../../types/text";
3
3
  import { AxisConfig } from '../config';
4
- export declare function wrapTickText(selection: Selection<SVGTextElement, unknown, SVGGElement, unknown>, wrapOptions: WrapTextOptions): void;
5
- export declare function getWrapOptions<Datum>(ticks: Selection<SVGGElement, unknown, SVGGElement, unknown>, config: AxisConfig<Datum>, width: number): WrapTextOptions;
4
+ export declare function wrapTickText(selection: Selection<SVGTextElement, number | Date, SVGGElement, unknown>, wrapOptions: WrapTextOptions): void;
5
+ export declare function getWrapOptions<Datum>(ticks: Selection<SVGGElement, number | Date, SVGGElement, unknown>, config: AxisConfig<Datum>, width: number): WrapTextOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"tick.js","sources":["../../../../src/components/axis/modules/tick.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { wrapTextElement } from 'utils/text'\n\n// Types\nimport { Position } from 'types/position'\nimport { VerticalAlign, FitMode, WrapTextOptions, WrapMode } from 'types/text'\n\n// Config\nimport { AxisConfig } from '../config'\n\n// Local Types\nimport { AxisType } from '../types'\n\nimport * as s from '../style'\n\nexport function wrapTickText (selection: Selection<SVGTextElement, unknown, SVGGElement, unknown>, wrapOptions: WrapTextOptions): void {\n selection.each((d, i, elements) => {\n const textElement = select(elements[i]) as Selection<SVGTextElement, unknown, SVGGElement, unknown>\n textElement\n .classed(s.tickText, true)\n .call(wrapTextElement, wrapOptions)\n })\n}\n\nexport function getWrapOptions<Datum> (\n ticks: Selection<SVGGElement, unknown, SVGGElement, unknown>,\n config: AxisConfig<Datum>,\n width: number\n): WrapTextOptions {\n const {\n type, position, tickTextLength, tickTextWidth, tickTextSeparator, tickTextForceWordBreak,\n tickTextTrimType, tickTextFitMode,\n } = config\n\n let wrapWidth\n if (tickTextWidth) {\n wrapWidth = tickTextWidth\n } else if (type === AxisType.X) {\n wrapWidth = width / ticks.size()\n }\n\n let verticalAlign = VerticalAlign.Middle\n if (type === AxisType.X) {\n verticalAlign = position === Position.Top ? VerticalAlign.Top : VerticalAlign.Bottom\n }\n\n const computedSize = ticks.size() ? window.getComputedStyle(ticks.node())?.fontSize : null\n return {\n width: wrapWidth,\n separator: tickTextSeparator,\n wordBreak: tickTextForceWordBreak,\n length: tickTextLength,\n trimType: tickTextTrimType,\n trimOnly: tickTextFitMode === FitMode.Trim,\n dy: type === AxisType.X ? 0.71 : 0.32,\n verticalAlign,\n fitMode: tickTextFitMode,\n wrapMode: WrapMode.DOM,\n widthToHeightRatio: 0.52,\n fontSize: computedSize ? Number.parseFloat(computedSize) : 12,\n }\n}\n"],"names":["s.tickText"],"mappings":";;;;;;;AAiBgB,SAAA,YAAY,CAAE,SAAmE,EAAE,WAA4B,EAAA;IAC7H,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAA6D,CAAA;QACnG,WAAW;AACR,aAAA,OAAO,CAACA,QAAU,EAAE,IAAI,CAAC;AACzB,aAAA,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;AACvC,KAAC,CAAC,CAAA;AACJ,CAAC;SAEe,cAAc,CAC5B,KAA4D,EAC5D,MAAyB,EACzB,KAAa,EAAA;;AAEb,IAAA,MAAM,EACJ,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,sBAAsB,EACxF,gBAAgB,EAAE,eAAe,GAClC,GAAG,MAAM,CAAA;AAEV,IAAA,IAAI,SAAS,CAAA;AACb,IAAA,IAAI,aAAa,EAAE;QACjB,SAAS,GAAG,aAAa,CAAA;AAC1B,KAAA;AAAM,SAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;AAC9B,QAAA,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;AACjC,KAAA;AAED,IAAA,IAAI,aAAa,GAAG,aAAa,CAAC,MAAM,CAAA;AACxC,IAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;AACvB,QAAA,aAAa,GAAG,QAAQ,KAAK,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,CAAA;AACrF,KAAA;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,GAAG,IAAI,CAAA;IAC1F,OAAO;AACL,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,SAAS,EAAE,sBAAsB;AACjC,QAAA,MAAM,EAAE,cAAc;AACtB,QAAA,QAAQ,EAAE,gBAAgB;AAC1B,QAAA,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI;AAC1C,QAAA,EAAE,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;QACrC,aAAa;AACb,QAAA,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACtB,QAAA,kBAAkB,EAAE,IAAI;AACxB,QAAA,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE;KAC9D,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"tick.js","sources":["../../../../src/components/axis/modules/tick.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { wrapTextElement } from 'utils/text'\n\n// Types\nimport { Position } from 'types/position'\nimport { VerticalAlign, FitMode, WrapTextOptions, WrapMode } from 'types/text'\n\n// Config\nimport { AxisConfig } from '../config'\n\n// Local Types\nimport { AxisType } from '../types'\n\nimport * as s from '../style'\n\nexport function wrapTickText (selection: Selection<SVGTextElement, number | Date, SVGGElement, unknown>, wrapOptions: WrapTextOptions): void {\n selection.each((d, i, elements) => {\n const textElement = select(elements[i]) as Selection<SVGTextElement, unknown, SVGGElement, unknown>\n textElement\n .classed(s.tickText, true)\n .call(wrapTextElement, wrapOptions)\n })\n}\n\nexport function getWrapOptions<Datum> (\n ticks: Selection<SVGGElement, number | Date, SVGGElement, unknown>,\n config: AxisConfig<Datum>,\n width: number\n): WrapTextOptions {\n const {\n type, position, tickTextLength, tickTextWidth, tickTextSeparator, tickTextForceWordBreak,\n tickTextTrimType, tickTextFitMode,\n } = config\n\n let wrapWidth\n if (tickTextWidth) {\n wrapWidth = tickTextWidth\n } else if (type === AxisType.X) {\n wrapWidth = width / ticks.size()\n }\n\n let verticalAlign = VerticalAlign.Middle\n if (type === AxisType.X) {\n verticalAlign = position === Position.Top ? VerticalAlign.Top : VerticalAlign.Bottom\n }\n\n const computedSize = ticks.size() ? window.getComputedStyle(ticks.node())?.fontSize : null\n return {\n width: wrapWidth,\n separator: tickTextSeparator,\n wordBreak: tickTextForceWordBreak,\n length: tickTextLength,\n trimType: tickTextTrimType,\n trimOnly: tickTextFitMode === FitMode.Trim,\n dy: type === AxisType.X ? 0.71 : 0.32,\n verticalAlign,\n fitMode: tickTextFitMode,\n wrapMode: WrapMode.DOM,\n widthToHeightRatio: 0.52,\n fontSize: computedSize ? Number.parseFloat(computedSize) : 12,\n }\n}\n"],"names":["s.tickText"],"mappings":";;;;;;;AAiBgB,SAAA,YAAY,CAAE,SAAyE,EAAE,WAA4B,EAAA;IACnI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAA6D,CAAA;QACnG,WAAW;AACR,aAAA,OAAO,CAACA,QAAU,EAAE,IAAI,CAAC;AACzB,aAAA,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;AACvC,KAAC,CAAC,CAAA;AACJ,CAAC;SAEe,cAAc,CAC5B,KAAkE,EAClE,MAAyB,EACzB,KAAa,EAAA;;AAEb,IAAA,MAAM,EACJ,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,sBAAsB,EACxF,gBAAgB,EAAE,eAAe,GAClC,GAAG,MAAM,CAAA;AAEV,IAAA,IAAI,SAAS,CAAA;AACb,IAAA,IAAI,aAAa,EAAE;QACjB,SAAS,GAAG,aAAa,CAAA;AAC1B,KAAA;AAAM,SAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;AAC9B,QAAA,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;AACjC,KAAA;AAED,IAAA,IAAI,aAAa,GAAG,aAAa,CAAC,MAAM,CAAA;AACxC,IAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;AACvB,QAAA,aAAa,GAAG,QAAQ,KAAK,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,CAAA;AACrF,KAAA;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,GAAG,IAAI,CAAA;IAC1F,OAAO;AACL,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,SAAS,EAAE,sBAAsB;AACjC,QAAA,MAAM,EAAE,cAAc;AACtB,QAAA,QAAQ,EAAE,gBAAgB;AAC1B,QAAA,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI;AAC1C,QAAA,EAAE,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;QACrC,aAAa;AACb,QAAA,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACtB,QAAA,kBAAkB,EAAE,IAAI;AACxB,QAAA,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE;KAC9D,CAAA;AACH;;;;"}
@@ -6,6 +6,7 @@ import { MapDataModel } from '../../data-models/map.js';
6
6
  import { ComponentType } from '../../types/component.js';
7
7
  import { isString, getNumber, isNil, getString, clamp } from '../../utils/data.js';
8
8
  import { constraintMapViewThrottled } from './renderer/mapboxgl-utils.js';
9
+ import { calculateClusterIndex, projectPoint, findPointAndClusterByPointId, getNodeRelativePosition, bBoxMerge, shouldClusterExpand, getNextZoomLevelOnClusterClick, getPointRadius, getClusterRadius, getClustersAndPoints, geoJsonPointToScreenPoint } from './modules/utils.js';
9
10
  import { LeafletMapRenderer } from './types.js';
10
11
  import { LeafletMapConfig } from './config.js';
11
12
  import * as style from './style.js';
@@ -14,7 +15,6 @@ import { setupMap, initialMapCenter, initialMapZoom, updateTopoJson } from './mo
14
15
  import { removeNodes, createNodes, updateNodes, collideLabels } from './modules/node.js';
15
16
  import { createNodeSelectionRing, updateNodeSelectionRing } from './modules/selectionRing.js';
16
17
  import { createBackgroundNode, updateBackgroundNode } from './modules/clusterBackground.js';
17
- import { calculateClusterIndex, findPointAndClusterByPointId, getNodeRelativePosition, bBoxMerge, shouldClusterExpand, getNextZoomLevelOnClusterClick, getPointRadius, getClusterRadius, getClustersAndPoints, geoJsonPointToScreenPoint } from './modules/utils.js';
18
18
 
19
19
  class LeafletMap extends ComponentCore {
20
20
  constructor(container, config, data) {
@@ -139,7 +139,7 @@ class LeafletMap extends ComponentCore {
139
139
  }
140
140
  }
141
141
  setConfig(config) {
142
- this.config.init(config);
142
+ this.config = new LeafletMapConfig().init(config);
143
143
  if (config.width)
144
144
  this._containerSelection.style('width', isString(config.width) ? config.width : `${config.width}px`);
145
145
  if (config.height)
@@ -169,6 +169,24 @@ class LeafletMap extends ComponentCore {
169
169
  datamodel.data = dataValid;
170
170
  // We use Supercluster for real-time node clustering
171
171
  this._clusterIndex = calculateClusterIndex(data, this.config);
172
+ // If there was an expanded cluster, try to find its successor and expand it too
173
+ if (this._expandedCluster && this._map.leaflet) {
174
+ const pointData = this._getPointData();
175
+ const expandedClusterCenterPx = projectPoint(this._expandedCluster.cluster, this._map.leaflet);
176
+ const expandedClusterRadiusPx = this._expandedCluster.cluster.radius;
177
+ const cluster = pointData.find((c) => {
178
+ if (!c.isCluster)
179
+ return false;
180
+ const pos = projectPoint(c, this._map.leaflet);
181
+ const r = c.radius;
182
+ const distance = Math.sqrt(Math.pow((expandedClusterCenterPx.x - pos.x), 2) + Math.pow((expandedClusterCenterPx.y - pos.y), 2));
183
+ return distance < (expandedClusterRadiusPx + r);
184
+ });
185
+ this._resetExpandedCluster();
186
+ if (cluster)
187
+ this._expandCluster(cluster, true);
188
+ }
189
+ // Render
172
190
  this._leafletInitializationPromise.then(() => {
173
191
  this.render();
174
192
  });
@@ -409,8 +427,9 @@ class LeafletMap extends ComponentCore {
409
427
  this._selectedPoint = cluster;
410
428
  }
411
429
  this._pointSelectionRing.call(updateNodeSelectionRing, this._selectedPoint, pointData, config, this._map.leaflet);
412
- // Set up events
430
+ // Set up events and attributes for the rendered points
413
431
  this._setUpComponentEventsThrottled();
432
+ this._setCustomAttributesThrottled();
414
433
  // Tooltip
415
434
  (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.update();
416
435
  }
@@ -449,7 +468,7 @@ class LeafletMap extends ComponentCore {
449
468
  }
450
469
  }
451
470
  }
452
- _expandCluster(clusterPoint) {
471
+ _expandCluster(clusterPoint, preventRender) {
453
472
  var _a;
454
473
  const { config, config: { clusterBackground } } = this;
455
474
  const padding = 1;
@@ -476,7 +495,8 @@ class LeafletMap extends ComponentCore {
476
495
  };
477
496
  if (clusterBackground)
478
497
  this._clusterBackgroundRadius = getClusterRadius(this._expandedCluster);
479
- this._renderData();
498
+ if (!preventRender)
499
+ this._renderData();
480
500
  }
481
501
  this._zoomingToExternallySelectedPoint = false;
482
502
  }
@@ -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'\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'\nimport {\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\nexport class LeafletMap<Datum extends GenericDataRecord> extends ComponentCore<Datum[], LeafletMapConfig<Datum>, LeafletMapConfigInterface<Datum>> {\n static selectors = s\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.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>(data, this.config)\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\n this._setUpComponentEventsThrottled()\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>): 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 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"],"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 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>(data, 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 const pointData = this._getPointData()\n const expandedClusterCenterPx = projectPoint(this._expandedCluster.cluster, this._map.leaflet)\n const expandedClusterRadiusPx = this._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 this._resetExpandedCluster()\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"],"mappings":"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"}
@@ -16,7 +16,7 @@ export declare function bBoxMerge(bBoxArray: ({
16
16
  height: number;
17
17
  };
18
18
  export declare const getNextZoomLevelOnClusterClick: (level: number) => number;
19
- export declare function projectPoint(geoJSONPoint: any, leafletMap: L.Map): {
19
+ export declare function projectPoint<D extends GenericDataRecord>(geoJSONPoint: LeafletMapPoint<D> | ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>>, leafletMap: L.Map): {
20
20
  x: number;
21
21
  y: number;
22
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/components/leaflet-map/modules/utils.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { min, max } from 'd3-array'\nimport Supercluster, { ClusterFeature, PointFeature } from 'supercluster'\n\n// Utils\nimport { clamp, getString, getNumber } from 'utils/data'\nimport { getColor } from 'utils/color'\nimport { polygon, circlePath } from 'utils/path'\nimport { getHTMLTransform } from 'utils/html'\n\n// Types\nimport { NumericAccessor, StringAccessor } from 'types/accessor'\nimport { GenericDataRecord } from 'types/data'\n\n// Local Types\nimport {\n LeafletMapPoint,\n LeafletMapPointShape,\n LeafletMapPieDatum,\n LeafletMapPointStyles,\n PointExpandedClusterProperties,\n LeafletMapPointDatum,\n LeafletMapClusterDatum,\n} from '../types'\n\n// Config\nimport { LeafletMapConfig } from '../config'\n\nexport function bBoxMerge (\n bBoxArray: ({x1: number; x2: number; y1: number; y2: number})[]):\n { x: number; y: number; width: number; height: number } {\n let box = { x1: 0, x2: 0, y1: 0, y2: 0 }\n bBoxArray.forEach(coords => {\n if (!box) {\n box = { ...coords }\n } else {\n if (box.x1 > coords.x1) box.x1 = coords.x1\n if (box.y1 > coords.y1) box.y1 = coords.y1\n if (box.x2 < coords.x2) box.x2 = coords.x2\n if (box.y2 < coords.y2) box.y2 = coords.y2\n }\n })\n\n return {\n x: box.x1,\n y: box.y1,\n width: box.x2 - box.x1,\n height: box.y2 - box.y1,\n }\n}\n\nexport const getNextZoomLevelOnClusterClick = (level: number): number => clamp(1 + level * 1.5, level, 12)\n\nexport function projectPoint (geoJSONPoint, leafletMap: L.Map): { x: number; y: number } {\n const lat = geoJSONPoint.geometry.coordinates[1]\n const lon = geoJSONPoint.geometry.coordinates[0]\n const projected = leafletMap.latLngToLayerPoint([lat, lon])\n return projected\n}\n\nexport function getPointRadius<D extends GenericDataRecord> (\n geoPoint: ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>> | PointFeature<PointExpandedClusterProperties<D>>,\n pointRadius: NumericAccessor<D>,\n zoomLevel: number\n): number {\n const isDynamic = !pointRadius\n const radius = isDynamic ? 1 + 2 * Math.pow(zoomLevel, 0.80) : getNumber((geoPoint.properties as LeafletMapPointDatum<D>), pointRadius)\n\n const isCluster = (geoPoint as ClusterFeature<D>).properties.cluster\n return (isCluster && isDynamic)\n ? clamp(Math.pow((geoPoint as ClusterFeature<D>).properties.point_count, 0.35) * radius, radius * 1.1, radius * 3)\n : radius\n}\n\nexport function getPointPos<D extends GenericDataRecord> (point: LeafletMapPoint<D> | ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>>, leafletMap: L.Map): { x: number; y: number } {\n const properties = point.properties as LeafletMapPointDatum<D>\n const isFromCluster = !!(properties).expandedClusterPoint\n\n if (isFromCluster) {\n const { x, y } = projectPoint(properties.expandedClusterPoint, leafletMap)\n return {\n x: x + properties.dx,\n y: y + properties.dy,\n }\n } else {\n return projectPoint(point, leafletMap)\n }\n}\n\nexport function getPointDisplayOrder<D extends GenericDataRecord> (\n d: LeafletMapPoint<D>,\n pointStatus: StringAccessor<LeafletMapPointDatum<D> | LeafletMapClusterDatum<D>>,\n colorMap: LeafletMapPointStyles<D>\n): number {\n const status = getString(d.properties, pointStatus)\n const statusList = Object.keys(colorMap)\n return Object.keys(statusList).indexOf(status)\n}\n\nexport function toGeoJSONPoint<D extends GenericDataRecord> (d: D, pointLatitude: NumericAccessor<D>, pointLongitude: NumericAccessor<D>): PointFeature<D> {\n const lat = getNumber(d, pointLatitude) as number\n const lon = getNumber(d, pointLongitude) as number\n\n return {\n type: 'Feature',\n properties: {\n ...d,\n },\n geometry: {\n type: 'Point',\n coordinates: [lon, lat],\n },\n }\n}\n\nexport function calculateClusterIndex<D extends GenericDataRecord> (data: D[], config: LeafletMapConfig<D>, maxClusterZoomLevel = 23): Supercluster<D> {\n const { colorMap, pointShape, pointLatitude, pointLongitude, clusteringDistance } = config\n return new Supercluster<D, Supercluster.AnyProps>({\n radius: clusteringDistance,\n maxZoom: maxClusterZoomLevel,\n map: (d): Supercluster.AnyProps => {\n const shape = getString(d, pointShape)\n\n const clusterPoint = { shape }\n for (const key of Object.keys(colorMap)) {\n clusterPoint[key] = d[key] || 0\n }\n\n return clusterPoint\n },\n reduce: (acc, clusterPoint): void => {\n acc.shape = acc.shape === clusterPoint.shape ? acc.shape : LeafletMapPointShape.Circle\n acc.value = (acc.value ?? 0) + (clusterPoint.value ?? 0)\n\n for (const key of Object.keys(colorMap)) {\n acc[key] += clusterPoint[key]\n }\n },\n }).load(data.map(d => toGeoJSONPoint(d, pointLatitude, pointLongitude)))\n}\n\nexport function getNodePathData ({ x, y }: { x: number; y: number }, radius: number, shape: LeafletMapPointShape): string {\n switch (shape) {\n case LeafletMapPointShape.Triangle:\n return polygon(radius * 2, 3)\n case LeafletMapPointShape.Square:\n return polygon(radius * 2, 4)\n case LeafletMapPointShape.Circle:\n case LeafletMapPointShape.Ring:\n default:\n return circlePath(x, y, radius)\n }\n}\n\nexport function getDonutData<D extends GenericDataRecord> (\n d: LeafletMapClusterDatum<D> | LeafletMapPointDatum<D>,\n colorMap: LeafletMapPointStyles<D>\n): LeafletMapPieDatum[] {\n return Object.keys(colorMap).map(key => ({\n name: key,\n value: d[key] as number,\n color: colorMap[key].color,\n className: colorMap[key].className,\n }))\n}\n\nexport function geoJsonPointToScreenPoint<D extends GenericDataRecord> (\n geoPoint: ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>>,\n i: number,\n leafletMap: L.Map,\n config: LeafletMapConfig<D>\n): LeafletMapPoint<D> {\n const zoomLevel = leafletMap.getZoom()\n const isCluster = (geoPoint.properties as LeafletMapClusterDatum<D>).cluster\n const clusterIndex = (geoPoint.properties as LeafletMapClusterDatum<D>).clusterIndex\n const clusterPoints = isCluster ? clusterIndex.getLeaves((geoPoint.properties as LeafletMapClusterDatum<D>).cluster_id as number, Infinity).map(d => d.properties) : undefined\n const { x, y } = getPointPos(geoPoint, leafletMap)\n\n const id = isCluster ? `cluster-${geoPoint.id}` : (getString(geoPoint.properties as LeafletMapPointDatum<D>, config.pointId) ?? geoPoint.geometry.coordinates.join(''))\n const pointColor = getColor(geoPoint.properties, isCluster ? config.clusterColor : config.pointColor)\n const radius = getPointRadius(geoPoint, isCluster ? config.clusterRadius : config.pointRadius, zoomLevel)\n const shape = isCluster ? LeafletMapPointShape.Circle : getString(geoPoint.properties as LeafletMapPointDatum<D>, config.pointShape) as LeafletMapPointShape\n const isRing = shape === LeafletMapPointShape.Ring\n\n const donutData = getDonutData(geoPoint.properties, config.colorMap)\n const maxValue = max(donutData, d => d.value)\n const maxValueIndex = donutData.map(d => d.value).indexOf(maxValue)\n const biggestDatum = donutData[maxValueIndex ?? 0]\n\n const color = isCluster ? pointColor\n : (isRing ? null : (pointColor ?? biggestDatum?.color))\n const bbox = { x1: x - radius, y1: y - radius, x2: x + radius, y2: y + radius }\n const path = getNodePathData({ x: 0, y: 0 }, radius, shape)\n const _zIndex = 0\n\n const screenPoint: LeafletMapPoint<D> = {\n ...geoPoint,\n id,\n bbox,\n radius,\n donutData,\n path,\n color,\n isCluster,\n clusterIndex,\n clusterPoints,\n _zIndex,\n }\n\n return screenPoint\n}\n\nexport function shouldClusterExpand<D extends GenericDataRecord> (\n cluster: LeafletMapPoint<D>,\n zoomLevel: number,\n midLevel = 4,\n maxLevel = 11,\n maxClusterZoomLevel = 23\n): boolean {\n if (!cluster) return false\n\n const clusterExpansionZoomLevel: number = cluster.clusterIndex.getClusterExpansionZoom(cluster.id as number)\n return clusterExpansionZoomLevel >= maxClusterZoomLevel ||\n zoomLevel >= maxLevel ||\n (zoomLevel >= midLevel && cluster && (cluster.properties as LeafletMapClusterDatum<D>).point_count < 20)\n}\n\nexport function findPointAndClusterByPointId<D extends GenericDataRecord> (\n points: LeafletMapPoint<D>[],\n id: string,\n pointId: StringAccessor<D>\n): {\n point: PointFeature<D> | undefined;\n cluster: LeafletMapPoint<D> | undefined;\n } {\n let point\n let cluster\n points.forEach(p => {\n if (p.isCluster) {\n const leaves = p.clusterIndex.getLeaves((p.properties as LeafletMapClusterDatum<D>).cluster_id as number, Infinity) ?? []\n const foundPoint = leaves.find(d => getString(d.properties, pointId) === id)\n if (foundPoint) {\n point = foundPoint\n cluster = p\n }\n }\n })\n return { point, cluster }\n}\n\nexport function getNodeRelativePosition<D extends GenericDataRecord> (d: LeafletMapPoint<D>, leafletMap: L.Map): { x: number; y: number } {\n const paneTransform = getHTMLTransform(leafletMap.getPane('mapPane'))\n const { x, y } = getPointPos(d, leafletMap)\n return { x: x + paneTransform[0], y: y + paneTransform[1] }\n}\n\nexport function getClusterRadius<D extends GenericDataRecord> (cluster: { points: PointFeature<PointExpandedClusterProperties<D>>[]; cluster: LeafletMapPoint<D> }): number {\n const { points } = cluster\n const minX = min<number>(points.map(d => d.properties.dx - d.properties.r))\n const maxX = max<number>(points.map(d => d.properties.dx + d.properties.r))\n const minY = min<number>(points.map(d => d.properties.dy - d.properties.r))\n const maxY = max<number>(points.map(d => d.properties.dy + d.properties.r))\n return Math.sqrt((maxX - minX) ** 2 + (maxY - minY) ** 2) * 0.5\n}\n\nexport function getClustersAndPoints<D extends GenericDataRecord> (\n clusterIndex: Supercluster<D>,\n leafletMap: L.Map,\n customBounds?: [number, number, number, number]\n): (ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<D>)[] {\n const leafletBounds = leafletMap.getBounds()\n const southWest = leafletBounds.getSouthWest()\n const northEast = leafletBounds.getNorthEast()\n const bounds = customBounds || [southWest.lng, southWest.lat, northEast.lng, northEast.lat]\n const zoom = Math.round(leafletMap.getZoom())\n const points = clusterIndex.getClusters(bounds, zoom) // as ClusterFeature<LeafletMapPointDatum<D>>[]\n\n for (const p of points) {\n const point = p as ClusterFeature<LeafletMapClusterDatum<D>>\n const isCluster = point.properties.cluster\n if (isCluster) {\n point.properties.clusterIndex = clusterIndex\n point.properties.clusterPoints = clusterIndex.getLeaves(point.properties.cluster_id, Infinity).map(d => d.properties)\n }\n }\n\n return points as (ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<D>)[]\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/leaflet-map/modules/utils.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { min, max } from 'd3-array'\nimport Supercluster, { ClusterFeature, PointFeature } from 'supercluster'\n\n// Utils\nimport { clamp, getString, getNumber } from 'utils/data'\nimport { getColor } from 'utils/color'\nimport { polygon, circlePath } from 'utils/path'\nimport { getHTMLTransform } from 'utils/html'\n\n// Types\nimport { NumericAccessor, StringAccessor } from 'types/accessor'\nimport { GenericDataRecord } from 'types/data'\n\n// Local Types\nimport {\n LeafletMapPoint,\n LeafletMapPointShape,\n LeafletMapPieDatum,\n LeafletMapPointStyles,\n PointExpandedClusterProperties,\n LeafletMapPointDatum,\n LeafletMapClusterDatum,\n} from '../types'\n\n// Config\nimport { LeafletMapConfig } from '../config'\n\nexport function bBoxMerge (\n bBoxArray: ({x1: number; x2: number; y1: number; y2: number})[]):\n { x: number; y: number; width: number; height: number } {\n let box = { x1: 0, x2: 0, y1: 0, y2: 0 }\n bBoxArray.forEach(coords => {\n if (!box) {\n box = { ...coords }\n } else {\n if (box.x1 > coords.x1) box.x1 = coords.x1\n if (box.y1 > coords.y1) box.y1 = coords.y1\n if (box.x2 < coords.x2) box.x2 = coords.x2\n if (box.y2 < coords.y2) box.y2 = coords.y2\n }\n })\n\n return {\n x: box.x1,\n y: box.y1,\n width: box.x2 - box.x1,\n height: box.y2 - box.y1,\n }\n}\n\nexport const getNextZoomLevelOnClusterClick = (level: number): number => clamp(1 + level * 1.5, level, 12)\n\nexport function projectPoint<D extends GenericDataRecord> (\n geoJSONPoint: LeafletMapPoint<D> | ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>>,\n leafletMap: L.Map\n): { x: number; y: number } {\n const lat = geoJSONPoint.geometry.coordinates[1]\n const lon = geoJSONPoint.geometry.coordinates[0]\n const projected = leafletMap.latLngToLayerPoint([lat, lon])\n return projected\n}\n\nexport function getPointRadius<D extends GenericDataRecord> (\n geoPoint: ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>> | PointFeature<PointExpandedClusterProperties<D>>,\n pointRadius: NumericAccessor<D>,\n zoomLevel: number\n): number {\n const isDynamic = !pointRadius\n const radius = isDynamic ? 1 + 2 * Math.pow(zoomLevel, 0.80) : getNumber((geoPoint.properties as LeafletMapPointDatum<D>), pointRadius)\n\n const isCluster = (geoPoint as ClusterFeature<D>).properties.cluster\n return (isCluster && isDynamic)\n ? clamp(Math.pow((geoPoint as ClusterFeature<D>).properties.point_count, 0.35) * radius, radius * 1.1, radius * 3)\n : radius\n}\n\nexport function getPointPos<D extends GenericDataRecord> (point: LeafletMapPoint<D> | ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>>, leafletMap: L.Map): { x: number; y: number } {\n const properties = point.properties as LeafletMapPointDatum<D>\n const isFromCluster = !!(properties).expandedClusterPoint\n\n if (isFromCluster) {\n const { x, y } = projectPoint(properties.expandedClusterPoint, leafletMap)\n return {\n x: x + properties.dx,\n y: y + properties.dy,\n }\n } else {\n return projectPoint(point, leafletMap)\n }\n}\n\nexport function getPointDisplayOrder<D extends GenericDataRecord> (\n d: LeafletMapPoint<D>,\n pointStatus: StringAccessor<LeafletMapPointDatum<D> | LeafletMapClusterDatum<D>>,\n colorMap: LeafletMapPointStyles<D>\n): number {\n const status = getString(d.properties, pointStatus)\n const statusList = Object.keys(colorMap)\n return Object.keys(statusList).indexOf(status)\n}\n\nexport function toGeoJSONPoint<D extends GenericDataRecord> (d: D, pointLatitude: NumericAccessor<D>, pointLongitude: NumericAccessor<D>): PointFeature<D> {\n const lat = getNumber(d, pointLatitude) as number\n const lon = getNumber(d, pointLongitude) as number\n\n return {\n type: 'Feature',\n properties: {\n ...d,\n },\n geometry: {\n type: 'Point',\n coordinates: [lon, lat],\n },\n }\n}\n\nexport function calculateClusterIndex<D extends GenericDataRecord> (data: D[], config: LeafletMapConfig<D>, maxClusterZoomLevel = 23): Supercluster<D> {\n const { colorMap, pointShape, pointLatitude, pointLongitude, clusteringDistance } = config\n return new Supercluster<D, Supercluster.AnyProps>({\n radius: clusteringDistance,\n maxZoom: maxClusterZoomLevel,\n map: (d): Supercluster.AnyProps => {\n const shape = getString(d, pointShape)\n\n const clusterPoint = { shape }\n for (const key of Object.keys(colorMap)) {\n clusterPoint[key] = d[key] || 0\n }\n\n return clusterPoint\n },\n reduce: (acc, clusterPoint): void => {\n acc.shape = acc.shape === clusterPoint.shape ? acc.shape : LeafletMapPointShape.Circle\n acc.value = (acc.value ?? 0) + (clusterPoint.value ?? 0)\n\n for (const key of Object.keys(colorMap)) {\n acc[key] += clusterPoint[key]\n }\n },\n }).load(data.map(d => toGeoJSONPoint(d, pointLatitude, pointLongitude)))\n}\n\nexport function getNodePathData ({ x, y }: { x: number; y: number }, radius: number, shape: LeafletMapPointShape): string {\n switch (shape) {\n case LeafletMapPointShape.Triangle:\n return polygon(radius * 2, 3)\n case LeafletMapPointShape.Square:\n return polygon(radius * 2, 4)\n case LeafletMapPointShape.Circle:\n case LeafletMapPointShape.Ring:\n default:\n return circlePath(x, y, radius)\n }\n}\n\nexport function getDonutData<D extends GenericDataRecord> (\n d: LeafletMapClusterDatum<D> | LeafletMapPointDatum<D>,\n colorMap: LeafletMapPointStyles<D>\n): LeafletMapPieDatum[] {\n return Object.keys(colorMap).map(key => ({\n name: key,\n value: d[key] as number,\n color: colorMap[key].color,\n className: colorMap[key].className,\n }))\n}\n\nexport function geoJsonPointToScreenPoint<D extends GenericDataRecord> (\n geoPoint: ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<LeafletMapPointDatum<D>>,\n i: number,\n leafletMap: L.Map,\n config: LeafletMapConfig<D>\n): LeafletMapPoint<D> {\n const zoomLevel = leafletMap.getZoom()\n const isCluster = (geoPoint.properties as LeafletMapClusterDatum<D>).cluster\n const clusterIndex = (geoPoint.properties as LeafletMapClusterDatum<D>).clusterIndex\n const clusterPoints = isCluster ? clusterIndex.getLeaves((geoPoint.properties as LeafletMapClusterDatum<D>).cluster_id as number, Infinity).map(d => d.properties) : undefined\n const { x, y } = getPointPos(geoPoint, leafletMap)\n\n const id = isCluster ? `cluster-${geoPoint.id}` : (getString(geoPoint.properties as LeafletMapPointDatum<D>, config.pointId) ?? geoPoint.geometry.coordinates.join(''))\n const pointColor = getColor(geoPoint.properties, isCluster ? config.clusterColor : config.pointColor)\n const radius = getPointRadius(geoPoint, isCluster ? config.clusterRadius : config.pointRadius, zoomLevel)\n const shape = isCluster ? LeafletMapPointShape.Circle : getString(geoPoint.properties as LeafletMapPointDatum<D>, config.pointShape) as LeafletMapPointShape\n const isRing = shape === LeafletMapPointShape.Ring\n\n const donutData = getDonutData(geoPoint.properties, config.colorMap)\n const maxValue = max(donutData, d => d.value)\n const maxValueIndex = donutData.map(d => d.value).indexOf(maxValue)\n const biggestDatum = donutData[maxValueIndex ?? 0]\n\n const color = isCluster ? pointColor\n : (isRing ? null : (pointColor ?? biggestDatum?.color))\n const bbox = { x1: x - radius, y1: y - radius, x2: x + radius, y2: y + radius }\n const path = getNodePathData({ x: 0, y: 0 }, radius, shape)\n const _zIndex = 0\n\n const screenPoint: LeafletMapPoint<D> = {\n ...geoPoint,\n id,\n bbox,\n radius,\n donutData,\n path,\n color,\n isCluster,\n clusterIndex,\n clusterPoints,\n _zIndex,\n }\n\n return screenPoint\n}\n\nexport function shouldClusterExpand<D extends GenericDataRecord> (\n cluster: LeafletMapPoint<D>,\n zoomLevel: number,\n midLevel = 4,\n maxLevel = 11,\n maxClusterZoomLevel = 23\n): boolean {\n if (!cluster) return false\n\n const clusterExpansionZoomLevel: number = cluster.clusterIndex.getClusterExpansionZoom(cluster.id as number)\n return clusterExpansionZoomLevel >= maxClusterZoomLevel ||\n zoomLevel >= maxLevel ||\n (zoomLevel >= midLevel && cluster && (cluster.properties as LeafletMapClusterDatum<D>).point_count < 20)\n}\n\nexport function findPointAndClusterByPointId<D extends GenericDataRecord> (\n points: LeafletMapPoint<D>[],\n id: string,\n pointId: StringAccessor<D>\n): {\n point: PointFeature<D> | undefined;\n cluster: LeafletMapPoint<D> | undefined;\n } {\n let point\n let cluster\n points.forEach(p => {\n if (p.isCluster) {\n const leaves = p.clusterIndex.getLeaves((p.properties as LeafletMapClusterDatum<D>).cluster_id as number, Infinity) ?? []\n const foundPoint = leaves.find(d => getString(d.properties, pointId) === id)\n if (foundPoint) {\n point = foundPoint\n cluster = p\n }\n }\n })\n return { point, cluster }\n}\n\nexport function getNodeRelativePosition<D extends GenericDataRecord> (d: LeafletMapPoint<D>, leafletMap: L.Map): { x: number; y: number } {\n const paneTransform = getHTMLTransform(leafletMap.getPane('mapPane'))\n const { x, y } = getPointPos(d, leafletMap)\n return { x: x + paneTransform[0], y: y + paneTransform[1] }\n}\n\nexport function getClusterRadius<D extends GenericDataRecord> (cluster: { points: PointFeature<PointExpandedClusterProperties<D>>[]; cluster: LeafletMapPoint<D> }): number {\n const { points } = cluster\n const minX = min<number>(points.map(d => d.properties.dx - d.properties.r))\n const maxX = max<number>(points.map(d => d.properties.dx + d.properties.r))\n const minY = min<number>(points.map(d => d.properties.dy - d.properties.r))\n const maxY = max<number>(points.map(d => d.properties.dy + d.properties.r))\n return Math.sqrt((maxX - minX) ** 2 + (maxY - minY) ** 2) * 0.5\n}\n\nexport function getClustersAndPoints<D extends GenericDataRecord> (\n clusterIndex: Supercluster<D>,\n leafletMap: L.Map,\n customBounds?: [number, number, number, number]\n): (ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<D>)[] {\n const leafletBounds = leafletMap.getBounds()\n const southWest = leafletBounds.getSouthWest()\n const northEast = leafletBounds.getNorthEast()\n const bounds = customBounds || [southWest.lng, southWest.lat, northEast.lng, northEast.lat]\n const zoom = Math.round(leafletMap.getZoom())\n const points = clusterIndex.getClusters(bounds, zoom) // as ClusterFeature<LeafletMapPointDatum<D>>[]\n\n for (const p of points) {\n const point = p as ClusterFeature<LeafletMapClusterDatum<D>>\n const isCluster = point.properties.cluster\n if (isCluster) {\n point.properties.clusterIndex = clusterIndex\n point.properties.clusterPoints = clusterIndex.getLeaves(point.properties.cluster_id, Infinity).map(d => d.properties)\n }\n }\n\n return points as (ClusterFeature<LeafletMapClusterDatum<D>> | PointFeature<D>)[]\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@unovis/ts",
3
3
  "description": "Modular data visualization framework for React, Angular, Svelte, and vanilla TypeScript or JavaScript",
4
- "version": "1.1.0",
4
+ "version": "1.1.1-beta.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/f5/unovis.git",