@krainovsd/graph 0.10.0-rc4 → 0.10.0-rc6
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 +1909 -1321
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/constants/force-controls.js +141 -0
- package/lib/esm/constants/force-controls.js.map +1 -0
- package/lib/esm/constants/graph-controls.js +25 -0
- package/lib/esm/constants/graph-controls.js.map +1 -0
- package/lib/esm/constants/highlight-controls.js +452 -0
- package/lib/esm/constants/highlight-controls.js.map +1 -0
- package/lib/esm/constants/link-controls.js +219 -0
- package/lib/esm/constants/link-controls.js.map +1 -0
- package/lib/esm/constants/node-controls.js +345 -0
- package/lib/esm/constants/node-controls.js.map +1 -0
- package/lib/esm/index.js +24 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/lib/fade-rgb.js.map +1 -1
- package/lib/esm/lib/rgb-animation-by-progress.js.map +1 -1
- package/lib/esm/module/GraphCanvas/GraphCanvas.js +29 -32
- package/lib/esm/module/GraphCanvas/GraphCanvas.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/common-settings.js +7 -0
- package/lib/esm/module/GraphCanvas/constants/common-settings.js.map +1 -0
- package/lib/esm/module/GraphCanvas/constants/force-settings.js +29 -0
- package/lib/esm/module/GraphCanvas/constants/force-settings.js.map +1 -0
- package/lib/esm/module/GraphCanvas/constants/graph-settings.js +19 -0
- package/lib/esm/module/GraphCanvas/constants/graph-settings.js.map +1 -0
- package/lib/esm/module/GraphCanvas/constants/highlight-settings.js +62 -0
- package/lib/esm/module/GraphCanvas/constants/highlight-settings.js.map +1 -0
- package/lib/esm/module/GraphCanvas/constants/link-settings.js +31 -0
- package/lib/esm/module/GraphCanvas/constants/link-settings.js.map +1 -0
- package/lib/esm/module/GraphCanvas/constants/node-settings.js +50 -0
- package/lib/esm/module/GraphCanvas/constants/node-settings.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js +3 -1
- 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 +1 -1
- 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 +13 -0
- package/lib/esm/module/GraphCanvas/lib/settings/highlight-settings-getter.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js +13 -11
- 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 +22 -20
- package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js +8 -4
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/drag-place-coefficient-getter.js.map +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 +3 -1
- 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/link-by-pointer-getter.js +2 -2
- package/lib/esm/module/GraphCanvas/lib/utils/link-by-pointer-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/link-highlight.js +66 -0
- package/lib/esm/module/GraphCanvas/lib/utils/link-highlight.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/link-iteration-extractor.js +2 -3
- package/lib/esm/module/GraphCanvas/lib/utils/link-iteration-extractor.js.map +1 -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 +115 -0
- package/lib/esm/module/GraphCanvas/lib/utils/node-highlight.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js +2 -3
- package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-links.js +90 -60
- package/lib/esm/module/GraphCanvas/slices/draw-links.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js +214 -135
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-text.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-dnd.js +4 -4
- package/lib/esm/module/GraphCanvas/slices/init-dnd.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-draw.js +4 -15
- package/lib/esm/module/GraphCanvas/slices/init-draw.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js +17 -17
- package/lib/esm/module/GraphCanvas/slices/init-pointer.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js +21 -22
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-zoom.js.map +1 -1
- package/lib/index.d.ts +436 -220
- package/package.json +1 -1
- package/lib/esm/lib/get-controls-info.js +0 -915
- package/lib/esm/lib/get-controls-info.js.map +0 -1
- package/lib/esm/module/GraphCanvas/constants/settings.js +0 -158
- package/lib/esm/module/GraphCanvas/constants/settings.js.map +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { colorToRgb } from '../../../../lib/color-to-rgb.js';
|
|
2
|
+
import { extractRgb } from '../../../../lib/extract-rgb.js';
|
|
3
|
+
import { fadeRgb } from '../../../../lib/fade-rgb.js';
|
|
4
|
+
import { rgbAnimationByProgress } from '../../../../lib/rgb-animation-by-progress.js';
|
|
5
|
+
import { animationByProgress } from './animation-by-progress.js';
|
|
6
|
+
|
|
7
|
+
function nodeHighlight(opts) {
|
|
8
|
+
let color = opts.nodeOptions.color;
|
|
9
|
+
let borderColor = opts.nodeOptions.borderColor;
|
|
10
|
+
let borderWidth = opts.nodeOptions.borderWidth;
|
|
11
|
+
let radiusInitial = opts.nodeOptions.radius;
|
|
12
|
+
let widthInitial = opts.nodeOptions.width;
|
|
13
|
+
let heightInitial = opts.nodeOptions.height;
|
|
14
|
+
let textSize = opts.nodeOptions.textSize;
|
|
15
|
+
let textShiftX = opts.nodeOptions.textShiftX;
|
|
16
|
+
let textShiftY = opts.nodeOptions.textShiftY;
|
|
17
|
+
let textWeight = opts.nodeOptions.textWeight;
|
|
18
|
+
let labelSize = opts.nodeOptions.labelSize;
|
|
19
|
+
let labelWeight = opts.nodeOptions.labelWeight;
|
|
20
|
+
let sizeCoefficient = 1;
|
|
21
|
+
if (opts.highlightForNodeColor) {
|
|
22
|
+
/** Color */
|
|
23
|
+
const colorRgb = extractRgb(colorToRgb(color));
|
|
24
|
+
const colorRgbHighlight = extractRgb(colorToRgb(opts.highlightForNodeColor));
|
|
25
|
+
if (colorRgb && colorRgbHighlight) {
|
|
26
|
+
const colorFadeAnimation = rgbAnimationByProgress(colorRgb, colorRgbHighlight, opts.highlightProgress);
|
|
27
|
+
color = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (opts.nodeOptions.shape === "circle") {
|
|
31
|
+
/** Radius */
|
|
32
|
+
radiusInitial = animationByProgress(radiusInitial, opts.highlightForNodeSizingAdditional, opts.highlightProgress);
|
|
33
|
+
}
|
|
34
|
+
if (opts.nodeOptions.shape === "square" || opts.nodeOptions.shape === "text") {
|
|
35
|
+
/** Size */
|
|
36
|
+
sizeCoefficient = animationByProgress(sizeCoefficient, opts.highlightForNodeSizingAdditionalCoefficient, opts.highlightProgress);
|
|
37
|
+
widthInitial *= sizeCoefficient;
|
|
38
|
+
heightInitial *= sizeCoefficient;
|
|
39
|
+
}
|
|
40
|
+
if (opts.highlightForNodeBorderColor) {
|
|
41
|
+
/** Border Color */
|
|
42
|
+
const colorRgb = extractRgb(colorToRgb(borderColor));
|
|
43
|
+
const colorRgbHighlight = extractRgb(colorToRgb(opts.highlightForNodeBorderColor));
|
|
44
|
+
if (colorRgb && colorRgbHighlight) {
|
|
45
|
+
const colorFadeAnimation = rgbAnimationByProgress(colorRgb, colorRgbHighlight, opts.highlightProgress);
|
|
46
|
+
borderColor = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** Border Width */
|
|
50
|
+
borderWidth = animationByProgress(borderWidth, opts.highlightForNodeBorderSizingAdditional, opts.highlightProgress);
|
|
51
|
+
/** Text Size */
|
|
52
|
+
textSize = animationByProgress(textSize, opts.highlightForTextSizingAdditional, opts.highlightProgress);
|
|
53
|
+
/** Text Shift X */
|
|
54
|
+
textShiftX = animationByProgress(textShiftX, opts.highlightForTextShiftXAdditional, opts.highlightProgress);
|
|
55
|
+
/** Text Shift Y */
|
|
56
|
+
textShiftY = animationByProgress(textShiftY, opts.highlightForTextShiftYAdditional, opts.highlightProgress);
|
|
57
|
+
/** Text Weight */
|
|
58
|
+
textWeight = animationByProgress(textWeight, opts.highlightForTextWeightAdditional, opts.highlightProgress);
|
|
59
|
+
if (opts.nodeOptions.label) {
|
|
60
|
+
/** Label Size */
|
|
61
|
+
labelSize = animationByProgress(labelSize, opts.highlightForLabelSizingAdditional, opts.highlightProgress);
|
|
62
|
+
/** Label Weight */
|
|
63
|
+
labelWeight = animationByProgress(labelWeight, opts.highlightForLabelWeightAdditional, opts.highlightProgress);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
color,
|
|
67
|
+
borderColor,
|
|
68
|
+
borderWidth,
|
|
69
|
+
radiusInitial,
|
|
70
|
+
widthInitial,
|
|
71
|
+
heightInitial,
|
|
72
|
+
textSize,
|
|
73
|
+
textShiftX,
|
|
74
|
+
textShiftY,
|
|
75
|
+
textWeight,
|
|
76
|
+
labelSize,
|
|
77
|
+
labelWeight,
|
|
78
|
+
sizeCoefficient,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function nodeFade(opts) {
|
|
82
|
+
let alpha = opts.nodeOptions.alpha;
|
|
83
|
+
let color = opts.nodeOptions.color;
|
|
84
|
+
let textAlpha = opts.nodeOptions.textAlpha;
|
|
85
|
+
let labelAlpha = opts.nodeOptions.labelAlpha;
|
|
86
|
+
/** Alpha */
|
|
87
|
+
const alphaMin = opts.highlightForNodeFadingMin < alpha ? opts.highlightForNodeFadingMin : alpha;
|
|
88
|
+
alpha = animationByProgress(alphaMin, alpha - alphaMin, 1 - opts.highlightProgress);
|
|
89
|
+
/** Text Alpha */
|
|
90
|
+
const textAlphaMin = opts.highlightForTextFadingMin < textAlpha ? opts.highlightForTextFadingMin : textAlpha;
|
|
91
|
+
textAlpha = animationByProgress(textAlphaMin, textAlpha - textAlphaMin, 1 - opts.highlightProgress);
|
|
92
|
+
if (opts.nodeOptions.label) {
|
|
93
|
+
/** Label Alpha */
|
|
94
|
+
const labelAlphaMin = opts.highlightForLabelFadingMin < labelAlpha ? opts.highlightForLabelFadingMin : labelAlpha;
|
|
95
|
+
labelAlpha = animationByProgress(labelAlphaMin, labelAlpha - labelAlphaMin, 1 - opts.highlightProgress);
|
|
96
|
+
}
|
|
97
|
+
if (opts.highlightForNodeColorFading) {
|
|
98
|
+
/** Color Fading */
|
|
99
|
+
const colorRgb = extractRgb(colorToRgb(color));
|
|
100
|
+
if (colorRgb) {
|
|
101
|
+
const colorRgbFade = fadeRgb(colorRgb, opts.highlightForNodeColorFadingMin);
|
|
102
|
+
const colorFadeAnimation = rgbAnimationByProgress(colorRgb, colorRgbFade, opts.highlightProgress);
|
|
103
|
+
color = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
alpha,
|
|
108
|
+
color,
|
|
109
|
+
textAlpha,
|
|
110
|
+
labelAlpha,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export { nodeFade, nodeHighlight };
|
|
115
|
+
//# sourceMappingURL=node-highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-highlight.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/node-highlight.ts"],"sourcesContent":["import { colorToRgb, extractRgb, fadeRgb, rgbAnimationByProgress } from \"@/lib\";\nimport type { NodeOptionsInterface } from \"../../types\";\nimport { animationByProgress } from \"./animation-by-progress\";\n\ntype NodeHighlightOptions<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> = {\n nodeOptions: Required<NodeOptionsInterface<NodeData, LinkData>>;\n highlightProgress: number;\n highlightForNodeColor: string | null;\n highlightForNodeSizingAdditional: number;\n highlightForNodeSizingAdditionalCoefficient: number;\n highlightForNodeBorderColor: string | null;\n highlightForNodeBorderSizingAdditional: number;\n highlightForTextSizingAdditional: number;\n highlightForTextShiftXAdditional: number;\n highlightForTextShiftYAdditional: number;\n highlightForTextWeightAdditional: number;\n highlightForLabelSizingAdditional: number;\n highlightForLabelWeightAdditional: number;\n};\n\nexport function nodeHighlight<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(opts: NodeHighlightOptions<NodeData, LinkData>) {\n let color = opts.nodeOptions.color;\n let borderColor = opts.nodeOptions.borderColor;\n let borderWidth = opts.nodeOptions.borderWidth;\n let radiusInitial = opts.nodeOptions.radius;\n let widthInitial = opts.nodeOptions.width;\n let heightInitial = opts.nodeOptions.height;\n let textSize = opts.nodeOptions.textSize;\n let textShiftX = opts.nodeOptions.textShiftX;\n let textShiftY = opts.nodeOptions.textShiftY;\n let textWeight = opts.nodeOptions.textWeight;\n let labelSize = opts.nodeOptions.labelSize;\n let labelWeight = opts.nodeOptions.labelWeight;\n let sizeCoefficient = 1;\n\n if (opts.highlightForNodeColor) {\n /** Color */\n const colorRgb = extractRgb(colorToRgb(color));\n const colorRgbHighlight = extractRgb(colorToRgb(opts.highlightForNodeColor));\n if (colorRgb && colorRgbHighlight) {\n const colorFadeAnimation = rgbAnimationByProgress(\n colorRgb,\n colorRgbHighlight,\n opts.highlightProgress,\n );\n color = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;\n }\n }\n if (opts.nodeOptions.shape === \"circle\") {\n /** Radius */\n radiusInitial = animationByProgress(\n radiusInitial,\n opts.highlightForNodeSizingAdditional,\n opts.highlightProgress,\n );\n }\n if (opts.nodeOptions.shape === \"square\" || opts.nodeOptions.shape === \"text\") {\n /** Size */\n sizeCoefficient = animationByProgress(\n sizeCoefficient,\n opts.highlightForNodeSizingAdditionalCoefficient,\n opts.highlightProgress,\n );\n\n widthInitial *= sizeCoefficient;\n heightInitial *= sizeCoefficient;\n }\n\n if (opts.highlightForNodeBorderColor) {\n /** Border Color */\n const colorRgb = extractRgb(colorToRgb(borderColor));\n const colorRgbHighlight = extractRgb(colorToRgb(opts.highlightForNodeBorderColor));\n if (colorRgb && colorRgbHighlight) {\n const colorFadeAnimation = rgbAnimationByProgress(\n colorRgb,\n colorRgbHighlight,\n opts.highlightProgress,\n );\n borderColor = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;\n }\n }\n /** Border Width */\n borderWidth = animationByProgress(\n borderWidth,\n opts.highlightForNodeBorderSizingAdditional,\n opts.highlightProgress,\n );\n\n /** Text Size */\n textSize = animationByProgress(\n textSize,\n opts.highlightForTextSizingAdditional,\n opts.highlightProgress,\n );\n /** Text Shift X */\n textShiftX = animationByProgress(\n textShiftX,\n opts.highlightForTextShiftXAdditional,\n opts.highlightProgress,\n );\n /** Text Shift Y */\n textShiftY = animationByProgress(\n textShiftY,\n opts.highlightForTextShiftYAdditional,\n opts.highlightProgress,\n );\n /** Text Weight */\n textWeight = animationByProgress(\n textWeight,\n opts.highlightForTextWeightAdditional,\n opts.highlightProgress,\n );\n\n if (opts.nodeOptions.label) {\n /** Label Size */\n labelSize = animationByProgress(\n labelSize,\n opts.highlightForLabelSizingAdditional,\n opts.highlightProgress,\n );\n /** Label Weight */\n labelWeight = animationByProgress(\n labelWeight,\n opts.highlightForLabelWeightAdditional,\n opts.highlightProgress,\n );\n }\n\n return {\n color,\n borderColor,\n borderWidth,\n radiusInitial,\n widthInitial,\n heightInitial,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n labelSize,\n labelWeight,\n sizeCoefficient,\n };\n}\n\ntype NodeFadingOptions<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> = {\n nodeOptions: Required<NodeOptionsInterface<NodeData, LinkData>>;\n highlightProgress: number;\n highlightForNodeFadingMin: number;\n highlightForTextFadingMin: number;\n highlightForLabelFadingMin: number;\n highlightForNodeColorFading: boolean;\n highlightForNodeColorFadingMin: number;\n};\nexport function nodeFade<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(opts: NodeFadingOptions<NodeData, LinkData>) {\n let alpha = opts.nodeOptions.alpha;\n let color = opts.nodeOptions.color;\n let textAlpha = opts.nodeOptions.textAlpha;\n let labelAlpha = opts.nodeOptions.labelAlpha;\n\n /** Alpha */\n const alphaMin = opts.highlightForNodeFadingMin < alpha ? opts.highlightForNodeFadingMin : alpha;\n alpha = animationByProgress(alphaMin, alpha - alphaMin, 1 - opts.highlightProgress);\n /** Text Alpha */\n const textAlphaMin =\n opts.highlightForTextFadingMin < textAlpha ? opts.highlightForTextFadingMin : textAlpha;\n textAlpha = animationByProgress(\n textAlphaMin,\n textAlpha - textAlphaMin,\n 1 - opts.highlightProgress,\n );\n if (opts.nodeOptions.label) {\n /** Label Alpha */\n const labelAlphaMin =\n opts.highlightForLabelFadingMin < labelAlpha ? opts.highlightForLabelFadingMin : labelAlpha;\n labelAlpha = animationByProgress(\n labelAlphaMin,\n labelAlpha - labelAlphaMin,\n 1 - opts.highlightProgress,\n );\n }\n if (opts.highlightForNodeColorFading) {\n /** Color Fading */\n const colorRgb = extractRgb(colorToRgb(color));\n if (colorRgb) {\n const colorRgbFade = fadeRgb(colorRgb, opts.highlightForNodeColorFadingMin);\n const colorFadeAnimation = rgbAnimationByProgress(\n colorRgb,\n colorRgbFade,\n opts.highlightProgress,\n );\n color = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;\n }\n }\n\n return {\n alpha,\n color,\n textAlpha,\n labelAlpha,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { checkType } from '../../../../lib/check-type.js';
|
|
2
2
|
import '@krainovsd/js-helpers';
|
|
3
|
-
import 'd3-array';
|
|
4
3
|
|
|
5
4
|
function nodeIterationExtractor(node, i, nodes, state, option, optionConstantGetter) {
|
|
6
5
|
let customOptions;
|
|
7
6
|
let constantOptions;
|
|
8
7
|
if (typeof option === "function")
|
|
9
|
-
customOptions = option(node, i, nodes
|
|
8
|
+
customOptions = option.call(state, node, i, nodes);
|
|
10
9
|
else
|
|
11
10
|
customOptions = option;
|
|
12
11
|
if (customOptions && typeof customOptions === "object" && !Array.isArray(customOptions)) {
|
|
@@ -17,7 +16,7 @@ function nodeIterationExtractor(node, i, nodes, state, option, optionConstantGet
|
|
|
17
16
|
}
|
|
18
17
|
if (optionConstantGetter) {
|
|
19
18
|
if (typeof optionConstantGetter === "function")
|
|
20
|
-
constantOptions = optionConstantGetter(node, i, nodes
|
|
19
|
+
constantOptions = optionConstantGetter.call(state, node, i, nodes);
|
|
21
20
|
else
|
|
22
21
|
constantOptions = optionConstantGetter;
|
|
23
22
|
if (constantOptions &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-iteration-extractor.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts"],"sourcesContent":["import { checkType } from \"@/lib\";\nimport type {
|
|
1
|
+
{"version":3,"file":"node-iteration-extractor.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts"],"sourcesContent":["import { checkType } from \"@/lib\";\nimport type { GraphCanvas } from \"../../GraphCanvas\";\nimport type { NodeInterface, NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphCanvas<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphCanvas<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphCanvas<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | NodeIterationPropsInterface<NodeData, LinkData, Result>\n | Result\n | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option.call(state, node, i, nodes);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter.call(state, node, i, nodes);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n"],"names":[],"mappings":";;;AA4BgB,SAAA,sBAAsB,CAKpC,IAA6B,EAC7B,CAAS,EACT,KAAgC,EAChC,KAAsC,EACtC,MAAwE,EACxE,oBAGa,EAAA;AAEb,IAAA,IAAI,aAAiC;AACrC,IAAA,IAAI,eAAmC;IAEvC,IAAI,OAAO,MAAM,KAAK,UAAU;AAAE,QAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;;QAC/E,aAAa,GAAG,MAAM;AAE3B,IAAA,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACvF,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,YAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,aAAa,CAAC,GAAG,CAAC;;;IAInE,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;AAC5C,YAAA,eAAe,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;;YAC/D,eAAe,GAAG,oBAAoB;AAE3C,QAAA,IACE,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;AACnC,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC/B,YAAA,SAAS,CACP,aAAa,EACb,aAAa,KAAK,SAAS;AACzB,iBAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CACvE,EACD;YACA,OAAO;AACL,gBAAA,GAAI,eAAuD;AAC3D,gBAAA,GAAI,aAAqD;aAChD;;;AAIf,IAAA,OAAO,aAAa;AACtB;;;;"}
|
|
@@ -3,10 +3,10 @@ import '@krainovsd/js-helpers';
|
|
|
3
3
|
import { linkIterationExtractor } from '../lib/utils/link-iteration-extractor.js';
|
|
4
4
|
import 'd3-array';
|
|
5
5
|
import { calculateLinkPositionByNode } from '../lib/utils/calculate-link-position-by-node.js';
|
|
6
|
-
import { animationByProgress } from '../lib/utils/animation-by-progress.js';
|
|
7
6
|
import { getParticlePosition } from '../lib/utils/get-particle-position.js';
|
|
7
|
+
import { linkFade, linkHighlight } from '../lib/utils/link-highlight.js';
|
|
8
8
|
|
|
9
|
-
function getDrawLink(
|
|
9
|
+
function getDrawLink() {
|
|
10
10
|
return function drawLink(link, index) {
|
|
11
11
|
if (!this.context ||
|
|
12
12
|
typeof link.source !== "object" ||
|
|
@@ -20,88 +20,114 @@ function getDrawLink(state) {
|
|
|
20
20
|
return;
|
|
21
21
|
const id = `${link.target.id}${link.source.id}`;
|
|
22
22
|
let linkOptions;
|
|
23
|
-
if (this.linkSettings.
|
|
23
|
+
if (this.linkSettings.cacheOptions && this.linkOptionsCache[id]) {
|
|
24
24
|
linkOptions = this.linkOptionsCache[id];
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
linkOptions = linkIterationExtractor(link, index, this.links,
|
|
28
|
-
if (this.linkSettings.
|
|
27
|
+
linkOptions = linkIterationExtractor(link, index, this.links, this, this.linkSettings.options ?? {}, linkOptionsGetter);
|
|
28
|
+
if (this.linkSettings.cacheOptions) {
|
|
29
29
|
this.linkOptionsCache[id] = linkOptions;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
if (linkOptions.drawLink) {
|
|
33
|
-
linkOptions.drawLink(link, linkOptions
|
|
33
|
+
linkOptions.drawLink.call(this, link, linkOptions);
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
let alpha = linkOptions.alpha;
|
|
37
|
+
let color = linkOptions.color;
|
|
38
|
+
let width = linkOptions.width;
|
|
37
39
|
let arrowAlpha = this.linkSettings.arrowByHighlight ? 0 : linkOptions.arrowAlpha;
|
|
38
|
-
|
|
40
|
+
let arrowColor = linkOptions.arrowColor;
|
|
41
|
+
let arrowSize = linkOptions.arrowSize;
|
|
42
|
+
let arrowBorderWidth = linkOptions.arrowBorderWidth;
|
|
43
|
+
let arrowBorderColor = linkOptions.arrowBorderColor;
|
|
44
|
+
/** Highlight */
|
|
39
45
|
if (this.highlightedNeighbors && this.highlightedNode) {
|
|
40
|
-
/** Not
|
|
46
|
+
/** By Node Not Highlight */
|
|
41
47
|
if (this.highlightedNode.id != link.source.id && this.highlightedNode.id != link.target.id) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
? this.linkSettings.highlightByNodeArrowFadingMin
|
|
53
|
-
: arrowAlpha;
|
|
54
|
-
arrowAlpha = animationByProgress(min, arrowAlpha - min, 1 - this.highlightProgress);
|
|
55
|
-
}
|
|
48
|
+
const fadeOptions = linkFade({
|
|
49
|
+
arrow: this.linkSettings.arrow,
|
|
50
|
+
arrowByHighlight: this.linkSettings.arrowByHighlight,
|
|
51
|
+
linkOptions,
|
|
52
|
+
highlightProgress: this.highlightProgress,
|
|
53
|
+
highlightForArrowFadingMin: this.highlightSettings.highlightByNodeForArrowFadingMin,
|
|
54
|
+
highlightForLinkFadingMin: this.highlightSettings.highlightByNodeForLinkFadingMin,
|
|
55
|
+
});
|
|
56
|
+
alpha = fadeOptions.alpha;
|
|
57
|
+
arrowAlpha = fadeOptions.arrowAlpha;
|
|
56
58
|
}
|
|
57
59
|
else {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
const highlightOptions = linkHighlight({
|
|
61
|
+
arrow: this.linkSettings.arrow,
|
|
62
|
+
arrowByHighlight: this.linkSettings.arrowByHighlight,
|
|
63
|
+
linkOptions,
|
|
64
|
+
highlightProgress: this.highlightProgress,
|
|
65
|
+
highlightForArrowBorderColor: this.highlightSettings.highlightByNodeForArrowBorderColor,
|
|
66
|
+
highlightForArrowBorderSizingAdditional: this.highlightSettings.highlightByNodeForArrowBorderSizingAdditional,
|
|
67
|
+
highlightForArrowColor: this.highlightSettings.highlightByNodeForArrowColor,
|
|
68
|
+
highlightForArrowSizeAdditional: this.highlightSettings.highlightByNodeForArrowSizeAdditional,
|
|
69
|
+
highlightForLinkColor: this.highlightSettings.highlightByNodeForLinkColor,
|
|
70
|
+
highlightForLinkSizeAdditional: this.highlightSettings.highlightByNodeForLinkSizeAdditional,
|
|
71
|
+
});
|
|
72
|
+
arrowAlpha = highlightOptions.arrowAlpha;
|
|
73
|
+
color = highlightOptions.color;
|
|
74
|
+
width = highlightOptions.width;
|
|
75
|
+
arrowColor = highlightOptions.arrowColor;
|
|
76
|
+
arrowSize = highlightOptions.arrowSize;
|
|
77
|
+
arrowBorderWidth = highlightOptions.arrowBorderWidth;
|
|
78
|
+
arrowBorderColor = highlightOptions.arrowBorderColor;
|
|
63
79
|
}
|
|
64
80
|
}
|
|
65
|
-
/** LINK HIGHLIGHT */
|
|
66
81
|
if (this.highlightedNeighbors && this.highlightedLink) {
|
|
67
|
-
/** Not
|
|
82
|
+
/** By Link Not Highlight */
|
|
68
83
|
if (this.highlightedLink !== link) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
? this.linkSettings.highlightByLinkArrowFadingMin
|
|
80
|
-
: arrowAlpha;
|
|
81
|
-
arrowAlpha = animationByProgress(min, arrowAlpha - min, 1 - this.highlightProgress);
|
|
82
|
-
}
|
|
84
|
+
const fadeOptions = linkFade({
|
|
85
|
+
arrow: this.linkSettings.arrow,
|
|
86
|
+
arrowByHighlight: this.linkSettings.arrowByHighlight,
|
|
87
|
+
linkOptions,
|
|
88
|
+
highlightProgress: this.highlightProgress,
|
|
89
|
+
highlightForArrowFadingMin: this.highlightSettings.highlightByLinkForArrowFadingMin,
|
|
90
|
+
highlightForLinkFadingMin: this.highlightSettings.highlightByLinkForLinkFadingMin,
|
|
91
|
+
});
|
|
92
|
+
alpha = fadeOptions.alpha;
|
|
93
|
+
arrowAlpha = fadeOptions.arrowAlpha;
|
|
83
94
|
}
|
|
84
95
|
else {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
96
|
+
/** By Link Highlight */
|
|
97
|
+
const highlightOptions = linkHighlight({
|
|
98
|
+
arrow: this.linkSettings.arrow,
|
|
99
|
+
arrowByHighlight: this.linkSettings.arrowByHighlight,
|
|
100
|
+
linkOptions,
|
|
101
|
+
highlightProgress: this.highlightProgress,
|
|
102
|
+
highlightForArrowBorderColor: this.highlightSettings.highlightByLinkForArrowBorderColor,
|
|
103
|
+
highlightForArrowBorderSizingAdditional: this.highlightSettings.highlightByLinkForArrowBorderSizingAdditional,
|
|
104
|
+
highlightForArrowColor: this.highlightSettings.highlightByLinkForArrowColor,
|
|
105
|
+
highlightForArrowSizeAdditional: this.highlightSettings.highlightByLinkForArrowSizeAdditional,
|
|
106
|
+
highlightForLinkColor: this.highlightSettings.highlightByLinkForLinkColor,
|
|
107
|
+
highlightForLinkSizeAdditional: this.highlightSettings.highlightByLinkForLinkSizeAdditional,
|
|
108
|
+
});
|
|
109
|
+
arrowAlpha = highlightOptions.arrowAlpha;
|
|
110
|
+
color = highlightOptions.color;
|
|
111
|
+
width = highlightOptions.width;
|
|
112
|
+
arrowColor = highlightOptions.arrowColor;
|
|
113
|
+
arrowSize = highlightOptions.arrowSize;
|
|
114
|
+
arrowBorderWidth = highlightOptions.arrowBorderWidth;
|
|
115
|
+
arrowBorderColor = highlightOptions.arrowBorderColor;
|
|
90
116
|
}
|
|
91
117
|
}
|
|
92
118
|
/** Link */
|
|
93
119
|
this.context.beginPath();
|
|
94
120
|
this.context.globalAlpha = alpha;
|
|
95
|
-
this.context.strokeStyle =
|
|
96
|
-
this.context.lineWidth =
|
|
121
|
+
this.context.strokeStyle = color;
|
|
122
|
+
this.context.lineWidth = width;
|
|
97
123
|
let xStart = link.source.x;
|
|
98
124
|
let yStart = link.source.y;
|
|
99
125
|
let xEnd = link.target.x;
|
|
100
126
|
let yEnd = link.target.y;
|
|
101
127
|
let linkDistance = 0;
|
|
102
|
-
if (this.linkSettings.
|
|
128
|
+
if (this.linkSettings.prettyDraw || this.linkSettings.particleFlexSpeed) {
|
|
103
129
|
const isHasArrow = this.linkSettings.arrow && arrowAlpha > 0;
|
|
104
|
-
const position = calculateLinkPositionByNode(link, isHasArrow ?
|
|
130
|
+
const position = calculateLinkPositionByNode(link, isHasArrow ? arrowSize : 0);
|
|
105
131
|
if (position) {
|
|
106
132
|
xStart = position.x1;
|
|
107
133
|
xEnd = position.x2;
|
|
@@ -171,7 +197,9 @@ function getDrawLink(state) {
|
|
|
171
197
|
this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);
|
|
172
198
|
this.context.fillStyle = linkOptions.particleColor;
|
|
173
199
|
this.context.fill();
|
|
174
|
-
|
|
200
|
+
if (linkOptions.particleBorderWidth > 0) {
|
|
201
|
+
this.context.stroke();
|
|
202
|
+
}
|
|
175
203
|
}
|
|
176
204
|
});
|
|
177
205
|
}
|
|
@@ -186,19 +214,21 @@ function getDrawLink(state) {
|
|
|
186
214
|
};
|
|
187
215
|
this.context.beginPath();
|
|
188
216
|
this.context.globalAlpha = arrowAlpha;
|
|
189
|
-
this.context.strokeStyle =
|
|
190
|
-
this.context.lineWidth =
|
|
191
|
-
this.context.fillStyle =
|
|
217
|
+
this.context.strokeStyle = arrowBorderColor;
|
|
218
|
+
this.context.lineWidth = arrowBorderWidth;
|
|
219
|
+
this.context.fillStyle = arrowColor;
|
|
192
220
|
const angle = Math.atan2(yEnd - yStart, xEnd - xStart);
|
|
193
221
|
this.context.moveTo(xEnd, yEnd);
|
|
194
|
-
this.context.lineTo(xEnd -
|
|
195
|
-
this.context.lineTo(xEnd -
|
|
222
|
+
this.context.lineTo(xEnd - arrowSize * Math.cos(angle - Math.PI / 6), yEnd - arrowSize * Math.sin(angle - Math.PI / 6));
|
|
223
|
+
this.context.lineTo(xEnd - arrowSize * Math.cos(angle + Math.PI / 6), yEnd - arrowSize * Math.sin(angle + Math.PI / 6));
|
|
196
224
|
this.context.closePath();
|
|
197
225
|
this.context.fill();
|
|
198
|
-
|
|
226
|
+
if (arrowBorderWidth > 0) {
|
|
227
|
+
this.context.stroke();
|
|
228
|
+
}
|
|
199
229
|
}
|
|
200
230
|
if (linkOptions.drawExtraLink) {
|
|
201
|
-
linkOptions.drawExtraLink(link, { ...linkOptions, alpha }
|
|
231
|
+
linkOptions.drawExtraLink.call(this, link, { ...linkOptions, alpha });
|
|
202
232
|
}
|
|
203
233
|
};
|
|
204
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draw-links.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-links.ts"],"sourcesContent":["import type { LinkInterface } from \"@/types\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n animationByProgress,\n calculateLinkPositionByNode,\n getParticlePosition,\n linkIterationExtractor,\n linkOptionsGetter,\n} from \"../lib\";\nimport type { GraphParticle, GraphState, LinkOptionsInterface } from \"../types\";\n\nexport function getDrawLink<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(state: GraphState<NodeData, LinkData>) {\n return function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n index: number,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n if (!link.source._visible && !link.target._visible) return;\n\n const id = `${link.target.id}${link.source.id}`;\n let linkOptions: Required<LinkOptionsInterface<NodeData, LinkData>>;\n if (this.linkSettings.cache && this.linkOptionsCache[id]) {\n linkOptions = this.linkOptionsCache[id];\n } else {\n linkOptions = linkIterationExtractor(\n link,\n index,\n this.links,\n state,\n this.linkSettings.options ?? {},\n linkOptionsGetter,\n );\n if (this.linkSettings.cache) {\n this.linkOptionsCache[id] = linkOptions;\n }\n }\n\n if (linkOptions.drawLink) {\n linkOptions.drawLink(link, linkOptions, state);\n\n return;\n }\n\n let alpha = linkOptions.alpha;\n let arrowAlpha = this.linkSettings.arrowByHighlight ? 0 : linkOptions.arrowAlpha;\n\n /** NODE HIGHLIGHT */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** Not highlighted */\n if (this.highlightedNode.id != link.source.id && this.highlightedNode.id != link.target.id) {\n if (this.linkSettings.highlightByNodeLinkFading) {\n const min =\n this.linkSettings.highlightByNodeLinkFadingMin < alpha\n ? this.linkSettings.highlightByNodeLinkFadingMin\n : alpha;\n alpha = animationByProgress(min, alpha - min, 1 - this.highlightProgress);\n }\n if (\n this.linkSettings.arrow &&\n this.linkSettings.highlightByNodeArrowFading &&\n !this.linkSettings.arrowByHighlight\n ) {\n const min =\n this.linkSettings.highlightByNodeArrowFadingMin < arrowAlpha\n ? this.linkSettings.highlightByNodeArrowFadingMin\n : arrowAlpha;\n arrowAlpha = animationByProgress(min, arrowAlpha - min, 1 - this.highlightProgress);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (this.linkSettings.arrow && this.linkSettings.arrowByHighlight) {\n /** Highlighted */\n arrowAlpha = animationByProgress(0, linkOptions.arrowAlpha, this.highlightProgress);\n }\n }\n }\n /** LINK HIGHLIGHT */\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** Not highlighted */\n if (this.highlightedLink !== link) {\n if (this.linkSettings.highlightByLinkLinkFading) {\n const min =\n this.linkSettings.highlightByLinkLinkFadingMin < alpha\n ? this.linkSettings.highlightByLinkLinkFadingMin\n : alpha;\n alpha = animationByProgress(min, alpha - min, 1 - this.highlightProgress);\n }\n if (\n this.linkSettings.arrow &&\n this.linkSettings.highlightByLinkArrowFading &&\n !this.linkSettings.arrowByHighlight\n ) {\n const min =\n this.linkSettings.highlightByLinkArrowFadingMin < arrowAlpha\n ? this.linkSettings.highlightByLinkArrowFadingMin\n : arrowAlpha;\n arrowAlpha = animationByProgress(min, arrowAlpha - min, 1 - this.highlightProgress);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (this.linkSettings.arrow && this.linkSettings.arrowByHighlight) {\n /** Highlighted */\n arrowAlpha = animationByProgress(0, linkOptions.arrowAlpha, this.highlightProgress);\n }\n }\n }\n\n /** Link */\n this.context.beginPath();\n\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = linkOptions.color;\n this.context.lineWidth = linkOptions.width;\n\n let xStart = link.source.x;\n let yStart = link.source.y;\n let xEnd = link.target.x;\n let yEnd = link.target.y;\n let linkDistance = 0;\n if (this.linkSettings.pretty || this.linkSettings.particleFlexSpeed) {\n const isHasArrow = this.linkSettings.arrow && arrowAlpha > 0;\n const position = calculateLinkPositionByNode(link, isHasArrow ? linkOptions.arrowSize : 0);\n\n if (position) {\n xStart = position.x1;\n xEnd = position.x2;\n yStart = position.y1;\n yEnd = position.y2;\n linkDistance = position.distance;\n }\n }\n this.context.moveTo(xStart, yStart);\n this.context.lineTo(xEnd, yEnd);\n this.context.stroke();\n\n /** Particle */\n if (\n this.linkSettings.particles &&\n ((this.highlightedNode &&\n (this.highlightedNode.id === link.source.id ||\n this.highlightedNode.id === link.target.id)) ||\n (this.highlightedLink && this.highlightedLink === link))\n ) {\n const particleSteps = this.linkSettings.particleFlexSpeed\n ? linkDistance <= 0\n ? 0\n : linkDistance * this.linkSettings.particleFlexSpeedCoefficient\n : linkOptions.particleSteps;\n const particleCount = linkOptions.particleCount;\n\n if (!this.particles[id]) {\n const sourceId = link.source.id;\n const targetId = link.target.id;\n\n const particles: GraphParticle[] = [];\n let prevParticle: GraphParticle | undefined;\n\n for (let i = 0; i < particleCount; i++) {\n const particle: GraphParticle = {\n step: 0,\n sourceId,\n targetId,\n prev: prevParticle,\n next: undefined,\n index: i,\n };\n if (prevParticle) prevParticle.next = particle;\n particles.push(particle);\n prevParticle = particle;\n }\n if (particles.length >= 2) {\n particles[0].prev = particles[particles.length - 1];\n particles[particles.length - 1].next = particles[0];\n }\n this.particles[id] = particles;\n }\n\n if (particleSteps !== 0) {\n this.particles[id].forEach((particle) => {\n if (!this.context) return;\n\n const distance = particleSteps / particleCount;\n getParticlePosition({\n distance,\n particle,\n totalSteps: particleSteps,\n totalCount: particleCount,\n xEnd,\n xStart,\n yEnd,\n yStart,\n });\n if (particle.x != undefined && particle.y != undefined) {\n this.context.beginPath();\n this.context.strokeStyle = linkOptions.particleBorderColor;\n this.context.lineWidth = linkOptions.particleBorderWidth;\n this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);\n this.context.fillStyle = linkOptions.particleColor;\n this.context.fill();\n this.context.stroke();\n }\n });\n }\n }\n\n /** Arrow */\n if (this.linkSettings.arrow && arrowAlpha > 0) {\n const {\n x1: xStart,\n x2: xEnd,\n y1: yStart,\n y2: yEnd,\n } = calculateLinkPositionByNode(link) ?? {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0,\n };\n\n this.context.beginPath();\n this.context.globalAlpha = arrowAlpha;\n this.context.strokeStyle = linkOptions.arrowBorderColor;\n this.context.lineWidth = linkOptions.arrowBorderWidth;\n this.context.fillStyle = linkOptions.arrowColor;\n const angle = Math.atan2(yEnd - yStart, xEnd - xStart);\n this.context.moveTo(xEnd, yEnd);\n this.context.lineTo(\n xEnd - linkOptions.arrowSize * Math.cos(angle - Math.PI / 6),\n yEnd - linkOptions.arrowSize * Math.sin(angle - Math.PI / 6),\n );\n this.context.lineTo(\n xEnd - linkOptions.arrowSize * Math.cos(angle + Math.PI / 6),\n yEnd - linkOptions.arrowSize * Math.sin(angle + Math.PI / 6),\n );\n this.context.closePath();\n this.context.fill();\n this.context.stroke();\n }\n\n if (linkOptions.drawExtraLink) {\n linkOptions.drawExtraLink(link, { ...linkOptions, alpha }, state);\n }\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"draw-links.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-links.ts"],"sourcesContent":["import type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n calculateLinkPositionByNode,\n getParticlePosition,\n linkFade,\n linkHighlight,\n linkIterationExtractor,\n linkOptionsGetter,\n} from \"../lib\";\nimport type { LinkInterface, LinkOptionsInterface, LinkParticle } from \"../types\";\n\nexport function getDrawLink<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>() {\n return function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n index: number,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n if (!link.source._visible && !link.target._visible) return;\n\n const id = `${link.target.id}${link.source.id}`;\n let linkOptions: Required<LinkOptionsInterface<NodeData, LinkData>>;\n if (this.linkSettings.cacheOptions && this.linkOptionsCache[id]) {\n linkOptions = this.linkOptionsCache[id];\n } else {\n linkOptions = linkIterationExtractor(\n link,\n index,\n this.links,\n this,\n this.linkSettings.options ?? {},\n linkOptionsGetter,\n );\n if (this.linkSettings.cacheOptions) {\n this.linkOptionsCache[id] = linkOptions;\n }\n }\n\n if (linkOptions.drawLink) {\n linkOptions.drawLink.call(this, link, linkOptions);\n\n return;\n }\n\n let alpha = linkOptions.alpha;\n let color = linkOptions.color;\n let width = linkOptions.width;\n let arrowAlpha = this.linkSettings.arrowByHighlight ? 0 : linkOptions.arrowAlpha;\n let arrowColor = linkOptions.arrowColor;\n let arrowSize = linkOptions.arrowSize;\n let arrowBorderWidth = linkOptions.arrowBorderWidth;\n let arrowBorderColor = linkOptions.arrowBorderColor;\n\n /** Highlight */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** By Node Not Highlight */\n if (this.highlightedNode.id != link.source.id && this.highlightedNode.id != link.target.id) {\n const fadeOptions = linkFade({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowFadingMin: this.highlightSettings.highlightByNodeForArrowFadingMin,\n highlightForLinkFadingMin: this.highlightSettings.highlightByNodeForLinkFadingMin,\n });\n alpha = fadeOptions.alpha;\n arrowAlpha = fadeOptions.arrowAlpha;\n } else {\n const highlightOptions = linkHighlight({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowBorderColor: this.highlightSettings.highlightByNodeForArrowBorderColor,\n highlightForArrowBorderSizingAdditional:\n this.highlightSettings.highlightByNodeForArrowBorderSizingAdditional,\n highlightForArrowColor: this.highlightSettings.highlightByNodeForArrowColor,\n highlightForArrowSizeAdditional:\n this.highlightSettings.highlightByNodeForArrowSizeAdditional,\n highlightForLinkColor: this.highlightSettings.highlightByNodeForLinkColor,\n highlightForLinkSizeAdditional:\n this.highlightSettings.highlightByNodeForLinkSizeAdditional,\n });\n arrowAlpha = highlightOptions.arrowAlpha;\n color = highlightOptions.color;\n width = highlightOptions.width;\n arrowColor = highlightOptions.arrowColor;\n arrowSize = highlightOptions.arrowSize;\n arrowBorderWidth = highlightOptions.arrowBorderWidth;\n arrowBorderColor = highlightOptions.arrowBorderColor;\n }\n }\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** By Link Not Highlight */\n if (this.highlightedLink !== link) {\n const fadeOptions = linkFade({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowFadingMin: this.highlightSettings.highlightByLinkForArrowFadingMin,\n highlightForLinkFadingMin: this.highlightSettings.highlightByLinkForLinkFadingMin,\n });\n alpha = fadeOptions.alpha;\n arrowAlpha = fadeOptions.arrowAlpha;\n } else {\n /** By Link Highlight */\n const highlightOptions = linkHighlight({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowBorderColor: this.highlightSettings.highlightByLinkForArrowBorderColor,\n highlightForArrowBorderSizingAdditional:\n this.highlightSettings.highlightByLinkForArrowBorderSizingAdditional,\n highlightForArrowColor: this.highlightSettings.highlightByLinkForArrowColor,\n highlightForArrowSizeAdditional:\n this.highlightSettings.highlightByLinkForArrowSizeAdditional,\n highlightForLinkColor: this.highlightSettings.highlightByLinkForLinkColor,\n highlightForLinkSizeAdditional:\n this.highlightSettings.highlightByLinkForLinkSizeAdditional,\n });\n arrowAlpha = highlightOptions.arrowAlpha;\n color = highlightOptions.color;\n width = highlightOptions.width;\n arrowColor = highlightOptions.arrowColor;\n arrowSize = highlightOptions.arrowSize;\n arrowBorderWidth = highlightOptions.arrowBorderWidth;\n arrowBorderColor = highlightOptions.arrowBorderColor;\n }\n }\n\n /** Link */\n this.context.beginPath();\n\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = color;\n this.context.lineWidth = width;\n\n let xStart = link.source.x;\n let yStart = link.source.y;\n let xEnd = link.target.x;\n let yEnd = link.target.y;\n let linkDistance = 0;\n if (this.linkSettings.prettyDraw || this.linkSettings.particleFlexSpeed) {\n const isHasArrow = this.linkSettings.arrow && arrowAlpha > 0;\n const position = calculateLinkPositionByNode(link, isHasArrow ? arrowSize : 0);\n\n if (position) {\n xStart = position.x1;\n xEnd = position.x2;\n yStart = position.y1;\n yEnd = position.y2;\n linkDistance = position.distance;\n }\n }\n this.context.moveTo(xStart, yStart);\n this.context.lineTo(xEnd, yEnd);\n this.context.stroke();\n\n /** Particle */\n if (\n this.linkSettings.particles &&\n ((this.highlightedNode &&\n (this.highlightedNode.id === link.source.id ||\n this.highlightedNode.id === link.target.id)) ||\n (this.highlightedLink && this.highlightedLink === link))\n ) {\n const particleSteps = this.linkSettings.particleFlexSpeed\n ? linkDistance <= 0\n ? 0\n : linkDistance * this.linkSettings.particleFlexSpeedCoefficient\n : linkOptions.particleSteps;\n const particleCount = linkOptions.particleCount;\n\n if (!this.particles[id]) {\n const sourceId = link.source.id;\n const targetId = link.target.id;\n\n const particles: LinkParticle[] = [];\n let prevParticle: LinkParticle | undefined;\n\n for (let i = 0; i < particleCount; i++) {\n const particle: LinkParticle = {\n step: 0,\n sourceId,\n targetId,\n prev: prevParticle,\n next: undefined,\n index: i,\n };\n if (prevParticle) prevParticle.next = particle;\n particles.push(particle);\n prevParticle = particle;\n }\n if (particles.length >= 2) {\n particles[0].prev = particles[particles.length - 1];\n particles[particles.length - 1].next = particles[0];\n }\n this.particles[id] = particles;\n }\n\n if (particleSteps !== 0) {\n this.particles[id].forEach((particle) => {\n if (!this.context) return;\n\n const distance = particleSteps / particleCount;\n getParticlePosition({\n distance,\n particle,\n totalSteps: particleSteps,\n totalCount: particleCount,\n xEnd,\n xStart,\n yEnd,\n yStart,\n });\n if (particle.x != undefined && particle.y != undefined) {\n this.context.beginPath();\n this.context.strokeStyle = linkOptions.particleBorderColor;\n this.context.lineWidth = linkOptions.particleBorderWidth;\n this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);\n this.context.fillStyle = linkOptions.particleColor;\n this.context.fill();\n if (linkOptions.particleBorderWidth > 0) {\n this.context.stroke();\n }\n }\n });\n }\n }\n\n /** Arrow */\n if (this.linkSettings.arrow && arrowAlpha > 0) {\n const {\n x1: xStart,\n x2: xEnd,\n y1: yStart,\n y2: yEnd,\n } = calculateLinkPositionByNode(link) ?? {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0,\n };\n\n this.context.beginPath();\n this.context.globalAlpha = arrowAlpha;\n this.context.strokeStyle = arrowBorderColor;\n this.context.lineWidth = arrowBorderWidth;\n this.context.fillStyle = arrowColor;\n const angle = Math.atan2(yEnd - yStart, xEnd - xStart);\n this.context.moveTo(xEnd, yEnd);\n this.context.lineTo(\n xEnd - arrowSize * Math.cos(angle - Math.PI / 6),\n yEnd - arrowSize * Math.sin(angle - Math.PI / 6),\n );\n this.context.lineTo(\n xEnd - arrowSize * Math.cos(angle + Math.PI / 6),\n yEnd - arrowSize * Math.sin(angle + Math.PI / 6),\n );\n this.context.closePath();\n this.context.fill();\n if (arrowBorderWidth > 0) {\n this.context.stroke();\n }\n }\n\n if (linkOptions.drawExtraLink) {\n linkOptions.drawExtraLink.call(this, link, { ...linkOptions, alpha });\n }\n };\n}\n"],"names":[],"mappings":"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"}
|