@unovis/ts 1.0.1-beta.5 → 1.0.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.
@@ -18,8 +18,8 @@ export declare class Axis<Datum> extends XYComponentCore<Datum, AxisConfig<Datum
18
18
  private _minMaxTicksOnlyEnforceWidth;
19
19
  events: {
20
20
  [x: string]: {
21
- mouseover: any;
22
- mouseout: any;
21
+ mouseover: (d: any, event: MouseEvent) => void;
22
+ mouseout: (d: any, event: MouseEvent) => void;
23
23
  };
24
24
  };
25
25
  constructor(config?: AxisConfigInterface<Datum>);
@@ -3,7 +3,7 @@ import { ScalePower } from 'd3-scale';
3
3
  import { ComponentCore } from "../../core/component";
4
4
  import { GraphDataModel } from "../../data-models/graph";
5
5
  import { Spacing } from "../../types/spacing";
6
- import { ChordInputNode, ChordInputLink, ChordDiagramData, ChordNode, ChordRibbonPoint } from './types';
6
+ import { ChordInputNode, ChordInputLink, ChordDiagramData, ChordNode, ChordRibbon, ChordRibbonPoint } from './types';
7
7
  import { ChordDiagramConfig, ChordDiagramConfigInterface } from './config';
8
8
  import * as s from './style';
9
9
  export declare class ChordDiagram<N extends ChordInputNode, L extends ChordInputLink> extends ComponentCore<ChordDiagramData<N, L>, ChordDiagramConfig<N, L>, ChordDiagramConfigInterface<N, L>> {
@@ -22,8 +22,11 @@ export declare class ChordDiagram<N extends ChordInputNode, L extends ChordInput
22
22
  private _hierarchyNodes;
23
23
  events: {
24
24
  [x: string]: {
25
- mouseover: any;
26
- mouseout: any;
25
+ mouseover: (d: ChordNode<N>) => void;
26
+ mouseout: () => void;
27
+ } | {
28
+ mouseover: (d: ChordRibbon<N>) => void;
29
+ mouseout: () => void;
27
30
  };
28
31
  };
29
32
  constructor(config?: ChordDiagramConfigInterface<N, L>);
@@ -56,13 +56,17 @@ export declare class Graph<N extends GraphInputNode, L extends GraphInputLink> e
56
56
  private _isDragging;
57
57
  events: {
58
58
  [x: string]: {
59
- click: any;
59
+ click: () => void;
60
60
  mouseover?: undefined;
61
61
  mouseout?: undefined;
62
62
  } | {
63
- click: any;
64
- mouseover: any;
65
- mouseout: any;
63
+ click: (d: GraphNode<N>) => void;
64
+ mouseover: (d: GraphNode<N>) => void;
65
+ mouseout: (d: GraphNode<N>) => void;
66
+ } | {
67
+ click: (d: GraphLink<N, L>) => void;
68
+ mouseover: (d: GraphLink<N, L>) => void;
69
+ mouseout: (d: GraphLink<N, L>) => void;
66
70
  };
67
71
  };
68
72
  get selectedNode(): GraphNode<N>;
@@ -16,6 +16,6 @@ export declare function getY(node: GraphNode): number;
16
16
  export declare function configuredNodeSize<T>(nodeSizeAccessor: NumericAccessor<T>): number;
17
17
  export declare function getMaxNodeSize<T>(data: T[], nodeSize: NumericAccessor<T>): number;
18
18
  export declare function getAverageNodeSize<T>(data: T[], nodeSize: NumericAccessor<T>): number;
19
- export declare function getSideLabelTextColor(label: GraphCircleLabel): string;
19
+ export declare function getSideLabelTextColor(label: GraphCircleLabel, context: SVGElement): string;
20
20
  export declare function getNodeColor<T>(d: T, colorAccessor: ColorAccessor<T>, index: number): string;
21
- export declare function getNodeIconColor<T>(d: T, colorAccessor: ColorAccessor<T>, index: number): string;
21
+ export declare function getNodeIconColor<T>(d: T, colorAccessor: ColorAccessor<T>, index: number, context: SVGElement): string;
@@ -1,9 +1,8 @@
1
1
  import { interpolate } from 'd3-interpolate';
2
2
  import { max, mean } from 'd3-array';
3
- import { color } from 'd3-color';
4
3
  import { scoreRectPath } from '../../../../utils/path.js';
5
4
  import { getNumber, getString, isEmpty, isNil } from '../../../../utils/data.js';
6
- import { hexToBrightness, getColor } from '../../../../utils/color.js';
5
+ import { getHexValue, hexToBrightness, getColor } from '../../../../utils/color.js';
7
6
  import { GraphNodeShape } from '../../types.js';
8
7
 
9
8
  const NODE_SIZE = 30;
@@ -103,10 +102,10 @@ function getMaxNodeSize(data, nodeSize) {
103
102
  function getAverageNodeSize(data, nodeSize) {
104
103
  return mean(data || [], (d, i) => getNodeSize(d, nodeSize, i)) || NODE_SIZE;
105
104
  }
106
- function getSideLabelTextColor(label) {
105
+ function getSideLabelTextColor(label, context) {
107
106
  if (!label.color)
108
107
  return null;
109
- const hex = color(label.color).hex();
108
+ const hex = getHexValue(label.color, context);
110
109
  const brightness = hexToBrightness(hex);
111
110
  return brightness > 0.65 ? 'var(--vis-graph-node-side-label-fill-color-dark)' : 'var(--vis-graph-node-side-label-fill-color-bright)';
112
111
  }
@@ -114,11 +113,11 @@ function getNodeColor(d, colorAccessor, index) {
114
113
  var _a;
115
114
  return (_a = getColor(d, colorAccessor, index, true)) !== null && _a !== void 0 ? _a : null;
116
115
  }
117
- function getNodeIconColor(d, colorAccessor, index) {
116
+ function getNodeIconColor(d, colorAccessor, index, context) {
118
117
  const nodeColor = getNodeColor(d, colorAccessor, index);
119
118
  if (!nodeColor)
120
119
  return null;
121
- const hex = color(nodeColor).hex();
120
+ const hex = getHexValue(nodeColor, context);
122
121
  const brightness = hexToBrightness(hex);
123
122
  return brightness > 0.65 ? 'var(--vis-graph-node-icon-fill-color-dark)' : 'var(--vis-graph-node-icon-fill-color-bright)';
124
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/node/helper.ts"],"sourcesContent":["import { Selection, BaseType } from 'd3-selection'\nimport { interpolate } from 'd3-interpolate'\nimport { max, mean } from 'd3-array'\nimport { Arc } from 'd3-shape'\nimport { color } from 'd3-color'\n\n// Types\nimport { ColorAccessor, NumericAccessor } from 'types/accessor'\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Utils\nimport { scoreRectPath } from 'utils/path'\nimport { isEmpty, isNil, getNumber, getString } from 'utils/data'\nimport { getColor, hexToBrightness } from 'utils/color'\n\n// Local Types\nimport { GraphNode, GraphCircleLabel, GraphNodeAnimatedElement, GraphNodeAnimationState, GraphNodeShape } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\nexport const NODE_SIZE = 30\nexport const LABEL_RECT_HORIZONTAL_PADDING = 10\nexport const LABEL_RECT_VERTICAL_PADDING = 4\n\nexport function getNodeSize<T> (d: T, nodeSizeAccessor: NumericAccessor<T>, index: number): number {\n return getNumber(d, nodeSizeAccessor, index) || NODE_SIZE\n}\n\nfunction _setInitialAnimState (el: GraphNodeAnimatedElement<SVGElement>, index: number): void {\n el._animState = {\n endAngle: 0,\n nodeIndex: index,\n }\n}\n\n// Animate the arc around node with keeping\n// the current anim state info\nexport function arcTween<N extends GraphInputNode, L extends GraphInputLink> (\n d: GraphNode<N, L>,\n config: GraphConfigInterface<N, L>,\n arcConstructor: Arc<any, GraphNodeAnimationState>,\n el: GraphNodeAnimatedElement<SVGElement>\n): (t: number) => string {\n const { nodeStrokeWidth, nodeSize, nodeGaugeValue } = config\n if (!el._animState) _setInitialAnimState(el, d._index)\n\n const i = interpolate(el._animState, {\n endAngle: 2 * Math.PI * (getNumber(d, nodeGaugeValue, d._index) ?? 0) / 100,\n nodeIndex: d._index,\n nodeSize: getNodeSize(d, nodeSize, d._index),\n borderWidth: getNumber(d, nodeStrokeWidth, d._index),\n })\n el._animState = i(0)\n\n return (t: number): string => {\n el._animState = i(t)\n return arcConstructor(el._animState)\n }\n}\n\nexport function polyTween<N extends GraphInputNode, L extends GraphInputLink> (\n d: GraphNode<N, L>,\n config: GraphConfigInterface<N, L>, polygonConstructor,\n el: GraphNodeAnimatedElement<SVGElement>\n): (t: number) => string {\n const { nodeShape, nodeGaugeValue } = config\n const nodeSize = getNodeSize(d, config.nodeSize, d._index)\n let n: number\n switch (getString(d, nodeShape, d._index)) {\n case GraphNodeShape.Square:\n n = 4\n break\n case GraphNodeShape.Triangle:\n n = 3\n break\n case GraphNodeShape.Hexagon:\n default:\n n = 6\n }\n\n if (!el._animState) _setInitialAnimState(el, d._index)\n const i = interpolate(el._animState, {\n endAngle: 2 * Math.PI * (getNumber(d, nodeGaugeValue, d._index) ?? 0) / 100,\n nodeIndex: d._index,\n })\n el._animState = i(0)\n\n return (t: number): string => {\n el._animState = i(t)\n return n === 4 ? scoreRectPath({\n x: -nodeSize / 2,\n y: -nodeSize / 2,\n w: nodeSize,\n h: nodeSize,\n r: 5,\n score: el._animState.endAngle / (2 * Math.PI),\n }) : polygonConstructor(nodeSize, n, el._animState.endAngle, true)\n }\n}\n\nexport function setLabelRect<A> (\n labelSelection: Selection<BaseType, A, SVGGElement, A>,\n label: string,\n selector: string\n): Selection<BaseType, A, SVGGElement, A> {\n // Set label background rectangle size by text size\n const labelIsEmpty = isEmpty(label)\n const labelTextSelection = labelSelection.select(`.${selector}`)\n const labelTextBBox = (labelTextSelection.node() as SVGGraphicsElement).getBBox()\n const backgroundRect = labelSelection.select('rect')\n .attr('visibility', labelIsEmpty ? 'hidden' : null)\n .attr('rx', 4)\n .attr('ry', 4)\n .attr('x', -labelTextBBox.width / 2 - LABEL_RECT_HORIZONTAL_PADDING)\n .attr('y', '-0.64em')\n .attr('width', labelTextBBox.width + 2 * LABEL_RECT_HORIZONTAL_PADDING)\n .attr('height', labelTextBBox.height + 2 * LABEL_RECT_VERTICAL_PADDING)\n .style('transform', `translateY(${-LABEL_RECT_VERTICAL_PADDING}px)`)\n\n return backgroundRect\n}\n\nexport function getX (node: GraphNode): number {\n return node._state && !isNil(node._state.fx) ? node._state.fx : node.x\n}\n\nexport function getY (node: GraphNode): number {\n return node._state && !isNil(node._state.fy) ? node._state.fy : node.y\n}\n\nexport function configuredNodeSize<T> (nodeSizeAccessor: NumericAccessor<T>): number {\n return typeof nodeSizeAccessor === 'number' ? nodeSizeAccessor : NODE_SIZE\n}\n\nexport function getMaxNodeSize<T> (data: T[], nodeSize: NumericAccessor<T>): number {\n return max(data || [], (d, i) => getNodeSize(d, nodeSize, i)) || NODE_SIZE\n}\n\nexport function getAverageNodeSize<T> (data: T[], nodeSize: NumericAccessor<T>): number {\n return mean(data || [], (d, i) => getNodeSize(d, nodeSize, i)) || NODE_SIZE\n}\n\nexport function getSideLabelTextColor (label: GraphCircleLabel): string {\n if (!label.color) return null\n\n const hex = color(label.color).hex()\n const brightness = hexToBrightness(hex)\n return brightness > 0.65 ? 'var(--vis-graph-node-side-label-fill-color-dark)' : 'var(--vis-graph-node-side-label-fill-color-bright)'\n}\n\nexport function getNodeColor<T> (d: T, colorAccessor: ColorAccessor<T>, index: number): string {\n return getColor(d, colorAccessor, index, true) ?? null\n}\n\nexport function getNodeIconColor<T> (d: T, colorAccessor: ColorAccessor<T>, index: number): string {\n const nodeColor = getNodeColor(d, colorAccessor, index)\n if (!nodeColor) return null\n\n const hex = color(nodeColor).hex()\n const brightness = hexToBrightness(hex)\n return brightness > 0.65 ? 'var(--vis-graph-node-icon-fill-color-dark)' : 'var(--vis-graph-node-icon-fill-color-bright)'\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/node/helper.ts"],"sourcesContent":["import { Selection, BaseType } from 'd3-selection'\nimport { interpolate } from 'd3-interpolate'\nimport { max, mean } from 'd3-array'\nimport { Arc } from 'd3-shape'\n\n// Types\nimport { ColorAccessor, NumericAccessor } from 'types/accessor'\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Utils\nimport { scoreRectPath } from 'utils/path'\nimport { isEmpty, isNil, getNumber, getString } from 'utils/data'\nimport { getColor, getHexValue, hexToBrightness } from 'utils/color'\n\n// Local Types\nimport { GraphNode, GraphCircleLabel, GraphNodeAnimatedElement, GraphNodeAnimationState, GraphNodeShape } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\nexport const NODE_SIZE = 30\nexport const LABEL_RECT_HORIZONTAL_PADDING = 10\nexport const LABEL_RECT_VERTICAL_PADDING = 4\n\nexport function getNodeSize<T> (d: T, nodeSizeAccessor: NumericAccessor<T>, index: number): number {\n return getNumber(d, nodeSizeAccessor, index) || NODE_SIZE\n}\n\nfunction _setInitialAnimState (el: GraphNodeAnimatedElement<SVGElement>, index: number): void {\n el._animState = {\n endAngle: 0,\n nodeIndex: index,\n }\n}\n\n// Animate the arc around node with keeping\n// the current anim state info\nexport function arcTween<N extends GraphInputNode, L extends GraphInputLink> (\n d: GraphNode<N, L>,\n config: GraphConfigInterface<N, L>,\n arcConstructor: Arc<any, GraphNodeAnimationState>,\n el: GraphNodeAnimatedElement<SVGElement>\n): (t: number) => string {\n const { nodeStrokeWidth, nodeSize, nodeGaugeValue } = config\n if (!el._animState) _setInitialAnimState(el, d._index)\n\n const i = interpolate(el._animState, {\n endAngle: 2 * Math.PI * (getNumber(d, nodeGaugeValue, d._index) ?? 0) / 100,\n nodeIndex: d._index,\n nodeSize: getNodeSize(d, nodeSize, d._index),\n borderWidth: getNumber(d, nodeStrokeWidth, d._index),\n })\n el._animState = i(0)\n\n return (t: number): string => {\n el._animState = i(t)\n return arcConstructor(el._animState)\n }\n}\n\nexport function polyTween<N extends GraphInputNode, L extends GraphInputLink> (\n d: GraphNode<N, L>,\n config: GraphConfigInterface<N, L>, polygonConstructor,\n el: GraphNodeAnimatedElement<SVGElement>\n): (t: number) => string {\n const { nodeShape, nodeGaugeValue } = config\n const nodeSize = getNodeSize(d, config.nodeSize, d._index)\n let n: number\n switch (getString(d, nodeShape, d._index)) {\n case GraphNodeShape.Square:\n n = 4\n break\n case GraphNodeShape.Triangle:\n n = 3\n break\n case GraphNodeShape.Hexagon:\n default:\n n = 6\n }\n\n if (!el._animState) _setInitialAnimState(el, d._index)\n const i = interpolate(el._animState, {\n endAngle: 2 * Math.PI * (getNumber(d, nodeGaugeValue, d._index) ?? 0) / 100,\n nodeIndex: d._index,\n })\n el._animState = i(0)\n\n return (t: number): string => {\n el._animState = i(t)\n return n === 4 ? scoreRectPath({\n x: -nodeSize / 2,\n y: -nodeSize / 2,\n w: nodeSize,\n h: nodeSize,\n r: 5,\n score: el._animState.endAngle / (2 * Math.PI),\n }) : polygonConstructor(nodeSize, n, el._animState.endAngle, true)\n }\n}\n\nexport function setLabelRect<A> (\n labelSelection: Selection<BaseType, A, SVGGElement, A>,\n label: string,\n selector: string\n): Selection<BaseType, A, SVGGElement, A> {\n // Set label background rectangle size by text size\n const labelIsEmpty = isEmpty(label)\n const labelTextSelection = labelSelection.select(`.${selector}`)\n const labelTextBBox = (labelTextSelection.node() as SVGGraphicsElement).getBBox()\n const backgroundRect = labelSelection.select('rect')\n .attr('visibility', labelIsEmpty ? 'hidden' : null)\n .attr('rx', 4)\n .attr('ry', 4)\n .attr('x', -labelTextBBox.width / 2 - LABEL_RECT_HORIZONTAL_PADDING)\n .attr('y', '-0.64em')\n .attr('width', labelTextBBox.width + 2 * LABEL_RECT_HORIZONTAL_PADDING)\n .attr('height', labelTextBBox.height + 2 * LABEL_RECT_VERTICAL_PADDING)\n .style('transform', `translateY(${-LABEL_RECT_VERTICAL_PADDING}px)`)\n\n return backgroundRect\n}\n\nexport function getX (node: GraphNode): number {\n return node._state && !isNil(node._state.fx) ? node._state.fx : node.x\n}\n\nexport function getY (node: GraphNode): number {\n return node._state && !isNil(node._state.fy) ? node._state.fy : node.y\n}\n\nexport function configuredNodeSize<T> (nodeSizeAccessor: NumericAccessor<T>): number {\n return typeof nodeSizeAccessor === 'number' ? nodeSizeAccessor : NODE_SIZE\n}\n\nexport function getMaxNodeSize<T> (data: T[], nodeSize: NumericAccessor<T>): number {\n return max(data || [], (d, i) => getNodeSize(d, nodeSize, i)) || NODE_SIZE\n}\n\nexport function getAverageNodeSize<T> (data: T[], nodeSize: NumericAccessor<T>): number {\n return mean(data || [], (d, i) => getNodeSize(d, nodeSize, i)) || NODE_SIZE\n}\n\nexport function getSideLabelTextColor (label: GraphCircleLabel, context: SVGElement): string {\n if (!label.color) return null\n\n const hex = getHexValue(label.color, context)\n const brightness = hexToBrightness(hex)\n return brightness > 0.65 ? 'var(--vis-graph-node-side-label-fill-color-dark)' : 'var(--vis-graph-node-side-label-fill-color-bright)'\n}\n\nexport function getNodeColor<T> (d: T, colorAccessor: ColorAccessor<T>, index: number): string {\n return getColor(d, colorAccessor, index, true) ?? null\n}\n\nexport function getNodeIconColor<T> (d: T, colorAccessor: ColorAccessor<T>, index: number, context: SVGElement): string {\n const nodeColor = getNodeColor(d, colorAccessor, index)\n if (!nodeColor) return null\n\n const hex = getHexValue(nodeColor, context)\n const brightness = hexToBrightness(hex)\n return brightness > 0.65 ? 'var(--vis-graph-node-icon-fill-color-dark)' : 'var(--vis-graph-node-icon-fill-color-bright)'\n}\n"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ function updateSelectedNodes(selection, config) {
61
61
  const nodeSelectionOutline = group.selectAll(`.${nodeSelection}`);
62
62
  nodeSelectionOutline.classed(nodeSelectionActive, d._state.selected);
63
63
  group.selectAll(`.${sideLabel}`)
64
- .style('fill', (l) => isGreyout ? null : getSideLabelTextColor(l));
64
+ .style('fill', (l) => isGreyout ? null : getSideLabelTextColor(l, selection.node()));
65
65
  group.selectAll(`.${sideLabelBackground}`)
66
66
  .style('fill', (l) => isGreyout ? null : l.color);
67
67
  });
@@ -144,7 +144,7 @@ function updateNodes(selection, config, duration, scale = 1) {
144
144
  icon
145
145
  .style('font-size', `${(_c = getNumber(d, nodeIconSize, d._index)) !== null && _c !== void 0 ? _c : 2.5 * Math.sqrt(nodeSizeValue)}px`)
146
146
  .attr('dy', 1)
147
- .style('fill', getNodeIconColor(d, nodeFill, d._index))
147
+ .style('fill', getNodeIconColor(d, nodeFill, d._index, selection.node()))
148
148
  .html(getString(d, nodeIcon$1, d._index));
149
149
  // Side Labels
150
150
  const sideLabelsData = getValue(d, nodeSideLabels, d._index) || [];
@@ -161,7 +161,7 @@ function updateNodes(selection, config, duration, scale = 1) {
161
161
  // Side label text
162
162
  sideLabelsUpdate.select(`.${sideLabel}`).html(d => d.text)
163
163
  .attr('dy', '1px')
164
- .style('fill', l => getSideLabelTextColor(l))
164
+ .style('fill', l => getSideLabelTextColor(l, selection.node()))
165
165
  .style('font-size', l => { var _a, _b; return (_a = l.fontSize) !== null && _a !== void 0 ? _a : `${(2 + ((_b = l.radius) !== null && _b !== void 0 ? _b : SIDE_LABEL_DEFAULT_RADIUS)) / Math.pow(l.text.toString().length, 0.3)}px`; });
166
166
  // Side label circle background
167
167
  sideLabelsUpdate.select(`.${sideLabelBackground}`)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/node/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { arc } from 'd3-shape'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Utils\nimport { trimText } from 'utils/text'\nimport { polygon } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getBoolean, getNumber, getString, getValue, throttle } from 'utils/data'\n\n// Local Types\nimport { GraphNode, GraphCircleLabel, GraphNodeAnimationState, GraphNodeAnimatedElement, GraphNodeShape } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport {\n arcTween,\n polyTween,\n setLabelRect,\n getX,\n getY,\n getSideLabelTextColor,\n getNodeColor,\n getNodeIconColor,\n getNodeSize,\n LABEL_RECT_VERTICAL_PADDING,\n} from './helper'\nimport { appendShape, updateShape, isCustomXml } from '../shape'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as nodeSelectors from './style'\n\nconst SIDE_LABEL_DEFAULT_RADIUS = 10\n\nexport function createNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>>,\n config: GraphConfig<N, L>\n): void {\n const { nodeShape } = config\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n group\n .attr('transform', (d: GraphNode<N, L>, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeEnterPosition, i)\n const scale = getNumber(d, config.nodeEnterScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .attr('opacity', 0)\n\n const shape = getString(d, nodeShape, d._index)\n /** Todo: The 'nodeShape' storing logic below it a temporary fix, needs a cleaner implementation */\n // eslint-disable-next-line dot-notation\n element['nodeShape'] = shape\n appendShape(group, shape, nodeSelectors.node, nodeSelectors.customNode, d._index)\n appendShape(group, shape, nodeSelectors.nodeSelection, nodeSelectors.customNode, d._index)\n group.append('path').attr('class', nodeSelectors.nodeGauge)\n group.append('text').attr('class', nodeSelectors.nodeIcon)\n\n const label = group.append('g').attr('class', nodeSelectors.label)\n label.append('rect').attr('class', nodeSelectors.labelBackground)\n\n const labelText = label.append('text')\n .attr('class', nodeSelectors.labelText)\n .attr('dy', '0.32em')\n labelText.append('tspan').attr('class', nodeSelectors.labelTextContent)\n labelText.append('tspan')\n .attr('class', nodeSelectors.subLabelTextContent)\n .attr('dy', '1.1em')\n .attr('x', '0')\n\n group.append('g')\n .attr('class', nodeSelectors.sideLabelsGroup)\n\n group.append('text')\n .attr('class', nodeSelectors.nodeBottomIcon)\n })\n}\n\nexport function updateSelectedNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>\n): void {\n const { nodeDisabled } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = select(elements[i])\n const isGreyout = getBoolean(d, nodeDisabled, d._index) || d._state.greyout\n\n group.classed(nodeSelectors.greyoutNode, isGreyout)\n .classed(nodeSelectors.draggable, !config.disableDrag)\n\n const nodeSelectionOutline = group.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.nodeSelection}`)\n nodeSelectionOutline.classed(nodeSelectors.nodeSelectionActive, d._state.selected)\n\n group.selectAll(`.${nodeSelectors.sideLabel}`)\n .style('fill', (l: GraphCircleLabel) => isGreyout ? null : getSideLabelTextColor(l))\n\n group.selectAll(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', (l: GraphCircleLabel) => isGreyout ? null : l.color)\n })\n}\n\nexport function updateNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n duration: number,\n scale = 1\n): Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> {\n const {\n nodeGaugeAnimDuration, nodeStrokeWidth, nodeShape, nodeSize, nodeGaugeValue, nodeGaugeFill,\n nodeIcon, nodeIconSize, nodeLabel, nodeSubLabel, nodeSideLabels, nodeStroke, nodeFill, nodeBottomIcon,\n } = config\n\n // Re-create nodes to update shapes if they were changes\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n const shape = getString(d, nodeShape, d._index)\n\n // eslint-disable-next-line dot-notation\n if (element['nodeShape'] !== shape) {\n group.select(`.${nodeSelectors.node}`).remove()\n appendShape(group, nodeShape, nodeSelectors.node, nodeSelectors.customNode, d._index, `.${nodeSelectors.nodeSelection}`)\n group.select(`.${nodeSelectors.nodeSelection}`).remove()\n appendShape(group, shape, nodeSelectors.nodeSelection, null, d._index, `.${nodeSelectors.nodeGauge}`)\n // eslint-disable-next-line dot-notation\n element['nodeShape'] = shape\n }\n })\n\n // Update nodes themselves\n selection.each((d, i, elements) => {\n const groupElement = elements[i]\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = select(groupElement)\n const node: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = group.select(`.${nodeSelectors.node}`)\n const nodeArc = group.select(`.${nodeSelectors.nodeGauge}`)\n const icon = group.select(`.${nodeSelectors.nodeIcon}`)\n const sideLabelsGroup = group.select(`.${nodeSelectors.sideLabelsGroup}`)\n const label: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = group.select(`.${nodeSelectors.label}`)\n const labelTextContent = label.select(`.${nodeSelectors.labelTextContent}`)\n const sublabelTextContent = label.select(`.${nodeSelectors.subLabelTextContent}`)\n const bottomIcon = group.select(`.${nodeSelectors.nodeBottomIcon}`)\n const nodeSelectionOutline = group.select<SVGGElement>(`.${nodeSelectors.nodeSelection}`)\n const nodeSizeValue = getNodeSize(d, nodeSize, d._index)\n const arcGenerator = arc<GraphNodeAnimationState>()\n .innerRadius(state => getNodeSize(state, nodeSize, state.nodeIndex) / 2 - (getNumber(state, nodeStrokeWidth, state.nodeIndex) / 2))\n .outerRadius(state => getNodeSize(state, nodeSize, state.nodeIndex) / 2 + (getNumber(state, nodeStrokeWidth, state.nodeIndex) / 2))\n .startAngle(0 * (Math.PI / 180))\n // eslint-disable-next-line dot-notation\n .endAngle(a => a['endAngle'])\n\n group\n .classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n .classed(nodeSelectors.nodeIsDragged, (d: GraphNode<N, L>) => d._state.isDragged)\n\n // Update Group\n group\n .classed(nodeSelectors.nodePolygon, () => {\n const shape = getString(d, nodeShape, d._index)\n return shape === GraphNodeShape.Triangle || shape === GraphNodeShape.Hexagon || shape === GraphNodeShape.Square\n })\n\n // Update Node\n node\n .call(updateShape, nodeShape, nodeSize, d._index)\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index) ?? 0)\n .style('fill', getNodeColor(d, nodeFill, d._index))\n .style('stroke', getString(d, nodeStroke, d._index) ?? null)\n\n const nodeBBox = (node.node() as SVGGraphicsElement).getBBox()\n\n nodeArc\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index))\n .style('display', !getNumber(d, nodeGaugeValue, d._index) ? 'none' : null)\n .style('fill', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke-opacity', d => getString(d, nodeShape, d._index) === GraphNodeShape.Circle ? 0 : null)\n\n nodeArc\n .transition()\n .duration(nodeGaugeAnimDuration)\n .attrTween('d', (d, j, arr: GraphNodeAnimatedElement<SVGElement>[]) => {\n switch (getString(d, nodeShape, d._index)) {\n case GraphNodeShape.Circle: return arcTween(d, config, arcGenerator, arr[j])\n case GraphNodeShape.Hexagon: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Square: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Triangle: return polyTween(d, config, polygon, arr[j])\n default: return null\n }\n })\n\n // Set Node Selection\n updateShape(nodeSelectionOutline, nodeShape, nodeSize, d._index)\n\n // Update Node Icon\n icon\n .style('font-size', `${getNumber(d, nodeIconSize, d._index) ?? 2.5 * Math.sqrt(nodeSizeValue)}px`)\n .attr('dy', 1)\n .style('fill', getNodeIconColor(d, nodeFill, d._index))\n .html(getString(d, nodeIcon, d._index))\n\n // Side Labels\n const sideLabelsData = getValue<GraphNode<N, L>, GraphCircleLabel[]>(d, nodeSideLabels, d._index) || []\n const sideLabels = sideLabelsGroup.selectAll<SVGGElement, GraphCircleLabel>('g').data(sideLabelsData)\n const sideLabelsEnter = sideLabels.enter().append('g')\n .attr('class', nodeSelectors.sideLabelGroup)\n sideLabelsEnter.append('circle')\n .attr('class', nodeSelectors.sideLabelBackground)\n .attr('r', l => l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)\n sideLabelsEnter.append('text')\n .attr('class', nodeSelectors.sideLabel)\n\n const sideLabelsUpdate = sideLabels.merge(sideLabelsEnter)\n .style('cursor', l => l.cursor ?? null)\n\n // Side label text\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabel}`).html(d => d.text)\n .attr('dy', '1px')\n .style('fill', l => getSideLabelTextColor(l))\n .style('font-size', l => l.fontSize ?? `${(2 + (l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)) / Math.pow(l.text.toString().length, 0.3)}px`)\n // Side label circle background\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', l => l.color)\n\n sideLabelsUpdate.attr('transform', (l, j) => {\n if (sideLabelsData.length === 1) return `translate(${nodeSizeValue / 2.5}, ${-nodeSizeValue / 2.5})`\n const r = 1.05 * nodeSizeValue / 2\n const angle = j * 1.15 * 2 * Math.atan2(l.radius ?? SIDE_LABEL_DEFAULT_RADIUS, r) - Math.PI / 3\n return `translate(${r * Math.cos(angle)}, ${r * Math.sin(angle)})`\n })\n\n sideLabels.exit().remove()\n\n // Set label and sub-label text\n const labelText = getString(d, nodeLabel, d._index)\n const sublabelText = getString(d, nodeSubLabel, d._index)\n const labelTextTrimmed = trimText(labelText)\n const sublabelTextTrimmed = trimText(sublabelText)\n\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n group\n .on('mouseenter', () => {\n labelTextContent.text(labelText)\n sublabelTextContent.text(sublabelText)\n setLabelRect(label, labelText, nodeSelectors.labelText)\n group.raise()\n })\n .on('mouseleave', () => {\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n setLabelRect(label, labelTextTrimmed, nodeSelectors.labelText)\n })\n\n // Position label\n const labelFontSize = parseFloat(window.getComputedStyle(groupElement).getPropertyValue('--vis-graph-node-label-font-size')) || 12\n const labelMargin = LABEL_RECT_VERTICAL_PADDING + 1.25 * labelFontSize ** 1.03\n const nodeHeight = isCustomXml((getString(d, nodeShape, d._index)) as GraphNodeShape) ? nodeBBox.height : nodeSizeValue\n label.attr('transform', `translate(0, ${nodeHeight / 2 + labelMargin})`)\n if (scale >= ZoomLevel.Level3) setLabelRect(label, getString(d, nodeLabel, d._index), nodeSelectors.labelText)\n\n // Bottom Icon\n bottomIcon.html(getString(d, nodeBottomIcon, d._index))\n .attr('transform', `translate(0, ${nodeHeight / 2})`)\n })\n\n updateSelectedNodes(selection, config)\n\n return smartTransition(selection, duration)\n .attr('transform', d => `translate(${getX(d)}, ${getY(d)}) scale(1)`)\n .attr('opacity', 1)\n}\n\nexport function removeNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .attr('transform', (d, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeExitPosition, i)\n const scale = getNumber(d, config.nodeExitScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .remove()\n}\n\nfunction setLabelBackgroundRect<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>\n): void {\n const { nodeLabel } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, N, SVGGElement, N> = select(elements[i])\n const label: Selection<SVGGElement, N, SVGGElement, N> = group.select(`.${nodeSelectors.label}`)\n setLabelRect(label, getString(d, nodeLabel, i), nodeSelectors.labelText)\n })\n}\n\nconst setLabelBackgroundRectThrottled = throttle(setLabelBackgroundRect, 1000)\n\nexport function zoomNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n selection.classed(generalSelectors.zoomOutLevel1, scale < ZoomLevel.Level1)\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n\n selection.selectAll(`${nodeSelectors.sideLabelBackground}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.35)})`)\n selection.selectAll(`.${nodeSelectors.sideLabel}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.45)})`)\n\n if (scale >= ZoomLevel.Level3) selection.call(setLabelBackgroundRectThrottled, config)\n}\n\nexport const zoomNodesThrottled = throttle(zoomNodes, 500)\n"],"names":["nodeSelectors.node","nodeSelectors.customNode","nodeSelectors.nodeSelection","nodeSelectors.nodeGauge","nodeSelectors.nodeIcon","label","nodeSelectors.label","nodeSelectors.labelBackground","labelText","nodeSelectors.labelText","nodeSelectors.labelTextContent","nodeSelectors.subLabelTextContent","nodeSelectors.sideLabelsGroup","nodeSelectors.nodeBottomIcon","nodeSelectors.greyoutNode","nodeSelectors.draggable","nodeSelectors.nodeSelectionActive","nodeSelectors.sideLabel","nodeSelectors.sideLabelBackground","nodeIcon","nodeBottomIcon","node","sideLabelsGroup","labelTextContent","generalSelectors.zoomOutLevel2","nodeSelectors.nodeIsDragged","nodeSelectors.nodePolygon","nodeSelectors.sideLabelGroup","generalSelectors.zoomOutLevel1"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/node/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { arc } from 'd3-shape'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Utils\nimport { trimText } from 'utils/text'\nimport { polygon } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getBoolean, getNumber, getString, getValue, throttle } from 'utils/data'\n\n// Local Types\nimport { GraphNode, GraphCircleLabel, GraphNodeAnimationState, GraphNodeAnimatedElement, GraphNodeShape } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport {\n arcTween,\n polyTween,\n setLabelRect,\n getX,\n getY,\n getSideLabelTextColor,\n getNodeColor,\n getNodeIconColor,\n getNodeSize,\n LABEL_RECT_VERTICAL_PADDING,\n} from './helper'\nimport { appendShape, updateShape, isCustomXml } from '../shape'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as nodeSelectors from './style'\n\nconst SIDE_LABEL_DEFAULT_RADIUS = 10\n\nexport function createNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>>,\n config: GraphConfig<N, L>\n): void {\n const { nodeShape } = config\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n group\n .attr('transform', (d: GraphNode<N, L>, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeEnterPosition, i)\n const scale = getNumber(d, config.nodeEnterScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .attr('opacity', 0)\n\n const shape = getString(d, nodeShape, d._index)\n /** Todo: The 'nodeShape' storing logic below it a temporary fix, needs a cleaner implementation */\n // eslint-disable-next-line dot-notation\n element['nodeShape'] = shape\n appendShape(group, shape, nodeSelectors.node, nodeSelectors.customNode, d._index)\n appendShape(group, shape, nodeSelectors.nodeSelection, nodeSelectors.customNode, d._index)\n group.append('path').attr('class', nodeSelectors.nodeGauge)\n group.append('text').attr('class', nodeSelectors.nodeIcon)\n\n const label = group.append('g').attr('class', nodeSelectors.label)\n label.append('rect').attr('class', nodeSelectors.labelBackground)\n\n const labelText = label.append('text')\n .attr('class', nodeSelectors.labelText)\n .attr('dy', '0.32em')\n labelText.append('tspan').attr('class', nodeSelectors.labelTextContent)\n labelText.append('tspan')\n .attr('class', nodeSelectors.subLabelTextContent)\n .attr('dy', '1.1em')\n .attr('x', '0')\n\n group.append('g')\n .attr('class', nodeSelectors.sideLabelsGroup)\n\n group.append('text')\n .attr('class', nodeSelectors.nodeBottomIcon)\n })\n}\n\nexport function updateSelectedNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>\n): void {\n const { nodeDisabled } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = select(elements[i])\n const isGreyout = getBoolean(d, nodeDisabled, d._index) || d._state.greyout\n\n group.classed(nodeSelectors.greyoutNode, isGreyout)\n .classed(nodeSelectors.draggable, !config.disableDrag)\n\n const nodeSelectionOutline = group.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.nodeSelection}`)\n nodeSelectionOutline.classed(nodeSelectors.nodeSelectionActive, d._state.selected)\n\n group.selectAll(`.${nodeSelectors.sideLabel}`)\n .style('fill', (l: GraphCircleLabel) => isGreyout ? null : getSideLabelTextColor(l, selection.node()))\n\n group.selectAll(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', (l: GraphCircleLabel) => isGreyout ? null : l.color)\n })\n}\n\nexport function updateNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n duration: number,\n scale = 1\n): Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> {\n const {\n nodeGaugeAnimDuration, nodeStrokeWidth, nodeShape, nodeSize, nodeGaugeValue, nodeGaugeFill,\n nodeIcon, nodeIconSize, nodeLabel, nodeSubLabel, nodeSideLabels, nodeStroke, nodeFill, nodeBottomIcon,\n } = config\n\n // Re-create nodes to update shapes if they were changes\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n const shape = getString(d, nodeShape, d._index)\n\n // eslint-disable-next-line dot-notation\n if (element['nodeShape'] !== shape) {\n group.select(`.${nodeSelectors.node}`).remove()\n appendShape(group, nodeShape, nodeSelectors.node, nodeSelectors.customNode, d._index, `.${nodeSelectors.nodeSelection}`)\n group.select(`.${nodeSelectors.nodeSelection}`).remove()\n appendShape(group, shape, nodeSelectors.nodeSelection, null, d._index, `.${nodeSelectors.nodeGauge}`)\n // eslint-disable-next-line dot-notation\n element['nodeShape'] = shape\n }\n })\n\n // Update nodes themselves\n selection.each((d, i, elements) => {\n const groupElement = elements[i]\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = select(groupElement)\n const node: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = group.select(`.${nodeSelectors.node}`)\n const nodeArc = group.select(`.${nodeSelectors.nodeGauge}`)\n const icon = group.select(`.${nodeSelectors.nodeIcon}`)\n const sideLabelsGroup = group.select(`.${nodeSelectors.sideLabelsGroup}`)\n const label: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, GraphNode<N, L>> = group.select(`.${nodeSelectors.label}`)\n const labelTextContent = label.select(`.${nodeSelectors.labelTextContent}`)\n const sublabelTextContent = label.select(`.${nodeSelectors.subLabelTextContent}`)\n const bottomIcon = group.select(`.${nodeSelectors.nodeBottomIcon}`)\n const nodeSelectionOutline = group.select<SVGGElement>(`.${nodeSelectors.nodeSelection}`)\n const nodeSizeValue = getNodeSize(d, nodeSize, d._index)\n const arcGenerator = arc<GraphNodeAnimationState>()\n .innerRadius(state => getNodeSize(state, nodeSize, state.nodeIndex) / 2 - (getNumber(state, nodeStrokeWidth, state.nodeIndex) / 2))\n .outerRadius(state => getNodeSize(state, nodeSize, state.nodeIndex) / 2 + (getNumber(state, nodeStrokeWidth, state.nodeIndex) / 2))\n .startAngle(0 * (Math.PI / 180))\n // eslint-disable-next-line dot-notation\n .endAngle(a => a['endAngle'])\n\n group\n .classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n .classed(nodeSelectors.nodeIsDragged, (d: GraphNode<N, L>) => d._state.isDragged)\n\n // Update Group\n group\n .classed(nodeSelectors.nodePolygon, () => {\n const shape = getString(d, nodeShape, d._index)\n return shape === GraphNodeShape.Triangle || shape === GraphNodeShape.Hexagon || shape === GraphNodeShape.Square\n })\n\n // Update Node\n node\n .call(updateShape, nodeShape, nodeSize, d._index)\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index) ?? 0)\n .style('fill', getNodeColor(d, nodeFill, d._index))\n .style('stroke', getString(d, nodeStroke, d._index) ?? null)\n\n const nodeBBox = (node.node() as SVGGraphicsElement).getBBox()\n\n nodeArc\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index))\n .style('display', !getNumber(d, nodeGaugeValue, d._index) ? 'none' : null)\n .style('fill', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke-opacity', d => getString(d, nodeShape, d._index) === GraphNodeShape.Circle ? 0 : null)\n\n nodeArc\n .transition()\n .duration(nodeGaugeAnimDuration)\n .attrTween('d', (d, j, arr: GraphNodeAnimatedElement<SVGElement>[]) => {\n switch (getString(d, nodeShape, d._index)) {\n case GraphNodeShape.Circle: return arcTween(d, config, arcGenerator, arr[j])\n case GraphNodeShape.Hexagon: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Square: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Triangle: return polyTween(d, config, polygon, arr[j])\n default: return null\n }\n })\n\n // Set Node Selection\n updateShape(nodeSelectionOutline, nodeShape, nodeSize, d._index)\n\n // Update Node Icon\n icon\n .style('font-size', `${getNumber(d, nodeIconSize, d._index) ?? 2.5 * Math.sqrt(nodeSizeValue)}px`)\n .attr('dy', 1)\n .style('fill', getNodeIconColor(d, nodeFill, d._index, selection.node()))\n .html(getString(d, nodeIcon, d._index))\n\n // Side Labels\n const sideLabelsData = getValue<GraphNode<N, L>, GraphCircleLabel[]>(d, nodeSideLabels, d._index) || []\n const sideLabels = sideLabelsGroup.selectAll<SVGGElement, GraphCircleLabel>('g').data(sideLabelsData)\n const sideLabelsEnter = sideLabels.enter().append('g')\n .attr('class', nodeSelectors.sideLabelGroup)\n sideLabelsEnter.append('circle')\n .attr('class', nodeSelectors.sideLabelBackground)\n .attr('r', l => l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)\n sideLabelsEnter.append('text')\n .attr('class', nodeSelectors.sideLabel)\n\n const sideLabelsUpdate = sideLabels.merge(sideLabelsEnter)\n .style('cursor', l => l.cursor ?? null)\n\n // Side label text\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabel}`).html(d => d.text)\n .attr('dy', '1px')\n .style('fill', l => getSideLabelTextColor(l, selection.node()))\n .style('font-size', l => l.fontSize ?? `${(2 + (l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)) / Math.pow(l.text.toString().length, 0.3)}px`)\n // Side label circle background\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', l => l.color)\n\n sideLabelsUpdate.attr('transform', (l, j) => {\n if (sideLabelsData.length === 1) return `translate(${nodeSizeValue / 2.5}, ${-nodeSizeValue / 2.5})`\n const r = 1.05 * nodeSizeValue / 2\n const angle = j * 1.15 * 2 * Math.atan2(l.radius ?? SIDE_LABEL_DEFAULT_RADIUS, r) - Math.PI / 3\n return `translate(${r * Math.cos(angle)}, ${r * Math.sin(angle)})`\n })\n\n sideLabels.exit().remove()\n\n // Set label and sub-label text\n const labelText = getString(d, nodeLabel, d._index)\n const sublabelText = getString(d, nodeSubLabel, d._index)\n const labelTextTrimmed = trimText(labelText)\n const sublabelTextTrimmed = trimText(sublabelText)\n\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n group\n .on('mouseenter', () => {\n labelTextContent.text(labelText)\n sublabelTextContent.text(sublabelText)\n setLabelRect(label, labelText, nodeSelectors.labelText)\n group.raise()\n })\n .on('mouseleave', () => {\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n setLabelRect(label, labelTextTrimmed, nodeSelectors.labelText)\n })\n\n // Position label\n const labelFontSize = parseFloat(window.getComputedStyle(groupElement).getPropertyValue('--vis-graph-node-label-font-size')) || 12\n const labelMargin = LABEL_RECT_VERTICAL_PADDING + 1.25 * labelFontSize ** 1.03\n const nodeHeight = isCustomXml((getString(d, nodeShape, d._index)) as GraphNodeShape) ? nodeBBox.height : nodeSizeValue\n label.attr('transform', `translate(0, ${nodeHeight / 2 + labelMargin})`)\n if (scale >= ZoomLevel.Level3) setLabelRect(label, getString(d, nodeLabel, d._index), nodeSelectors.labelText)\n\n // Bottom Icon\n bottomIcon.html(getString(d, nodeBottomIcon, d._index))\n .attr('transform', `translate(0, ${nodeHeight / 2})`)\n })\n\n updateSelectedNodes(selection, config)\n\n return smartTransition(selection, duration)\n .attr('transform', d => `translate(${getX(d)}, ${getY(d)}) scale(1)`)\n .attr('opacity', 1)\n}\n\nexport function removeNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .attr('transform', (d, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeExitPosition, i)\n const scale = getNumber(d, config.nodeExitScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .remove()\n}\n\nfunction setLabelBackgroundRect<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>\n): void {\n const { nodeLabel } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, N, SVGGElement, N> = select(elements[i])\n const label: Selection<SVGGElement, N, SVGGElement, N> = group.select(`.${nodeSelectors.label}`)\n setLabelRect(label, getString(d, nodeLabel, i), nodeSelectors.labelText)\n })\n}\n\nconst setLabelBackgroundRectThrottled = throttle(setLabelBackgroundRect, 1000)\n\nexport function zoomNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n selection.classed(generalSelectors.zoomOutLevel1, scale < ZoomLevel.Level1)\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n\n selection.selectAll(`${nodeSelectors.sideLabelBackground}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.35)})`)\n selection.selectAll(`.${nodeSelectors.sideLabel}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.45)})`)\n\n if (scale >= ZoomLevel.Level3) selection.call(setLabelBackgroundRectThrottled, config)\n}\n\nexport const zoomNodesThrottled = throttle(zoomNodes, 500)\n"],"names":["nodeSelectors.node","nodeSelectors.customNode","nodeSelectors.nodeSelection","nodeSelectors.nodeGauge","nodeSelectors.nodeIcon","label","nodeSelectors.label","nodeSelectors.labelBackground","labelText","nodeSelectors.labelText","nodeSelectors.labelTextContent","nodeSelectors.subLabelTextContent","nodeSelectors.sideLabelsGroup","nodeSelectors.nodeBottomIcon","nodeSelectors.greyoutNode","nodeSelectors.draggable","nodeSelectors.nodeSelectionActive","nodeSelectors.sideLabel","nodeSelectors.sideLabelBackground","nodeIcon","nodeBottomIcon","node","sideLabelsGroup","labelTextContent","generalSelectors.zoomOutLevel2","nodeSelectors.nodeIsDragged","nodeSelectors.nodePolygon","nodeSelectors.sideLabelGroup","generalSelectors.zoomOutLevel1"],"mappings":"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"}
@@ -171,10 +171,11 @@ class LeafletFlowMap extends ComponentCore {
171
171
  this.canvasElement.style.transform = `translate(${shift.x}px, ${shift.y}px)`;
172
172
  }
173
173
  destroy() {
174
- this.resizeObserver.disconnect();
175
- this.renderer.destroy();
176
- this.canvasElement.removeEventListener('mousemove', this.onCanvasMouseMoveBound);
177
- this.canvasElement.removeEventListener('click', this.onCanvasClickBound);
174
+ var _a, _b, _c, _d;
175
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
176
+ (_b = this.renderer) === null || _b === void 0 ? void 0 : _b.destroy();
177
+ (_c = this.canvasElement) === null || _c === void 0 ? void 0 : _c.removeEventListener('mousemove', this.onCanvasMouseMoveBound);
178
+ (_d = this.canvasElement) === null || _d === void 0 ? void 0 : _d.removeEventListener('click', this.onCanvasClickBound);
178
179
  super.destroy();
179
180
  }
180
181
  // Leaflet Map useful methods
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/leaflet-flow-map/index.ts"],"sourcesContent":["import { select } from 'd3-selection'\nimport { ResizeObserver } from '@juggle/resize-observer'\n\nimport { ComponentCore } from 'core/component'\nimport { ComponentType } from 'types/component'\n\n// Utils\nimport { getNumber, throttle } from 'utils/data'\nimport { getDataLatLngBounds } from 'utils/map'\nimport { getColor } from 'utils/color'\n\n// Components\nimport { LeafletMap } from 'components/leaflet-map'\n\n// Types\nimport { Bounds } from 'components/leaflet-map/types'\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletFlowMapConfig, LeafletFlowMapConfigInterface } from './config'\n\n// Local Types\nimport { LatLon, Particle } from './types'\n\n// Renderer\nimport { PointRenderer as PointRendererType } from './renderer'\n\nexport class LeafletFlowMap<\n PointDatum extends GenericDataRecord,\n FlowDatum extends GenericDataRecord,\n> extends ComponentCore<\n { points: PointDatum[]; flows?: FlowDatum[] },\n LeafletFlowMapConfig<PointDatum, FlowDatum>,\n LeafletFlowMapConfigInterface<PointDatum, FlowDatum>\n > {\n static selectors = LeafletMap.selectors\n type = ComponentType.HTML\n private leafletMap: LeafletMap<PointDatum>\n private leafletMapInstance: L.Map\n private flows: FlowDatum[] = []\n private points: PointDatum[] = []\n private hoveredSourcePoint: FlowDatum | undefined\n private onCanvasMouseMoveBound = throttle(this.onCanvasMouseMove.bind(this), 60)\n private onCanvasClickBound = this.onCanvasClick.bind(this)\n private canvasElement: HTMLCanvasElement\n config: LeafletFlowMapConfig<PointDatum, FlowDatum> = new LeafletFlowMapConfig()\n private panningOffset = { x: 0, y: 0 }\n\n private resizeObserver: ResizeObserver\n private renderer: PointRendererType\n particles: Particle[] = []\n\n constructor (container: HTMLDivElement, config?: LeafletFlowMapConfigInterface<PointDatum, FlowDatum>, data?: { points: PointDatum[]; flows?: FlowDatum[] }) {\n super(ComponentType.HTML)\n\n this.leafletMap = new LeafletMap<PointDatum>(container, config, data?.points ?? [])\n\n const rendererImportPromise = import('./renderer')\n Promise.all([rendererImportPromise, this.leafletMap.getLeafletInstancePromise()])\n .then((imports) => {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const [{ PointRenderer }, leaflet] = imports\n\n this.leafletMapInstance = leaflet\n const canvasContainer = this.leafletMapInstance.getPanes().overlayPane as HTMLDivElement\n\n // Initialize renderer\n const canvas = select(canvasContainer).insert('canvas', ':first-child')\n this.canvasElement = canvas.node()\n this.renderer = new PointRenderer(canvasContainer, container.offsetWidth, container.offsetHeight, this.canvasElement)\n this.canvasElement.addEventListener('mousemove', this.onCanvasMouseMoveBound)\n this.canvasElement.addEventListener('click', this.onCanvasClickBound)\n\n this.leafletMap._onMapMoveEndInternal = this.onMapMove.bind(this)\n\n // Update renderer size on container resize\n this.resizeObserver = new ResizeObserver(() => {\n this.renderer.setSize(container.offsetWidth, container.offsetHeight)\n })\n this.resizeObserver.observe(container)\n\n if (config) this.setConfig(config)\n if (data) this.setData(data)\n this.animate()\n })\n }\n\n setConfig (config: LeafletFlowMapConfigInterface<PointDatum, FlowDatum>): void {\n super.setConfig(config)\n this.leafletMap.setConfig({ ...config, clusteringDistance: 0 })\n }\n\n setData (data: { points: PointDatum[]; flows?: FlowDatum[] }): void {\n super.setData(data)\n this.flows = data.flows\n this.points = data.points\n this.initParticles()\n this.leafletMap.setData(this.points)\n this.render()\n }\n\n render (): void {\n super.render()\n }\n\n initParticles (): void {\n this.clearParticles()\n for (const flow of this.flows) {\n const source = {\n lat: getNumber(flow, this.config.sourceLatitude),\n lon: getNumber(flow, this.config.sourceLongitude),\n }\n\n const target = {\n lat: getNumber(flow, this.config.targetLatitude),\n lon: getNumber(flow, this.config.targetLongitude),\n }\n\n // Add source particle, showing the origin of the flow\n const sourcePointRadius = getNumber(flow, this.config.sourcePointRadius)\n const sourcePointColor = getColor(flow, this.config.sourcePointColor)\n this.addParticle(source, source, source, 0, sourcePointRadius, sourcePointColor)\n\n // Add flow particles\n const dist = Math.sqrt((target.lat - source.lat) ** 2 + (target.lon - source.lon) ** 2)\n const numParticles = Math.round(dist * getNumber(flow, this.config.flowParticleDensity))\n const velocity = getNumber(flow, this.config.flowParticleSpeed)\n const r = getNumber(flow, this.config.flowParticleRadius)\n const color = getColor(flow, this.config.flowParticleColor)\n for (let i = 0; i < numParticles; i += 1) {\n const location = {\n lat: source.lat + (target.lat - source.lat) * i / numParticles,\n lon: source.lon + (target.lon - source.lon) * i / numParticles,\n }\n this.addParticle(source, target, location, velocity, r, color)\n }\n }\n\n this.renderer?.update(this.particles)\n }\n\n private addParticle (source: LatLon, target: LatLon, location = source, velocity = 0.05, r = 0.75, color?: string): void {\n const x = 0\n const y = 0\n this.particles.push({ x, y, source, target, location, velocity, r, color })\n }\n\n private clearParticles (): void {\n this.particles = []\n }\n\n private animate (): void {\n const map = this.leafletMapInstance\n\n requestAnimationFrame(() => {\n const zoomLevel = map?.getZoom()\n for (const p of this.particles) {\n const fullDist = Math.sqrt((p.target.lat - p.source.lat) ** 2 + (p.target.lon - p.source.lon) ** 2)\n const remainedDist = Math.sqrt((p.target.lat - p.location.lat) ** 2 + (p.target.lon - p.location.lon) ** 2)\n const angle = Math.atan2(p.target.lat - p.source.lat, p.target.lon - p.source.lon)\n p.location.lat += p.velocity * Math.sin(angle)\n p.location.lon += p.velocity * Math.cos(angle)\n\n if (\n (((p.target.lat > p.source.lat) && (p.location.lat > p.target.lat)) || ((p.target.lon > p.source.lon) && (p.location.lon > p.target.lon))) ||\n (((p.target.lat < p.source.lat) && (p.location.lat < p.target.lat)) || ((p.target.lon < p.source.lon) && (p.location.lon < p.target.lon)))\n ) {\n p.location.lat = p.source.lat\n p.location.lon = p.source.lon\n }\n\n const pos = map?.latLngToLayerPoint([p.location.lat, p.location.lon])\n const orthogonalArcShift = -(zoomLevel ** 2 * fullDist / 8) * Math.cos(Math.PI / 2 * (fullDist / 2 - remainedDist) / (fullDist / 2)) || 0\n p.x = pos?.x - this.panningOffset.x\n p.y = pos?.y + orthogonalArcShift - this.panningOffset.y\n }\n\n this.renderer.updatePointsPosition(this.particles)\n this.renderer.draw()\n this.animate()\n })\n }\n\n private getPointByScreenPos (x: number, y: number): [FlowDatum, number, number] | [] {\n const map = this.leafletMapInstance\n\n for (const flow of this.flows) {\n const lat = getNumber(flow, this.config.sourceLatitude)\n const lon = getNumber(flow, this.config.sourceLongitude)\n const r = getNumber(flow, this.config.sourcePointRadius)\n const pos = map?.latLngToLayerPoint([lat, lon])\n const posX = pos.x - this.panningOffset.x\n const posY = pos.y - this.panningOffset.y\n\n if ((Math.abs(x - posX) < r) && (Math.abs(y - posY) < r)) {\n return [flow, posX, posY]\n }\n }\n\n return []\n }\n\n private onCanvasMouseMove (event: MouseEvent): void {\n const { config } = this\n\n this.canvasElement.style.removeProperty('cursor')\n const [hoveredPoint, x, y] = this.getPointByScreenPos(event.offsetX, event.offsetY)\n if (hoveredPoint) this.canvasElement.style.cursor = 'default'\n\n if (this.hoveredSourcePoint !== hoveredPoint) {\n if (hoveredPoint) config.onSourcePointMouseEnter?.(hoveredPoint, x, y, event)\n if (this.hoveredSourcePoint) config.onSourcePointMouseLeave?.(this.hoveredSourcePoint, event)\n this.hoveredSourcePoint = hoveredPoint\n }\n }\n\n private onCanvasClick (event: MouseEvent): void {\n const { config } = this\n\n const [clickedPoint, x, y] = this.getPointByScreenPos(event.offsetX, event.offsetY)\n if (clickedPoint) config.onSourcePointClick?.(clickedPoint, x, y, event)\n }\n\n private onMapMove (leaflet: L.Map): void {\n const shift = leaflet.containerPointToLayerPoint([0, 0])\n this.panningOffset.x = shift.x\n this.panningOffset.y = shift.y\n this.canvasElement.style.transform = `translate(${shift.x}px, ${shift.y}px)`\n }\n\n public destroy (): void {\n this.resizeObserver.disconnect()\n this.renderer.destroy()\n this.canvasElement.removeEventListener('mousemove', this.onCanvasMouseMoveBound)\n this.canvasElement.removeEventListener('click', this.onCanvasClickBound)\n super.destroy()\n }\n\n // Leaflet Map useful methods\n public selectPointById (id: string, centerPoint = false): void { this.leafletMap.selectPointById(id, centerPoint) }\n public getSelectedPointId (): string | number | undefined { return this.leafletMap.getSelectedPointId() }\n public unselectPoint (): void { this.leafletMap.unselectPoint() }\n public zoomToPointById (id: string, selectNode = false, customZoomLevel?: number): void { this.leafletMap.zoomToPointById(id, selectNode, customZoomLevel) }\n public zoomIn (increment = 1): void { this.leafletMap.zoomIn(increment) }\n public zoomOut (increment = 1): void { this.leafletMap.zoomOut(increment) }\n public setZoom (zoomLevel: number): void { this.leafletMap.setZoom(zoomLevel) }\n public fitView (): void {\n const points: { lat: number; lon: number }[] = []\n\n for (const point of this.points) {\n points.push({\n lat: getNumber(point, this.config.pointLatitude),\n lon: getNumber(point, this.config.pointLongitude),\n })\n }\n\n for (const flow of this.flows) {\n const source = {\n lat: getNumber(flow, this.config.sourceLatitude),\n lon: getNumber(flow, this.config.sourceLongitude),\n }\n\n const target = {\n lat: getNumber(flow, this.config.targetLatitude),\n lon: getNumber(flow, this.config.targetLongitude),\n }\n\n points.push(source)\n points.push(target)\n }\n\n const boundsArray = getDataLatLngBounds(points, d => d.lat, d => d.lon, 0)\n const bounds: Bounds = {\n northEast: { lat: boundsArray[0][0], lng: boundsArray[1][1] },\n southWest: { lat: boundsArray[1][0], lng: boundsArray[0][1] },\n }\n this.leafletMap.fitToBounds(bounds)\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/leaflet-flow-map/index.ts"],"sourcesContent":["import { select } from 'd3-selection'\nimport { ResizeObserver } from '@juggle/resize-observer'\n\nimport { ComponentCore } from 'core/component'\nimport { ComponentType } from 'types/component'\n\n// Utils\nimport { getNumber, throttle } from 'utils/data'\nimport { getDataLatLngBounds } from 'utils/map'\nimport { getColor } from 'utils/color'\n\n// Components\nimport { LeafletMap } from 'components/leaflet-map'\n\n// Types\nimport { Bounds } from 'components/leaflet-map/types'\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletFlowMapConfig, LeafletFlowMapConfigInterface } from './config'\n\n// Local Types\nimport { LatLon, Particle } from './types'\n\n// Renderer\nimport { PointRenderer as PointRendererType } from './renderer'\n\nexport class LeafletFlowMap<\n PointDatum extends GenericDataRecord,\n FlowDatum extends GenericDataRecord,\n> extends ComponentCore<\n { points: PointDatum[]; flows?: FlowDatum[] },\n LeafletFlowMapConfig<PointDatum, FlowDatum>,\n LeafletFlowMapConfigInterface<PointDatum, FlowDatum>\n > {\n static selectors = LeafletMap.selectors\n type = ComponentType.HTML\n private leafletMap: LeafletMap<PointDatum>\n private leafletMapInstance: L.Map\n private flows: FlowDatum[] = []\n private points: PointDatum[] = []\n private hoveredSourcePoint: FlowDatum | undefined\n private onCanvasMouseMoveBound = throttle(this.onCanvasMouseMove.bind(this), 60)\n private onCanvasClickBound = this.onCanvasClick.bind(this)\n private canvasElement: HTMLCanvasElement | undefined\n config: LeafletFlowMapConfig<PointDatum, FlowDatum> = new LeafletFlowMapConfig()\n private panningOffset = { x: 0, y: 0 }\n\n private resizeObserver: ResizeObserver | undefined\n private renderer: PointRendererType | undefined\n particles: Particle[] = []\n\n constructor (container: HTMLDivElement, config?: LeafletFlowMapConfigInterface<PointDatum, FlowDatum>, data?: { points: PointDatum[]; flows?: FlowDatum[] }) {\n super(ComponentType.HTML)\n\n this.leafletMap = new LeafletMap<PointDatum>(container, config, data?.points ?? [])\n\n const rendererImportPromise = import('./renderer')\n Promise.all([rendererImportPromise, this.leafletMap.getLeafletInstancePromise()])\n .then((imports) => {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const [{ PointRenderer }, leaflet] = imports\n\n this.leafletMapInstance = leaflet\n const canvasContainer = this.leafletMapInstance.getPanes().overlayPane as HTMLDivElement\n\n // Initialize renderer\n const canvas = select(canvasContainer).insert('canvas', ':first-child')\n this.canvasElement = canvas.node()\n this.renderer = new PointRenderer(canvasContainer, container.offsetWidth, container.offsetHeight, this.canvasElement)\n this.canvasElement.addEventListener('mousemove', this.onCanvasMouseMoveBound)\n this.canvasElement.addEventListener('click', this.onCanvasClickBound)\n\n this.leafletMap._onMapMoveEndInternal = this.onMapMove.bind(this)\n\n // Update renderer size on container resize\n this.resizeObserver = new ResizeObserver(() => {\n this.renderer.setSize(container.offsetWidth, container.offsetHeight)\n })\n this.resizeObserver.observe(container)\n\n if (config) this.setConfig(config)\n if (data) this.setData(data)\n this.animate()\n })\n }\n\n setConfig (config: LeafletFlowMapConfigInterface<PointDatum, FlowDatum>): void {\n super.setConfig(config)\n this.leafletMap.setConfig({ ...config, clusteringDistance: 0 })\n }\n\n setData (data: { points: PointDatum[]; flows?: FlowDatum[] }): void {\n super.setData(data)\n this.flows = data.flows\n this.points = data.points\n this.initParticles()\n this.leafletMap.setData(this.points)\n this.render()\n }\n\n render (): void {\n super.render()\n }\n\n initParticles (): void {\n this.clearParticles()\n for (const flow of this.flows) {\n const source = {\n lat: getNumber(flow, this.config.sourceLatitude),\n lon: getNumber(flow, this.config.sourceLongitude),\n }\n\n const target = {\n lat: getNumber(flow, this.config.targetLatitude),\n lon: getNumber(flow, this.config.targetLongitude),\n }\n\n // Add source particle, showing the origin of the flow\n const sourcePointRadius = getNumber(flow, this.config.sourcePointRadius)\n const sourcePointColor = getColor(flow, this.config.sourcePointColor)\n this.addParticle(source, source, source, 0, sourcePointRadius, sourcePointColor)\n\n // Add flow particles\n const dist = Math.sqrt((target.lat - source.lat) ** 2 + (target.lon - source.lon) ** 2)\n const numParticles = Math.round(dist * getNumber(flow, this.config.flowParticleDensity))\n const velocity = getNumber(flow, this.config.flowParticleSpeed)\n const r = getNumber(flow, this.config.flowParticleRadius)\n const color = getColor(flow, this.config.flowParticleColor)\n for (let i = 0; i < numParticles; i += 1) {\n const location = {\n lat: source.lat + (target.lat - source.lat) * i / numParticles,\n lon: source.lon + (target.lon - source.lon) * i / numParticles,\n }\n this.addParticle(source, target, location, velocity, r, color)\n }\n }\n\n this.renderer?.update(this.particles)\n }\n\n private addParticle (source: LatLon, target: LatLon, location = source, velocity = 0.05, r = 0.75, color?: string): void {\n const x = 0\n const y = 0\n this.particles.push({ x, y, source, target, location, velocity, r, color })\n }\n\n private clearParticles (): void {\n this.particles = []\n }\n\n private animate (): void {\n const map = this.leafletMapInstance\n\n requestAnimationFrame(() => {\n const zoomLevel = map?.getZoom()\n for (const p of this.particles) {\n const fullDist = Math.sqrt((p.target.lat - p.source.lat) ** 2 + (p.target.lon - p.source.lon) ** 2)\n const remainedDist = Math.sqrt((p.target.lat - p.location.lat) ** 2 + (p.target.lon - p.location.lon) ** 2)\n const angle = Math.atan2(p.target.lat - p.source.lat, p.target.lon - p.source.lon)\n p.location.lat += p.velocity * Math.sin(angle)\n p.location.lon += p.velocity * Math.cos(angle)\n\n if (\n (((p.target.lat > p.source.lat) && (p.location.lat > p.target.lat)) || ((p.target.lon > p.source.lon) && (p.location.lon > p.target.lon))) ||\n (((p.target.lat < p.source.lat) && (p.location.lat < p.target.lat)) || ((p.target.lon < p.source.lon) && (p.location.lon < p.target.lon)))\n ) {\n p.location.lat = p.source.lat\n p.location.lon = p.source.lon\n }\n\n const pos = map?.latLngToLayerPoint([p.location.lat, p.location.lon])\n const orthogonalArcShift = -(zoomLevel ** 2 * fullDist / 8) * Math.cos(Math.PI / 2 * (fullDist / 2 - remainedDist) / (fullDist / 2)) || 0\n p.x = pos?.x - this.panningOffset.x\n p.y = pos?.y + orthogonalArcShift - this.panningOffset.y\n }\n\n this.renderer.updatePointsPosition(this.particles)\n this.renderer.draw()\n this.animate()\n })\n }\n\n private getPointByScreenPos (x: number, y: number): [FlowDatum, number, number] | [] {\n const map = this.leafletMapInstance\n\n for (const flow of this.flows) {\n const lat = getNumber(flow, this.config.sourceLatitude)\n const lon = getNumber(flow, this.config.sourceLongitude)\n const r = getNumber(flow, this.config.sourcePointRadius)\n const pos = map?.latLngToLayerPoint([lat, lon])\n const posX = pos.x - this.panningOffset.x\n const posY = pos.y - this.panningOffset.y\n\n if ((Math.abs(x - posX) < r) && (Math.abs(y - posY) < r)) {\n return [flow, posX, posY]\n }\n }\n\n return []\n }\n\n private onCanvasMouseMove (event: MouseEvent): void {\n const { config } = this\n\n this.canvasElement.style.removeProperty('cursor')\n const [hoveredPoint, x, y] = this.getPointByScreenPos(event.offsetX, event.offsetY)\n if (hoveredPoint) this.canvasElement.style.cursor = 'default'\n\n if (this.hoveredSourcePoint !== hoveredPoint) {\n if (hoveredPoint) config.onSourcePointMouseEnter?.(hoveredPoint, x, y, event)\n if (this.hoveredSourcePoint) config.onSourcePointMouseLeave?.(this.hoveredSourcePoint, event)\n this.hoveredSourcePoint = hoveredPoint\n }\n }\n\n private onCanvasClick (event: MouseEvent): void {\n const { config } = this\n\n const [clickedPoint, x, y] = this.getPointByScreenPos(event.offsetX, event.offsetY)\n if (clickedPoint) config.onSourcePointClick?.(clickedPoint, x, y, event)\n }\n\n private onMapMove (leaflet: L.Map): void {\n const shift = leaflet.containerPointToLayerPoint([0, 0])\n this.panningOffset.x = shift.x\n this.panningOffset.y = shift.y\n this.canvasElement.style.transform = `translate(${shift.x}px, ${shift.y}px)`\n }\n\n public destroy (): void {\n this.resizeObserver?.disconnect()\n this.renderer?.destroy()\n this.canvasElement?.removeEventListener('mousemove', this.onCanvasMouseMoveBound)\n this.canvasElement?.removeEventListener('click', this.onCanvasClickBound)\n super.destroy()\n }\n\n // Leaflet Map useful methods\n public selectPointById (id: string, centerPoint = false): void { this.leafletMap.selectPointById(id, centerPoint) }\n public getSelectedPointId (): string | number | undefined { return this.leafletMap.getSelectedPointId() }\n public unselectPoint (): void { this.leafletMap.unselectPoint() }\n public zoomToPointById (id: string, selectNode = false, customZoomLevel?: number): void { this.leafletMap.zoomToPointById(id, selectNode, customZoomLevel) }\n public zoomIn (increment = 1): void { this.leafletMap.zoomIn(increment) }\n public zoomOut (increment = 1): void { this.leafletMap.zoomOut(increment) }\n public setZoom (zoomLevel: number): void { this.leafletMap.setZoom(zoomLevel) }\n public fitView (): void {\n const points: { lat: number; lon: number }[] = []\n\n for (const point of this.points) {\n points.push({\n lat: getNumber(point, this.config.pointLatitude),\n lon: getNumber(point, this.config.pointLongitude),\n })\n }\n\n for (const flow of this.flows) {\n const source = {\n lat: getNumber(flow, this.config.sourceLatitude),\n lon: getNumber(flow, this.config.sourceLongitude),\n }\n\n const target = {\n lat: getNumber(flow, this.config.targetLatitude),\n lon: getNumber(flow, this.config.targetLongitude),\n }\n\n points.push(source)\n points.push(target)\n }\n\n const boundsArray = getDataLatLngBounds(points, d => d.lat, d => d.lon, 0)\n const bounds: Bounds = {\n northEast: { lat: boundsArray[0][0], lng: boundsArray[1][1] },\n southWest: { lat: boundsArray[1][0], lng: boundsArray[0][1] },\n }\n this.leafletMap.fitToBounds(bounds)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -45,9 +45,9 @@ export declare class LeafletMap<Datum extends GenericDataRecord> extends Compone
45
45
  static DEFAULT_CONTAINER_HEIGHT: number;
46
46
  events: {
47
47
  [x: string]: {
48
- mouseup: any;
49
- mousedown: any;
50
- click: any;
48
+ mouseup: (d: LeafletMapPoint<Datum>, event: MouseEvent) => void;
49
+ mousedown: (d: LeafletMapPoint<Datum>, event: MouseEvent) => void;
50
+ click: (d: LeafletMapPoint<Datum>, event: MouseEvent) => void;
51
51
  };
52
52
  };
53
53
  constructor(container: HTMLElement, config?: LeafletMapConfigInterface<Datum>, data?: Datum[]);
@@ -1,8 +1,8 @@
1
1
  import type L from 'leaflet';
2
2
  import { Selection } from 'd3-selection';
3
3
  import { Map } from 'maplibre-gl';
4
- import { LeafletMapConfig } from '../config';
5
4
  import { GenericDataRecord } from "../../../types/data";
5
+ import { LeafletMapConfig } from '../config';
6
6
  export declare const initialMapCenter: L.LatLngExpression;
7
7
  export declare const initialMapZoom = 1.9;
8
8
  export declare function updateTopoJson<T extends GenericDataRecord>(maplibreMap: Map, config: LeafletMapConfig<T>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sources":["../../../../src/components/leaflet-map/modules/map.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { select, Selection } from 'd3-selection'\nimport { GeoJSONSource, Map } from 'maplibre-gl'\nimport { feature } from 'topojson-client'\n\n// Config\nimport { LeafletMapConfig } from '../config'\n\n// Types\nimport { GenericDataRecord } from 'types/data'\n\n// Local Types\n\n// Utils\nimport { constraintMapView, mapboxglWheelEventThrottled } from '../renderer/mapboxgl-utils'\n\n// Styles\nimport * as s from '../style'\nimport { LeafletMapRenderer } from '../types'\n\nexport const initialMapCenter: L.LatLngExpression = [36, 14]\nexport const initialMapZoom = 1.9\n\nexport function updateTopoJson<T extends GenericDataRecord> (maplibreMap: Map, config: LeafletMapConfig<T>): void {\n const { topoJSONLayer } = config\n\n if (topoJSONLayer.sources) {\n const featureObject = topoJSONLayer.sources?.objects?.[topoJSONLayer.featureName]\n if (featureObject) {\n const mapSource = maplibreMap.getSource(topoJSONLayer.featureName) as GeoJSONSource\n const featureCollection = feature(topoJSONLayer.sources, featureObject)\n if (mapSource) {\n mapSource.setData(featureCollection)\n } else {\n maplibreMap.addSource(topoJSONLayer.featureName, { type: 'geojson', data: featureCollection })\n }\n }\n }\n\n const fillLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-area`)\n if (topoJSONLayer.fillProperty) {\n if (!fillLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-area`,\n type: 'fill',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-antialias': false,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-opacity': topoJSONLayer.fillOpacity,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-area`, 'fill-color', [\n 'case',\n ['!', ['has', topoJSONLayer.fillProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.fillProperty],\n ])\n } else if (fillLayer) maplibreMap.removeLayer(`${topoJSONLayer.featureName}-area`)\n\n const strokeLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-stroke`)\n if (topoJSONLayer.strokeProperty) {\n if (!strokeLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-stroke`,\n type: 'line',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-opacity': topoJSONLayer.strokeOpacity,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-width': topoJSONLayer.strokeWidth,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-stroke`, 'line-color', [\n 'case',\n ['!', ['has', topoJSONLayer.strokeProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.strokeProperty],\n ])\n } else if (strokeLayer) { maplibreMap.removeLayer(`${topoJSONLayer.featureName}-stroke`) }\n}\n\nexport async function setupMap<T extends GenericDataRecord> (mapContainer: HTMLElement, config: LeafletMapConfig<T>): Promise<{\n leaflet: L.Map;\n layer: L.Layer;\n svgOverlay: Selection<SVGElement, any, HTMLElement, any>;\n svgGroup: Selection<SVGGElement, any, SVGElement, any>;\n}> {\n const { style, renderer, topoJSONLayer } = config\n const leaflet = await import('leaflet')\n const L = leaflet.default\n\n if (!style) {\n console.error('Unovis | Leaflet Map: Please provide style settings in the map configuration object')\n return\n }\n\n const leafletMap = L.map(mapContainer, {\n scrollWheelZoom: renderer === LeafletMapRenderer.Raster, // We define custom scroll event for MapboxGL to enabling smooth zooming\n zoomControl: false,\n zoomDelta: renderer === LeafletMapRenderer.Raster ? 1 : 0.5,\n zoomSnap: renderer === LeafletMapRenderer.Raster ? 1 : 0,\n attributionControl: true,\n center: initialMapCenter,\n zoom: initialMapZoom,\n minZoom: Math.sqrt(mapContainer.offsetWidth) / 17,\n maxZoom: 23,\n maxBounds: L.latLngBounds(\n [-75, -290],\n [85, 290]\n ),\n maxBoundsViscosity: 1,\n })\n\n for (const attr of config.attribution) {\n leafletMap.attributionControl.addAttribution(attr)\n }\n\n let layer: L.Layer\n let maplibreMap = null\n\n switch (renderer) {\n case LeafletMapRenderer.MapLibre:\n // eslint-disable-next-line no-case-declarations\n const maplibre = await import('maplibre-gl')\n // eslint-disable-next-line no-case-declarations\n const { getMaplibreGLLayer } = await import('../renderer/mapboxgl-layer')\n layer = getMaplibreGLLayer(config, L, maplibre.default)\n maplibreMap = (layer as ReturnType<typeof getMaplibreGLLayer>).getMaplibreMap?.()\n break\n case LeafletMapRenderer.Raster:\n layer = L.tileLayer(style)\n break\n }\n layer.addTo(leafletMap)\n\n // leaflet-mapbox-gl has a layer positioning issue on far zoom levels which leads to having wrong\n // map points projection. We constraint the view to prevent that.\n constraintMapView(leafletMap)\n select(mapContainer).on('wheel', (event: WheelEvent) => {\n event.preventDefault()\n mapboxglWheelEventThrottled(leafletMap, layer, event)\n })\n\n if (maplibreMap && topoJSONLayer?.sources) {\n const canvas = maplibreMap.getCanvas()\n const canvasSelection = select(canvas).classed(s.mapboxglCanvas, true)\n const tilePaneSelection = select(leafletMap.getPanes().tilePane)\n\n maplibreMap.on('mousemove', (event) => {\n const layerName = `${topoJSONLayer.featureName}-area`\n const layer = maplibreMap.getLayer(layerName)\n if (!layer) return\n\n const features = maplibreMap.queryRenderedFeatures(event.point, { layers: [layerName] })\n tilePaneSelection.datum(features[0])\n canvasSelection.classed(s.onFeatureHover, Boolean(features[0]))\n })\n\n maplibreMap.on('load', () => {\n updateTopoJson(maplibreMap, config)\n })\n }\n\n const svgOverlay = select(leafletMap.getPanes().overlayPane).append('svg')\n const svgGroup = svgOverlay.append('g')\n\n return {\n leaflet: leafletMap,\n layer,\n svgOverlay,\n svgGroup,\n }\n}\n"],"names":["s.mapboxglCanvas","s.onFeatureHover"],"mappings":";;;;;;;MAoBa,gBAAgB,GAAuB,CAAC,EAAE,EAAE,EAAE,EAAC;AACrD,MAAM,cAAc,GAAG,IAAG;AAEjB,SAAA,cAAc,CAA+B,WAAgB,EAAE,MAA2B,EAAA;;AACxG,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA;IAEhC,IAAI,aAAa,CAAC,OAAO,EAAE;AACzB,QAAA,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,aAAa,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAC,WAAW,CAAC,CAAA;AACjF,QAAA,IAAI,aAAa,EAAE;YACjB,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAkB,CAAA;YACnF,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;AACvE,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;AACrC,aAAA;AAAM,iBAAA;AACL,gBAAA,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;AAC/F,aAAA;AACF,SAAA;AACF,KAAA;AAED,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAG,EAAA,aAAa,CAAC,WAAW,CAAO,KAAA,CAAA,CAAC,CAAA;IAC3E,IAAI,aAAa,CAAC,YAAY,EAAE;QAC9B,IAAI,CAAC,SAAS,EAAE;YACd,WAAW,CAAC,QAAQ,CAAC;AACnB,gBAAA,EAAE,EAAE,CAAA,EAAG,aAAa,CAAC,WAAW,CAAO,KAAA,CAAA;AACvC,gBAAA,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,aAAa,CAAC,WAAW;AACjC,gBAAA,KAAK,EAAE;;AAEL,oBAAA,gBAAgB,EAAE,KAAK;;oBAEvB,cAAc,EAAE,aAAa,CAAC,WAAW;AAC1C,iBAAA;AACF,aAAA,CAAC,CAAA;AACH,SAAA;QACD,WAAW,CAAC,gBAAgB,CAAC,CAAG,EAAA,aAAa,CAAC,WAAW,CAAA,KAAA,CAAO,EAAE,YAAY,EAAE;YAC9E,MAAM;YACN,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;YAC1C,wBAAwB;AACxB,YAAA,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC;AACpC,SAAA,CAAC,CAAA;AACH,KAAA;AAAM,SAAA,IAAI,SAAS;QAAE,WAAW,CAAC,WAAW,CAAC,CAAA,EAAG,aAAa,CAAC,WAAW,CAAO,KAAA,CAAA,CAAC,CAAA;AAElF,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAG,EAAA,aAAa,CAAC,WAAW,CAAS,OAAA,CAAA,CAAC,CAAA;IAC/E,IAAI,aAAa,CAAC,cAAc,EAAE;QAChC,IAAI,CAAC,WAAW,EAAE;YAChB,WAAW,CAAC,QAAQ,CAAC;AACnB,gBAAA,EAAE,EAAE,CAAA,EAAG,aAAa,CAAC,WAAW,CAAS,OAAA,CAAA;AACzC,gBAAA,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,aAAa,CAAC,WAAW;AACjC,gBAAA,KAAK,EAAE;;oBAEL,cAAc,EAAE,aAAa,CAAC,aAAa;;oBAE3C,YAAY,EAAE,aAAa,CAAC,WAAW;AACxC,iBAAA;AACF,aAAA,CAAC,CAAA;AACH,SAAA;QACD,WAAW,CAAC,gBAAgB,CAAC,CAAG,EAAA,aAAa,CAAC,WAAW,CAAA,OAAA,CAAS,EAAE,YAAY,EAAE;YAChF,MAAM;YACN,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;YAC5C,wBAAwB;AACxB,YAAA,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC;AACtC,SAAA,CAAC,CAAA;AACH,KAAA;AAAM,SAAA,IAAI,WAAW,EAAE;QAAE,WAAW,CAAC,WAAW,CAAC,CAAA,EAAG,aAAa,CAAC,WAAW,CAAS,OAAA,CAAA,CAAC,CAAA;AAAE,KAAA;AAC5F,CAAC;AAEqB,SAAA,QAAQ,CAA+B,YAAyB,EAAE,MAA2B,EAAA;;;QAMjH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA;AACjD,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,SAAS,CAAC,CAAA;AACvC,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAA;QAEzB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAA;YACpG,OAAM;AACP,SAAA;AAED,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE;AACrC,YAAA,eAAe,EAAE,QAAQ,KAAK,kBAAkB,CAAC,MAAM;AACvD,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,SAAS,EAAE,QAAQ,KAAK,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG;AAC3D,YAAA,QAAQ,EAAE,QAAQ,KAAK,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AACxD,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE;AACjD,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,SAAS,EAAE,CAAC,CAAC,YAAY,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EACX,CAAC,EAAE,EAAE,GAAG,CAAC,CACV;AACD,YAAA,kBAAkB,EAAE,CAAC;AACtB,SAAA,CAAC,CAAA;AAEF,QAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE;AACrC,YAAA,UAAU,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACnD,SAAA;AAED,QAAA,IAAI,KAAc,CAAA;QAClB,IAAI,WAAW,GAAG,IAAI,CAAA;AAEtB,QAAA,QAAQ,QAAQ;YACd,KAAK,kBAAkB,CAAC,QAAQ;;AAE9B,gBAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,aAAa,CAAC,CAAA;;gBAE5C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,OAAO,+BAA4B,CAAC,CAAA;gBACzE,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;AACvD,gBAAA,WAAW,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,KAA+C,EAAC,cAAc,kDAAI,CAAA;gBACjF,MAAK;YACP,KAAK,kBAAkB,CAAC,MAAM;AAC5B,gBAAA,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;gBAC1B,MAAK;AACR,SAAA;AACD,QAAA,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;;;QAIvB,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAC7B,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAiB,KAAI;YACrD,KAAK,CAAC,cAAc,EAAE,CAAA;AACtB,YAAA,2BAA2B,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AACvD,SAAC,CAAC,CAAA;QAEF,IAAI,WAAW,KAAI,aAAa,KAAb,IAAA,IAAA,aAAa,uBAAb,aAAa,CAAE,OAAO,CAAA,EAAE;AACzC,YAAA,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,CAAA;AACtC,YAAA,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAACA,cAAgB,EAAE,IAAI,CAAC,CAAA;YACtE,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAA;YAEhE,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,KAAI;AACpC,gBAAA,MAAM,SAAS,GAAG,CAAA,EAAG,aAAa,CAAC,WAAW,OAAO,CAAA;gBACrD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC7C,gBAAA,IAAI,CAAC,KAAK;oBAAE,OAAM;AAElB,gBAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBACxF,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACpC,gBAAA,eAAe,CAAC,OAAO,CAACC,cAAgB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjE,aAAC,CAAC,CAAA;AAEF,YAAA,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAK;AAC1B,gBAAA,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;AACrC,aAAC,CAAC,CAAA;AACH,SAAA;AAED,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1E,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAEvC,OAAO;AACL,YAAA,OAAO,EAAE,UAAU;YACnB,KAAK;YACL,UAAU;YACV,QAAQ;SACT,CAAA;;AACF;;;;"}
1
+ {"version":3,"file":"map.js","sources":["../../../../src/components/leaflet-map/modules/map.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { select, Selection } from 'd3-selection'\nimport { GeoJSONSource, Map } from 'maplibre-gl'\nimport { feature } from 'topojson-client'\n\n// Types\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletMapConfig } from '../config'\n\n// Local Types\n\n// Utils\nimport { constraintMapView, mapboxglWheelEventThrottled } from '../renderer/mapboxgl-utils'\n\n// Styles\nimport * as s from '../style'\nimport { LeafletMapRenderer } from '../types'\n\nexport const initialMapCenter: L.LatLngExpression = [36, 14]\nexport const initialMapZoom = 1.9\n\nexport function updateTopoJson<T extends GenericDataRecord> (maplibreMap: Map, config: LeafletMapConfig<T>): void {\n const { topoJSONLayer } = config\n\n if (topoJSONLayer.sources) {\n const featureObject = topoJSONLayer.sources?.objects?.[topoJSONLayer.featureName]\n if (featureObject) {\n const mapSource = maplibreMap.getSource(topoJSONLayer.featureName) as GeoJSONSource\n const featureCollection = feature(topoJSONLayer.sources, featureObject)\n if (mapSource) {\n mapSource.setData(featureCollection)\n } else {\n maplibreMap.addSource(topoJSONLayer.featureName, { type: 'geojson', data: featureCollection })\n }\n }\n }\n\n const fillLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-area`)\n if (topoJSONLayer.fillProperty) {\n if (!fillLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-area`,\n type: 'fill',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-antialias': false,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'fill-opacity': topoJSONLayer.fillOpacity,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-area`, 'fill-color', [\n 'case',\n ['!', ['has', topoJSONLayer.fillProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.fillProperty],\n ])\n } else if (fillLayer) maplibreMap.removeLayer(`${topoJSONLayer.featureName}-area`)\n\n const strokeLayer = maplibreMap.getLayer(`${topoJSONLayer.featureName}-stroke`)\n if (topoJSONLayer.strokeProperty) {\n if (!strokeLayer) {\n maplibreMap.addLayer({\n id: `${topoJSONLayer.featureName}-stroke`,\n type: 'line',\n source: topoJSONLayer.featureName,\n paint: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-opacity': topoJSONLayer.strokeOpacity,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'line-width': topoJSONLayer.strokeWidth,\n },\n })\n }\n maplibreMap.setPaintProperty(`${topoJSONLayer.featureName}-stroke`, 'line-color', [\n 'case',\n ['!', ['has', topoJSONLayer.strokeProperty]],\n 'rgba(255, 255, 255, 0)',\n ['get', topoJSONLayer.strokeProperty],\n ])\n } else if (strokeLayer) { maplibreMap.removeLayer(`${topoJSONLayer.featureName}-stroke`) }\n}\n\nexport async function setupMap<T extends GenericDataRecord> (mapContainer: HTMLElement, config: LeafletMapConfig<T>): Promise<{\n leaflet: L.Map;\n layer: L.Layer;\n svgOverlay: Selection<SVGElement, any, HTMLElement, any>;\n svgGroup: Selection<SVGGElement, any, SVGElement, any>;\n}> {\n const { style, renderer, topoJSONLayer } = config\n const leaflet = await import('leaflet')\n const L = leaflet.default\n\n if (!style) {\n console.error('Unovis | Leaflet Map: Please provide style settings in the map configuration object')\n return\n }\n\n const leafletMap = L.map(mapContainer, {\n scrollWheelZoom: renderer === LeafletMapRenderer.Raster, // We define custom scroll event for MapboxGL to enabling smooth zooming\n zoomControl: false,\n zoomDelta: renderer === LeafletMapRenderer.Raster ? 1 : 0.5,\n zoomSnap: renderer === LeafletMapRenderer.Raster ? 1 : 0,\n attributionControl: true,\n center: initialMapCenter,\n zoom: initialMapZoom,\n minZoom: Math.sqrt(mapContainer.offsetWidth) / 17,\n maxZoom: 23,\n maxBounds: L.latLngBounds(\n [-75, -290],\n [85, 290]\n ),\n maxBoundsViscosity: 1,\n })\n\n for (const attr of config.attribution) {\n leafletMap.attributionControl.addAttribution(attr)\n }\n\n let layer: L.Layer\n let maplibreMap = null\n\n switch (renderer) {\n case LeafletMapRenderer.MapLibre:\n // eslint-disable-next-line no-case-declarations\n const maplibre = await import('maplibre-gl')\n // eslint-disable-next-line no-case-declarations\n const { getMaplibreGLLayer } = await import('../renderer/mapboxgl-layer')\n layer = getMaplibreGLLayer(config, L, maplibre.default)\n maplibreMap = (layer as ReturnType<typeof getMaplibreGLLayer>).getMaplibreMap?.()\n break\n case LeafletMapRenderer.Raster:\n layer = L.tileLayer(style)\n break\n }\n layer.addTo(leafletMap)\n\n // leaflet-mapbox-gl has a layer positioning issue on far zoom levels which leads to having wrong\n // map points projection. We constraint the view to prevent that.\n constraintMapView(leafletMap)\n select(mapContainer).on('wheel', (event: WheelEvent) => {\n event.preventDefault()\n mapboxglWheelEventThrottled(leafletMap, layer, event)\n })\n\n if (maplibreMap && topoJSONLayer?.sources) {\n const canvas = maplibreMap.getCanvas()\n const canvasSelection = select(canvas).classed(s.mapboxglCanvas, true)\n const tilePaneSelection = select(leafletMap.getPanes().tilePane)\n\n maplibreMap.on('mousemove', (event) => {\n const layerName = `${topoJSONLayer.featureName}-area`\n const layer = maplibreMap.getLayer(layerName)\n if (!layer) return\n\n const features = maplibreMap.queryRenderedFeatures(event.point, { layers: [layerName] })\n tilePaneSelection.datum(features[0])\n canvasSelection.classed(s.onFeatureHover, Boolean(features[0]))\n })\n\n maplibreMap.on('load', () => {\n updateTopoJson(maplibreMap, config)\n })\n }\n\n const svgOverlay = select(leafletMap.getPanes().overlayPane).append('svg')\n const svgGroup = svgOverlay.append('g')\n\n return {\n leaflet: leafletMap,\n layer,\n svgOverlay,\n svgGroup,\n }\n}\n"],"names":["s.mapboxglCanvas","s.onFeatureHover"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Selection } from 'd3-selection';
2
2
  import type L from 'leaflet';
3
- import { LeafletMapPoint } from '../types';
4
3
  import { GenericDataRecord } from "../../../types/data";
4
+ import { LeafletMapPoint } from '../types';
5
5
  import { LeafletMapConfigInterface } from '../config';
6
6
  export declare function createNodes<D extends GenericDataRecord>(selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>): void;
7
7
  export declare function updateNodes<D extends GenericDataRecord>(selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>, config: LeafletMapConfigInterface<D>, leafletMap: L.Map, mapMoveZoomUpdateOnly: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sources":["../../../../src/components/leaflet-map/modules/node.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { color } from 'd3-color'\nimport type L from 'leaflet'\n\n// Types\nimport { Rect } from 'types/misc'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { estimateTextSize, trimTextMiddle } from 'utils/text'\nimport { clamp, getString } from 'utils/data'\nimport { getCSSVariableValueInPixels, rectIntersect } from 'utils/misc'\nimport { hexToBrightness } from 'utils/color'\nimport { getPointPos } from './utils'\n\n// Local Types\nimport { LeafletMapPointDatum, LeafletMapClusterDatum, LeafletMapPoint, LeafletMapPointShape } from '../types'\nimport { GenericDataRecord } from 'types/data'\n\n// Modules\nimport { updateDonut } from './donut'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\n\nimport * as s from '../style'\n\nconst BOTTOM_LABEL_TOP_MARGIN = 10\n\nexport function createNodes<D extends GenericDataRecord> (selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>): void {\n selection.append('path')\n .attr('class', s.pointPath)\n .attr('id', d => `point-${d.id}`)\n .style('opacity', 0)\n\n selection.append('g')\n .attr('class', s.donutCluster)\n\n selection.append('text')\n .attr('class', s.innerLabel)\n .attr('id', d => `label-${d.id}`)\n .attr('dy', '0.32em')\n\n selection.append('text')\n .attr('class', s.bottomLabel)\n .attr('dy', '0.32em')\n .attr('opacity', 1)\n}\n\nexport function updateNodes<D extends GenericDataRecord> (\n selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>,\n config: LeafletMapConfigInterface<D>,\n leafletMap: L.Map,\n mapMoveZoomUpdateOnly: boolean\n): void {\n selection.each((d: LeafletMapPoint<D>, i: number, elements: SVGGElement[]) => {\n const group = select(elements[i])\n const node: Selection<SVGPathElement, any, SVGGElement, any> = group.select(`.${s.pointPath}`)\n const innerLabel: Selection<SVGTextElement, any, SVGElement, any> = group.select(`.${s.innerLabel}`)\n const bottomLabel: Selection<SVGTextElement, any, SVGElement, any> = group.select(`.${s.bottomLabel}`)\n\n const { x, y } = getPointPos(d, leafletMap)\n const donutData = d.donutData\n const isCluster = (d.properties as LeafletMapClusterDatum<D>).cluster\n const fromExpandedCluster = !!(d.properties as LeafletMapPointDatum<D>).expandedClusterPoint\n\n const innerLabelText = getString(d.properties, isCluster ? config.clusterLabel : config.pointLabel) ?? ''\n const bottomLabelText = getString(d.properties, isCluster ? config.clusterBottomLabel : config.pointBottomLabel) ?? ''\n const pointCursor = getString(d.properties, config.pointCursor)\n const pointShape = getString(d.properties as LeafletMapPointDatum<D>, config.pointShape)\n const isRing = pointShape === LeafletMapPointShape.Ring\n const isCircular = (pointShape === LeafletMapPointShape.Circle) || isRing || isCluster || !pointShape\n\n // To get updated on every render call\n const ringWidth = (isCluster && config.clusterRingWidth) || (isRing && config.pointRingWidth) || 0\n group.attr('transform', `translate(${x},${y})`)\n group.select(`.${s.donutCluster}`)\n .call(updateDonut, donutData, isCircular ? d.radius : 0, ringWidth)\n\n node.attr('d', d.path)\n node.style('cursor', isCluster ? 'pointer' : pointCursor)\n bottomLabel.attr('transform', `translate(0,${d.radius + BOTTOM_LABEL_TOP_MARGIN})`)\n innerLabel.attr('font-size', () => {\n const fontSize = d.radius / Math.pow(innerLabelText.length, 0.4)\n return clamp(fontSize, fontSize, 16)\n })\n\n if (mapMoveZoomUpdateOnly) return\n\n // Updates required only when data changes\n node\n .classed(s.pointPathCluster, isCluster)\n .classed(s.pointPathRing, isRing)\n .style('fill', d.color)\n .style('stroke', d.color) // being used for hover\n .style('stroke-width', ringWidth)\n .style('opacity', 1)\n\n innerLabel\n .text(innerLabelText || null)\n .attr('visibility', innerLabelText ? null : 'hidden')\n .style('fill', () => {\n const c = getComputedStyle(node.node()).fill\n const hex = color(c)?.hex()\n if (!hex) return null\n\n const brightness = hexToBrightness(hex)\n return brightness > 0.5 ? 'var(--vis-map-point-label-text-color-dark)' : 'var(--vis-map-point-label-text-color-light)'\n })\n\n const bottomLabelTextTrimmed = trimTextMiddle(bottomLabelText, 15)\n bottomLabel\n .text(bottomLabelTextTrimmed)\n .attr('font-size', getCSSVariableValueInPixels('var(--vis-map-point-bottom-label-font-size)', selection.node()))\n .attr('visibility', fromExpandedCluster ? 'hidden' : null)\n })\n}\n\nexport function collideLabels<D extends GenericDataRecord> (\n selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>,\n leafletMap: L.Map\n): void {\n selection.each((datum1: LeafletMapPoint<D>, i, elements) => {\n const group1HTMLNode = elements[i]\n const group1 = select(group1HTMLNode)\n const label1: Selection<SVGTextElement, any, SVGElement, any> = group1.select(`.${s.bottomLabel}`)\n // eslint-disable-next-line dot-notation\n group1HTMLNode['labelVisible'] = true\n\n // Calculate bounding rect of point's bottom label\n const bottomLabelFontSizePx = getCSSVariableValueInPixels('var(--vis-map-point-bottom-label-font-size)', selection.node())\n const p1Pos = getPointPos(datum1, leafletMap)\n const label1Size = estimateTextSize(label1, bottomLabelFontSizePx, 0.32, true, 0.6)\n const label1BoundingRect: Rect = {\n x: p1Pos.x - label1Size.width / 2,\n y: p1Pos.y - label1Size.height / 2 + datum1.radius + BOTTOM_LABEL_TOP_MARGIN,\n width: label1Size.width,\n height: label1Size.height,\n }\n\n for (let j = 0; j < elements.length; j += 1) {\n if (i === j) continue\n const group2HTMLNode = elements[j]\n const group2 = select(group2HTMLNode)\n const label2: Selection<SVGTextElement, any, SVGElement, any> = group2.select(`.${s.bottomLabel}`)\n const datum2 = group2.datum() as LeafletMapPoint<D>\n\n // Calculate bounding rect of the second point's circle\n const p2Pos = getPointPos(datum2, leafletMap)\n const point2BoundingRect = {\n x: p2Pos.x - datum2.radius,\n y: p2Pos.y - datum2.radius,\n width: 2 * datum2.radius,\n height: 2 * datum2.radius,\n }\n\n let intersect = rectIntersect(label1BoundingRect, point2BoundingRect)\n\n // If there's not intersection, check a collision with the second point's label\n // eslint-disable-next-line dot-notation\n const label2Visible = group2HTMLNode['labelVisible']\n if (!intersect && label2Visible) {\n const label2Size = estimateTextSize(label2, bottomLabelFontSizePx, 0.32, true, 0.6)\n intersect = rectIntersect(label1BoundingRect, {\n x: p2Pos.x - label2Size.width / 2,\n y: p2Pos.y + datum2.radius + BOTTOM_LABEL_TOP_MARGIN - label2Size.height / 2,\n width: label2Size.width,\n height: label2Size.height,\n })\n }\n\n if (intersect) {\n // eslint-disable-next-line dot-notation\n group1HTMLNode['labelVisible'] = false\n break\n }\n }\n\n // eslint-disable-next-line dot-notation\n smartTransition(label1, 0).attr('opacity', group1HTMLNode['labelVisible'] ? 1 : 0)\n })\n}\n\nexport function removeNodes<D extends GenericDataRecord> (selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>): void {\n selection.remove()\n}\n"],"names":["s.pointPath","s.donutCluster","s.innerLabel","s.bottomLabel","innerLabel","bottomLabel","s.pointPathCluster","s.pointPathRing"],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sources":["../../../../src/components/leaflet-map/modules/node.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { color } from 'd3-color'\nimport type L from 'leaflet'\n\n// Types\nimport { Rect } from 'types/misc'\nimport { GenericDataRecord } from 'types/data'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { estimateTextSize, trimTextMiddle } from 'utils/text'\nimport { clamp, getString } from 'utils/data'\nimport { getCSSVariableValueInPixels, rectIntersect } from 'utils/misc'\nimport { hexToBrightness } from 'utils/color'\nimport { getPointPos } from './utils'\n\n// Local Types\nimport { LeafletMapPointDatum, LeafletMapClusterDatum, LeafletMapPoint, LeafletMapPointShape } from '../types'\n\n// Modules\nimport { updateDonut } from './donut'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\n\nimport * as s from '../style'\n\nconst BOTTOM_LABEL_TOP_MARGIN = 10\n\nexport function createNodes<D extends GenericDataRecord> (selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>): void {\n selection.append('path')\n .attr('class', s.pointPath)\n .attr('id', d => `point-${d.id}`)\n .style('opacity', 0)\n\n selection.append('g')\n .attr('class', s.donutCluster)\n\n selection.append('text')\n .attr('class', s.innerLabel)\n .attr('id', d => `label-${d.id}`)\n .attr('dy', '0.32em')\n\n selection.append('text')\n .attr('class', s.bottomLabel)\n .attr('dy', '0.32em')\n .attr('opacity', 1)\n}\n\nexport function updateNodes<D extends GenericDataRecord> (\n selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>,\n config: LeafletMapConfigInterface<D>,\n leafletMap: L.Map,\n mapMoveZoomUpdateOnly: boolean\n): void {\n selection.each((d: LeafletMapPoint<D>, i: number, elements: SVGGElement[]) => {\n const group = select(elements[i])\n const node: Selection<SVGPathElement, any, SVGGElement, any> = group.select(`.${s.pointPath}`)\n const innerLabel: Selection<SVGTextElement, any, SVGElement, any> = group.select(`.${s.innerLabel}`)\n const bottomLabel: Selection<SVGTextElement, any, SVGElement, any> = group.select(`.${s.bottomLabel}`)\n\n const { x, y } = getPointPos(d, leafletMap)\n const donutData = d.donutData\n const isCluster = (d.properties as LeafletMapClusterDatum<D>).cluster\n const fromExpandedCluster = !!(d.properties as LeafletMapPointDatum<D>).expandedClusterPoint\n\n const innerLabelText = getString(d.properties, isCluster ? config.clusterLabel : config.pointLabel) ?? ''\n const bottomLabelText = getString(d.properties, isCluster ? config.clusterBottomLabel : config.pointBottomLabel) ?? ''\n const pointCursor = getString(d.properties, config.pointCursor)\n const pointShape = getString(d.properties as LeafletMapPointDatum<D>, config.pointShape)\n const isRing = pointShape === LeafletMapPointShape.Ring\n const isCircular = (pointShape === LeafletMapPointShape.Circle) || isRing || isCluster || !pointShape\n\n // To get updated on every render call\n const ringWidth = (isCluster && config.clusterRingWidth) || (isRing && config.pointRingWidth) || 0\n group.attr('transform', `translate(${x},${y})`)\n group.select(`.${s.donutCluster}`)\n .call(updateDonut, donutData, isCircular ? d.radius : 0, ringWidth)\n\n node.attr('d', d.path)\n node.style('cursor', isCluster ? 'pointer' : pointCursor)\n bottomLabel.attr('transform', `translate(0,${d.radius + BOTTOM_LABEL_TOP_MARGIN})`)\n innerLabel.attr('font-size', () => {\n const fontSize = d.radius / Math.pow(innerLabelText.length, 0.4)\n return clamp(fontSize, fontSize, 16)\n })\n\n if (mapMoveZoomUpdateOnly) return\n\n // Updates required only when data changes\n node\n .classed(s.pointPathCluster, isCluster)\n .classed(s.pointPathRing, isRing)\n .style('fill', d.color)\n .style('stroke', d.color) // being used for hover\n .style('stroke-width', ringWidth)\n .style('opacity', 1)\n\n innerLabel\n .text(innerLabelText || null)\n .attr('visibility', innerLabelText ? null : 'hidden')\n .style('fill', () => {\n const c = getComputedStyle(node.node()).fill\n const hex = color(c)?.hex()\n if (!hex) return null\n\n const brightness = hexToBrightness(hex)\n return brightness > 0.5 ? 'var(--vis-map-point-label-text-color-dark)' : 'var(--vis-map-point-label-text-color-light)'\n })\n\n const bottomLabelTextTrimmed = trimTextMiddle(bottomLabelText, 15)\n bottomLabel\n .text(bottomLabelTextTrimmed)\n .attr('font-size', getCSSVariableValueInPixels('var(--vis-map-point-bottom-label-font-size)', selection.node()))\n .attr('visibility', fromExpandedCluster ? 'hidden' : null)\n })\n}\n\nexport function collideLabels<D extends GenericDataRecord> (\n selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>,\n leafletMap: L.Map\n): void {\n selection.each((datum1: LeafletMapPoint<D>, i, elements) => {\n const group1HTMLNode = elements[i]\n const group1 = select(group1HTMLNode)\n const label1: Selection<SVGTextElement, any, SVGElement, any> = group1.select(`.${s.bottomLabel}`)\n // eslint-disable-next-line dot-notation\n group1HTMLNode['labelVisible'] = true\n\n // Calculate bounding rect of point's bottom label\n const bottomLabelFontSizePx = getCSSVariableValueInPixels('var(--vis-map-point-bottom-label-font-size)', selection.node())\n const p1Pos = getPointPos(datum1, leafletMap)\n const label1Size = estimateTextSize(label1, bottomLabelFontSizePx, 0.32, true, 0.6)\n const label1BoundingRect: Rect = {\n x: p1Pos.x - label1Size.width / 2,\n y: p1Pos.y - label1Size.height / 2 + datum1.radius + BOTTOM_LABEL_TOP_MARGIN,\n width: label1Size.width,\n height: label1Size.height,\n }\n\n for (let j = 0; j < elements.length; j += 1) {\n if (i === j) continue\n const group2HTMLNode = elements[j]\n const group2 = select(group2HTMLNode)\n const label2: Selection<SVGTextElement, any, SVGElement, any> = group2.select(`.${s.bottomLabel}`)\n const datum2 = group2.datum() as LeafletMapPoint<D>\n\n // Calculate bounding rect of the second point's circle\n const p2Pos = getPointPos(datum2, leafletMap)\n const point2BoundingRect = {\n x: p2Pos.x - datum2.radius,\n y: p2Pos.y - datum2.radius,\n width: 2 * datum2.radius,\n height: 2 * datum2.radius,\n }\n\n let intersect = rectIntersect(label1BoundingRect, point2BoundingRect)\n\n // If there's not intersection, check a collision with the second point's label\n // eslint-disable-next-line dot-notation\n const label2Visible = group2HTMLNode['labelVisible']\n if (!intersect && label2Visible) {\n const label2Size = estimateTextSize(label2, bottomLabelFontSizePx, 0.32, true, 0.6)\n intersect = rectIntersect(label1BoundingRect, {\n x: p2Pos.x - label2Size.width / 2,\n y: p2Pos.y + datum2.radius + BOTTOM_LABEL_TOP_MARGIN - label2Size.height / 2,\n width: label2Size.width,\n height: label2Size.height,\n })\n }\n\n if (intersect) {\n // eslint-disable-next-line dot-notation\n group1HTMLNode['labelVisible'] = false\n break\n }\n }\n\n // eslint-disable-next-line dot-notation\n smartTransition(label1, 0).attr('opacity', group1HTMLNode['labelVisible'] ? 1 : 0)\n })\n}\n\nexport function removeNodes<D extends GenericDataRecord> (selection: Selection<SVGGElement, LeafletMapPoint<D>, SVGGElement, Record<string, unknown>[]>): void {\n selection.remove()\n}\n"],"names":["s.pointPath","s.donutCluster","s.innerLabel","s.bottomLabel","innerLabel","bottomLabel","s.pointPathCluster","s.pointPathRing"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type L from 'leaflet';
2
2
  import { Selection } from 'd3-selection';
3
- import { LeafletMapPoint } from '../types';
4
3
  import { GenericDataRecord } from "../../../types/data";
4
+ import { LeafletMapPoint } from '../types';
5
5
  import { LeafletMapConfigInterface } from '../config';
6
6
  export declare function createNodeSelectionRing(selection: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>): void;
7
7
  export declare function updateNodeSelectionRing<D extends GenericDataRecord>(selection: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>, selectedPoint: LeafletMapPoint<D>, pointData: LeafletMapPoint<D>[], config: LeafletMapConfigInterface<D>, leafletMap: L.Map): void;
@@ -1 +1 @@
1
- {"version":3,"file":"selectionRing.js","sources":["../../../../src/components/leaflet-map/modules/selectionRing.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { Selection } from 'd3-selection'\n\n// Utils\nimport { getString } from 'utils/data'\nimport { getPointPos } from './utils'\n\n// Local Types\nimport { LeafletMapPoint, LeafletMapPointDatum } from '../types'\nimport { GenericDataRecord } from 'types/data'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\n\nimport * as s from '../style'\n\n\nexport function createNodeSelectionRing (selection: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>): void {\n selection.datum({ _zIndex: 3 })\n selection.append('path').attr('class', s.pointSelection)\n}\n\nexport function updateNodeSelectionRing<D extends GenericDataRecord> (\n selection: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>,\n selectedPoint: LeafletMapPoint<D>,\n pointData: LeafletMapPoint<D>[],\n config: LeafletMapConfigInterface<D>,\n leafletMap: L.Map\n): void {\n selection.attr('class', s.pointSelectionRing)\n const pointSelection = selection.select(`.${s.pointSelection}`)\n if (selectedPoint) {\n const isCluster = selectedPoint.isCluster\n const selectedPointId: string | undefined = getString(selectedPoint.properties as LeafletMapPointDatum<D>, config.pointId)\n const foundPoint = pointData.find(d =>\n isCluster\n ? (d.id === selectedPoint.id)\n : (selectedPointId && (getString(d.properties as LeafletMapPointDatum<D>, config.pointId) === selectedPointId))\n )\n selection\n .attr('transform', d => {\n const { x, y } = getPointPos<D>(foundPoint ?? selectedPoint, leafletMap)\n return `translate(${x},${y})`\n })\n .classed(`${(selectedPoint.properties as LeafletMapPointDatum<D>).shape}`, true)\n\n pointSelection\n .classed('active', Boolean(foundPoint))\n .attr('d', foundPoint ? foundPoint.path : null)\n .style('fill', 'transparent')\n .style('stroke-width', 1)\n .style('stroke', d => {\n const node = foundPoint || selectedPoint\n return node?.color\n })\n } else {\n pointSelection.classed('active', false)\n }\n}\n"],"names":["s.pointSelection","s.pointSelectionRing","pointSelection"],"mappings":";;;;AAGA;AAcM,SAAU,uBAAuB,CAAE,SAAmG,EAAA;IAC1I,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AAC/B,IAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,cAAgB,CAAC,CAAA;AAC1D,CAAC;AAEK,SAAU,uBAAuB,CACrC,SAAmG,EACnG,aAAiC,EACjC,SAA+B,EAC/B,MAAoC,EACpC,UAAiB,EAAA;IAEjB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAEC,kBAAoB,CAAC,CAAA;AAC7C,IAAA,MAAMC,gBAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAF,cAAgB,CAAE,CAAA,CAAC,CAAA;AAC/D,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAA;AACzC,QAAA,MAAM,eAAe,GAAuB,SAAS,CAAC,aAAa,CAAC,UAAqC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1H,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IACjC,SAAS;eACJ,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE;eACzB,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,UAAqC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,eAAe,CAAC,CAAC,CAClH,CAAA;QACD,SAAS;AACN,aAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAG;AACrB,YAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,CAAI,UAAU,KAAV,IAAA,IAAA,UAAU,cAAV,UAAU,GAAI,aAAa,EAAE,UAAU,CAAC,CAAA;AACxE,YAAA,OAAO,CAAa,UAAA,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,CAAA;AAC/B,SAAC,CAAC;aACD,OAAO,CAAC,CAAI,EAAA,aAAa,CAAC,UAAsC,CAAC,KAAK,CAAE,CAAA,EAAE,IAAI,CAAC,CAAA;QAElFE,gBAAc;AACX,aAAA,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,aAAA,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9C,aAAA,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;AAC5B,aAAA,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;AACxB,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAG;AACnB,YAAA,MAAM,IAAI,GAAG,UAAU,IAAI,aAAa,CAAA;AACxC,YAAA,OAAO,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA;AACpB,SAAC,CAAC,CAAA;AACL,KAAA;AAAM,SAAA;AACL,QAAAA,gBAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACxC,KAAA;AACH;;;;"}
1
+ {"version":3,"file":"selectionRing.js","sources":["../../../../src/components/leaflet-map/modules/selectionRing.ts"],"sourcesContent":["import type L from 'leaflet'\nimport { Selection } from 'd3-selection'\n\n// Types\nimport { GenericDataRecord } from 'types/data'\n\n// Utils\nimport { getString } from 'utils/data'\nimport { getPointPos } from './utils'\n\n// Local Types\nimport { LeafletMapPoint, LeafletMapPointDatum } from '../types'\n\n// Config\nimport { LeafletMapConfigInterface } from '../config'\n\nimport * as s from '../style'\n\n\nexport function createNodeSelectionRing (selection: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>): void {\n selection.datum({ _zIndex: 3 })\n selection.append('path').attr('class', s.pointSelection)\n}\n\nexport function updateNodeSelectionRing<D extends GenericDataRecord> (\n selection: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>,\n selectedPoint: LeafletMapPoint<D>,\n pointData: LeafletMapPoint<D>[],\n config: LeafletMapConfigInterface<D>,\n leafletMap: L.Map\n): void {\n selection.attr('class', s.pointSelectionRing)\n const pointSelection = selection.select(`.${s.pointSelection}`)\n if (selectedPoint) {\n const isCluster = selectedPoint.isCluster\n const selectedPointId: string | undefined = getString(selectedPoint.properties as LeafletMapPointDatum<D>, config.pointId)\n const foundPoint = pointData.find(d =>\n isCluster\n ? (d.id === selectedPoint.id)\n : (selectedPointId && (getString(d.properties as LeafletMapPointDatum<D>, config.pointId) === selectedPointId))\n )\n selection\n .attr('transform', d => {\n const { x, y } = getPointPos<D>(foundPoint ?? selectedPoint, leafletMap)\n return `translate(${x},${y})`\n })\n .classed(`${(selectedPoint.properties as LeafletMapPointDatum<D>).shape}`, true)\n\n pointSelection\n .classed('active', Boolean(foundPoint))\n .attr('d', foundPoint ? foundPoint.path : null)\n .style('fill', 'transparent')\n .style('stroke-width', 1)\n .style('stroke', d => {\n const node = foundPoint || selectedPoint\n return node?.color\n })\n } else {\n pointSelection.classed('active', false)\n }\n}\n"],"names":["s.pointSelection","s.pointSelectionRing","pointSelection"],"mappings":";;;;AAMA;AAaM,SAAU,uBAAuB,CAAE,SAAmG,EAAA;IAC1I,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AAC/B,IAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,cAAgB,CAAC,CAAA;AAC1D,CAAC;AAEK,SAAU,uBAAuB,CACrC,SAAmG,EACnG,aAAiC,EACjC,SAA+B,EAC/B,MAAoC,EACpC,UAAiB,EAAA;IAEjB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAEC,kBAAoB,CAAC,CAAA;AAC7C,IAAA,MAAMC,gBAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAF,cAAgB,CAAE,CAAA,CAAC,CAAA;AAC/D,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAA;AACzC,QAAA,MAAM,eAAe,GAAuB,SAAS,CAAC,aAAa,CAAC,UAAqC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1H,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IACjC,SAAS;eACJ,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE;eACzB,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,UAAqC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,eAAe,CAAC,CAAC,CAClH,CAAA;QACD,SAAS;AACN,aAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAG;AACrB,YAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,CAAI,UAAU,KAAV,IAAA,IAAA,UAAU,cAAV,UAAU,GAAI,aAAa,EAAE,UAAU,CAAC,CAAA;AACxE,YAAA,OAAO,CAAa,UAAA,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,CAAA;AAC/B,SAAC,CAAC;aACD,OAAO,CAAC,CAAI,EAAA,aAAa,CAAC,UAAsC,CAAC,KAAK,CAAE,CAAA,EAAE,IAAI,CAAC,CAAA;QAElFE,gBAAc;AACX,aAAA,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,aAAA,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9C,aAAA,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;AAC5B,aAAA,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;AACxB,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAG;AACnB,YAAA,MAAM,IAAI,GAAG,UAAU,IAAI,aAAa,CAAA;AACxC,YAAA,OAAO,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA;AACpB,SAAC,CAAC,CAAA;AACL,KAAA;AAAM,SAAA;AACL,QAAAA,gBAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACxC,KAAA;AACH;;;;"}
@@ -14,8 +14,8 @@ export declare class Line<Datum> extends XYComponentCore<Datum, LineConfig<Datum
14
14
  curve: CurveFactoryLineOnly;
15
15
  events: {
16
16
  [x: string]: {
17
- mouseover: any;
18
- mouseleave: any;
17
+ mouseover: (datum: any, i: any, els: any) => void;
18
+ mouseleave: (d: any, i: any, els: any) => void;
19
19
  };
20
20
  };
21
21
  constructor(config?: LineConfigInterface<Datum>);
@@ -23,8 +23,11 @@ export declare class Sankey<N extends SankeyInputNode, L extends SankeyInputLink
23
23
  private _highlightActive;
24
24
  events: {
25
25
  [x: string]: {
26
- mouseenter: any;
27
- mouseleave: any;
26
+ mouseenter: (d: SankeyNode<N, L>, event: MouseEvent) => void;
27
+ mouseleave: (d: SankeyNode<N, L>, event: MouseEvent) => void;
28
+ } | {
29
+ mouseenter: (d: SankeyLink<N, L>, event: MouseEvent) => void;
30
+ mouseleave: (d: SankeyLink<N, L>, event: MouseEvent) => void;
28
31
  };
29
32
  };
30
33
  constructor(config?: SankeyConfigInterface<N, L>);
@@ -1,5 +1,6 @@
1
1
  import { XYComponentCore } from "../../core/xy-component";
2
2
  import { Spacing } from "../../types/spacing";
3
+ import { ScatterPoint } from './types';
3
4
  import { ScatterConfig, ScatterConfigInterface } from './config';
4
5
  import * as s from './style';
5
6
  export declare class Scatter<Datum> extends XYComponentCore<Datum, ScatterConfig<Datum>, ScatterConfigInterface<Datum>> {
@@ -7,8 +8,8 @@ export declare class Scatter<Datum> extends XYComponentCore<Datum, ScatterConfig
7
8
  config: ScatterConfig<Datum>;
8
9
  events: {
9
10
  [x: string]: {
10
- mouseenter: any;
11
- mouseleave: any;
11
+ mouseenter: (d: ScatterPoint<Datum>, event: MouseEvent) => void;
12
+ mouseleave: (d: ScatterPoint<Datum>, event: MouseEvent) => void;
12
13
  };
13
14
  };
14
15
  private _pointData;
@@ -6,7 +6,7 @@ export declare class Timeline<Datum> extends XYComponentCore<Datum, TimelineConf
6
6
  config: TimelineConfig<Datum>;
7
7
  events: {
8
8
  [x: string]: {
9
- wheel: any;
9
+ wheel: (d: unknown, event: WheelEvent) => void;
10
10
  };
11
11
  };
12
12
  private _background;
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.0.1-beta.5",
4
+ "version": "1.0.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/f5/unovis.git",
package/utils/color.d.ts CHANGED
@@ -7,3 +7,5 @@ export declare function hexToRgb(hex: string): {
7
7
  b: number;
8
8
  };
9
9
  export declare function hexToBrightness(hex: string): number;
10
+ export declare function getHexString(s: string, context: HTMLElement | SVGElement): string;
11
+ export declare function getHexValue(s: string, context: HTMLElement | SVGElement): string;
package/utils/color.js CHANGED
@@ -1,7 +1,8 @@
1
+ import { color } from 'd3-color';
1
2
  import { getCSSColorVariable } from '../styles/colors.js';
2
3
  import { getString, isNumber } from './data.js';
4
+ import { isStringCSSVariable, getCSSVariableValue } from './misc.js';
3
5
 
4
- // Core
5
6
  /** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */
6
7
  function getColor(d, accessor, index, dontFallbackToCssVar) {
7
8
  if (Array.isArray(accessor) && isFinite(index))
@@ -20,7 +21,18 @@ function hexToRgb(hex) {
20
21
  function hexToBrightness(hex) {
21
22
  const rgb = hexToRgb(hex);
22
23
  return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255;
24
+ }
25
+ function getHexString(s, context) {
26
+ if (s.match(/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i))
27
+ return s;
28
+ if (isStringCSSVariable(s))
29
+ return getCSSVariableValue(s, context);
30
+ }
31
+ function getHexValue(s, context) {
32
+ var _a;
33
+ const hex = getHexString(s, context);
34
+ return (_a = color(hex)) === null || _a === void 0 ? void 0 : _a.formatHex();
23
35
  }
24
36
 
25
- export { getColor, hexToBrightness, hexToRgb };
37
+ export { getColor, getHexString, getHexValue, hexToBrightness, hexToRgb };
26
38
  //# sourceMappingURL=color.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","sources":["../../src/utils/color.ts"],"sourcesContent":["// Core\nimport { getCSSColorVariable } from 'styles/colors'\n\n// Utils\nimport { getString, isNumber } from 'utils/data'\nimport { ColorAccessor, StringAccessor } from 'types/accessor'\n\n/** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */\nexport function getColor<T> (\n d: T,\n accessor: ColorAccessor<T>,\n index?: number,\n dontFallbackToCssVar?: boolean\n): string | null {\n if (Array.isArray(accessor) && isFinite(index)) return accessor[index % accessor.length]\n\n const value = getString(d, accessor as StringAccessor<T>, index)\n return (value || ((isNumber(index) && !dontFallbackToCssVar) ? `var(${getCSSColorVariable(index)})` : null))\n}\n\nexport function hexToRgb (hex: string): { r: number; g: number; b: number } {\n const parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return parsed ? {\n r: parseInt(parsed[1], 16),\n g: parseInt(parsed[2], 16),\n b: parseInt(parsed[3], 16),\n } : { r: 0, g: 0, b: 0 }\n}\n\nexport function hexToBrightness (hex: string): number {\n const rgb = hexToRgb(hex)\n return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255\n}\n"],"names":[],"mappings":";;;AAAA;AAOA;AACM,SAAU,QAAQ,CACtB,CAAI,EACJ,QAA0B,EAC1B,KAAc,EACd,oBAA8B,EAAA;IAE9B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAExF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,QAA6B,EAAE,KAAK,CAAC,CAAA;AAChE,IAAA,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAO,IAAA,EAAA,mBAAmB,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC,EAAC;AAC9G,CAAC;AAEK,SAAU,QAAQ,CAAE,GAAW,EAAA;IACnC,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpE,OAAO,MAAM,GAAG;QACd,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3B,KAAA,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AAC1B,CAAC;AAEK,SAAU,eAAe,CAAE,GAAW,EAAA;AAC1C,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAA;AACjE;;;;"}
1
+ {"version":3,"file":"color.js","sources":["../../src/utils/color.ts"],"sourcesContent":["import { color } from 'd3-color'\n\n// Core\nimport { getCSSColorVariable } from 'styles/colors'\n\n// Utils\nimport { ColorAccessor, StringAccessor } from 'types/accessor'\nimport { getString, isNumber } from 'utils/data'\nimport { isStringCSSVariable, getCSSVariableValue } from 'utils/misc'\n\n/** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */\nexport function getColor<T> (\n d: T,\n accessor: ColorAccessor<T>,\n index?: number,\n dontFallbackToCssVar?: boolean\n): string | null {\n if (Array.isArray(accessor) && isFinite(index)) return accessor[index % accessor.length]\n\n const value = getString(d, accessor as StringAccessor<T>, index)\n return (value || ((isNumber(index) && !dontFallbackToCssVar) ? `var(${getCSSColorVariable(index)})` : null))\n}\n\nexport function hexToRgb (hex: string): { r: number; g: number; b: number } {\n const parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return parsed ? {\n r: parseInt(parsed[1], 16),\n g: parseInt(parsed[2], 16),\n b: parseInt(parsed[3], 16),\n } : { r: 0, g: 0, b: 0 }\n}\n\nexport function hexToBrightness (hex: string): number {\n const rgb = hexToRgb(hex)\n return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255\n}\n\nexport function getHexString (s: string, context: HTMLElement | SVGElement): string {\n if (s.match(/^#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i)) return s\n if (isStringCSSVariable(s)) return getCSSVariableValue(s, context)\n}\n\nexport function getHexValue (s: string, context: HTMLElement | SVGElement): string {\n const hex = getHexString(s, context)\n return color(hex)?.formatHex()\n}\n"],"names":[],"mappings":";;;;;AAUA;AACM,SAAU,QAAQ,CACtB,CAAI,EACJ,QAA0B,EAC1B,KAAc,EACd,oBAA8B,EAAA;IAE9B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAExF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,QAA6B,EAAE,KAAK,CAAC,CAAA;AAChE,IAAA,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAO,IAAA,EAAA,mBAAmB,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC,EAAC;AAC9G,CAAC;AAEK,SAAU,QAAQ,CAAE,GAAW,EAAA;IACnC,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpE,OAAO,MAAM,GAAG;QACd,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3B,KAAA,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AAC1B,CAAC;AAEK,SAAU,eAAe,CAAE,GAAW,EAAA;AAC1C,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAA;AACjE,CAAC;AAEe,SAAA,YAAY,CAAE,CAAS,EAAE,OAAiC,EAAA;AACxE,IAAA,IAAI,CAAC,CAAC,KAAK,CAAC,0CAA0C,CAAC;AAAE,QAAA,OAAO,CAAC,CAAA;IACjE,IAAI,mBAAmB,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AACpE,CAAC;AAEe,SAAA,WAAW,CAAE,CAAS,EAAE,OAAiC,EAAA;;IACvE,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,CAAA,EAAA,GAAA,KAAK,CAAC,GAAG,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,EAAE,CAAA;AAChC;;;;"}