@krainovsd/graph 0.14.0-beta.8 → 0.15.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.cjs +845 -375
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/constants/force-controls.js +6 -4
- package/lib/esm/constants/force-controls.js.map +1 -1
- package/lib/esm/constants/highlight-controls.js +6 -3
- package/lib/esm/constants/highlight-controls.js.map +1 -1
- package/lib/esm/constants/link-controls.js +6 -3
- package/lib/esm/constants/link-controls.js.map +1 -1
- package/lib/esm/constants/node-controls.js +6 -3
- package/lib/esm/constants/node-controls.js.map +1 -1
- package/lib/esm/index.js +8 -6
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/module/GraphCanvas/GraphCanvas.js +40 -17
- package/lib/esm/module/GraphCanvas/GraphCanvas.js.map +1 -1
- package/lib/esm/module/GraphCanvas/StaticGraphCanvas.js +127 -0
- package/lib/esm/module/GraphCanvas/StaticGraphCanvas.js.map +1 -0
- package/lib/esm/module/GraphCanvas/constants/graph-settings.js +6 -7
- package/lib/esm/module/GraphCanvas/constants/graph-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/highlight-settings.js +1 -4
- package/lib/esm/module/GraphCanvas/constants/highlight-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/index.js +6 -4
- package/lib/esm/module/GraphCanvas/constants/index.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/link-settings.js +1 -9
- package/lib/esm/module/GraphCanvas/constants/link-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/node-settings.js +1 -10
- package/lib/esm/module/GraphCanvas/constants/node-settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js +6 -4
- 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 +0 -3
- 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 +6 -3
- 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 +6 -3
- 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 +20 -6
- 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 +6 -4
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-curve-link-position-by-node.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js +6 -4
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js +25 -27
- package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/is-overlaps-node.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js +2 -1
- package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/node-highlight.js +7 -11
- package/lib/esm/module/GraphCanvas/lib/utils/node-highlight.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js +3 -0
- package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/precompute-graph.js +24 -0
- package/lib/esm/module/GraphCanvas/lib/utils/precompute-graph.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/prepare-graph-data.js +49 -0
- package/lib/esm/module/GraphCanvas/lib/utils/prepare-graph-data.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/svg-context.js +159 -0
- package/lib/esm/module/GraphCanvas/lib/utils/svg-context.js.map +1 -0
- package/lib/esm/module/GraphCanvas/slices/draw-links.js +24 -42
- package/lib/esm/module/GraphCanvas/slices/draw-links.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js +80 -168
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-text.js +1 -9
- package/lib/esm/module/GraphCanvas/slices/draw-text.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/export-svg.js +62 -0
- package/lib/esm/module/GraphCanvas/slices/export-svg.js.map +1 -0
- package/lib/esm/module/GraphCanvas/slices/init-dnd.js +15 -3
- package/lib/esm/module/GraphCanvas/slices/init-dnd.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-draw.js +212 -8
- package/lib/esm/module/GraphCanvas/slices/init-draw.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js +6 -8
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js +3 -4
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js +2 -4
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/update-link-cache.js +5 -5
- package/lib/esm/module/GraphCanvas/slices/update-node-cache.js +17 -29
- package/lib/esm/module/GraphCanvas/slices/update-node-cache.js.map +1 -1
- package/lib/index.d.ts +95 -43
- package/package.json +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import '../constants/force-settings.js';
|
|
2
|
-
import '../
|
|
3
|
-
import '../constants/highlight-settings.js';
|
|
4
|
-
import '../constants/link-settings.js';
|
|
5
|
-
import '../constants/node-settings.js';
|
|
6
|
-
import { nodeOptionsGetter, nodeRadiusGetter, nodeSizeGetter } from '../lib/settings/node-settings-getter.js';
|
|
2
|
+
import { nodeOptionsGetter, nodeRadiusGetter, nodeSizeGetter, nodeLabelGetter, nodeTextGetter } from '../lib/settings/node-settings-getter.js';
|
|
7
3
|
import '@krainovsd/js-helpers';
|
|
8
4
|
import 'd3-array';
|
|
9
5
|
import { nodeIterationExtractor } from '../lib/utils/node-iteration-extractor.js';
|
|
6
|
+
import 'd3-force';
|
|
7
|
+
import 'd3-selection';
|
|
8
|
+
import 'd3-zoom';
|
|
9
|
+
import 'd3-drag';
|
|
10
10
|
import { getTextLines } from './draw-text.js';
|
|
11
11
|
|
|
12
12
|
function updateNodeCache() {
|
|
@@ -89,30 +89,25 @@ function updateNodeCache() {
|
|
|
89
89
|
nodeOptions.labelSize = labelSize;
|
|
90
90
|
this.nodeOptionsCache[i] = nodeOptions;
|
|
91
91
|
}
|
|
92
|
-
|
|
92
|
+
const nodeOptions = this.nodeOptionsCache[i];
|
|
93
93
|
if (!nodeOptions)
|
|
94
94
|
continue;
|
|
95
95
|
/** label */
|
|
96
96
|
if (label) {
|
|
97
|
-
|
|
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
|
-
}
|
|
97
|
+
const label = nodeIterationExtractor(node, i, this.nodes, this, this.nodeSettings.label, nodeLabelGetter);
|
|
103
98
|
/** label in not text shape */
|
|
104
|
-
if (nodeOptions.shape !== "text" &&
|
|
99
|
+
if (nodeOptions.shape !== "text" && label) {
|
|
105
100
|
this.context.font = `${nodeOptions.labelStyle} normal ${nodeOptions.labelWeight} ${nodeOptions.labelSize}px ${nodeOptions.labelFont}`;
|
|
106
101
|
this.context.fillStyle = nodeOptions.labelColor;
|
|
107
102
|
this.context.textAlign = nodeOptions.labelAlign;
|
|
108
103
|
if (nodeOptions.labelWidth == undefined ||
|
|
109
|
-
this.context.measureText(
|
|
110
|
-
this.cachedNodeLabel[i] = [
|
|
104
|
+
this.context.measureText(label).width <= nodeOptions.labelWidth) {
|
|
105
|
+
this.cachedNodeLabel[i] = [label];
|
|
111
106
|
}
|
|
112
107
|
const { lines } = getTextLines({
|
|
113
108
|
context: this.context,
|
|
114
109
|
maxWidth: nodeOptions.labelWidth,
|
|
115
|
-
text:
|
|
110
|
+
text: label,
|
|
116
111
|
textAlign: nodeOptions.labelAlign,
|
|
117
112
|
textColor: nodeOptions.labelColor,
|
|
118
113
|
textFont: nodeOptions.labelFont,
|
|
@@ -123,10 +118,10 @@ function updateNodeCache() {
|
|
|
123
118
|
this.cachedNodeLabel[i] = lines;
|
|
124
119
|
/** label in text shape */
|
|
125
120
|
}
|
|
126
|
-
else if (nodeOptions.shape === "text" &&
|
|
121
|
+
else if (nodeOptions.shape === "text" && label) {
|
|
127
122
|
const textInfo = getTextLines({
|
|
128
123
|
context: this.context,
|
|
129
|
-
text:
|
|
124
|
+
text: label,
|
|
130
125
|
textAlign: nodeOptions.labelAlign,
|
|
131
126
|
textColor: nodeOptions.labelColor,
|
|
132
127
|
textFont: nodeOptions.labelFont,
|
|
@@ -152,17 +147,10 @@ function updateNodeCache() {
|
|
|
152
147
|
}
|
|
153
148
|
/** text */
|
|
154
149
|
if (text) {
|
|
155
|
-
|
|
156
|
-
|
|
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) {
|
|
150
|
+
const text = nodeIterationExtractor(node, i, this.nodes, this, this.nodeSettings.text, nodeTextGetter);
|
|
151
|
+
if (!text) {
|
|
164
152
|
this.cachedNodeText[i] = [];
|
|
165
|
-
|
|
153
|
+
continue;
|
|
166
154
|
}
|
|
167
155
|
this.context.font = `${nodeOptions.textStyle} normal ${nodeOptions.textWeight} ${nodeOptions.textSize}px ${nodeOptions.textFont}`;
|
|
168
156
|
this.context.fillStyle = nodeOptions.textColor;
|
|
@@ -170,7 +158,7 @@ function updateNodeCache() {
|
|
|
170
158
|
const { lines } = getTextLines({
|
|
171
159
|
context: this.context,
|
|
172
160
|
maxWidth: nodeOptions.textWidth,
|
|
173
|
-
text
|
|
161
|
+
text,
|
|
174
162
|
textAlign: nodeOptions.textAlign,
|
|
175
163
|
textColor: nodeOptions.textColor,
|
|
176
164
|
textFont: nodeOptions.textFont,
|
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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 nodeLabelGetter,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n nodeTextGetter,\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 const nodeOptions = this.nodeOptionsCache[i];\n if (!nodeOptions) continue;\n /** label */\n if (label) {\n const label = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.label,\n nodeLabelGetter,\n );\n /** label in not text shape */\n if (nodeOptions.shape !== \"text\" && 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(label).width <= nodeOptions.labelWidth\n ) {\n this.cachedNodeLabel[i] = [label];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.labelWidth,\n text: 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\" && label) {\n const textInfo = getTextLines({\n context: this.context,\n text: 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 const text = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.text,\n nodeTextGetter,\n );\n if (!text) {\n this.cachedNodeText[i] = [];\n continue;\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,\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":";;;;;;;;;;;SAWgB,eAAe,GAAA;IAI7B,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE;AAEnB,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;IAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;AAE3C,IAAA,IACE,IAAI,CAAC,YAAY,CAAC,UAAU;QAC5B,IAAI,CAAC,cAAc,KAAK,SAAS;AACjC,QAAA,CAAC,OAAO;AACR,QAAA,CAAC,IAAI;QACL,CAAC,KAAK,EACN;AACA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc;QACnD,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;AACtD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;AACtD,YAAA,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAC5D,YAAA,IAAI,CAAC,cAAc,GAAG,WAAW;AACjC,YAAA,IAAI,CAAC,OAAO;gBAAE;;AAEhB,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAC9B,IAAI,GAAG,IAAI;;AAEb,IAAA,IAAI,CAAC,cAAc,GAAG,WAAW;AAEjC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,EAAE;YACX,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,CAAC,EACD,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB;AACD,YAAA,MAAM,MAAM,GACV,WAAW,CAAC,KAAK,KAAK;kBAClB,gBAAgB,CAAC;AACf,oBAAA,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB;oBACpD,aAAa,EAAE,WAAW,CAAC,MAAM;AACjC,oBAAA,qBAAqB,EAAE,IAAI,CAAC,YAAY,CAAC,yBAAyB;AAClE,oBAAA,sBAAsB,EAAE,IAAI,CAAC,YAAY,CAAC,0BAA0B;AACpE,oBAAA,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC,wBAAwB;AAChE,oBAAA,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB;AACtD,oBAAA,4BAA4B,EAAE,IAAI,CAAC,YAAY,CAAC,gCAAgC;oBAChF,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B;AACH,kBAAE,WAAW,CAAC,MAAM;AAExB,YAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK;AAC7B,YAAA,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM;AAC/B,YAAA,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS;AACrC,YAAA,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAClC,MAAM,IAAI,GAAG,cAAc,CAAC;oBAC1B,aAAa,EAAE,WAAW,CAAC,MAAM;oBACjC,YAAY,EAAE,WAAW,CAAC,KAAK;oBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;AAChD,oBAAA,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,uBAAuB;AAC9D,oBAAA,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC,wBAAwB;AAChE,oBAAA,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB;AAC5D,oBAAA,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB;AAClD,oBAAA,0BAA0B,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B;AAC7E,iBAAA,CAAC;AACF,gBAAA,KAAK,GAAG,IAAI,CAAC,KAAK;AAClB,gBAAA,MAAM,GAAG,IAAI,CAAC,MAAM;;AAEtB,YAAA,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM,EAAE;AAChC,gBAAA,KAAK,GAAG,WAAW,CAAC,KAAK;gBACzB,MAAM,IAAI,GAAG,cAAc,CAAC;oBAC1B,aAAa,EAAE,WAAW,CAAC,MAAM;AACjC,oBAAA,YAAY,EAAE,KAAK;oBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;AAChD,oBAAA,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,uBAAuB;AAC9D,oBAAA,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC,wBAAwB;AAChE,oBAAA,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB;AAC5D,oBAAA,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB;AAClD,oBAAA,0BAA0B,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B;AAC7E,iBAAA,CAAC;AAEF,gBAAA,SAAS,IAAI,IAAI,CAAC,yBAAyB;;AAG7C,YAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,KAAK;AACtD,YAAA,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,MAAM;AACxD,YAAA,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,MAAM;AACxD,YAAA,WAAW,CAAC,SAAS,GAAG,SAAS;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,WAAW;;QAGxC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,WAAW;YAAE;;QAElB,IAAI,KAAK,EAAE;YACT,MAAM,KAAK,GAAG,sBAAsB,CAClC,IAAI,EACJ,CAAC,EACD,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,eAAe,CAChB;;YAED,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,EAAE;gBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAG,EAAA,WAAW,CAAC,UAAU,CAAW,QAAA,EAAA,WAAW,CAAC,WAAW,CAAA,CAAA,EAAI,WAAW,CAAC,SAAS,MAAM,WAAW,CAAC,SAAS,CAAA,CAAE;gBACrI,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,UAAU;gBAC/C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,UAAU;AAE/C,gBAAA,IACE,WAAW,CAAC,UAAU,IAAI,SAAS;AACnC,oBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,WAAW,CAAC,UAAU,EAC/D;oBACA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGnC,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;oBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,QAAQ,EAAE,WAAW,CAAC,UAAU;AAChC,oBAAA,IAAI,EAAE,KAAK;oBACX,SAAS,EAAE,WAAW,CAAC,UAAU;oBACjC,SAAS,EAAE,WAAW,CAAC,UAAU;oBACjC,QAAQ,EAAE,WAAW,CAAC,SAAS;oBAC/B,QAAQ,EAAE,WAAW,CAAC,SAAS;oBAC/B,SAAS,EAAE,WAAW,CAAC,UAAU;oBACjC,UAAU,EAAE,WAAW,CAAC,WAAW;AACpC,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK;;;iBAE1B,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,EAAE;gBAChD,MAAM,QAAQ,GAAG,YAAY,CAAC;oBAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,IAAI,EAAE,KAAK;oBACX,SAAS,EAAE,WAAW,CAAC,UAAU;oBACjC,SAAS,EAAE,WAAW,CAAC,UAAU;oBACjC,QAAQ,EAAE,WAAW,CAAC,SAAS;oBAC/B,QAAQ,EAAE,WAAW,CAAC,SAAS;oBAC/B,QAAQ,EAAE,WAAW,CAAC,UAAU;oBAChC,SAAS,EAAE,WAAW,CAAC,UAAU;oBACjC,UAAU,EAAE,WAAW,CAAC,UAAU;AACnC,iBAAA,CAAC;gBACF,MAAM,kBAAkB,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC;AAC3E,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;gBAC5B,MAAM,mBAAmB,GAAG,WAAW,CAAC,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC;gBACzE,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,mBAAmB;AAE3D,gBAAA,WAAW,CAAC,MAAM;AAChB,oBAAA,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,SAAS;wBACpC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ;wBACzC,WAAW,CAAC,aAAa;gBAE3B,WAAW,CAAC,KAAK,GAAG,OAAO,GAAG,WAAW,CAAC,aAAa;AACvD,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK;;iBAC1B;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE;;;;QAKhC,IAAI,IAAI,EAAE;YACR,MAAM,IAAI,GAAG,sBAAsB,CACjC,IAAI,EACJ,CAAC,EACD,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,cAAc,CACf;YACD,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE;gBAC3B;;YAEF,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAG,EAAA,WAAW,CAAC,SAAS,CAAW,QAAA,EAAA,WAAW,CAAC,UAAU,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,MAAM,WAAW,CAAC,QAAQ,CAAA,CAAE;YACjI,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;YAC9C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;AAC9C,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;gBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,WAAW,CAAC,SAAS;gBAC/B,IAAI;gBACJ,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,UAAU,EAAE,WAAW,CAAC,UAAU;AACnC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK;;;AAGpC;;;;"}
|
package/lib/index.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import { ValueOf } from '@krainovsd/js-helpers';
|
|
|
3
3
|
import { SimulationNodeDatum, SimulationLinkDatum, Simulation } from 'd3-force';
|
|
4
4
|
import { D3DragEvent } from 'd3-drag';
|
|
5
5
|
|
|
6
|
+
declare function initDraw<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(this: GraphCanvas<NodeData, LinkData>): (recursive?: boolean) => void;
|
|
7
|
+
|
|
6
8
|
declare const COMMON_SETTINGS: {
|
|
7
9
|
nodeRadius: number;
|
|
8
10
|
nodeSize: number;
|
|
@@ -32,6 +34,21 @@ interface NodeInterface<NodeData extends Record<string, unknown>> extends Simula
|
|
|
32
34
|
type NodeShape = "circle" | "square" | "text";
|
|
33
35
|
type TextStyleEnum = "normal" | "italic" | "oblique";
|
|
34
36
|
type CachedNodeTextInterface = Record<string | number, string[] | undefined>;
|
|
37
|
+
type NodeDrawBatch = {
|
|
38
|
+
shape: NodeShape;
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
radius: number;
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
image: HTMLImageElement | undefined;
|
|
45
|
+
};
|
|
46
|
+
type NodeTextDrawBatch = {
|
|
47
|
+
text: string;
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
};
|
|
51
|
+
type DeferredDraw = () => void;
|
|
35
52
|
|
|
36
53
|
interface LinkInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> extends SimulationLinkDatum<NodeInterface<NodeData>> {
|
|
37
54
|
data?: LinkData;
|
|
@@ -58,11 +75,37 @@ type LinkParticle = {
|
|
|
58
75
|
_lastDistance?: number;
|
|
59
76
|
_lastTime?: number;
|
|
60
77
|
};
|
|
78
|
+
type LinkDrawBatch = {
|
|
79
|
+
curve: boolean;
|
|
80
|
+
xStart: number;
|
|
81
|
+
yStart: number;
|
|
82
|
+
xEnd: number;
|
|
83
|
+
yEnd: number;
|
|
84
|
+
xControl: number;
|
|
85
|
+
yControl: number;
|
|
86
|
+
};
|
|
87
|
+
type LinkParticleDrawBatch = {
|
|
88
|
+
x: number;
|
|
89
|
+
y: number;
|
|
90
|
+
r: number;
|
|
91
|
+
};
|
|
92
|
+
type LinkArrowDrawBatch = {
|
|
93
|
+
x: number;
|
|
94
|
+
y: number;
|
|
95
|
+
size: number;
|
|
96
|
+
angle: number;
|
|
97
|
+
};
|
|
61
98
|
|
|
62
99
|
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;
|
|
63
100
|
type LinkIterationPropsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (this: GraphCanvas<NodeData, LinkData>, link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[]) => Return;
|
|
64
101
|
type NodeIterationPropsNoThisInterface<NodeData extends Record<string, unknown>, Return = number> = (node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[]) => Return;
|
|
65
102
|
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;
|
|
103
|
+
type Area = {
|
|
104
|
+
left: number;
|
|
105
|
+
right: number;
|
|
106
|
+
top: number;
|
|
107
|
+
bottom: number;
|
|
108
|
+
};
|
|
66
109
|
|
|
67
110
|
type PrecomputeForceSettingsInterface = {
|
|
68
111
|
precompute?: boolean;
|
|
@@ -123,10 +166,10 @@ type GraphSettingsInterface<NodeData extends Record<string, unknown>> = {
|
|
|
123
166
|
dragPlaceCoefficient?: (node: NodeInterface<NodeData>, pxEvent: number, pyEvent: number) => number | undefined;
|
|
124
167
|
showDrawTime?: boolean;
|
|
125
168
|
showDrawTimeEveryTick?: boolean;
|
|
169
|
+
maxFps?: number;
|
|
126
170
|
};
|
|
127
171
|
|
|
128
172
|
declare const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>>;
|
|
129
|
-
declare const PERFORMANCE_GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>>;
|
|
130
173
|
|
|
131
174
|
type HighlightSettingsInterface = HighlighCommonSettingsInterface & HighlightByNodeForNodeSettingsInterface & HighlightByNodeForLabelSettingsInterface & HighlightByNodeForTextSettingsInterface & HighlightByNodeForLinkSettingsInterface & HighlightByNodeForArrowSettingsInterface & HighlightByLinkForNodeSettingsInterface & HighlightByLinkForTextSettingsInterface & HighlightByLinkForLabelSettingsInterface & HighlightByLinkForLinkSettingsInterface & HighlightByLinkForArrowSettingsInterface;
|
|
132
175
|
type HighlighCommonSettingsInterface = {
|
|
@@ -204,8 +247,8 @@ type HighlightByLinkForArrowSettingsInterface = {
|
|
|
204
247
|
};
|
|
205
248
|
|
|
206
249
|
declare const HIGHLIGHT_SETTINGS: Required<HighlightSettingsInterface>;
|
|
207
|
-
declare const PERFORMANCE_HIGHLIGHT_SETTINGS: Required<HighlightSettingsInterface>;
|
|
208
250
|
|
|
251
|
+
type GraphLinkSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = Required<Omit<LinkSettingsInterface<NodeData, LinkData>, "options">> & Pick<LinkSettingsInterface<NodeData, LinkData>, "options">;
|
|
209
252
|
type LinkSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
210
253
|
smartCache?: boolean;
|
|
211
254
|
prettyDraw?: boolean;
|
|
@@ -248,8 +291,6 @@ type LinkOptionsParticleInterface = {
|
|
|
248
291
|
|
|
249
292
|
declare const LINK_SETTINGS: Omit<Required<LinkSettingsInterface<Record<string, unknown>, Record<string, unknown>>>, "options">;
|
|
250
293
|
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">;
|
|
253
294
|
|
|
254
295
|
type NodeSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
255
296
|
smartCache?: boolean;
|
|
@@ -275,7 +316,10 @@ type NodeSettingsInterface<NodeData extends Record<string, unknown>, LinkData ex
|
|
|
275
316
|
textShiftYMax?: number;
|
|
276
317
|
idGetter?: NodeIterationPropsInterface<NodeData, LinkData, string | number>;
|
|
277
318
|
options?: NodeIterationPropsInterface<NodeData, LinkData, NodeOptionsInterface<NodeData, LinkData>> | NodeOptionsInterface<NodeData, LinkData>;
|
|
319
|
+
text?: NodeIterationPropsInterface<NodeData, LinkData, string | null> | string | null;
|
|
320
|
+
label?: NodeIterationPropsInterface<NodeData, LinkData, string | null> | string | null;
|
|
278
321
|
};
|
|
322
|
+
type GraphNodeSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = Required<Omit<NodeSettingsInterface<NodeData, LinkData>, "options" | "label" | "text">> & Pick<NodeSettingsInterface<NodeData, LinkData>, "options" | "label" | "text">;
|
|
279
323
|
type NodeOptionsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
280
324
|
nodeDraw?: ((this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>, options: Required<NodeOptionsInterface<NodeData, LinkData>>) => void) | null;
|
|
281
325
|
textDraw?: ((this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>, options: Required<NodeOptionsInterface<NodeData, LinkData>>) => void) | null;
|
|
@@ -294,8 +338,6 @@ type NodeOptionsNodeInterface = {
|
|
|
294
338
|
borderWidth?: number;
|
|
295
339
|
};
|
|
296
340
|
type NodeOptionsTextInterface = {
|
|
297
|
-
textVisible?: boolean;
|
|
298
|
-
text?: string | null;
|
|
299
341
|
textColor?: string;
|
|
300
342
|
textSize?: number;
|
|
301
343
|
textAlpha?: number;
|
|
@@ -320,13 +362,10 @@ type NodeOptionsLabelInterface = {
|
|
|
320
362
|
labelStyle?: TextStyleEnum;
|
|
321
363
|
labelWeight?: number;
|
|
322
364
|
labelGap?: number;
|
|
323
|
-
label?: string | null;
|
|
324
365
|
};
|
|
325
366
|
|
|
326
|
-
declare const NODE_SETTINGS: Omit<Required<NodeSettingsInterface<Record<string, unknown>, Record<string, unknown>>>, "options" | "idGetter">;
|
|
367
|
+
declare const NODE_SETTINGS: Omit<Required<NodeSettingsInterface<Record<string, unknown>, Record<string, unknown>>>, "options" | "idGetter" | "text" | "label">;
|
|
327
368
|
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">;
|
|
330
369
|
|
|
331
370
|
declare const GRAPH_CACHE_TYPE: {
|
|
332
371
|
readonly NodeOptions: "nodeOptions";
|
|
@@ -370,6 +409,10 @@ type GraphCanvasInterface<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
370
409
|
type GraphCanvasSimulation<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = Simulation<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>;
|
|
371
410
|
type GraphCanvasCacheKeys = ValueOf<typeof GRAPH_CACHE_TYPE>;
|
|
372
411
|
|
|
412
|
+
declare function getDrawLink<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(linkBatch: Record<string, LinkDrawBatch[]>, particleBatch: Record<string, LinkParticleDrawBatch[]>, arrowBatch: Record<string, LinkArrowDrawBatch[]>, now: number): (this: GraphCanvas<NodeData, LinkData>, link: LinkInterface<NodeData, LinkData>, index: number) => void;
|
|
413
|
+
|
|
414
|
+
declare function getDrawNode<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(nodeBatch: Record<string, NodeDrawBatch[]>, nodeImageBatch: Record<string, NodeDrawBatch[]>, textBatch: Record<string, Record<string, NodeTextDrawBatch[]>>, deferredNodeRender: DeferredDraw[], deferredTextRender: DeferredDraw[], area: Area): (this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>, index: number) => void;
|
|
415
|
+
|
|
373
416
|
declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> {
|
|
374
417
|
/** initial data */
|
|
375
418
|
protected nodes: NodeInterface<NodeData>[];
|
|
@@ -384,8 +427,8 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
384
427
|
protected graphSettings: Required<GraphSettingsInterface<NodeData>>;
|
|
385
428
|
protected forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;
|
|
386
429
|
protected highlightSettings: Required<HighlightSettingsInterface>;
|
|
387
|
-
protected nodeSettings:
|
|
388
|
-
protected linkSettings:
|
|
430
|
+
protected nodeSettings: GraphNodeSettingsInterface<NodeData, LinkData>;
|
|
431
|
+
protected linkSettings: GraphLinkSettingsInterface<NodeData, LinkData>;
|
|
389
432
|
protected listeners: ListenersInterface<NodeData, LinkData>;
|
|
390
433
|
/** service */
|
|
391
434
|
protected context: CanvasRenderingContext2D | null | undefined;
|
|
@@ -393,6 +436,7 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
393
436
|
protected areaTransform: ZoomTransform;
|
|
394
437
|
protected _translateExtent: [[number, number], [number, number]] | undefined;
|
|
395
438
|
protected draw: (this: GraphCanvas<NodeData, LinkData>) => void;
|
|
439
|
+
protected instantDraw: (this: GraphCanvas<NodeData, LinkData>) => void;
|
|
396
440
|
protected eventAbortController: AbortController;
|
|
397
441
|
protected cachedNodeText: (string[] | undefined)[];
|
|
398
442
|
protected cachedNodeLabel: (string[] | undefined)[];
|
|
@@ -423,6 +467,7 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
423
467
|
getData: () => Pick<GraphCanvasInterface<NodeData, LinkData>, "nodes" | "links">;
|
|
424
468
|
fitToView: (margin?: number, duration?: number) => void;
|
|
425
469
|
focusOnNode: (nodeId: string | number, scale?: number, duration?: number) => void;
|
|
470
|
+
exportToSvg: (filename?: string, fit?: boolean) => void;
|
|
426
471
|
changeData: (options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes">, alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => void;
|
|
427
472
|
changeSettings: (options: Omit<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes" | "listeners">, clearCache?: boolean | GraphCanvasCacheKeys[], precompute?: boolean) => undefined;
|
|
428
473
|
updateRect: () => void;
|
|
@@ -430,10 +475,10 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
430
475
|
clearCache: (keys: boolean | GraphCanvasCacheKeys[]) => void;
|
|
431
476
|
tick: () => void;
|
|
432
477
|
restart: (alpha?: number, options?: Partial<PrecomputeForceSettingsInterface>) => void;
|
|
433
|
-
start: () => void;
|
|
434
|
-
stop: () => void;
|
|
435
478
|
create: () => void;
|
|
436
479
|
destroy: () => void;
|
|
480
|
+
precompute: () => void;
|
|
481
|
+
protected initSmartDraw: (draw: ReturnType<typeof initDraw>) => () => void;
|
|
437
482
|
protected getPointerAreaPosition: (event: MouseEvent | TouchEvent) => number[];
|
|
438
483
|
protected clearHTMLElements: () => void;
|
|
439
484
|
protected updateSimulation: (precompute?: boolean) => void;
|
|
@@ -444,18 +489,32 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
444
489
|
protected animateZoom: (area: HTMLCanvasElement, target: ZoomTransform, start: ZoomTransform, duration: number) => void;
|
|
445
490
|
}
|
|
446
491
|
|
|
492
|
+
declare class StaticGraphCanvas<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> extends GraphCanvas<NodeData, LinkData> {
|
|
493
|
+
protected get simulationWorking(): boolean;
|
|
494
|
+
protected _rafTickId: number | undefined;
|
|
495
|
+
protected init: () => void;
|
|
496
|
+
tick: () => void;
|
|
497
|
+
restart: () => void;
|
|
498
|
+
changeData: (options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes">, _alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[]) => void;
|
|
499
|
+
changeSettings: (options: Omit<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes" | "listeners" | "forceSettings">, clearCache?: boolean | GraphCanvasCacheKeys[]) => undefined;
|
|
500
|
+
destroy: () => void;
|
|
501
|
+
protected updateData: (_alpha?: number, clearCache?: boolean | GraphCanvasCacheKeys[]) => void;
|
|
502
|
+
}
|
|
503
|
+
|
|
447
504
|
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>>;
|
|
448
505
|
|
|
449
506
|
declare function graphSettingsGetter<NodeData extends Record<string, unknown>>(settings: GraphSettingsInterface<NodeData> | undefined, prevSettings?: Required<GraphSettingsInterface<NodeData>>): Required<GraphSettingsInterface<NodeData>>;
|
|
450
507
|
|
|
451
|
-
declare function linkSettingsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(settings: LinkSettingsInterface<NodeData, LinkData> | undefined, prevSettings?:
|
|
508
|
+
declare function linkSettingsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(settings: LinkSettingsInterface<NodeData, LinkData> | undefined, prevSettings?: GraphLinkSettingsInterface<NodeData, LinkData>): GraphLinkSettingsInterface<NodeData, LinkData>;
|
|
452
509
|
declare function linkOptionsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(this: GraphCanvas<NodeData, LinkData>): Required<LinkOptionsInterface<NodeData, LinkData>>;
|
|
453
510
|
|
|
454
511
|
declare function listenersGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(settings: ListenersInterface<NodeData, LinkData> | undefined): ListenersInterface<NodeData, LinkData>;
|
|
455
512
|
|
|
456
|
-
declare function nodeSettingsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(settings: NodeSettingsInterface<NodeData, LinkData> | undefined, prevNodeSettings?:
|
|
513
|
+
declare function nodeSettingsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(settings: NodeSettingsInterface<NodeData, LinkData> | undefined, prevNodeSettings?: GraphNodeSettingsInterface<NodeData, LinkData>): GraphNodeSettingsInterface<NodeData, LinkData>;
|
|
457
514
|
declare function nodeOptionsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>): Required<NodeOptionsInterface<NodeData, LinkData>>;
|
|
458
|
-
declare function
|
|
515
|
+
declare function nodeTextGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>, index: number): Required<string | null>;
|
|
516
|
+
declare function nodeLabelGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>, index: number): Required<string | null>;
|
|
517
|
+
declare function nodeTextSizeGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(transform: ZoomTransform | undefined, nodeSettings: GraphNodeSettingsInterface<NodeData, LinkData>): {
|
|
459
518
|
textSize: number;
|
|
460
519
|
textShiftY: number;
|
|
461
520
|
};
|
|
@@ -498,6 +557,13 @@ interface GraphBounds {
|
|
|
498
557
|
}
|
|
499
558
|
declare function computeGraphBounds<NodeData extends Record<string, unknown>>(nodes: NodeInterface<NodeData>[]): GraphBounds | null;
|
|
500
559
|
|
|
560
|
+
type PrepareGraphOptions<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
561
|
+
nodes: NodeInterface<NodeData>[];
|
|
562
|
+
links: LinkInterface<NodeData, LinkData>[];
|
|
563
|
+
neighbors?: boolean;
|
|
564
|
+
};
|
|
565
|
+
declare function prepareGraph<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(opts: PrepareGraphOptions<NodeData, LinkData>): void;
|
|
566
|
+
|
|
501
567
|
declare function pointerGetter(mouseEvent: MouseEvent | TouchEvent, areaRect: DOMRect | undefined, areaTransform: ZoomTransform): number[];
|
|
502
568
|
|
|
503
569
|
declare function dragPlaceCoefficientGetter<NodeData extends Record<string, unknown>>(node: NodeInterface<NodeData>, pointerX: number, pointerY: number): number | undefined;
|
|
@@ -529,13 +595,7 @@ declare function calculateLinkPositionByNode<NodeData extends Record<string, unk
|
|
|
529
595
|
|
|
530
596
|
declare function animationByProgress(initial: number, additional: number, progress: number): number;
|
|
531
597
|
|
|
532
|
-
|
|
533
|
-
width: number;
|
|
534
|
-
height: number;
|
|
535
|
-
transform: ZoomTransform;
|
|
536
|
-
node: NodeInterface<NodeData>;
|
|
537
|
-
};
|
|
538
|
-
declare function isNodeVisible<NodeData extends Record<string, unknown>>(opts: IsNodeVisibleOptions<NodeData>): boolean;
|
|
598
|
+
declare function isNodeVisible<NodeData extends Record<string, unknown>>(node: NodeInterface<NodeData>, area: Area): boolean;
|
|
539
599
|
|
|
540
600
|
type GetParticlePositionOptions = {
|
|
541
601
|
particle: LinkParticle;
|
|
@@ -548,6 +608,7 @@ type GetParticlePositionOptions = {
|
|
|
548
608
|
distance: number;
|
|
549
609
|
totalCount: number;
|
|
550
610
|
speed: number;
|
|
611
|
+
now: number;
|
|
551
612
|
};
|
|
552
613
|
declare function getParticlePosition(opts: GetParticlePositionOptions): void;
|
|
553
614
|
declare function approximateQuadraticBezierLength(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number): number;
|
|
@@ -647,24 +708,15 @@ declare function extractLinkPointIds<NodeData extends Record<string, unknown>, L
|
|
|
647
708
|
|
|
648
709
|
declare function isEmptyObject(obj: Record<string, unknown>): boolean;
|
|
649
710
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
y: number;
|
|
658
|
-
textSize: number;
|
|
659
|
-
textStyle: TextStyleEnum;
|
|
660
|
-
textWeight: number;
|
|
661
|
-
textFont: string;
|
|
662
|
-
textColor: string;
|
|
663
|
-
textGap: number;
|
|
664
|
-
textAlign: CanvasTextAlign;
|
|
665
|
-
context: CanvasRenderingContext2D;
|
|
711
|
+
type PrecomputeGraphOptions<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
712
|
+
nodes: NodeInterface<NodeData>[];
|
|
713
|
+
links: LinkInterface<NodeData, LinkData>[];
|
|
714
|
+
forceSettings?: ForceSettingsInterface<NodeData, LinkData>;
|
|
715
|
+
nodeSettings?: NodeSettingsInterface<NodeData, LinkData>;
|
|
716
|
+
linkSettings?: LinkSettingsInterface<NodeData, LinkData>;
|
|
717
|
+
maxMs?: number;
|
|
666
718
|
};
|
|
667
|
-
declare function
|
|
719
|
+
declare function precomputeGraph<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(opts: PrecomputeGraphOptions<NodeData, LinkData>): void;
|
|
668
720
|
|
|
669
721
|
type GraphSettingsInputRange<I extends string> = {
|
|
670
722
|
type: "range";
|
|
@@ -747,5 +799,5 @@ declare const NODE_OPTIONS_NODE_CONTROLS: GraphSettingsInputInterface<keyof Node
|
|
|
747
799
|
declare const NODE_OPTIONS_TEXT_CONTROLS: GraphSettingsInputInterface<keyof NodeOptionsTextInterface>[];
|
|
748
800
|
declare const NODE_OPTIONS_LABEL_CONTROLS: GraphSettingsInputInterface<keyof NodeOptionsLabelInterface>[];
|
|
749
801
|
|
|
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,
|
|
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 };
|
|
802
|
+
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, PERFORMANCE_FORCE_SETTINGS, StaticGraphCanvas, animationByProgress, approximateQuadraticBezierLength, calculateLinkPositionByNode, colorGetter, colorToRgb, computeGraphBounds, dragPlaceCoefficientGetter, extractLinkPointIds, extractRgb, fadeRgb, forceSettingsGetter, getDrawLink, getDrawNode, getParticlePosition, graphSettingsGetter, highlightSettingsGetter, isEmptyObject, isNodeVisible, isOverlapsNode, linkByPointerGetter, linkFade, linkHighlight, linkIterationExtractor, linkOptionsGetter, linkSettingsGetter, listenersGetter, nodeByPointerGetter, nodeFade, nodeHighlight, nodeIdGetter, nodeIterationExtractor, nodeLabelGetter, nodeOptionsGetter, nodeRadiusGetter, nodeSettingsGetter, nodeSizeGetter, nodeTextGetter, nodeTextSizeGetter, pointerGetter, precomputeGraph, prepareGraph, rgbAnimationByProgress };
|
|
803
|
+
export type { Area, CachedNodeTextInterface, DeferredDraw, DragEventInterface, ForceSettingsInterface, GraphBounds, GraphCanvasCacheKeys, GraphCanvasInterface, GraphCanvasSimulation, GraphLinkSettingsInterface, GraphNodeSettingsInterface, GraphSettingsInputInterface, GraphSettingsInterface, HighlighCommonSettingsInterface, HighlightByLinkForArrowSettingsInterface, HighlightByLinkForLabelSettingsInterface, HighlightByLinkForLinkSettingsInterface, HighlightByLinkForNodeSettingsInterface, HighlightByLinkForTextSettingsInterface, HighlightByNodeForArrowSettingsInterface, HighlightByNodeForLabelSettingsInterface, HighlightByNodeForLinkSettingsInterface, HighlightByNodeForNodeSettingsInterface, HighlightByNodeForTextSettingsInterface, HighlightSettingsInterface, LinkArrowDrawBatch, LinkByPointerGetterOptions, LinkDrawBatch, LinkInterface, LinkIterationPropsInterface, LinkIterationPropsNoThisInterface, LinkOptionsArrowInterface, LinkOptionsInterface, LinkOptionsLinkInterface, LinkOptionsParticleInterface, LinkParticle, LinkParticleDrawBatch, LinkSettingsInterface, ListenersInterface, NodeByPointerGetterOptions, NodeDrawBatch, NodeInterface, NodeIterationPropsInterface, NodeIterationPropsNoThisInterface, NodeOptionsInterface, NodeOptionsLabelInterface, NodeOptionsNodeInterface, NodeOptionsTextInterface, NodeRadiusGetterOptions, NodeSettingsInterface, NodeShape, NodeSizeGetterOptions, NodeTextDrawBatch, PrecomputeForceSettingsInterface, RGB, TextStyleEnum, ZoomEventInterface };
|