@unovis/ts 1.0.3-beta.4 → 1.0.3-beta.6
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.
- package/components/flow-legend/config.d.ts +4 -1
- package/components/flow-legend/config.js +2 -1
- package/components/flow-legend/config.js.map +1 -1
- package/components/flow-legend/index.js +16 -14
- package/components/flow-legend/index.js.map +1 -1
- package/components/flow-legend/style.d.ts +1 -1
- package/components/flow-legend/style.js +5 -2
- package/components/flow-legend/style.js.map +1 -1
- package/components/leaflet-map/index.js +1 -1
- package/components/leaflet-map/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,6 +12,8 @@ export interface FlowLegendConfigInterface {
|
|
|
12
12
|
labelFontSize?: number;
|
|
13
13
|
/** Arrow symbol. Default: `'▶'` */
|
|
14
14
|
arrowSymbol?: string;
|
|
15
|
+
/** Color of the arrow. Default: `undefined` */
|
|
16
|
+
arrowColor?: string;
|
|
15
17
|
/** Callback function for the legend item click. Default: `undefined` */
|
|
16
18
|
onLegendItemClick?: ((label?: string, i?: number) => void);
|
|
17
19
|
}
|
|
@@ -19,8 +21,9 @@ export declare class FlowLegendConfig extends Config implements FlowLegendConfig
|
|
|
19
21
|
customWidth: any;
|
|
20
22
|
items: any[];
|
|
21
23
|
labelFontSize: number;
|
|
22
|
-
arrowSymbol: string;
|
|
23
24
|
lineColor: any;
|
|
24
25
|
labelColor: any;
|
|
26
|
+
arrowSymbol: string;
|
|
27
|
+
arrowColor: any;
|
|
25
28
|
onLegendItemClick: any;
|
|
26
29
|
}
|
|
@@ -6,9 +6,10 @@ class FlowLegendConfig extends Config {
|
|
|
6
6
|
this.customWidth = undefined;
|
|
7
7
|
this.items = [];
|
|
8
8
|
this.labelFontSize = 12;
|
|
9
|
-
this.arrowSymbol = '▶';
|
|
10
9
|
this.lineColor = undefined;
|
|
11
10
|
this.labelColor = undefined;
|
|
11
|
+
this.arrowSymbol = '▶';
|
|
12
|
+
this.arrowColor = undefined;
|
|
12
13
|
this.onLegendItemClick = undefined;
|
|
13
14
|
}
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../src/components/flow-legend/config.ts"],"sourcesContent":["import { Config } from 'core/config'\n\nexport interface FlowLegendConfigInterface {\n /** Custom width of the component. Default: `undefined` */\n customWidth?: number;\n /** Legend items array as string[]. Default: `[]` */\n items?: string[];\n /** Color of the flow line. Default: `undefined` */\n lineColor?: string;\n /** Color of the flow label. Default: `undefined` */\n labelColor?: string;\n /** Font size of flow labels in pixels. Default: `12` */\n labelFontSize?: number;\n /** Arrow symbol. Default: `'▶'` */\n arrowSymbol?: string;\n /** Callback function for the legend item click. Default: `undefined` */\n onLegendItemClick?: ((label?: string, i?: number) => void);\n}\n\nexport class FlowLegendConfig extends Config implements FlowLegendConfigInterface {\n customWidth = undefined\n items = []\n labelFontSize = 12\n
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/components/flow-legend/config.ts"],"sourcesContent":["import { Config } from 'core/config'\n\nexport interface FlowLegendConfigInterface {\n /** Custom width of the component. Default: `undefined` */\n customWidth?: number;\n /** Legend items array as string[]. Default: `[]` */\n items?: string[];\n /** Color of the flow line. Default: `undefined` */\n lineColor?: string;\n /** Color of the flow label. Default: `undefined` */\n labelColor?: string;\n /** Font size of flow labels in pixels. Default: `12` */\n labelFontSize?: number;\n /** Arrow symbol. Default: `'▶'` */\n arrowSymbol?: string;\n /** Color of the arrow. Default: `undefined` */\n arrowColor?: string;\n /** Callback function for the legend item click. Default: `undefined` */\n onLegendItemClick?: ((label?: string, i?: number) => void);\n}\n\nexport class FlowLegendConfig extends Config implements FlowLegendConfigInterface {\n customWidth = undefined\n items = []\n labelFontSize = 12\n lineColor = undefined\n labelColor = undefined\n arrowSymbol = '▶'\n arrowColor = undefined\n onLegendItemClick = undefined\n}\n"],"names":[],"mappings":";;AAqBM,MAAO,gBAAiB,SAAQ,MAAM,CAAA;AAA5C,IAAA,WAAA,GAAA;;QACE,IAAW,CAAA,WAAA,GAAG,SAAS,CAAA;QACvB,IAAK,CAAA,KAAA,GAAG,EAAE,CAAA;QACV,IAAa,CAAA,aAAA,GAAG,EAAE,CAAA;QAClB,IAAS,CAAA,SAAA,GAAG,SAAS,CAAA;QACrB,IAAU,CAAA,UAAA,GAAG,SAAS,CAAA;QACtB,IAAW,CAAA,WAAA,GAAG,GAAG,CAAA;QACjB,IAAU,CAAA,UAAA,GAAG,SAAS,CAAA;QACtB,IAAiB,CAAA,iBAAA,GAAG,SAAS,CAAA;KAC9B;AAAA;;;;"}
|
|
@@ -20,21 +20,21 @@ class FlowLegend {
|
|
|
20
20
|
this.render();
|
|
21
21
|
}
|
|
22
22
|
render() {
|
|
23
|
-
const { config
|
|
24
|
-
if (!items.length)
|
|
23
|
+
const { config } = this;
|
|
24
|
+
if (!config.items.length)
|
|
25
25
|
return;
|
|
26
|
-
if (customWidth)
|
|
27
|
-
this.div.style('width', `${customWidth}px`);
|
|
26
|
+
if (config.customWidth)
|
|
27
|
+
this.div.style('width', `${config.customWidth}px`);
|
|
28
28
|
// Prepare Data
|
|
29
|
-
const legendData = items.reduce((acc, label, i) => {
|
|
29
|
+
const legendData = config.items.reduce((acc, label, i) => {
|
|
30
30
|
acc.push({
|
|
31
31
|
text: label,
|
|
32
32
|
index: i,
|
|
33
33
|
type: FlowLegendItemType.Label,
|
|
34
34
|
});
|
|
35
|
-
if (arrowSymbol && (acc.length !== items.length * 2 - 1)) {
|
|
35
|
+
if (config.arrowSymbol && (acc.length !== config.items.length * 2 - 1)) {
|
|
36
36
|
acc.push({
|
|
37
|
-
text: arrowSymbol,
|
|
37
|
+
text: config.arrowSymbol,
|
|
38
38
|
index: i,
|
|
39
39
|
type: FlowLegendItemType.Symbol,
|
|
40
40
|
});
|
|
@@ -51,21 +51,23 @@ class FlowLegend {
|
|
|
51
51
|
legendItemsEnter.filter(d => d.type === FlowLegendItemType.Label)
|
|
52
52
|
.on('click', this._onItemClick.bind(this));
|
|
53
53
|
legendItemsEnter.append('span')
|
|
54
|
-
.attr('class', d => d.type === FlowLegendItemType.Symbol
|
|
55
|
-
|
|
54
|
+
.attr('class', d => d.type === FlowLegendItemType.Symbol
|
|
55
|
+
? arrow(config.arrowColor)
|
|
56
|
+
: label(config.labelFontSize, config.labelColor))
|
|
57
|
+
.classed(clickable, d => d.type === FlowLegendItemType.Label && !!config.onLegendItemClick);
|
|
56
58
|
const legendItemsMerged = legendItemsEnter.merge(legendItems);
|
|
57
59
|
smartTransition(legendItemsMerged, 500)
|
|
58
60
|
.attr('opacity', 1);
|
|
59
61
|
legendItemsMerged.select('span').text(d => d.text);
|
|
60
62
|
legendItems.exit().remove();
|
|
61
63
|
this.line
|
|
62
|
-
.attr('class', line(lineColor))
|
|
63
|
-
.style('opacity', items.length > 1 ? 1 : 0);
|
|
64
|
+
.attr('class', line(config.lineColor))
|
|
65
|
+
.style('opacity', config.items.length > 1 ? 1 : 0);
|
|
64
66
|
}
|
|
65
67
|
_onItemClick(event, d) {
|
|
66
|
-
const { config
|
|
67
|
-
if (onLegendItemClick)
|
|
68
|
-
onLegendItemClick(d.text, d.index);
|
|
68
|
+
const { config } = this;
|
|
69
|
+
if (config.onLegendItemClick)
|
|
70
|
+
config.onLegendItemClick(d.text, d.index);
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/flow-legend/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Config\nimport { FlowLegendConfig, FlowLegendConfigInterface } from './config'\n\n// Local Types\nimport { FlowLegendItem, FlowLegendItemType } from './types'\n\n// Styles\nimport * as s from './style'\n\nexport class FlowLegend {\n div: Selection<HTMLElement, any, HTMLElement, any>\n element: HTMLElement\n line: Selection<HTMLElement, any, HTMLElement, any>\n labels: Selection<HTMLElement, any, HTMLElement, any>\n prevConfig: FlowLegendConfig\n config: FlowLegendConfig\n protected _container: HTMLElement\n\n constructor (element: HTMLElement, config?: FlowLegendConfigInterface) {\n this._container = element\n\n this.div = select(this._container).append('div').attr('class', s.root)\n this.element = this.div.node()\n\n this.line = this.div.append('div')\n this.labels = this.div.append('div').attr('class', s.labels)\n\n if (config) this.update(config)\n }\n\n update (config: FlowLegendConfigInterface): void {\n this.prevConfig = this.config\n this.config = new FlowLegendConfig().init(config)\n this.render()\n }\n\n render (): void {\n const { config
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/flow-legend/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Config\nimport { FlowLegendConfig, FlowLegendConfigInterface } from './config'\n\n// Local Types\nimport { FlowLegendItem, FlowLegendItemType } from './types'\n\n// Styles\nimport * as s from './style'\n\nexport class FlowLegend {\n div: Selection<HTMLElement, any, HTMLElement, any>\n element: HTMLElement\n line: Selection<HTMLElement, any, HTMLElement, any>\n labels: Selection<HTMLElement, any, HTMLElement, any>\n prevConfig: FlowLegendConfig\n config: FlowLegendConfig\n protected _container: HTMLElement\n\n constructor (element: HTMLElement, config?: FlowLegendConfigInterface) {\n this._container = element\n\n this.div = select(this._container).append('div').attr('class', s.root)\n this.element = this.div.node()\n\n this.line = this.div.append('div')\n this.labels = this.div.append('div').attr('class', s.labels)\n\n if (config) this.update(config)\n }\n\n update (config: FlowLegendConfigInterface): void {\n this.prevConfig = this.config\n this.config = new FlowLegendConfig().init(config)\n this.render()\n }\n\n render (): void {\n const { config } = this\n if (!config.items.length) return\n\n if (config.customWidth) this.div.style('width', `${config.customWidth}px`)\n\n // Prepare Data\n const legendData: FlowLegendItem[] = config.items.reduce((acc, label, i) => {\n acc.push({\n text: label,\n index: i,\n type: FlowLegendItemType.Label,\n })\n\n if (config.arrowSymbol && (acc.length !== config.items.length * 2 - 1)) {\n acc.push({\n text: config.arrowSymbol,\n index: i,\n type: FlowLegendItemType.Symbol,\n })\n }\n return acc\n }, [])\n\n // Draw\n const legendItems = this.labels.selectAll(`.${s.item}`)\n .data(legendData) as Selection<HTMLDivElement, FlowLegendItem, HTMLDivElement, FlowLegendItem>\n\n const legendItemsEnter = legendItems.enter()\n .append('div')\n .attr('class', s.item)\n .attr('opacity', 0)\n\n legendItemsEnter.filter(d => d.type === FlowLegendItemType.Label)\n .on('click', this._onItemClick.bind(this))\n\n legendItemsEnter.append('span')\n .attr('class',\n d => d.type === FlowLegendItemType.Symbol\n ? s.arrow(config.arrowColor)\n : s.label(config.labelFontSize, config.labelColor)\n )\n .classed(s.clickable, d => d.type === FlowLegendItemType.Label && !!config.onLegendItemClick)\n\n const legendItemsMerged = legendItemsEnter.merge(legendItems)\n smartTransition(legendItemsMerged, 500)\n .attr('opacity', 1)\n legendItemsMerged.select('span').text(d => d.text)\n\n legendItems.exit().remove()\n\n this.line\n .attr('class', s.line(config.lineColor))\n .style('opacity', config.items.length > 1 ? 1 : 0)\n }\n\n _onItemClick (event: MouseEvent, d: FlowLegendItem): void {\n const { config } = this\n\n if (config.onLegendItemClick) config.onLegendItemClick(d.text, d.index)\n }\n}\n"],"names":["s.root","s.labels","s.item","s.arrow","s.label","s.clickable","s.line"],"mappings":"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"}
|
|
@@ -5,4 +5,4 @@ export declare const labels: string;
|
|
|
5
5
|
export declare const item: string;
|
|
6
6
|
export declare const clickable: string;
|
|
7
7
|
export declare const label: (labelFontSize: number, labelColor: string) => string;
|
|
8
|
-
export declare const arrow: (
|
|
8
|
+
export declare const arrow: (arrowColor: string) => string;
|
|
@@ -11,16 +11,19 @@ const globalStyles = injectGlobal `
|
|
|
11
11
|
--vis-flow-legend-label-background: #ffffff;
|
|
12
12
|
--vis-flow-legend-label-color: #71788a;
|
|
13
13
|
--vis-flow-legend-link-color: #E5E9F7;
|
|
14
|
+
--vis-flow-legend-arrow-color: #E5E9F7;
|
|
14
15
|
|
|
15
16
|
--vis-dark-flow-legend-label-background: #292b34;
|
|
16
17
|
--vis-dark-flow-legend-label-color: #E5E9F7;
|
|
17
18
|
--vis-dark-flow-legend-link-color: #71788a;
|
|
19
|
+
--vis-dark-flow-legend-arrow-color: #71788a;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
body.theme-dark ${`.${root}`} {
|
|
21
23
|
--vis-flow-legend-label-background: var(--vis-dark-flow-legend-label-background);
|
|
22
24
|
--vis-flow-legend-label-color: var(--vis-dark-flow-legend-label-color);
|
|
23
25
|
--vis-flow-legend-link-color: var(--vis-dark-flow-legend-link-color);
|
|
26
|
+
--vis-flow-legend-arrow-color: var(--vis-dark-flow-legend-arrow-color);
|
|
24
27
|
}
|
|
25
28
|
`;
|
|
26
29
|
const line = (lineColor) => css `
|
|
@@ -68,12 +71,12 @@ const label = (labelFontSize, labelColor) => css `
|
|
|
68
71
|
display: inline-table;
|
|
69
72
|
text-align: center;
|
|
70
73
|
`;
|
|
71
|
-
const arrow = (
|
|
74
|
+
const arrow = (arrowColor) => css `
|
|
72
75
|
label: arrow;
|
|
73
76
|
|
|
74
77
|
font-size: 9px;
|
|
75
78
|
vertical-align: middle;
|
|
76
|
-
color: ${
|
|
79
|
+
color: ${arrowColor || 'var(--vis-flow-legend-arrow-color)'};
|
|
77
80
|
`;
|
|
78
81
|
|
|
79
82
|
export { arrow, clickable, globalStyles, item, label, labels, line, root };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sources":["../../../src/components/flow-legend/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: flow-legend-component;\n\n position: relative;\n user-select: none;\n`\n\nexport const globalStyles = injectGlobal`\n :root {\n --vis-flow-legend-label-background: #ffffff;\n --vis-flow-legend-label-color: #71788a;\n --vis-flow-legend-link-color: #E5E9F7;\n\n --vis-dark-flow-legend-label-background: #292b34;\n --vis-dark-flow-legend-label-color: #E5E9F7;\n --vis-dark-flow-legend-link-color: #71788a;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-flow-legend-label-background: var(--vis-dark-flow-legend-label-background);\n --vis-flow-legend-label-color: var(--vis-dark-flow-legend-label-color);\n --vis-flow-legend-link-color: var(--vis-dark-flow-legend-link-color);\n }\n`\n\nexport const line = (lineColor: string): string => css`\n label: line;\n\n height: 2px;\n width: 100%;\n background-color: ${lineColor || 'var(--vis-flow-legend-link-color)'};\n position: absolute;\n top: 50%;\n`\n\nexport const labels = css`\n label: labels;\n\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n`\n\nexport const item = css`\n label: item;\n\n position: relative;\n max-width: 50px;\n\n padding: 10px;\n`\n\nexport const clickable = css`\n cursor: pointer;\n\n &:hover {\n text-decoration: underline;\n }\n`\n\nexport const label = (labelFontSize: number, labelColor: string): string => css`\n label: label;\n\n transform: translate(-50%, 0%);\n margin-left: 7px;\n background-color: var(--vis-flow-legend-label-background);\n padding: 5px 15px;\n font-size: ${labelFontSize}px;\n color: ${labelColor || 'var(--vis-flow-legend-label-color)'};\n display: inline-table;\n text-align: center;\n`\n\nexport const arrow = (
|
|
1
|
+
{"version":3,"file":"style.js","sources":["../../../src/components/flow-legend/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: flow-legend-component;\n\n position: relative;\n user-select: none;\n`\n\nexport const globalStyles = injectGlobal`\n :root {\n --vis-flow-legend-label-background: #ffffff;\n --vis-flow-legend-label-color: #71788a;\n --vis-flow-legend-link-color: #E5E9F7;\n --vis-flow-legend-arrow-color: #E5E9F7;\n\n --vis-dark-flow-legend-label-background: #292b34;\n --vis-dark-flow-legend-label-color: #E5E9F7;\n --vis-dark-flow-legend-link-color: #71788a;\n --vis-dark-flow-legend-arrow-color: #71788a;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-flow-legend-label-background: var(--vis-dark-flow-legend-label-background);\n --vis-flow-legend-label-color: var(--vis-dark-flow-legend-label-color);\n --vis-flow-legend-link-color: var(--vis-dark-flow-legend-link-color);\n --vis-flow-legend-arrow-color: var(--vis-dark-flow-legend-arrow-color);\n }\n`\n\nexport const line = (lineColor: string): string => css`\n label: line;\n\n height: 2px;\n width: 100%;\n background-color: ${lineColor || 'var(--vis-flow-legend-link-color)'};\n position: absolute;\n top: 50%;\n`\n\nexport const labels = css`\n label: labels;\n\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n`\n\nexport const item = css`\n label: item;\n\n position: relative;\n max-width: 50px;\n\n padding: 10px;\n`\n\nexport const clickable = css`\n cursor: pointer;\n\n &:hover {\n text-decoration: underline;\n }\n`\n\nexport const label = (labelFontSize: number, labelColor: string): string => css`\n label: label;\n\n transform: translate(-50%, 0%);\n margin-left: 7px;\n background-color: var(--vis-flow-legend-label-background);\n padding: 5px 15px;\n font-size: ${labelFontSize}px;\n color: ${labelColor || 'var(--vis-flow-legend-label-color)'};\n display: inline-table;\n text-align: center;\n`\n\nexport const arrow = (arrowColor: string): string => css`\n label: arrow;\n\n font-size: 9px;\n vertical-align: middle;\n color: ${arrowColor || 'var(--vis-flow-legend-arrow-color)'};\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;EAKtB;AAEM,MAAM,YAAY,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;AAapB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;;;EAM7B;AAEY,MAAA,IAAI,GAAG,CAAC,SAAiB,KAAa,GAAG,CAAA,CAAA;;;;;AAKhC,oBAAA,EAAA,SAAS,IAAI,mCAAmC,CAAA;;;EAGrE;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;;;;;;;EAQxB;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;EAOtB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;;;;EAM3B;AAEM,MAAM,KAAK,GAAG,CAAC,aAAqB,EAAE,UAAkB,KAAa,GAAG,CAAA,CAAA;;;;;;;eAOhE,aAAa,CAAA;AACjB,SAAA,EAAA,UAAU,IAAI,oCAAoC,CAAA;;;EAG5D;AAEY,MAAA,KAAK,GAAG,CAAC,UAAkB,KAAa,GAAG,CAAA,CAAA;;;;;AAK7C,SAAA,EAAA,UAAU,IAAI,oCAAoC,CAAA;;;;;"}
|
|
@@ -142,7 +142,7 @@ class LeafletMap extends ComponentCore {
|
|
|
142
142
|
this._containerSelection.style('width', isString(config.width) ? config.width : `${config.width}px`);
|
|
143
143
|
if (config.height)
|
|
144
144
|
this._containerSelection.style('height', isString(config.height) ? config.height : `${config.height}px`);
|
|
145
|
-
if (this._map) {
|
|
145
|
+
if (this._map && config.renderer === LeafletMapRenderer.MapLibre) {
|
|
146
146
|
const layer = this._map.layer; // Using any because the typings are not full
|
|
147
147
|
const maplibreMap = layer.getMaplibreMap();
|
|
148
148
|
if (maplibreMap.isStyleLoaded())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/leaflet-map/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { packSiblings } from 'd3-hierarchy'\nimport type L from 'leaflet'\nimport Supercluster, { ClusterFeature, PointFeature } from 'supercluster'\nimport { ResizeObserver } from '@juggle/resize-observer'\nimport { StyleSpecification } from 'maplibre-gl'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Model\nimport { MapDataModel } from 'data-models/map'\n\n// Types\nimport { ComponentType } from 'types/component'\nimport { GenericDataRecord } from 'types/data'\n\n// Utils\nimport { clamp, isNil, find, getNumber, getString, isString } from 'utils/data'\nimport { constraintMapViewThrottled } from './renderer/mapboxgl-utils'\n\n// Local Types\nimport {\n Bounds,\n LeafletMapClusterDatum,\n LeafletMapPoint,\n LeafletMapPointDatum,\n LeafletMapRenderer,\n MapZoomState,\n PointExpandedClusterProperties,\n} from './types'\n\n// Config\nimport { LeafletMapConfig, LeafletMapConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\n// Modules\nimport { initialMapCenter, initialMapZoom, setupMap, updateTopoJson } from './modules/map'\nimport { collideLabels, createNodes, removeNodes, updateNodes } from './modules/node'\nimport { createNodeSelectionRing, updateNodeSelectionRing } from './modules/selectionRing'\nimport { createBackgroundNode, updateBackgroundNode } from './modules/clusterBackground'\nimport {\n bBoxMerge,\n calculateClusterIndex,\n getNextZoomLevelOnClusterClick,\n findPointAndClusterByPointId,\n geoJsonPointToScreenPoint,\n getClusterRadius,\n getClustersAndPoints,\n getNodeRelativePosition,\n getPointRadius,\n shouldClusterExpand,\n} from './modules/utils'\n\nexport class LeafletMap<Datum extends GenericDataRecord> extends ComponentCore<Datum[], LeafletMapConfig<Datum>, LeafletMapConfigInterface<Datum>> {\n static selectors = s\n type = ComponentType.HTML\n element: HTMLElement\n config: LeafletMapConfig<Datum> = new LeafletMapConfig()\n datamodel: MapDataModel<Datum> = new MapDataModel()\n protected _container: HTMLElement\n protected _containerSelection: Selection<HTMLElement, unknown, null, undefined>\n public _onMapMoveEndInternal: (leaflet: L.Map) => void // Internal callback needed by Leaflet Flow Map\n private _map: { leaflet: L.Map; layer: L.Layer; svgOverlay: Selection<SVGElement, any, HTMLElement, any>; svgGroup: Selection<SVGGElement, any, SVGElement, any> }\n private _clusterIndex: Supercluster<Datum>\n private _expandedCluster: { points: PointFeature<PointExpandedClusterProperties<Datum>>[]; cluster: LeafletMapPoint<Datum> } = null\n private _cancelBackgroundClick = false\n private _hasBeenMoved = false\n private _hasBeenZoomed = false\n private _isMoving = false\n private _isZooming = false\n private _eventInitiatedByComponent = false\n private _triggerBackgroundClick = false\n private _externallySelectedPoint: LeafletMapPoint<Datum> | PointFeature<Datum> | null = null\n private _zoomingToExternallySelectedPoint = false\n private _forceExpandCluster = false\n private _pointGroup: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>\n private _pointSelectionRing: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>\n private _clusterBackground: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>\n private _clusterBackgroundRadius = 0\n private _selectedPoint: LeafletMapPoint<Datum> = null\n private _currentZoomLevel: number | null = null\n private _firstRender = true\n private _renderDataAnimationFrame: number\n private _isDarkThemeActive = false\n private resizeObserver: ResizeObserver\n private themeObserver: MutationObserver\n readonly _leafletInitializationPromise: Promise<L.Map>\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 600\n\n events = {\n [LeafletMap.selectors.point]: {\n mouseup: this._onPointMouseUp.bind(this),\n mousedown: this._onPointMouseDown.bind(this),\n click: this._onPointClick.bind(this),\n },\n }\n\n constructor (container: HTMLElement, config?: LeafletMapConfigInterface<Datum>, data?: Datum[]) {\n super(ComponentType.HTML)\n this._container = container\n this._containerSelection = select(this._container)\n\n this._container.appendChild(this.element)\n this.g.attr('class', s.root)\n\n if (config) this.setConfig(config)\n\n if (!this._container.clientWidth) {\n console.warn('Unovis | Leaflet Map: The width of the container is not set. Setting to 100%.')\n this._containerSelection.style('width', '100%')\n }\n\n if (!this._container.clientHeight) {\n console.warn(`Unovis | Leaflet Map: The height of the container is not set. Setting to ${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px.`)\n this._containerSelection.style('height', `${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px`)\n }\n\n // Initialize map asynchronously\n this._leafletInitializationPromise = new Promise((resolve) => {\n setupMap(this.element, this.config).then(map => {\n // Apply the `s.map` class to `tilePane` to allow tooltip interactions\n select(map.leaflet.getPanes().tilePane).classed(s.map, true)\n if (config) this.setConfig(config)\n\n this._map = map\n this._map.leaflet.on('drag', this._onMapDragLeaflet.bind(this))\n this._map.leaflet.on('move', this._onMapMove.bind(this))\n this._map.leaflet.on('movestart', this._onMapMoveStart.bind(this))\n this._map.leaflet.on('moveend', this._onMapMoveEnd.bind(this))\n this._map.leaflet.on('zoom', this._onMapZoom.bind(this))\n this._map.leaflet.on('zoomstart', this._onMapZoomStart.bind(this))\n this._map.leaflet.on('zoomend', this._onMapZoomEnd.bind(this))\n\n // We need to handle background click in a special way to deal\n // with d3 svg overlay that might have smaller size than the map itself\n // (see this._onNodeMouseDown() and this this._onNodeMouseDown())\n this._map.leaflet.on('mousedown', () => {\n if (!this._cancelBackgroundClick) this._triggerBackgroundClick = true\n })\n\n this._map.leaflet.on('mouseup', (e) => {\n if (this._triggerBackgroundClick) {\n this._triggerBackgroundClick = false\n const originalEvent = (e as any).originalEvent\n this._onBackgroundClick(originalEvent.target, originalEvent)\n }\n })\n\n this._map.svgOverlay\n .attr('class', s.svgOverlay)\n .insert('rect', ':first-child')\n .attr('class', s.backgroundRect)\n .attr('width', '100%')\n .attr('height', '100%')\n\n this._pointGroup = this._map.svgGroup.append('g').attr('class', s.points)\n this._clusterBackground = this._pointGroup.append('g')\n .attr('class', s.clusterBackground)\n .call(createBackgroundNode)\n this._pointSelectionRing = this._pointGroup.append('g')\n .attr('class', s.pointSelectionRing)\n .call(createNodeSelectionRing)\n\n this._map.leaflet.setView(initialMapCenter, initialMapZoom)\n\n if (document.body.classList.contains('theme-dark') && config.styleDarkTheme) {\n this._isDarkThemeActive = true\n this.setTheme(config.styleDarkTheme)\n }\n\n this.config.onMapInitialized?.()\n resolve(this._map.leaflet)\n })\n })\n\n\n // Set data and render the map when it's ready\n this.setData(data ?? [])\n\n // When the container size changes we have to initiate map resize in order to update its dimensions\n this.resizeObserver = new ResizeObserver(() => {\n this._map?.leaflet?.invalidateSize()\n this.config.tooltip?.hide()\n })\n this.resizeObserver.observe(container)\n\n // If dark theme is enabled, update map's style when document body's class list changes\n if (this.config.styleDarkTheme) {\n this.themeObserver = new MutationObserver((mutations) => {\n mutations.forEach(change => {\n if (change.attributeName === 'class') {\n const isDarkTheme = (change.target as HTMLElement).classList.contains('theme-dark')\n if (this._isDarkThemeActive !== isDarkTheme) {\n this.setTheme(isDarkTheme ? this.config.styleDarkTheme : this.config.style)\n this._isDarkThemeActive = isDarkTheme\n }\n }\n })\n })\n this.themeObserver.observe(document.body, { attributes: true })\n }\n }\n\n setConfig (config: LeafletMapConfigInterface<Datum>): void {\n this.config.init(config)\n\n if (config.width) this._containerSelection.style('width', isString(config.width) ? config.width : `${config.width}px`)\n if (config.height) this._containerSelection.style('height', isString(config.height) ? config.height : `${config.height}px`)\n\n if (this._map) {\n const layer = this._map.layer as any // Using any because the typings are not full\n const maplibreMap = layer.getMaplibreMap()\n if (maplibreMap.isStyleLoaded()) updateTopoJson(maplibreMap, this.config)\n }\n\n if (this.config.tooltip) {\n this.config.tooltip.setContainer(this._container)\n this.config.tooltip.setComponents([this])\n this.config.tooltip.update()\n }\n }\n\n setData (data: Datum[]): void {\n const { config, datamodel } = this\n\n const dataValid = data.filter(d => {\n const lat = getNumber(d, config.pointLatitude)\n const lon = getNumber(d, config.pointLongitude)\n const valid = isFinite(lat) && isFinite(lon)\n\n if (!valid) console.warn('Unovis | Leaflet Map: Invalid point coordinates', d)\n return valid\n })\n\n datamodel.data = dataValid\n\n // We use Supercluster for real-time node clustering\n this._clusterIndex = calculateClusterIndex<Datum>(data, this.config)\n this._leafletInitializationPromise.then(() => {\n this.render()\n })\n }\n\n setTheme (theme: StyleSpecification | string): void {\n const layer = this._map.layer as any // Using any because the typings are not full\n if (this.config.renderer === LeafletMapRenderer.MapLibre) {\n const maplibreMap = layer.getMaplibreMap()\n maplibreMap.setStyle?.(theme)\n updateTopoJson(maplibreMap, this.config)\n } else {\n if (typeof theme !== 'string') {\n console.warn('Unovis | Leaflet Map: Invalid style. Provide a URL string for raster rendering mode.')\n return\n }\n layer.setUrl(theme)\n }\n }\n\n // We redefine the ComponentCore render function to bind event to newly created elements in this._renderData(),\n // which is being called after almost every map interaction\n render (): void {\n const { config } = this\n if (!this._map) return\n\n this._renderData()\n if (this._firstRender) {\n if (config.initialBounds) this.fitToBounds(config.initialBounds)\n else if (config.fitViewOnInit) this.fitToPoints(0, config.fitViewPadding)\n } else {\n if (config.fitViewOnUpdate) this.fitToPoints(0, config.fitViewPadding)\n else if (config.fitBoundsOnUpdate) this.fitToBounds(config.fitBoundsOnUpdate)\n }\n\n this._firstRender = false\n }\n\n public getLeafletInstancePromise (): Promise<L.Map> {\n return this._leafletInitializationPromise\n }\n\n public fitToPoints (duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { config, datamodel, datamodel: { data } } = this\n\n if (!this._map || !this._map.leaflet) return\n if (!data?.length) return\n const bounds = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n this._flyToBounds(bounds, duration, padding)\n }\n\n public fitToBounds (bounds: Bounds, duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { northEast, southWest } = bounds\n if (isNil(northEast) || isNil(southWest)) return\n if (isNil(northEast.lat) || isNil(northEast.lng)) return\n if (isNil(southWest.lat) || isNil(southWest.lng)) return\n if (!this._map || !this._map.leaflet) return\n this._flyToBounds([\n [northEast.lat, southWest.lng],\n [southWest.lat, northEast.lng],\n ], duration, padding)\n }\n\n /* Select a point by id and optionally center the map view.\n * This method was designed to be used mainly with the `[LeafletMap.selectors.point]` click events\n * (when the user actually clicks on a point) and the specified point is inside one of the collapsed\n * clusters it won't be selected. You can use the `zoomToPointById` method to achieve that.\n */\n public selectPointById (id: string, centerView = false): void {\n const { config } = this\n const pointData = this._getPointData()\n const foundPoint = pointData.find(d => (d.properties as LeafletMapPointDatum<Datum>).id === id)\n\n if (!foundPoint) {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n return\n }\n\n if ((foundPoint.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be selected')\n return\n }\n\n this._selectedPoint = foundPoint\n\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (!isPointInsideExpandedCluster) this._resetExpandedCluster()\n\n if (centerView) {\n const coordinates = {\n lng: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLongitude),\n lat: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLatitude),\n }\n\n const zoomLevel = this._map.leaflet.getZoom()\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n this._renderData()\n }\n }\n\n /* Get the id of the selected point */\n public getSelectedPointId (): string | number | undefined {\n return this._selectedPoint?.id\n }\n\n /* Unselect point if it was selected before */\n public unselectPoint (): void {\n this._selectedPoint = null\n this._externallySelectedPoint = null\n this.render()\n }\n\n /* Zoom to a point by id and optionally select it.\n * If the point is inside a cluster, it'll be automatically expanded to show the enclosed point.\n * You can also force set the zoom level by providing the `customZoomLevel` argument.\n */\n public zoomToPointById (id: string, selectPoint = false, customZoomLevel?: number): void {\n const { config, datamodel } = this\n if (!datamodel.data.length) {\n console.warn('Unovis | Leaflet Map: There are no points on the map')\n return\n }\n const dataBoundsAll = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n const bounds: [number, number, number, number] = [dataBoundsAll[0][1], dataBoundsAll[1][0], dataBoundsAll[1][1], dataBoundsAll[0][0]]\n const pointDataAll = this._getPointData(bounds)\n\n let foundPoint: LeafletMapPoint<Datum> | PointFeature<Datum> = pointDataAll\n .find((d: LeafletMapPoint<Datum>) => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === id)\n\n // If point was found and it's a cluster -> do nothing\n if ((foundPoint?.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be zoomed in')\n return\n }\n\n // If point was not found -> search for it in all collapsed clusters\n if (!foundPoint) {\n const { point } = findPointAndClusterByPointId(pointDataAll, id, config.pointId)\n foundPoint = point\n }\n\n if (foundPoint) {\n // If point was found and it's inside an expanded cluster -> simply select it\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (isPointInsideExpandedCluster && selectPoint) {\n this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n this._renderData()\n return\n }\n\n // Else - trigger zoom\n this._externallySelectedPoint = foundPoint\n this._zoomingToExternallySelectedPoint = true\n\n this._forceExpandCluster = !isNil(customZoomLevel)\n if (selectPoint) this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n\n const zoomLevel = isNil(customZoomLevel) ? this._map.leaflet.getZoom() : customZoomLevel\n const coordinates = {\n lng: getNumber(foundPoint.properties, config.pointLongitude),\n lat: getNumber(foundPoint.properties, config.pointLatitude),\n }\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n }\n }\n\n public getNodeRelativePosition (node: LeafletMapPoint<Datum>): { x: number; y: number } {\n return getNodeRelativePosition(node, this._map.leaflet)\n }\n\n public hasBeenZoomed (): boolean {\n return this._hasBeenZoomed\n }\n\n public hasBeenMoved (): boolean {\n return this._hasBeenMoved\n }\n\n public isZooming (): boolean {\n return this._isZooming\n }\n\n public isMoving (): boolean {\n return this._isMoving\n }\n\n private _flyToBounds (bounds: [[number, number], [number, number]], durationMs: number, paddingPx?: [number, number]): void {\n this._eventInitiatedByComponent = true\n const duration = durationMs / 1000\n const padding: [number, number] | undefined = paddingPx ? [\n paddingPx[0] < this._container.clientWidth / 2 ? paddingPx[0] : this._container.clientWidth / 2,\n paddingPx[1] < this._container.clientHeight / 2 ? paddingPx[1] : this._container.clientHeight / 2,\n ] : undefined\n if (duration) {\n this._map.leaflet.flyToBounds(bounds, { duration, padding })\n } else {\n this._map.leaflet.fitBounds(bounds, { padding })\n }\n }\n\n private _renderData (mapMoveZoomUpdateOnly = false): void {\n const { config } = this\n\n const pointData = this._getPointData()\n const contentBBox = pointData.length ? bBoxMerge(pointData.map(d => d.bbox)) : { x: 0, y: 0, width: 0, height: 0 }\n\n // Set SVG size to match Leaflet transform\n const svgExtraPadding = 40 + this._clusterBackgroundRadius // We need it to fit point labels and expanded cluster background circle\n const dx = contentBBox.x - svgExtraPadding\n const dy = contentBBox.y - svgExtraPadding\n this._map.svgOverlay\n .attr('width', contentBBox.width + 2 * svgExtraPadding)\n .attr('height', contentBBox.height + 2 * svgExtraPadding)\n .style('left', `${dx}px`)\n .style('top', `${dy}px`)\n\n this._map.svgGroup\n .attr('transform', `translate(${-dx},${-dy})`)\n\n // Render content\n const points = this._pointGroup.selectAll(`.${s.point}:not(.exit)`)\n .data(pointData, (d: LeafletMapPoint<Datum>, i) => `${d.id || d.geometry.coordinates.join('')}`)\n\n points.exit().classed('exit', true).call(removeNodes)\n const pointsEnter = points.enter().append('g').attr('class', s.point)\n .call(createNodes)\n\n const pointsMerged = points.merge(pointsEnter)\n pointsEnter.call(updateNodes, config, this._map.leaflet)\n points.call(updateNodes, config, this._map.leaflet, mapMoveZoomUpdateOnly)\n pointsMerged.call(collideLabels, this._map.leaflet)\n\n this._clusterBackground.call(updateBackgroundNode, this._expandedCluster, config, this._map.leaflet, this._clusterBackgroundRadius)\n if (this._expandedCluster && config.clusterBackground) {\n pointData.forEach((d, i) => { d._zIndex = (d.properties as LeafletMapPointDatum<Datum>)?.expandedClusterPoint ? 2 : 0 })\n this._pointGroup\n .selectAll(`.${s.point}, .${s.clusterBackground}, .${s.pointSelectionRing}`)\n .sort((a: LeafletMapPoint<Datum>, b: LeafletMapPoint<Datum>) => a._zIndex - b._zIndex)\n }\n\n // Show selection border and hide it when the node\n // is out of visible box\n if (config.selectedPointId) {\n const foundPoint = pointData.find(d => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === config.selectedPointId)\n const { cluster } = findPointAndClusterByPointId(pointData, config.selectedPointId, config.pointId)\n if (foundPoint) this._selectedPoint = foundPoint\n else this._selectedPoint = cluster\n }\n this._pointSelectionRing.call(updateNodeSelectionRing, this._selectedPoint, pointData, config, this._map.leaflet)\n\n // Set up events\n this._setUpComponentEventsThrottled()\n\n // Tooltip\n config.tooltip?.update()\n }\n\n private _zoomToExternallySelectedPoint (): void {\n const { config } = this\n if (!this._externallySelectedPoint) return\n\n const externallySelectedPointId = getString(this._externallySelectedPoint.properties, config.pointId)\n const pointData = this._getPointData()\n const foundPoint: LeafletMapPoint<Datum> = find(\n pointData,\n d => getString(d.properties as Datum, config.pointId) === externallySelectedPointId\n )\n\n if (foundPoint) {\n this._zoomingToExternallySelectedPoint = false\n this._currentZoomLevel = null\n } else {\n const { cluster } = findPointAndClusterByPointId(pointData, externallySelectedPointId, config.pointId)\n if (!cluster) return\n\n const zoomLevel = this._map.leaflet.getZoom()\n // Expand cluster or fly further\n if (this._forceExpandCluster || shouldClusterExpand(cluster, zoomLevel, 8, 13)) {\n this._expandCluster(cluster)\n } else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n const coordinates = {\n lng: getNumber(this._externallySelectedPoint.properties, config.pointLongitude),\n lat: getNumber(this._externallySelectedPoint.properties, config.pointLatitude),\n }\n if (this._currentZoomLevel !== newZoomLevel) {\n this._currentZoomLevel = newZoomLevel\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: 0 })\n }\n }\n }\n }\n\n private _expandCluster (clusterPoint: LeafletMapPoint<Datum>): void {\n const { config, config: { clusterBackground } } = this\n const padding = 1\n\n config.tooltip?.hide()\n\n this._forceExpandCluster = false\n if (clusterPoint) {\n const points: PointFeature<PointExpandedClusterProperties<Datum>>[] =\n clusterPoint.clusterIndex.getLeaves((clusterPoint.properties as LeafletMapClusterDatum<Datum>).cluster_id as number, Infinity)\n const packPoints: {x: number; y: number; r: number }[] = points.map(p => ({\n x: null,\n y: null,\n r: getPointRadius(p, config.pointRadius, this._map.leaflet.getZoom()) + padding,\n }))\n packSiblings(packPoints)\n\n points.forEach((p, i) => {\n p.properties.expandedClusterPoint = clusterPoint\n p.properties.r = packPoints[i].r\n p.properties.dx = packPoints[i].x\n p.properties.dy = packPoints[i].y\n })\n\n this._resetExpandedCluster()\n this._expandedCluster = {\n cluster: clusterPoint,\n points,\n }\n\n if (clusterBackground) this._clusterBackgroundRadius = getClusterRadius(this._expandedCluster)\n\n this._renderData()\n }\n\n this._zoomingToExternallySelectedPoint = false\n }\n\n private _resetExpandedCluster (): void {\n this._expandedCluster?.points?.forEach(d => { delete d.properties.expandedClusterPoint })\n this._expandedCluster = null\n }\n\n private _getPointData (customBounds?: [number, number, number, number]): LeafletMapPoint<Datum>[] {\n const { config, datamodel: { data } } = this\n\n if (!data || !this._clusterIndex) return []\n\n let geoJSONPoints: (ClusterFeature<LeafletMapClusterDatum<Datum>> | PointFeature<PointExpandedClusterProperties<Datum>>)[] =\n getClustersAndPoints<Datum>(this._clusterIndex, this._map.leaflet, customBounds)\n\n if (this._expandedCluster) {\n // Remove expanded cluster from the data\n geoJSONPoints = geoJSONPoints.filter(c => (c as ClusterFeature<LeafletMapClusterDatum<Datum>>).properties.cluster_id !== (this._expandedCluster.cluster.properties as LeafletMapClusterDatum<Datum>).cluster_id)\n // Add points from the expanded cluster\n geoJSONPoints = geoJSONPoints.concat(this._expandedCluster.points)\n }\n\n const pointData = geoJSONPoints\n // Todo: Remove explicitly set ClusterFeature<LeafletMapPointDatum<Datum>> type\n .map((d: ClusterFeature<LeafletMapPointDatum<Datum>>, i: number) => geoJsonPointToScreenPoint(d, i, this._map.leaflet, config))\n // .sort((a, b) => getPointDisplayOrder(a, config.pointStatus, config.colorMap) - getPointDisplayOrder(b, config.pointStatus, config.colorMap))\n\n return pointData\n }\n\n private _getMapZoomState (): MapZoomState {\n const leafletBounds = this._map.leaflet.getBounds()\n const southWest = leafletBounds.getSouthWest()\n const northEast = leafletBounds.getNorthEast()\n\n return {\n mapCenter: this._map.leaflet.getCenter(),\n zoomLevel: this._map.leaflet.getZoom(),\n bounds: { southWest, northEast },\n userDriven: !this._eventInitiatedByComponent,\n }\n }\n\n private _onMapDragLeaflet (): void {\n this._cancelBackgroundClick = true\n }\n\n private _onMapMove (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenMoved = true\n this._renderDataAnimationFrame = requestAnimationFrame(() => {\n this._renderData(true)\n })\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onMapMoveStart (): void {\n const { config } = this\n if (!this._map) return\n this._isMoving = true\n config.onMapMoveStart?.(this._getMapZoomState())\n }\n\n private _onMapMoveEnd (): void {\n const { config } = this\n if (!this._map) return\n this._onMapMoveEndInternal?.(this._map.leaflet)\n config.onMapMoveEnd?.(this._getMapZoomState())\n\n constraintMapViewThrottled(this._map.leaflet)\n const events = this._map.layer.getEvents()\n\n if (events.zoomend) {\n const zoomEndEvent = events.zoomend.bind(this._map.layer)\n zoomEndEvent(null)\n }\n\n if (this._externallySelectedPoint || this._zoomingToExternallySelectedPoint) {\n this._zoomToExternallySelectedPoint()\n }\n\n this._isMoving = false\n this._eventInitiatedByComponent = false\n }\n\n private _onMapZoomStart (): void {\n const { config } = this\n if (!this._map) return\n this._isZooming = true\n config.onMapZoomStart?.(this._getMapZoomState())\n }\n\n private _onMapZoomEnd (): void {\n const { config } = this\n if (!this._map) return\n config.onMapZoomEnd?.(this._getMapZoomState())\n this._isZooming = false\n if (!this._isMoving) this._eventInitiatedByComponent = false\n }\n\n private _onMapZoom (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenZoomed = true\n\n if (!this._externallySelectedPoint) this._resetExpandedCluster()\n else if (!this._zoomingToExternallySelectedPoint) {\n this._externallySelectedPoint = null\n }\n\n config.tooltip?.hide()\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onBackgroundClick (el: HTMLElement, event: MouseEvent): void {\n const { config } = this\n\n if (this._cancelBackgroundClick) {\n this._cancelBackgroundClick = false\n return\n }\n\n this._externallySelectedPoint = null\n this._resetExpandedCluster()\n this._renderData()\n config.onMapClick?.(this._getMapZoomState())\n }\n\n private _onPointClick (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n const { config: { flyToDuration, clusterExpandOnClick } } = this\n this._externallySelectedPoint = null\n event.stopPropagation()\n\n if ((d.properties as LeafletMapClusterDatum<Datum>).cluster) {\n const zoomLevel = this._map.leaflet.getZoom()\n const coordinates = { lng: d.geometry.coordinates[0], lat: d.geometry.coordinates[1] }\n\n if (clusterExpandOnClick && shouldClusterExpand(d, zoomLevel)) this._expandCluster(d)\n else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: flyToDuration / 1000 })\n }\n }\n }\n\n private _onPointMouseDown (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = true\n }\n\n private _onPointMouseUp (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = false\n }\n\n public zoomIn (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() + increment)\n }\n\n public zoomOut (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() - increment)\n }\n\n public setZoom (zoomLevel: number): void {\n const leaflet = this._map?.leaflet\n if (!leaflet) return\n\n this._eventInitiatedByComponent = true\n leaflet.flyTo(\n leaflet.getCenter(),\n clamp(zoomLevel, leaflet.getMinZoom(), leaflet.getMaxZoom()),\n { duration: this.config.zoomDuration / 1000 }\n )\n }\n\n public fitView (): void {\n this.fitToPoints()\n }\n\n public destroy (): void {\n constraintMapViewThrottled.cancel()\n cancelAnimationFrame(this._renderDataAnimationFrame)\n const map = this._map?.leaflet\n this._map = undefined\n\n map?.stop()\n map?.remove()\n this.g.remove()\n this.resizeObserver.disconnect()\n this.themeObserver?.disconnect()\n }\n}\n"],"names":["s.root","map","s.map","s.svgOverlay","s.backgroundRect","s.points","s.clusterBackground","s.pointSelectionRing","s.point","s"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/leaflet-map/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { packSiblings } from 'd3-hierarchy'\nimport type L from 'leaflet'\nimport Supercluster, { ClusterFeature, PointFeature } from 'supercluster'\nimport { ResizeObserver } from '@juggle/resize-observer'\nimport { StyleSpecification } from 'maplibre-gl'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Model\nimport { MapDataModel } from 'data-models/map'\n\n// Types\nimport { ComponentType } from 'types/component'\nimport { GenericDataRecord } from 'types/data'\n\n// Utils\nimport { clamp, isNil, find, getNumber, getString, isString } from 'utils/data'\nimport { constraintMapViewThrottled } from './renderer/mapboxgl-utils'\n\n// Local Types\nimport {\n Bounds,\n LeafletMapClusterDatum,\n LeafletMapPoint,\n LeafletMapPointDatum,\n LeafletMapRenderer,\n MapZoomState,\n PointExpandedClusterProperties,\n} from './types'\n\n// Config\nimport { LeafletMapConfig, LeafletMapConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\n// Modules\nimport { initialMapCenter, initialMapZoom, setupMap, updateTopoJson } from './modules/map'\nimport { collideLabels, createNodes, removeNodes, updateNodes } from './modules/node'\nimport { createNodeSelectionRing, updateNodeSelectionRing } from './modules/selectionRing'\nimport { createBackgroundNode, updateBackgroundNode } from './modules/clusterBackground'\nimport {\n bBoxMerge,\n calculateClusterIndex,\n getNextZoomLevelOnClusterClick,\n findPointAndClusterByPointId,\n geoJsonPointToScreenPoint,\n getClusterRadius,\n getClustersAndPoints,\n getNodeRelativePosition,\n getPointRadius,\n shouldClusterExpand,\n} from './modules/utils'\n\nexport class LeafletMap<Datum extends GenericDataRecord> extends ComponentCore<Datum[], LeafletMapConfig<Datum>, LeafletMapConfigInterface<Datum>> {\n static selectors = s\n type = ComponentType.HTML\n element: HTMLElement\n config: LeafletMapConfig<Datum> = new LeafletMapConfig()\n datamodel: MapDataModel<Datum> = new MapDataModel()\n protected _container: HTMLElement\n protected _containerSelection: Selection<HTMLElement, unknown, null, undefined>\n public _onMapMoveEndInternal: (leaflet: L.Map) => void // Internal callback needed by Leaflet Flow Map\n private _map: { leaflet: L.Map; layer: L.Layer; svgOverlay: Selection<SVGElement, any, HTMLElement, any>; svgGroup: Selection<SVGGElement, any, SVGElement, any> }\n private _clusterIndex: Supercluster<Datum>\n private _expandedCluster: { points: PointFeature<PointExpandedClusterProperties<Datum>>[]; cluster: LeafletMapPoint<Datum> } = null\n private _cancelBackgroundClick = false\n private _hasBeenMoved = false\n private _hasBeenZoomed = false\n private _isMoving = false\n private _isZooming = false\n private _eventInitiatedByComponent = false\n private _triggerBackgroundClick = false\n private _externallySelectedPoint: LeafletMapPoint<Datum> | PointFeature<Datum> | null = null\n private _zoomingToExternallySelectedPoint = false\n private _forceExpandCluster = false\n private _pointGroup: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>\n private _pointSelectionRing: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>\n private _clusterBackground: Selection<SVGGElement, Record<string, unknown>[], SVGElement, Record<string, unknown>[]>\n private _clusterBackgroundRadius = 0\n private _selectedPoint: LeafletMapPoint<Datum> = null\n private _currentZoomLevel: number | null = null\n private _firstRender = true\n private _renderDataAnimationFrame: number\n private _isDarkThemeActive = false\n private resizeObserver: ResizeObserver\n private themeObserver: MutationObserver\n readonly _leafletInitializationPromise: Promise<L.Map>\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 600\n\n events = {\n [LeafletMap.selectors.point]: {\n mouseup: this._onPointMouseUp.bind(this),\n mousedown: this._onPointMouseDown.bind(this),\n click: this._onPointClick.bind(this),\n },\n }\n\n constructor (container: HTMLElement, config?: LeafletMapConfigInterface<Datum>, data?: Datum[]) {\n super(ComponentType.HTML)\n this._container = container\n this._containerSelection = select(this._container)\n\n this._container.appendChild(this.element)\n this.g.attr('class', s.root)\n\n if (config) this.setConfig(config)\n\n if (!this._container.clientWidth) {\n console.warn('Unovis | Leaflet Map: The width of the container is not set. Setting to 100%.')\n this._containerSelection.style('width', '100%')\n }\n\n if (!this._container.clientHeight) {\n console.warn(`Unovis | Leaflet Map: The height of the container is not set. Setting to ${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px.`)\n this._containerSelection.style('height', `${LeafletMap.DEFAULT_CONTAINER_HEIGHT}px`)\n }\n\n // Initialize map asynchronously\n this._leafletInitializationPromise = new Promise((resolve) => {\n setupMap(this.element, this.config).then(map => {\n // Apply the `s.map` class to `tilePane` to allow tooltip interactions\n select(map.leaflet.getPanes().tilePane).classed(s.map, true)\n if (config) this.setConfig(config)\n\n this._map = map\n this._map.leaflet.on('drag', this._onMapDragLeaflet.bind(this))\n this._map.leaflet.on('move', this._onMapMove.bind(this))\n this._map.leaflet.on('movestart', this._onMapMoveStart.bind(this))\n this._map.leaflet.on('moveend', this._onMapMoveEnd.bind(this))\n this._map.leaflet.on('zoom', this._onMapZoom.bind(this))\n this._map.leaflet.on('zoomstart', this._onMapZoomStart.bind(this))\n this._map.leaflet.on('zoomend', this._onMapZoomEnd.bind(this))\n\n // We need to handle background click in a special way to deal\n // with d3 svg overlay that might have smaller size than the map itself\n // (see this._onNodeMouseDown() and this this._onNodeMouseDown())\n this._map.leaflet.on('mousedown', () => {\n if (!this._cancelBackgroundClick) this._triggerBackgroundClick = true\n })\n\n this._map.leaflet.on('mouseup', (e) => {\n if (this._triggerBackgroundClick) {\n this._triggerBackgroundClick = false\n const originalEvent = (e as any).originalEvent\n this._onBackgroundClick(originalEvent.target, originalEvent)\n }\n })\n\n this._map.svgOverlay\n .attr('class', s.svgOverlay)\n .insert('rect', ':first-child')\n .attr('class', s.backgroundRect)\n .attr('width', '100%')\n .attr('height', '100%')\n\n this._pointGroup = this._map.svgGroup.append('g').attr('class', s.points)\n this._clusterBackground = this._pointGroup.append('g')\n .attr('class', s.clusterBackground)\n .call(createBackgroundNode)\n this._pointSelectionRing = this._pointGroup.append('g')\n .attr('class', s.pointSelectionRing)\n .call(createNodeSelectionRing)\n\n this._map.leaflet.setView(initialMapCenter, initialMapZoom)\n\n if (document.body.classList.contains('theme-dark') && config.styleDarkTheme) {\n this._isDarkThemeActive = true\n this.setTheme(config.styleDarkTheme)\n }\n\n this.config.onMapInitialized?.()\n resolve(this._map.leaflet)\n })\n })\n\n\n // Set data and render the map when it's ready\n this.setData(data ?? [])\n\n // When the container size changes we have to initiate map resize in order to update its dimensions\n this.resizeObserver = new ResizeObserver(() => {\n this._map?.leaflet?.invalidateSize()\n this.config.tooltip?.hide()\n })\n this.resizeObserver.observe(container)\n\n // If dark theme is enabled, update map's style when document body's class list changes\n if (this.config.styleDarkTheme) {\n this.themeObserver = new MutationObserver((mutations) => {\n mutations.forEach(change => {\n if (change.attributeName === 'class') {\n const isDarkTheme = (change.target as HTMLElement).classList.contains('theme-dark')\n if (this._isDarkThemeActive !== isDarkTheme) {\n this.setTheme(isDarkTheme ? this.config.styleDarkTheme : this.config.style)\n this._isDarkThemeActive = isDarkTheme\n }\n }\n })\n })\n this.themeObserver.observe(document.body, { attributes: true })\n }\n }\n\n setConfig (config: LeafletMapConfigInterface<Datum>): void {\n this.config.init(config)\n\n if (config.width) this._containerSelection.style('width', isString(config.width) ? config.width : `${config.width}px`)\n if (config.height) this._containerSelection.style('height', isString(config.height) ? config.height : `${config.height}px`)\n\n if (this._map && config.renderer === LeafletMapRenderer.MapLibre) {\n const layer = this._map.layer as any // Using any because the typings are not full\n const maplibreMap = layer.getMaplibreMap()\n if (maplibreMap.isStyleLoaded()) updateTopoJson(maplibreMap, this.config)\n }\n\n if (this.config.tooltip) {\n this.config.tooltip.setContainer(this._container)\n this.config.tooltip.setComponents([this])\n this.config.tooltip.update()\n }\n }\n\n setData (data: Datum[]): void {\n const { config, datamodel } = this\n\n const dataValid = data.filter(d => {\n const lat = getNumber(d, config.pointLatitude)\n const lon = getNumber(d, config.pointLongitude)\n const valid = isFinite(lat) && isFinite(lon)\n\n if (!valid) console.warn('Unovis | Leaflet Map: Invalid point coordinates', d)\n return valid\n })\n\n datamodel.data = dataValid\n\n // We use Supercluster for real-time node clustering\n this._clusterIndex = calculateClusterIndex<Datum>(data, this.config)\n this._leafletInitializationPromise.then(() => {\n this.render()\n })\n }\n\n setTheme (theme: StyleSpecification | string): void {\n const layer = this._map.layer as any // Using any because the typings are not full\n if (this.config.renderer === LeafletMapRenderer.MapLibre) {\n const maplibreMap = layer.getMaplibreMap()\n maplibreMap.setStyle?.(theme)\n updateTopoJson(maplibreMap, this.config)\n } else {\n if (typeof theme !== 'string') {\n console.warn('Unovis | Leaflet Map: Invalid style. Provide a URL string for raster rendering mode.')\n return\n }\n layer.setUrl(theme)\n }\n }\n\n // We redefine the ComponentCore render function to bind event to newly created elements in this._renderData(),\n // which is being called after almost every map interaction\n render (): void {\n const { config } = this\n if (!this._map) return\n\n this._renderData()\n if (this._firstRender) {\n if (config.initialBounds) this.fitToBounds(config.initialBounds)\n else if (config.fitViewOnInit) this.fitToPoints(0, config.fitViewPadding)\n } else {\n if (config.fitViewOnUpdate) this.fitToPoints(0, config.fitViewPadding)\n else if (config.fitBoundsOnUpdate) this.fitToBounds(config.fitBoundsOnUpdate)\n }\n\n this._firstRender = false\n }\n\n public getLeafletInstancePromise (): Promise<L.Map> {\n return this._leafletInitializationPromise\n }\n\n public fitToPoints (duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { config, datamodel, datamodel: { data } } = this\n\n if (!this._map || !this._map.leaflet) return\n if (!data?.length) return\n const bounds = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n this._flyToBounds(bounds, duration, padding)\n }\n\n public fitToBounds (bounds: Bounds, duration = this.config.flyToDuration, padding = this.config.fitViewPadding): void {\n const { northEast, southWest } = bounds\n if (isNil(northEast) || isNil(southWest)) return\n if (isNil(northEast.lat) || isNil(northEast.lng)) return\n if (isNil(southWest.lat) || isNil(southWest.lng)) return\n if (!this._map || !this._map.leaflet) return\n this._flyToBounds([\n [northEast.lat, southWest.lng],\n [southWest.lat, northEast.lng],\n ], duration, padding)\n }\n\n /* Select a point by id and optionally center the map view.\n * This method was designed to be used mainly with the `[LeafletMap.selectors.point]` click events\n * (when the user actually clicks on a point) and the specified point is inside one of the collapsed\n * clusters it won't be selected. You can use the `zoomToPointById` method to achieve that.\n */\n public selectPointById (id: string, centerView = false): void {\n const { config } = this\n const pointData = this._getPointData()\n const foundPoint = pointData.find(d => (d.properties as LeafletMapPointDatum<Datum>).id === id)\n\n if (!foundPoint) {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n return\n }\n\n if ((foundPoint.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be selected')\n return\n }\n\n this._selectedPoint = foundPoint\n\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (!isPointInsideExpandedCluster) this._resetExpandedCluster()\n\n if (centerView) {\n const coordinates = {\n lng: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLongitude),\n lat: getNumber(foundPoint.properties as LeafletMapPointDatum<Datum>, config.pointLatitude),\n }\n\n const zoomLevel = this._map.leaflet.getZoom()\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n this._renderData()\n }\n }\n\n /* Get the id of the selected point */\n public getSelectedPointId (): string | number | undefined {\n return this._selectedPoint?.id\n }\n\n /* Unselect point if it was selected before */\n public unselectPoint (): void {\n this._selectedPoint = null\n this._externallySelectedPoint = null\n this.render()\n }\n\n /* Zoom to a point by id and optionally select it.\n * If the point is inside a cluster, it'll be automatically expanded to show the enclosed point.\n * You can also force set the zoom level by providing the `customZoomLevel` argument.\n */\n public zoomToPointById (id: string, selectPoint = false, customZoomLevel?: number): void {\n const { config, datamodel } = this\n if (!datamodel.data.length) {\n console.warn('Unovis | Leaflet Map: There are no points on the map')\n return\n }\n const dataBoundsAll = datamodel.getDataLatLngBounds(config.pointLatitude, config.pointLongitude)\n const bounds: [number, number, number, number] = [dataBoundsAll[0][1], dataBoundsAll[1][0], dataBoundsAll[1][1], dataBoundsAll[0][0]]\n const pointDataAll = this._getPointData(bounds)\n\n let foundPoint: LeafletMapPoint<Datum> | PointFeature<Datum> = pointDataAll\n .find((d: LeafletMapPoint<Datum>) => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === id)\n\n // If point was found and it's a cluster -> do nothing\n if ((foundPoint?.properties as LeafletMapClusterDatum<Datum>)?.cluster) {\n console.warn('Unovis | Leaflet Map: Cluster can\\'t be zoomed in')\n return\n }\n\n // If point was not found -> search for it in all collapsed clusters\n if (!foundPoint) {\n const { point } = findPointAndClusterByPointId(pointDataAll, id, config.pointId)\n foundPoint = point\n }\n\n if (foundPoint) {\n // If point was found and it's inside an expanded cluster -> simply select it\n const isPointInsideExpandedCluster = this._expandedCluster?.points?.find(d => getString(d.properties, config.pointId) === id)\n if (isPointInsideExpandedCluster && selectPoint) {\n this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n this._renderData()\n return\n }\n\n // Else - trigger zoom\n this._externallySelectedPoint = foundPoint\n this._zoomingToExternallySelectedPoint = true\n\n this._forceExpandCluster = !isNil(customZoomLevel)\n if (selectPoint) this._selectedPoint = foundPoint as LeafletMapPoint<Datum>\n\n const zoomLevel = isNil(customZoomLevel) ? this._map.leaflet.getZoom() : customZoomLevel\n const coordinates = {\n lng: getNumber(foundPoint.properties, config.pointLongitude),\n lat: getNumber(foundPoint.properties, config.pointLatitude),\n }\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, zoomLevel, { duration: 0 })\n } else {\n console.warn(`Unovis | Leaflet Map: Node with id ${id} can not be found`)\n }\n }\n\n public getNodeRelativePosition (node: LeafletMapPoint<Datum>): { x: number; y: number } {\n return getNodeRelativePosition(node, this._map.leaflet)\n }\n\n public hasBeenZoomed (): boolean {\n return this._hasBeenZoomed\n }\n\n public hasBeenMoved (): boolean {\n return this._hasBeenMoved\n }\n\n public isZooming (): boolean {\n return this._isZooming\n }\n\n public isMoving (): boolean {\n return this._isMoving\n }\n\n private _flyToBounds (bounds: [[number, number], [number, number]], durationMs: number, paddingPx?: [number, number]): void {\n this._eventInitiatedByComponent = true\n const duration = durationMs / 1000\n const padding: [number, number] | undefined = paddingPx ? [\n paddingPx[0] < this._container.clientWidth / 2 ? paddingPx[0] : this._container.clientWidth / 2,\n paddingPx[1] < this._container.clientHeight / 2 ? paddingPx[1] : this._container.clientHeight / 2,\n ] : undefined\n if (duration) {\n this._map.leaflet.flyToBounds(bounds, { duration, padding })\n } else {\n this._map.leaflet.fitBounds(bounds, { padding })\n }\n }\n\n private _renderData (mapMoveZoomUpdateOnly = false): void {\n const { config } = this\n\n const pointData = this._getPointData()\n const contentBBox = pointData.length ? bBoxMerge(pointData.map(d => d.bbox)) : { x: 0, y: 0, width: 0, height: 0 }\n\n // Set SVG size to match Leaflet transform\n const svgExtraPadding = 40 + this._clusterBackgroundRadius // We need it to fit point labels and expanded cluster background circle\n const dx = contentBBox.x - svgExtraPadding\n const dy = contentBBox.y - svgExtraPadding\n this._map.svgOverlay\n .attr('width', contentBBox.width + 2 * svgExtraPadding)\n .attr('height', contentBBox.height + 2 * svgExtraPadding)\n .style('left', `${dx}px`)\n .style('top', `${dy}px`)\n\n this._map.svgGroup\n .attr('transform', `translate(${-dx},${-dy})`)\n\n // Render content\n const points = this._pointGroup.selectAll(`.${s.point}:not(.exit)`)\n .data(pointData, (d: LeafletMapPoint<Datum>, i) => `${d.id || d.geometry.coordinates.join('')}`)\n\n points.exit().classed('exit', true).call(removeNodes)\n const pointsEnter = points.enter().append('g').attr('class', s.point)\n .call(createNodes)\n\n const pointsMerged = points.merge(pointsEnter)\n pointsEnter.call(updateNodes, config, this._map.leaflet)\n points.call(updateNodes, config, this._map.leaflet, mapMoveZoomUpdateOnly)\n pointsMerged.call(collideLabels, this._map.leaflet)\n\n this._clusterBackground.call(updateBackgroundNode, this._expandedCluster, config, this._map.leaflet, this._clusterBackgroundRadius)\n if (this._expandedCluster && config.clusterBackground) {\n pointData.forEach((d, i) => { d._zIndex = (d.properties as LeafletMapPointDatum<Datum>)?.expandedClusterPoint ? 2 : 0 })\n this._pointGroup\n .selectAll(`.${s.point}, .${s.clusterBackground}, .${s.pointSelectionRing}`)\n .sort((a: LeafletMapPoint<Datum>, b: LeafletMapPoint<Datum>) => a._zIndex - b._zIndex)\n }\n\n // Show selection border and hide it when the node\n // is out of visible box\n if (config.selectedPointId) {\n const foundPoint = pointData.find(d => getString(d.properties as LeafletMapPointDatum<Datum>, config.pointId) === config.selectedPointId)\n const { cluster } = findPointAndClusterByPointId(pointData, config.selectedPointId, config.pointId)\n if (foundPoint) this._selectedPoint = foundPoint\n else this._selectedPoint = cluster\n }\n this._pointSelectionRing.call(updateNodeSelectionRing, this._selectedPoint, pointData, config, this._map.leaflet)\n\n // Set up events\n this._setUpComponentEventsThrottled()\n\n // Tooltip\n config.tooltip?.update()\n }\n\n private _zoomToExternallySelectedPoint (): void {\n const { config } = this\n if (!this._externallySelectedPoint) return\n\n const externallySelectedPointId = getString(this._externallySelectedPoint.properties, config.pointId)\n const pointData = this._getPointData()\n const foundPoint: LeafletMapPoint<Datum> = find(\n pointData,\n d => getString(d.properties as Datum, config.pointId) === externallySelectedPointId\n )\n\n if (foundPoint) {\n this._zoomingToExternallySelectedPoint = false\n this._currentZoomLevel = null\n } else {\n const { cluster } = findPointAndClusterByPointId(pointData, externallySelectedPointId, config.pointId)\n if (!cluster) return\n\n const zoomLevel = this._map.leaflet.getZoom()\n // Expand cluster or fly further\n if (this._forceExpandCluster || shouldClusterExpand(cluster, zoomLevel, 8, 13)) {\n this._expandCluster(cluster)\n } else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n const coordinates = {\n lng: getNumber(this._externallySelectedPoint.properties, config.pointLongitude),\n lat: getNumber(this._externallySelectedPoint.properties, config.pointLatitude),\n }\n if (this._currentZoomLevel !== newZoomLevel) {\n this._currentZoomLevel = newZoomLevel\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: 0 })\n }\n }\n }\n }\n\n private _expandCluster (clusterPoint: LeafletMapPoint<Datum>): void {\n const { config, config: { clusterBackground } } = this\n const padding = 1\n\n config.tooltip?.hide()\n\n this._forceExpandCluster = false\n if (clusterPoint) {\n const points: PointFeature<PointExpandedClusterProperties<Datum>>[] =\n clusterPoint.clusterIndex.getLeaves((clusterPoint.properties as LeafletMapClusterDatum<Datum>).cluster_id as number, Infinity)\n const packPoints: {x: number; y: number; r: number }[] = points.map(p => ({\n x: null,\n y: null,\n r: getPointRadius(p, config.pointRadius, this._map.leaflet.getZoom()) + padding,\n }))\n packSiblings(packPoints)\n\n points.forEach((p, i) => {\n p.properties.expandedClusterPoint = clusterPoint\n p.properties.r = packPoints[i].r\n p.properties.dx = packPoints[i].x\n p.properties.dy = packPoints[i].y\n })\n\n this._resetExpandedCluster()\n this._expandedCluster = {\n cluster: clusterPoint,\n points,\n }\n\n if (clusterBackground) this._clusterBackgroundRadius = getClusterRadius(this._expandedCluster)\n\n this._renderData()\n }\n\n this._zoomingToExternallySelectedPoint = false\n }\n\n private _resetExpandedCluster (): void {\n this._expandedCluster?.points?.forEach(d => { delete d.properties.expandedClusterPoint })\n this._expandedCluster = null\n }\n\n private _getPointData (customBounds?: [number, number, number, number]): LeafletMapPoint<Datum>[] {\n const { config, datamodel: { data } } = this\n\n if (!data || !this._clusterIndex) return []\n\n let geoJSONPoints: (ClusterFeature<LeafletMapClusterDatum<Datum>> | PointFeature<PointExpandedClusterProperties<Datum>>)[] =\n getClustersAndPoints<Datum>(this._clusterIndex, this._map.leaflet, customBounds)\n\n if (this._expandedCluster) {\n // Remove expanded cluster from the data\n geoJSONPoints = geoJSONPoints.filter(c => (c as ClusterFeature<LeafletMapClusterDatum<Datum>>).properties.cluster_id !== (this._expandedCluster.cluster.properties as LeafletMapClusterDatum<Datum>).cluster_id)\n // Add points from the expanded cluster\n geoJSONPoints = geoJSONPoints.concat(this._expandedCluster.points)\n }\n\n const pointData = geoJSONPoints\n // Todo: Remove explicitly set ClusterFeature<LeafletMapPointDatum<Datum>> type\n .map((d: ClusterFeature<LeafletMapPointDatum<Datum>>, i: number) => geoJsonPointToScreenPoint(d, i, this._map.leaflet, config))\n // .sort((a, b) => getPointDisplayOrder(a, config.pointStatus, config.colorMap) - getPointDisplayOrder(b, config.pointStatus, config.colorMap))\n\n return pointData\n }\n\n private _getMapZoomState (): MapZoomState {\n const leafletBounds = this._map.leaflet.getBounds()\n const southWest = leafletBounds.getSouthWest()\n const northEast = leafletBounds.getNorthEast()\n\n return {\n mapCenter: this._map.leaflet.getCenter(),\n zoomLevel: this._map.leaflet.getZoom(),\n bounds: { southWest, northEast },\n userDriven: !this._eventInitiatedByComponent,\n }\n }\n\n private _onMapDragLeaflet (): void {\n this._cancelBackgroundClick = true\n }\n\n private _onMapMove (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenMoved = true\n this._renderDataAnimationFrame = requestAnimationFrame(() => {\n this._renderData(true)\n })\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onMapMoveStart (): void {\n const { config } = this\n if (!this._map) return\n this._isMoving = true\n config.onMapMoveStart?.(this._getMapZoomState())\n }\n\n private _onMapMoveEnd (): void {\n const { config } = this\n if (!this._map) return\n this._onMapMoveEndInternal?.(this._map.leaflet)\n config.onMapMoveEnd?.(this._getMapZoomState())\n\n constraintMapViewThrottled(this._map.leaflet)\n const events = this._map.layer.getEvents()\n\n if (events.zoomend) {\n const zoomEndEvent = events.zoomend.bind(this._map.layer)\n zoomEndEvent(null)\n }\n\n if (this._externallySelectedPoint || this._zoomingToExternallySelectedPoint) {\n this._zoomToExternallySelectedPoint()\n }\n\n this._isMoving = false\n this._eventInitiatedByComponent = false\n }\n\n private _onMapZoomStart (): void {\n const { config } = this\n if (!this._map) return\n this._isZooming = true\n config.onMapZoomStart?.(this._getMapZoomState())\n }\n\n private _onMapZoomEnd (): void {\n const { config } = this\n if (!this._map) return\n config.onMapZoomEnd?.(this._getMapZoomState())\n this._isZooming = false\n if (!this._isMoving) this._eventInitiatedByComponent = false\n }\n\n private _onMapZoom (): void {\n const { config } = this\n if (!this._map) return\n this._hasBeenZoomed = true\n\n if (!this._externallySelectedPoint) this._resetExpandedCluster()\n else if (!this._zoomingToExternallySelectedPoint) {\n this._externallySelectedPoint = null\n }\n\n config.tooltip?.hide()\n config.onMapMoveZoom?.(this._getMapZoomState())\n }\n\n private _onBackgroundClick (el: HTMLElement, event: MouseEvent): void {\n const { config } = this\n\n if (this._cancelBackgroundClick) {\n this._cancelBackgroundClick = false\n return\n }\n\n this._externallySelectedPoint = null\n this._resetExpandedCluster()\n this._renderData()\n config.onMapClick?.(this._getMapZoomState())\n }\n\n private _onPointClick (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n const { config: { flyToDuration, clusterExpandOnClick } } = this\n this._externallySelectedPoint = null\n event.stopPropagation()\n\n if ((d.properties as LeafletMapClusterDatum<Datum>).cluster) {\n const zoomLevel = this._map.leaflet.getZoom()\n const coordinates = { lng: d.geometry.coordinates[0], lat: d.geometry.coordinates[1] }\n\n if (clusterExpandOnClick && shouldClusterExpand(d, zoomLevel)) this._expandCluster(d)\n else {\n const newZoomLevel = getNextZoomLevelOnClusterClick(zoomLevel)\n this._eventInitiatedByComponent = true\n this._map.leaflet.flyTo(coordinates, newZoomLevel, { duration: flyToDuration / 1000 })\n }\n }\n }\n\n private _onPointMouseDown (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = true\n }\n\n private _onPointMouseUp (d: LeafletMapPoint<Datum>, event: MouseEvent): void {\n this._cancelBackgroundClick = false\n }\n\n public zoomIn (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() + increment)\n }\n\n public zoomOut (increment = 1): void {\n if (!this._map?.leaflet) return\n this.setZoom(this._map.leaflet.getZoom() - increment)\n }\n\n public setZoom (zoomLevel: number): void {\n const leaflet = this._map?.leaflet\n if (!leaflet) return\n\n this._eventInitiatedByComponent = true\n leaflet.flyTo(\n leaflet.getCenter(),\n clamp(zoomLevel, leaflet.getMinZoom(), leaflet.getMaxZoom()),\n { duration: this.config.zoomDuration / 1000 }\n )\n }\n\n public fitView (): void {\n this.fitToPoints()\n }\n\n public destroy (): void {\n constraintMapViewThrottled.cancel()\n cancelAnimationFrame(this._renderDataAnimationFrame)\n const map = this._map?.leaflet\n this._map = undefined\n\n map?.stop()\n map?.remove()\n this.g.remove()\n this.resizeObserver.disconnect()\n this.themeObserver?.disconnect()\n }\n}\n"],"names":["s.root","map","s.map","s.svgOverlay","s.backgroundRect","s.points","s.clusterBackground","s.pointSelectionRing","s.point","s"],"mappings":"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"}
|
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.3-beta.
|
|
4
|
+
"version": "1.0.3-beta.6",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/f5/unovis.git",
|