@krainovsd/graph 0.13.0-beta1 → 0.14.0-beta-7.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.
- package/lib/cjs/index.cjs +1297 -606
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/constants/force-controls.js +4 -2
- package/lib/esm/constants/force-controls.js.map +1 -1
- package/lib/esm/constants/highlight-controls.js +9 -16
- package/lib/esm/constants/highlight-controls.js.map +1 -1
- package/lib/esm/constants/link-controls.js +17 -30
- package/lib/esm/constants/link-controls.js.map +1 -1
- package/lib/esm/constants/node-controls.js +4 -2
- package/lib/esm/constants/node-controls.js.map +1 -1
- package/lib/esm/index.js +8 -7
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/module/GraphCanvas/GraphCanvas.js +305 -81
- package/lib/esm/module/GraphCanvas/GraphCanvas.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/force-settings.js +11 -1
- package/lib/esm/module/GraphCanvas/constants/force-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/graph-settings.js +17 -5
- package/lib/esm/module/GraphCanvas/constants/graph-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/highlight-settings.js +5 -3
- package/lib/esm/module/GraphCanvas/constants/highlight-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/index.js +5 -2
- package/lib/esm/module/GraphCanvas/constants/index.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/link-settings.js +19 -9
- package/lib/esm/module/GraphCanvas/constants/link-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/node-settings.js +13 -3
- package/lib/esm/module/GraphCanvas/constants/node-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js +4 -2
- package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/graph-settings-getter.js +4 -0
- package/lib/esm/module/GraphCanvas/lib/settings/graph-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/highlight-settings-getter.js +4 -2
- package/lib/esm/module/GraphCanvas/lib/settings/highlight-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js +8 -5
- package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js +14 -2
- package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-curve-link-position-by-node.js +45 -0
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-curve-link-position-by-node.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js +42 -37
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/compute-graph-bounds.js +26 -0
- package/lib/esm/module/GraphCanvas/lib/utils/compute-graph-bounds.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js +40 -30
- package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/is-empty-object.js +11 -0
- package/lib/esm/module/GraphCanvas/lib/utils/is-empty-object.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js +5 -2
- package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/link-by-pointer-getter.js +72 -26
- package/lib/esm/module/GraphCanvas/lib/utils/link-by-pointer-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js +1 -5
- package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/pointer-getter.js +16 -8
- package/lib/esm/module/GraphCanvas/lib/utils/pointer-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-links.js +115 -77
- package/lib/esm/module/GraphCanvas/slices/draw-links.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js +9 -4
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-area.js +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-area.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-dnd.js +20 -13
- package/lib/esm/module/GraphCanvas/slices/init-dnd.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-draw.js +14 -52
- package/lib/esm/module/GraphCanvas/slices/init-draw.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js +51 -72
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-resize.js +11 -0
- package/lib/esm/module/GraphCanvas/slices/init-resize.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-selection.js +152 -0
- package/lib/esm/module/GraphCanvas/slices/init-selection.js.map +1 -0
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js +12 -2
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js +88 -16
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/update-link-cache.js +63 -3
- package/lib/esm/module/GraphCanvas/slices/update-link-cache.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/update-node-cache.js +61 -16
- package/lib/esm/module/GraphCanvas/slices/update-node-cache.js.map +1 -1
- package/lib/index.d.ts +127 -62
- package/package.json +3 -2
|
@@ -1,16 +1,42 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../constants/force-settings.js';
|
|
2
|
+
import '../constants/graph-settings.js';
|
|
3
|
+
import '../constants/highlight-settings.js';
|
|
4
|
+
import '../constants/link-settings.js';
|
|
5
|
+
import '../constants/node-settings.js';
|
|
2
6
|
import { nodeOptionsGetter, nodeRadiusGetter, nodeSizeGetter } from '../lib/settings/node-settings-getter.js';
|
|
7
|
+
import '@krainovsd/js-helpers';
|
|
3
8
|
import 'd3-array';
|
|
4
9
|
import { nodeIterationExtractor } from '../lib/utils/node-iteration-extractor.js';
|
|
5
10
|
import { getTextLines } from './draw-text.js';
|
|
6
11
|
|
|
7
|
-
function updateNodeCache(
|
|
8
|
-
this.nodeOptionsCache = {};
|
|
12
|
+
function updateNodeCache() {
|
|
9
13
|
if (!this.context)
|
|
10
14
|
return;
|
|
15
|
+
const currentZoom = this.areaTransform.k;
|
|
16
|
+
const options = this.nodeOptionsCache.length === 0;
|
|
17
|
+
const label = this.cachedNodeLabel.length === 0;
|
|
18
|
+
let text = this.cachedNodeText.length === 0;
|
|
19
|
+
if (this.nodeSettings.smartCache &&
|
|
20
|
+
this._lastNodeZoomK !== undefined &&
|
|
21
|
+
!options &&
|
|
22
|
+
!text &&
|
|
23
|
+
!label) {
|
|
24
|
+
const thresholds = this.nodeSettings.textScaleSteps;
|
|
25
|
+
if (thresholds && thresholds.length > 0) {
|
|
26
|
+
const min = Math.min(this._lastNodeZoomK, currentZoom);
|
|
27
|
+
const max = Math.max(this._lastNodeZoomK, currentZoom);
|
|
28
|
+
const crossed = thresholds.some((t) => t >= min && t <= max);
|
|
29
|
+
this._lastNodeZoomK = currentZoom;
|
|
30
|
+
if (!crossed)
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.cachedNodeText.length = 0;
|
|
34
|
+
text = true;
|
|
35
|
+
}
|
|
36
|
+
this._lastNodeZoomK = currentZoom;
|
|
11
37
|
for (let i = 0; i < this.nodes.length; i++) {
|
|
12
38
|
const node = this.nodes[i];
|
|
13
|
-
if (
|
|
39
|
+
if (options) {
|
|
14
40
|
const nodeOptions = nodeIterationExtractor(node, i, this.nodes, this, this.nodeSettings.options ?? {}, nodeOptionsGetter);
|
|
15
41
|
const radius = nodeOptions.shape === "circle"
|
|
16
42
|
? nodeRadiusGetter({
|
|
@@ -61,11 +87,19 @@ function updateNodeCache(types) {
|
|
|
61
87
|
nodeOptions.height = node.visible === false ? 0 : height;
|
|
62
88
|
nodeOptions.radius = node.visible === false ? 0 : radius;
|
|
63
89
|
nodeOptions.labelSize = labelSize;
|
|
64
|
-
this.nodeOptionsCache[
|
|
90
|
+
this.nodeOptionsCache[i] = nodeOptions;
|
|
65
91
|
}
|
|
66
|
-
|
|
92
|
+
let nodeOptions = this.nodeOptionsCache[i];
|
|
93
|
+
if (!nodeOptions)
|
|
94
|
+
continue;
|
|
67
95
|
/** label */
|
|
68
|
-
if (
|
|
96
|
+
if (label) {
|
|
97
|
+
if (!options) {
|
|
98
|
+
nodeOptions = nodeIterationExtractor(node, i, this.nodes, this, this.nodeSettings.options ?? {}, nodeOptionsGetter);
|
|
99
|
+
const cache = this.nodeOptionsCache[i];
|
|
100
|
+
if (cache)
|
|
101
|
+
cache.label = nodeOptions.label;
|
|
102
|
+
}
|
|
69
103
|
/** label in not text shape */
|
|
70
104
|
if (nodeOptions.shape !== "text" && nodeOptions.label) {
|
|
71
105
|
this.context.font = `${nodeOptions.labelStyle} normal ${nodeOptions.labelWeight} ${nodeOptions.labelSize}px ${nodeOptions.labelFont}`;
|
|
@@ -73,7 +107,7 @@ function updateNodeCache(types) {
|
|
|
73
107
|
this.context.textAlign = nodeOptions.labelAlign;
|
|
74
108
|
if (nodeOptions.labelWidth == undefined ||
|
|
75
109
|
this.context.measureText(nodeOptions.label).width <= nodeOptions.labelWidth) {
|
|
76
|
-
this.cachedNodeLabel[
|
|
110
|
+
this.cachedNodeLabel[i] = [nodeOptions.label];
|
|
77
111
|
}
|
|
78
112
|
const { lines } = getTextLines({
|
|
79
113
|
context: this.context,
|
|
@@ -86,7 +120,7 @@ function updateNodeCache(types) {
|
|
|
86
120
|
textStyle: nodeOptions.labelStyle,
|
|
87
121
|
textWeight: nodeOptions.labelWeight,
|
|
88
122
|
});
|
|
89
|
-
this.cachedNodeLabel[
|
|
123
|
+
this.cachedNodeLabel[i] = lines;
|
|
90
124
|
/** label in text shape */
|
|
91
125
|
}
|
|
92
126
|
else if (nodeOptions.shape === "text" && nodeOptions.label) {
|
|
@@ -110,18 +144,29 @@ function updateNodeCache(types) {
|
|
|
110
144
|
(lines.length - 1) * nodeOptions.labelGap +
|
|
111
145
|
nodeOptions.labelYPadding;
|
|
112
146
|
nodeOptions.width = maxSize + nodeOptions.labelXPadding;
|
|
113
|
-
this.cachedNodeLabel[
|
|
147
|
+
this.cachedNodeLabel[i] = lines;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this.cachedNodeLabel[i] = [];
|
|
114
151
|
}
|
|
115
152
|
}
|
|
116
153
|
/** text */
|
|
117
|
-
if (
|
|
154
|
+
if (text) {
|
|
155
|
+
if (!options) {
|
|
156
|
+
nodeOptions = nodeIterationExtractor(node, i, this.nodes, this, this.nodeSettings.options ?? {}, nodeOptionsGetter);
|
|
157
|
+
const cache = this.nodeOptionsCache[i];
|
|
158
|
+
if (cache) {
|
|
159
|
+
cache.text = nodeOptions.text;
|
|
160
|
+
cache.textVisible = nodeOptions.textVisible;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (!nodeOptions.text) {
|
|
164
|
+
this.cachedNodeText[i] = [];
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
118
167
|
this.context.font = `${nodeOptions.textStyle} normal ${nodeOptions.textWeight} ${nodeOptions.textSize}px ${nodeOptions.textFont}`;
|
|
119
168
|
this.context.fillStyle = nodeOptions.textColor;
|
|
120
169
|
this.context.textAlign = nodeOptions.textAlign;
|
|
121
|
-
if (nodeOptions.textWidth == undefined ||
|
|
122
|
-
this.context.measureText(nodeOptions.text).width <= nodeOptions.textWidth) {
|
|
123
|
-
this.cachedNodeText[node.id] = [nodeOptions.text];
|
|
124
|
-
}
|
|
125
170
|
const { lines } = getTextLines({
|
|
126
171
|
context: this.context,
|
|
127
172
|
maxWidth: nodeOptions.textWidth,
|
|
@@ -133,7 +178,7 @@ function updateNodeCache(types) {
|
|
|
133
178
|
textStyle: nodeOptions.textStyle,
|
|
134
179
|
textWeight: nodeOptions.textWeight,
|
|
135
180
|
});
|
|
136
|
-
this.cachedNodeText[
|
|
181
|
+
this.cachedNodeText[i] = lines;
|
|
137
182
|
}
|
|
138
183
|
}
|
|
139
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-node-cache.js","sources":["../../../../../src/module/GraphCanvas/slices/update-node-cache.ts"],"sourcesContent":["import { isObject } from \"@krainovsd/js-helpers\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n} from \"../lib\";\nimport { getTextLines } from \"./draw-text\";\n\ntype NodeCache = {\n options: boolean;\n text: boolean;\n label: boolean;\n};\n\nexport function updateNodeCache<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>, types: boolean | NodeCache) {\n this.nodeOptionsCache = {};\n if (!this.context) return;\n\n for (let i = 0; i < this.nodes.length; i++) {\n const node = this.nodes[i];\n if (types === true || (isObject(types) && types.options)) {\n const nodeOptions = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const radius =\n nodeOptions.shape === \"circle\"\n ? nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,\n radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,\n radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,\n radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,\n radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,\n linkCount: node.linkCount,\n })\n : nodeOptions.radius;\n\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let labelSize = nodeOptions.labelSize;\n if (nodeOptions.shape === \"square\") {\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: nodeOptions.width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n width = size.width;\n height = size.height;\n }\n if (nodeOptions.shape === \"text\") {\n width = nodeOptions.width;\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n\n labelSize *= size.additionalSizeCoefficient;\n }\n\n nodeOptions.width = node.visible === false ? 0 : width;\n nodeOptions.height = node.visible === false ? 0 : height;\n nodeOptions.radius = node.visible === false ? 0 : radius;\n nodeOptions.labelSize = labelSize;\n this.nodeOptionsCache[node.id] = nodeOptions;\n }\n\n const nodeOptions = this.nodeOptionsCache[node.id];\n /** label */\n if (types === true || (isObject(types) && types.label)) {\n /** label in not text shape */\n if (nodeOptions.shape !== \"text\" && nodeOptions.label) {\n this.context.font = `${nodeOptions.labelStyle} normal ${nodeOptions.labelWeight} ${nodeOptions.labelSize}px ${nodeOptions.labelFont}`;\n this.context.fillStyle = nodeOptions.labelColor;\n this.context.textAlign = nodeOptions.labelAlign;\n\n if (\n nodeOptions.labelWidth == undefined ||\n this.context.measureText(nodeOptions.label).width <= nodeOptions.labelWidth\n ) {\n this.cachedNodeLabel[node.id] = [nodeOptions.label];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.labelWidth,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: nodeOptions.labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.labelWeight,\n });\n this.cachedNodeLabel[node.id] = lines;\n /** label in text shape */\n } else if (nodeOptions.shape === \"text\" && nodeOptions.label) {\n const textInfo = getTextLines({\n context: this.context,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: nodeOptions.labelSize,\n maxWidth: nodeOptions.labelWidth,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.textWeight,\n });\n const textNodeParameters = [textInfo.currentMaxSize, nodeOptions.labelSize];\n const lines = textInfo.lines;\n const textSizeCoefficient = nodeOptions.labelSize / textNodeParameters[1];\n const maxSize = textNodeParameters[0] * textSizeCoefficient;\n\n nodeOptions.height =\n lines.length * nodeOptions.labelSize +\n (lines.length - 1) * nodeOptions.labelGap +\n nodeOptions.labelYPadding;\n\n nodeOptions.width = maxSize + nodeOptions.labelXPadding;\n this.cachedNodeLabel[node.id] = lines;\n }\n }\n\n /** text */\n if (nodeOptions.text && (types === true || (isObject(types) && types.text))) {\n this.context.font = `${nodeOptions.textStyle} normal ${nodeOptions.textWeight} ${nodeOptions.textSize}px ${nodeOptions.textFont}`;\n this.context.fillStyle = nodeOptions.textColor;\n this.context.textAlign = nodeOptions.textAlign;\n\n if (\n nodeOptions.textWidth == undefined ||\n this.context.measureText(nodeOptions.text).width <= nodeOptions.textWidth\n ) {\n this.cachedNodeText[node.id] = [nodeOptions.text];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.textWidth,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize: nodeOptions.textSize,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n });\n this.cachedNodeText[node.id] = lines;\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update-node-cache.js","sources":["../../../../../src/module/GraphCanvas/slices/update-node-cache.ts"],"sourcesContent":["import type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n} from \"../lib\";\nimport { getTextLines } from \"./draw-text\";\n\nexport function updateNodeCache<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.context) return;\n\n const currentZoom = this.areaTransform.k;\n const options = this.nodeOptionsCache.length === 0;\n const label = this.cachedNodeLabel.length === 0;\n let text = this.cachedNodeText.length === 0;\n\n if (\n this.nodeSettings.smartCache &&\n this._lastNodeZoomK !== undefined &&\n !options &&\n !text &&\n !label\n ) {\n const thresholds = this.nodeSettings.textScaleSteps;\n if (thresholds && thresholds.length > 0) {\n const min = Math.min(this._lastNodeZoomK, currentZoom);\n const max = Math.max(this._lastNodeZoomK, currentZoom);\n const crossed = thresholds.some((t) => t >= min && t <= max);\n this._lastNodeZoomK = currentZoom;\n if (!crossed) return;\n }\n this.cachedNodeText.length = 0;\n text = true;\n }\n this._lastNodeZoomK = currentZoom;\n\n for (let i = 0; i < this.nodes.length; i++) {\n const node = this.nodes[i];\n if (options) {\n const nodeOptions = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const radius =\n nodeOptions.shape === \"circle\"\n ? nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,\n radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,\n radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,\n radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,\n radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,\n linkCount: node.linkCount,\n })\n : nodeOptions.radius;\n\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let labelSize = nodeOptions.labelSize;\n if (nodeOptions.shape === \"square\") {\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: nodeOptions.width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n width = size.width;\n height = size.height;\n }\n if (nodeOptions.shape === \"text\") {\n width = nodeOptions.width;\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n\n labelSize *= size.additionalSizeCoefficient;\n }\n\n nodeOptions.width = node.visible === false ? 0 : width;\n nodeOptions.height = node.visible === false ? 0 : height;\n nodeOptions.radius = node.visible === false ? 0 : radius;\n nodeOptions.labelSize = labelSize;\n this.nodeOptionsCache[i] = nodeOptions;\n }\n\n let nodeOptions = this.nodeOptionsCache[i];\n if (!nodeOptions) continue;\n /** label */\n if (label) {\n if (!options) {\n nodeOptions = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const cache = this.nodeOptionsCache[i];\n if (cache) cache.label = nodeOptions.label;\n }\n /** label in not text shape */\n if (nodeOptions.shape !== \"text\" && nodeOptions.label) {\n this.context.font = `${nodeOptions.labelStyle} normal ${nodeOptions.labelWeight} ${nodeOptions.labelSize}px ${nodeOptions.labelFont}`;\n this.context.fillStyle = nodeOptions.labelColor;\n this.context.textAlign = nodeOptions.labelAlign;\n\n if (\n nodeOptions.labelWidth == undefined ||\n this.context.measureText(nodeOptions.label).width <= nodeOptions.labelWidth\n ) {\n this.cachedNodeLabel[i] = [nodeOptions.label];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.labelWidth,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: nodeOptions.labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.labelWeight,\n });\n this.cachedNodeLabel[i] = lines;\n /** label in text shape */\n } else if (nodeOptions.shape === \"text\" && nodeOptions.label) {\n const textInfo = getTextLines({\n context: this.context,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: nodeOptions.labelSize,\n maxWidth: nodeOptions.labelWidth,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.textWeight,\n });\n const textNodeParameters = [textInfo.currentMaxSize, nodeOptions.labelSize];\n const lines = textInfo.lines;\n const textSizeCoefficient = nodeOptions.labelSize / textNodeParameters[1];\n const maxSize = textNodeParameters[0] * textSizeCoefficient;\n\n nodeOptions.height =\n lines.length * nodeOptions.labelSize +\n (lines.length - 1) * nodeOptions.labelGap +\n nodeOptions.labelYPadding;\n\n nodeOptions.width = maxSize + nodeOptions.labelXPadding;\n this.cachedNodeLabel[i] = lines;\n } else {\n this.cachedNodeLabel[i] = [];\n }\n }\n\n /** text */\n if (text) {\n if (!options) {\n nodeOptions = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const cache = this.nodeOptionsCache[i];\n if (cache) {\n cache.text = nodeOptions.text;\n cache.textVisible = nodeOptions.textVisible;\n }\n }\n if (!nodeOptions.text) {\n this.cachedNodeText[i] = [];\n return;\n }\n this.context.font = `${nodeOptions.textStyle} normal ${nodeOptions.textWeight} ${nodeOptions.textSize}px ${nodeOptions.textFont}`;\n this.context.fillStyle = nodeOptions.textColor;\n this.context.textAlign = nodeOptions.textAlign;\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.textWidth,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize: nodeOptions.textSize,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n });\n this.cachedNodeText[i] = lines;\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ interface NodeInterface<NodeData extends Record<string, unknown>> extends Simula
|
|
|
26
26
|
highlight?: boolean;
|
|
27
27
|
visible?: boolean;
|
|
28
28
|
image?: HTMLImageElement;
|
|
29
|
+
_selected?: boolean;
|
|
29
30
|
data?: NodeData;
|
|
30
31
|
}
|
|
31
32
|
type NodeShape = "circle" | "square" | "text";
|
|
@@ -36,16 +37,26 @@ interface LinkInterface<NodeData extends Record<string, unknown>, LinkData exten
|
|
|
36
37
|
data?: LinkData;
|
|
37
38
|
highlight?: boolean;
|
|
38
39
|
visible?: boolean;
|
|
40
|
+
_selected?: boolean;
|
|
41
|
+
_groupIndex?: number;
|
|
42
|
+
_groupSize?: number;
|
|
43
|
+
_self?: boolean;
|
|
44
|
+
_x1?: number;
|
|
45
|
+
_y1?: number;
|
|
46
|
+
_x2?: number;
|
|
47
|
+
_y2?: number;
|
|
48
|
+
_cx?: number;
|
|
49
|
+
_cy?: number;
|
|
50
|
+
_ax?: number;
|
|
51
|
+
_ay?: number;
|
|
39
52
|
}
|
|
40
53
|
type LinkParticle = {
|
|
41
|
-
step: number;
|
|
42
54
|
index: number;
|
|
43
|
-
prev: LinkParticle | undefined;
|
|
44
|
-
next: LinkParticle | undefined;
|
|
45
55
|
x?: number;
|
|
46
56
|
y?: number;
|
|
47
|
-
|
|
48
|
-
|
|
57
|
+
_distanceTraveled?: number;
|
|
58
|
+
_lastDistance?: number;
|
|
59
|
+
_lastTime?: number;
|
|
49
60
|
};
|
|
50
61
|
|
|
51
62
|
type NodeIterationPropsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[]) => Return;
|
|
@@ -53,6 +64,12 @@ type LinkIterationPropsInterface<NodeData extends Record<string, unknown>, LinkD
|
|
|
53
64
|
type NodeIterationPropsNoThisInterface<NodeData extends Record<string, unknown>, Return = number> = (node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[]) => Return;
|
|
54
65
|
type LinkIterationPropsNoThisInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[]) => Return;
|
|
55
66
|
|
|
67
|
+
type PrecomputeForceSettingsInterface = {
|
|
68
|
+
precompute?: boolean;
|
|
69
|
+
precomputeMaxTimeMs?: number;
|
|
70
|
+
precomputeMaxTicks?: number;
|
|
71
|
+
precomputeDisableForcesAfter?: boolean;
|
|
72
|
+
};
|
|
56
73
|
type ForceSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
57
74
|
forces?: boolean;
|
|
58
75
|
xForce?: boolean;
|
|
@@ -83,15 +100,21 @@ type ForceSettingsInterface<NodeData extends Record<string, unknown>, LinkData e
|
|
|
83
100
|
xStrength?: NodeIterationPropsNoThisInterface<NodeData> | number;
|
|
84
101
|
yPosition?: NodeIterationPropsNoThisInterface<NodeData> | number;
|
|
85
102
|
yStrength?: NodeIterationPropsNoThisInterface<NodeData> | number;
|
|
86
|
-
};
|
|
103
|
+
} & PrecomputeForceSettingsInterface;
|
|
87
104
|
|
|
88
105
|
declare const FORCE_SETTINGS: Required<ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>>;
|
|
106
|
+
declare const PERFORMANCE_FORCE_SETTINGS: Required<ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>>;
|
|
89
107
|
|
|
90
108
|
type GraphSettingsInterface<NodeData extends Record<string, unknown>> = {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
109
|
+
zoomAnimation?: boolean;
|
|
110
|
+
zoomAnimationDuration?: number;
|
|
111
|
+
zoomToNodeScale?: number;
|
|
112
|
+
zoomToFitMargin?: number;
|
|
113
|
+
zoomExtent?: [number, number] | null;
|
|
114
|
+
zoomExtentMargin?: number;
|
|
115
|
+
translateExtent?: [[number?, number?], [number?, number?]] | null;
|
|
116
|
+
translateExtentCoefficient?: number | [number, number] | null;
|
|
117
|
+
translateExtentOverlap?: number;
|
|
95
118
|
zoomInitial?: {
|
|
96
119
|
k?: number;
|
|
97
120
|
x?: number;
|
|
@@ -103,11 +126,11 @@ type GraphSettingsInterface<NodeData extends Record<string, unknown>> = {
|
|
|
103
126
|
};
|
|
104
127
|
|
|
105
128
|
declare const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>>;
|
|
129
|
+
declare const PERFORMANCE_GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>>;
|
|
106
130
|
|
|
107
131
|
type HighlightSettingsInterface = HighlighCommonSettingsInterface & HighlightByNodeForNodeSettingsInterface & HighlightByNodeForLabelSettingsInterface & HighlightByNodeForTextSettingsInterface & HighlightByNodeForLinkSettingsInterface & HighlightByNodeForArrowSettingsInterface & HighlightByLinkForNodeSettingsInterface & HighlightByLinkForTextSettingsInterface & HighlightByLinkForLabelSettingsInterface & HighlightByLinkForLinkSettingsInterface & HighlightByLinkForArrowSettingsInterface;
|
|
108
132
|
type HighlighCommonSettingsInterface = {
|
|
109
|
-
|
|
110
|
-
highlightUpFrames?: number;
|
|
133
|
+
highlightDuration?: number;
|
|
111
134
|
highlightByHoverNode?: boolean;
|
|
112
135
|
highlightByHoverLink?: boolean;
|
|
113
136
|
linkHoverExtraZone?: number;
|
|
@@ -181,14 +204,17 @@ type HighlightByLinkForArrowSettingsInterface = {
|
|
|
181
204
|
};
|
|
182
205
|
|
|
183
206
|
declare const HIGHLIGHT_SETTINGS: Required<HighlightSettingsInterface>;
|
|
207
|
+
declare const PERFORMANCE_HIGHLIGHT_SETTINGS: Required<HighlightSettingsInterface>;
|
|
184
208
|
|
|
185
209
|
type LinkSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
210
|
+
smartCache?: boolean;
|
|
186
211
|
prettyDraw?: boolean;
|
|
212
|
+
curve?: boolean;
|
|
187
213
|
arrow?: boolean;
|
|
188
214
|
arrowByHighlight?: boolean;
|
|
189
215
|
particles?: boolean;
|
|
190
|
-
|
|
191
|
-
|
|
216
|
+
particleCountByDistance?: number;
|
|
217
|
+
particleSpeedByDistance?: number;
|
|
192
218
|
linkScaleSwitch?: number;
|
|
193
219
|
linkWidthBeforeScaleSwitch?: number;
|
|
194
220
|
linkWidthAfterScaleSwitch?: number;
|
|
@@ -216,16 +242,18 @@ type LinkOptionsParticleInterface = {
|
|
|
216
242
|
particleAlpha?: number;
|
|
217
243
|
particleColor?: string;
|
|
218
244
|
particleRadius?: number;
|
|
219
|
-
particleCount?: number;
|
|
220
|
-
particleSteps?: number;
|
|
221
245
|
particleBorderWidth?: number;
|
|
222
246
|
particleBorderColor?: string;
|
|
223
247
|
};
|
|
224
248
|
|
|
225
249
|
declare const LINK_SETTINGS: Omit<Required<LinkSettingsInterface<Record<string, unknown>, Record<string, unknown>>>, "options">;
|
|
226
250
|
declare const LINK_OPTIONS: Omit<Required<LinkOptionsInterface<Record<string, unknown>, Record<string, unknown>>>, "color" | "width" | "drawLink" | "drawExtraLink" | "arrowColor">;
|
|
251
|
+
declare const PERFORMANCE_LINK_SETTINGS: Omit<Required<LinkSettingsInterface<Record<string, unknown>, Record<string, unknown>>>, "options">;
|
|
252
|
+
declare const PERFORMANCE_LINK_OPTIONS: Omit<Required<LinkOptionsInterface<Record<string, unknown>, Record<string, unknown>>>, "color" | "width" | "drawLink" | "drawExtraLink" | "arrowColor">;
|
|
227
253
|
|
|
228
254
|
type NodeSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
255
|
+
smartCache?: boolean;
|
|
256
|
+
textScaleSteps?: number[];
|
|
229
257
|
nodeRadiusFlexible?: boolean;
|
|
230
258
|
nodeRadiusLinkCountForStep?: number;
|
|
231
259
|
nodeRadiusIncrementByStep?: number;
|
|
@@ -297,6 +325,8 @@ type NodeOptionsLabelInterface = {
|
|
|
297
325
|
|
|
298
326
|
declare const NODE_SETTINGS: Omit<Required<NodeSettingsInterface<Record<string, unknown>, Record<string, unknown>>>, "options" | "idGetter">;
|
|
299
327
|
declare const NODE_OPTIONS: Omit<Required<NodeOptionsInterface<Record<string, unknown>, Record<string, unknown>>>, "color" | "text" | "textVisible" | "textSize" | "textShiftY" | "nodeDraw" | "nodeExtraDraw" | "textDraw" | "textExtraDraw">;
|
|
328
|
+
declare const PERFORMANCE_NODE_SETTINGS: Omit<Required<NodeSettingsInterface<Record<string, unknown>, Record<string, unknown>>>, "options" | "idGetter">;
|
|
329
|
+
declare const PERFOMANCE_NODE_OPTIONS: Omit<Required<NodeOptionsInterface<Record<string, unknown>, Record<string, unknown>>>, "color" | "text" | "textVisible" | "textSize" | "textShiftY" | "nodeDraw" | "nodeExtraDraw" | "textDraw" | "textExtraDraw">;
|
|
300
330
|
|
|
301
331
|
declare const GRAPH_CACHE_TYPE: {
|
|
302
332
|
readonly NodeOptions: "nodeOptions";
|
|
@@ -321,6 +351,9 @@ type ListenersInterface<NodeData extends Record<string, unknown>, LinkData exten
|
|
|
321
351
|
onEndDragFinished?: (this: GraphCanvas<NodeData, LinkData>, event: DragEventInterface<NodeData>) => void;
|
|
322
352
|
onDrawFinished?: (this: GraphCanvas<NodeData, LinkData>) => void;
|
|
323
353
|
onSimulationEnd?: (this: GraphCanvas<NodeData, LinkData>) => void;
|
|
354
|
+
onSelectionIn?: (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData> | undefined, link: LinkInterface<NodeData, LinkData> | undefined) => void;
|
|
355
|
+
onSelectionOut?: (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData> | undefined, link: LinkInterface<NodeData, LinkData> | undefined) => void;
|
|
356
|
+
onSelectionEnd?: (this: GraphCanvas<NodeData, LinkData>, nodes: NodeInterface<NodeData>[], links: LinkInterface<NodeData, LinkData>[]) => void;
|
|
324
357
|
};
|
|
325
358
|
|
|
326
359
|
type GraphCanvasInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
@@ -341,7 +374,7 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
341
374
|
/** initial data */
|
|
342
375
|
protected nodes: NodeInterface<NodeData>[];
|
|
343
376
|
protected links: LinkInterface<NodeData, LinkData>[];
|
|
344
|
-
protected particles:
|
|
377
|
+
protected particles: (LinkParticle[] | undefined)[];
|
|
345
378
|
protected width: number;
|
|
346
379
|
protected height: number;
|
|
347
380
|
protected root: HTMLElement;
|
|
@@ -358,39 +391,57 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
358
391
|
protected context: CanvasRenderingContext2D | null | undefined;
|
|
359
392
|
protected simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;
|
|
360
393
|
protected areaTransform: ZoomTransform;
|
|
361
|
-
protected
|
|
362
|
-
protected draw: (this: GraphCanvas<NodeData, LinkData
|
|
394
|
+
protected _translateExtent: [[number, number], [number, number]] | undefined;
|
|
395
|
+
protected draw: (this: GraphCanvas<NodeData, LinkData>) => void;
|
|
363
396
|
protected eventAbortController: AbortController;
|
|
364
|
-
protected cachedNodeText:
|
|
365
|
-
protected cachedNodeLabel:
|
|
366
|
-
protected linkOptionsCache:
|
|
367
|
-
protected nodeOptionsCache:
|
|
397
|
+
protected cachedNodeText: (string[] | undefined)[];
|
|
398
|
+
protected cachedNodeLabel: (string[] | undefined)[];
|
|
399
|
+
protected linkOptionsCache: (Required<LinkOptionsInterface<NodeData, LinkData>> | undefined)[];
|
|
400
|
+
protected nodeOptionsCache: (Required<NodeOptionsInterface<NodeData, LinkData>> | undefined)[];
|
|
368
401
|
protected isDragging: boolean;
|
|
369
402
|
protected highlightedNode: NodeInterface<NodeData> | null;
|
|
370
403
|
protected highlightedLink: LinkInterface<NodeData, LinkData> | null;
|
|
371
404
|
protected highlightedNeighbors: Set<string | number> | null;
|
|
372
405
|
protected highlightProgress: number;
|
|
373
|
-
protected
|
|
406
|
+
protected highlightStart: number | null;
|
|
407
|
+
protected highlightPositive: boolean;
|
|
408
|
+
protected highlightController: AbortController | undefined;
|
|
409
|
+
protected _lastNodeZoomK: number | undefined;
|
|
410
|
+
protected _lastLinkZoomK: number | undefined;
|
|
411
|
+
protected _zoomAnimating: boolean;
|
|
412
|
+
protected isSelecting: boolean;
|
|
413
|
+
protected selectionRect: {
|
|
414
|
+
x1: number;
|
|
415
|
+
y1: number;
|
|
416
|
+
x2: number;
|
|
417
|
+
y2: number;
|
|
418
|
+
} | null;
|
|
419
|
+
protected get areaRect(): DOMRect | undefined;
|
|
374
420
|
protected get simulationWorking(): boolean;
|
|
375
421
|
constructor({ links, nodes, root, forceSettings, linkSettings, listeners, nodeSettings, graphSettings, highlightSettings, }: GraphCanvasInterface<NodeData, LinkData>);
|
|
376
422
|
get dpi(): number;
|
|
377
|
-
getData()
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
protected
|
|
392
|
-
protected
|
|
393
|
-
protected
|
|
423
|
+
getData: () => Pick<GraphCanvasInterface<NodeData, LinkData>, "nodes" | "links">;
|
|
424
|
+
fitToView: (margin?: number, duration?: number) => void;
|
|
425
|
+
focusOnNode: (nodeId: string | number, scale?: number, duration?: number) => void;
|
|
426
|
+
changeData: (options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes">, alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => void;
|
|
427
|
+
changeSettings: (options: Omit<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes" | "listeners">, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => undefined;
|
|
428
|
+
updateRect: () => void;
|
|
429
|
+
updateSize: () => void;
|
|
430
|
+
clearCache: (keys: boolean | GraphCanvasCacheKeys[]) => void;
|
|
431
|
+
tick: () => void;
|
|
432
|
+
restart: (alpha?: number, options?: Partial<PrecomputeForceSettingsInterface>) => void;
|
|
433
|
+
start: () => void;
|
|
434
|
+
stop: () => void;
|
|
435
|
+
create: () => void;
|
|
436
|
+
destroy: () => void;
|
|
437
|
+
protected getPointerAreaPosition: (event: MouseEvent | TouchEvent) => number[];
|
|
438
|
+
protected clearHTMLElements: () => void;
|
|
439
|
+
protected updateSimulation: (precompute?: boolean) => void;
|
|
440
|
+
protected clearState: () => void;
|
|
441
|
+
protected init: () => void;
|
|
442
|
+
protected updateData: (alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => void;
|
|
443
|
+
protected animateHighlight: (node: NodeInterface<NodeData> | undefined, link: LinkInterface<NodeData, LinkData> | undefined, baseDuration?: number) => void;
|
|
444
|
+
protected animateZoom: (area: HTMLCanvasElement, target: ZoomTransform, start: ZoomTransform, duration: number) => void;
|
|
394
445
|
}
|
|
395
446
|
|
|
396
447
|
declare function forceSettingsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(settings: ForceSettingsInterface<NodeData, LinkData> | undefined, prevSettings?: Required<ForceSettingsInterface<NodeData, LinkData>>): Required<ForceSettingsInterface<NodeData, LinkData>>;
|
|
@@ -439,7 +490,15 @@ declare function nodeIdGetter<NodeData extends Record<string, unknown>>(node: No
|
|
|
439
490
|
|
|
440
491
|
declare function highlightSettingsGetter(settings: HighlightSettingsInterface | undefined, prevSettings?: Required<HighlightSettingsInterface>): Required<HighlightSettingsInterface>;
|
|
441
492
|
|
|
442
|
-
|
|
493
|
+
interface GraphBounds {
|
|
494
|
+
minX: number;
|
|
495
|
+
minY: number;
|
|
496
|
+
maxX: number;
|
|
497
|
+
maxY: number;
|
|
498
|
+
}
|
|
499
|
+
declare function computeGraphBounds<NodeData extends Record<string, unknown>>(nodes: NodeInterface<NodeData>[]): GraphBounds | null;
|
|
500
|
+
|
|
501
|
+
declare function pointerGetter(mouseEvent: MouseEvent | TouchEvent, areaRect: DOMRect | undefined, areaTransform: ZoomTransform): number[];
|
|
443
502
|
|
|
444
503
|
declare function dragPlaceCoefficientGetter<NodeData extends Record<string, unknown>>(node: NodeInterface<NodeData>, pointerX: number, pointerY: number): number | undefined;
|
|
445
504
|
|
|
@@ -449,23 +508,24 @@ declare function linkIterationExtractor<NodeData extends Record<string, unknown>
|
|
|
449
508
|
declare function linkIterationExtractor<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Result extends string | number | boolean | Record<string, unknown> | unknown[]>(link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[], state: GraphCanvas<NodeData, LinkData>, option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result, optionConstantGetter: LinkIterationPropsInterface<NodeData, LinkData, Required<Result>> | Required<Result>): Required<Result>;
|
|
450
509
|
|
|
451
510
|
type NodeByPointerGetterOptions<NodeData extends Record<string, unknown>> = {
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
areaTransform: ZoomTransform;
|
|
511
|
+
pointerX: number;
|
|
512
|
+
pointerY: number;
|
|
455
513
|
nodes: NodeInterface<NodeData>[];
|
|
456
514
|
};
|
|
457
|
-
declare function nodeByPointerGetter<NodeData extends Record<string, unknown>>({
|
|
515
|
+
declare function nodeByPointerGetter<NodeData extends Record<string, unknown>>({ pointerX, pointerY, nodes, }: NodeByPointerGetterOptions<NodeData>): NodeInterface<NodeData> | undefined;
|
|
458
516
|
|
|
459
517
|
declare function nodeIterationExtractor<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null>(node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[], state: GraphCanvas<NodeData, LinkData>, option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result, optionConstantGetter: undefined): Result;
|
|
460
518
|
declare function nodeIterationExtractor<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null>(node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[], state: GraphCanvas<NodeData, LinkData>, option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result, optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result): Required<Result>;
|
|
461
519
|
|
|
462
|
-
declare function calculateLinkPositionByNode<NodeData extends Record<string, unknown
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
520
|
+
declare function calculateLinkPositionByNode<NodeData extends Record<string, unknown>>(xStart: number, yStart: number, xEnd: number, yEnd: number, sourceNode: NodeInterface<NodeData>, targetNode: NodeInterface<NodeData>, arrowSize?: number): {
|
|
521
|
+
xStart: number;
|
|
522
|
+
yStart: number;
|
|
523
|
+
xEnd: number;
|
|
524
|
+
yEnd: number;
|
|
525
|
+
xEndArrow: number;
|
|
526
|
+
yEndArrow: number;
|
|
467
527
|
distance: number;
|
|
468
|
-
}
|
|
528
|
+
};
|
|
469
529
|
|
|
470
530
|
declare function animationByProgress(initial: number, additional: number, progress: number): number;
|
|
471
531
|
|
|
@@ -483,20 +543,23 @@ type GetParticlePositionOptions = {
|
|
|
483
543
|
yStart: number;
|
|
484
544
|
xEnd: number;
|
|
485
545
|
yEnd: number;
|
|
486
|
-
|
|
487
|
-
|
|
546
|
+
xControl: number;
|
|
547
|
+
yControl: number;
|
|
488
548
|
distance: number;
|
|
549
|
+
totalCount: number;
|
|
550
|
+
speed: number;
|
|
489
551
|
};
|
|
490
552
|
declare function getParticlePosition(opts: GetParticlePositionOptions): void;
|
|
553
|
+
declare function approximateQuadraticBezierLength(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number): number;
|
|
491
554
|
|
|
492
555
|
type LinkByPointerGetterOptions<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
areaTransform: ZoomTransform;
|
|
556
|
+
pointerX: number;
|
|
557
|
+
pointerY: number;
|
|
496
558
|
links: LinkInterface<NodeData, LinkData>[];
|
|
497
559
|
linkHoverExtraZone: number;
|
|
560
|
+
curve: boolean;
|
|
498
561
|
};
|
|
499
|
-
declare function linkByPointerGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>({
|
|
562
|
+
declare function linkByPointerGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>({ pointerX, pointerY, links, linkHoverExtraZone, curve, }: LinkByPointerGetterOptions<NodeData, LinkData>): LinkInterface<NodeData, LinkData> | undefined;
|
|
500
563
|
|
|
501
564
|
type NodeHighlightOptions<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
502
565
|
nodeOptions: Required<NodeOptionsInterface<NodeData, LinkData>>;
|
|
@@ -582,9 +645,11 @@ declare function extractLinkPointIds<NodeData extends Record<string, unknown>, L
|
|
|
582
645
|
targetId: string | number;
|
|
583
646
|
};
|
|
584
647
|
|
|
585
|
-
declare function
|
|
648
|
+
declare function isEmptyObject(obj: Record<string, unknown>): boolean;
|
|
649
|
+
|
|
650
|
+
declare function getDrawLink<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(): (this: GraphCanvas<NodeData, LinkData>, link: LinkInterface<NodeData, LinkData>, index: number) => void;
|
|
586
651
|
|
|
587
|
-
declare function getDrawNode<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(nodeRenders: (() => void)[], textRenders: (() => void)[]): (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData
|
|
652
|
+
declare function getDrawNode<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(nodeRenders: (() => void)[], textRenders: (() => void)[]): (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>, index: number) => void;
|
|
588
653
|
|
|
589
654
|
type DrawTextOptions = {
|
|
590
655
|
lines: string[];
|
|
@@ -682,5 +747,5 @@ declare const NODE_OPTIONS_NODE_CONTROLS: GraphSettingsInputInterface<keyof Node
|
|
|
682
747
|
declare const NODE_OPTIONS_TEXT_CONTROLS: GraphSettingsInputInterface<keyof NodeOptionsTextInterface>[];
|
|
683
748
|
declare const NODE_OPTIONS_LABEL_CONTROLS: GraphSettingsInputInterface<keyof NodeOptionsLabelInterface>[];
|
|
684
749
|
|
|
685
|
-
export { COMMON_SETTINGS, FORCE_CONTROLS, FORCE_SETTINGS, GRAPH_CACHE_TYPE, GRAPH_SETTINGS, GraphCanvas, HIGHLIGHT_BY_LINK_FOR_ARROW_CONTROLS, HIGHLIGHT_BY_LINK_FOR_LABEL_CONTROLS, HIGHLIGHT_BY_LINK_FOR_LINK_CONTROLS, HIGHLIGHT_BY_LINK_FOR_NODE_CONTROLS, HIGHLIGHT_BY_LINK_FOR_TEXT_CONTROLS, HIGHLIGHT_BY_NODE_FOR_ARROW_CONTROLS, HIGHLIGHT_BY_NODE_FOR_LABEL_CONTROLS, HIGHLIGHT_BY_NODE_FOR_LINK_CONTROLS, HIGHLIGHT_BY_NODE_FOR_NODE_CONTROLS, HIGHLIGHT_BY_NODE_FOR_TEXT_CONTROLS, HIGHLIGHT_COMMON_CONTROLS, HIGHLIGHT_SETTINGS, LINK_OPTIONS, LINK_OPTIONS_ARROW_CONTROLS, LINK_OPTIONS_LINK_CONTROLS, LINK_OPTIONS_PARTICLE_CONTROLS, LINK_SETTINGS, LINK_SETTINGS_CONTROLS, NODE_OPTIONS, NODE_OPTIONS_LABEL_CONTROLS, NODE_OPTIONS_NODE_CONTROLS, NODE_OPTIONS_TEXT_CONTROLS, NODE_SETTINGS, NODE_SETTINGS_CONTROLS, animationByProgress, calculateLinkPositionByNode, colorGetter, colorToRgb, dragPlaceCoefficientGetter, drawText, extractLinkPointIds, extractRgb, fadeRgb, forceSettingsGetter, getDrawLink, getDrawNode, getParticlePosition, graphSettingsGetter, highlightSettingsGetter, isNodeVisible, isOverlapsNode, linkByPointerGetter, linkFade, linkHighlight, linkIterationExtractor, linkOptionsGetter, linkSettingsGetter, listenersGetter, nodeByPointerGetter, nodeFade, nodeHighlight, nodeIdGetter, nodeIterationExtractor, nodeOptionsGetter, nodeRadiusGetter, nodeSettingsGetter, nodeSizeGetter, nodeTextSizeGetter, pointerGetter, rgbAnimationByProgress };
|
|
686
|
-
export type { CachedNodeTextInterface, DragEventInterface, ForceSettingsInterface, GraphCanvasCacheKeys, GraphCanvasInterface, GraphCanvasSimulation, GraphSettingsInputInterface, GraphSettingsInterface, HighlighCommonSettingsInterface, HighlightByLinkForArrowSettingsInterface, HighlightByLinkForLabelSettingsInterface, HighlightByLinkForLinkSettingsInterface, HighlightByLinkForNodeSettingsInterface, HighlightByLinkForTextSettingsInterface, HighlightByNodeForArrowSettingsInterface, HighlightByNodeForLabelSettingsInterface, HighlightByNodeForLinkSettingsInterface, HighlightByNodeForNodeSettingsInterface, HighlightByNodeForTextSettingsInterface, HighlightSettingsInterface, LinkByPointerGetterOptions, LinkInterface, LinkIterationPropsInterface, LinkIterationPropsNoThisInterface, LinkOptionsArrowInterface, LinkOptionsInterface, LinkOptionsLinkInterface, LinkOptionsParticleInterface, LinkParticle, LinkSettingsInterface, ListenersInterface, NodeByPointerGetterOptions, NodeInterface, NodeIterationPropsInterface, NodeIterationPropsNoThisInterface, NodeOptionsInterface, NodeOptionsLabelInterface, NodeOptionsNodeInterface, NodeOptionsTextInterface, NodeRadiusGetterOptions, NodeSettingsInterface, NodeShape, NodeSizeGetterOptions, RGB, TextStyleEnum, ZoomEventInterface };
|
|
750
|
+
export { COMMON_SETTINGS, FORCE_CONTROLS, FORCE_SETTINGS, GRAPH_CACHE_TYPE, GRAPH_SETTINGS, GraphCanvas, HIGHLIGHT_BY_LINK_FOR_ARROW_CONTROLS, HIGHLIGHT_BY_LINK_FOR_LABEL_CONTROLS, HIGHLIGHT_BY_LINK_FOR_LINK_CONTROLS, HIGHLIGHT_BY_LINK_FOR_NODE_CONTROLS, HIGHLIGHT_BY_LINK_FOR_TEXT_CONTROLS, HIGHLIGHT_BY_NODE_FOR_ARROW_CONTROLS, HIGHLIGHT_BY_NODE_FOR_LABEL_CONTROLS, HIGHLIGHT_BY_NODE_FOR_LINK_CONTROLS, HIGHLIGHT_BY_NODE_FOR_NODE_CONTROLS, HIGHLIGHT_BY_NODE_FOR_TEXT_CONTROLS, HIGHLIGHT_COMMON_CONTROLS, HIGHLIGHT_SETTINGS, LINK_OPTIONS, LINK_OPTIONS_ARROW_CONTROLS, LINK_OPTIONS_LINK_CONTROLS, LINK_OPTIONS_PARTICLE_CONTROLS, LINK_SETTINGS, LINK_SETTINGS_CONTROLS, NODE_OPTIONS, NODE_OPTIONS_LABEL_CONTROLS, NODE_OPTIONS_NODE_CONTROLS, NODE_OPTIONS_TEXT_CONTROLS, NODE_SETTINGS, NODE_SETTINGS_CONTROLS, PERFOMANCE_NODE_OPTIONS, PERFORMANCE_FORCE_SETTINGS, PERFORMANCE_GRAPH_SETTINGS, PERFORMANCE_HIGHLIGHT_SETTINGS, PERFORMANCE_LINK_OPTIONS, PERFORMANCE_LINK_SETTINGS, PERFORMANCE_NODE_SETTINGS, animationByProgress, approximateQuadraticBezierLength, calculateLinkPositionByNode, colorGetter, colorToRgb, computeGraphBounds, dragPlaceCoefficientGetter, drawText, extractLinkPointIds, extractRgb, fadeRgb, forceSettingsGetter, getDrawLink, getDrawNode, getParticlePosition, graphSettingsGetter, highlightSettingsGetter, isEmptyObject, isNodeVisible, isOverlapsNode, linkByPointerGetter, linkFade, linkHighlight, linkIterationExtractor, linkOptionsGetter, linkSettingsGetter, listenersGetter, nodeByPointerGetter, nodeFade, nodeHighlight, nodeIdGetter, nodeIterationExtractor, nodeOptionsGetter, nodeRadiusGetter, nodeSettingsGetter, nodeSizeGetter, nodeTextSizeGetter, pointerGetter, rgbAnimationByProgress };
|
|
751
|
+
export type { CachedNodeTextInterface, DragEventInterface, ForceSettingsInterface, GraphBounds, GraphCanvasCacheKeys, GraphCanvasInterface, GraphCanvasSimulation, GraphSettingsInputInterface, GraphSettingsInterface, HighlighCommonSettingsInterface, HighlightByLinkForArrowSettingsInterface, HighlightByLinkForLabelSettingsInterface, HighlightByLinkForLinkSettingsInterface, HighlightByLinkForNodeSettingsInterface, HighlightByLinkForTextSettingsInterface, HighlightByNodeForArrowSettingsInterface, HighlightByNodeForLabelSettingsInterface, HighlightByNodeForLinkSettingsInterface, HighlightByNodeForNodeSettingsInterface, HighlightByNodeForTextSettingsInterface, HighlightSettingsInterface, LinkByPointerGetterOptions, LinkInterface, LinkIterationPropsInterface, LinkIterationPropsNoThisInterface, LinkOptionsArrowInterface, LinkOptionsInterface, LinkOptionsLinkInterface, LinkOptionsParticleInterface, LinkParticle, LinkSettingsInterface, ListenersInterface, NodeByPointerGetterOptions, NodeInterface, NodeIterationPropsInterface, NodeIterationPropsNoThisInterface, NodeOptionsInterface, NodeOptionsLabelInterface, NodeOptionsNodeInterface, NodeOptionsTextInterface, NodeRadiusGetterOptions, NodeSettingsInterface, NodeShape, NodeSizeGetterOptions, PrecomputeForceSettingsInterface, RGB, TextStyleEnum, ZoomEventInterface };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@krainovsd/graph",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0-beta-7.1",
|
|
4
4
|
"description": "Krainov graph",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "KrainovSD <denislosev48@gmail.com>",
|
|
@@ -62,7 +62,8 @@
|
|
|
62
62
|
"@vitejs/plugin-vue": "5.2.4",
|
|
63
63
|
"@krainovsd/vue-ui": "0.4.0-beta.23",
|
|
64
64
|
"@krainovsd/vue-icons": "0.1.4",
|
|
65
|
-
"sass-embedded": "1.81.0"
|
|
65
|
+
"sass-embedded": "1.81.0",
|
|
66
|
+
"@fontsource/nunito": "5.2.7"
|
|
66
67
|
},
|
|
67
68
|
"dependencies": {
|
|
68
69
|
"@krainovsd/js-helpers": "^0.16.5",
|