@react-fabric/graph 1.0.0-beta.63 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/context/context.js +16 -0
- package/dist/cjs/graph/index.js +58 -381
- package/dist/cjs/index.js +25 -21
- package/dist/cjs/utils/edge.js +76 -0
- package/dist/cjs/utils/node.js +93 -0
- package/dist/cjs/utils/sdfFolder.js +107 -0
- package/dist/cjs/viewer/Graph.js +174 -0
- package/dist/esm/context/context.js +15 -0
- package/dist/esm/graph/index.js +59 -382
- package/dist/esm/index.js +24 -20
- package/dist/esm/utils/edge.js +75 -0
- package/dist/esm/utils/node.js +92 -0
- package/dist/esm/utils/sdfFolder.js +107 -0
- package/dist/esm/viewer/Graph.js +174 -0
- package/dist/types/context/context.d.ts +35 -0
- package/dist/types/graph/index.d.ts +47 -24
- package/dist/types/index.d.ts +28 -2
- package/dist/types/types/index.d.ts +124 -175
- package/dist/types/utils/edge.d.ts +28 -0
- package/dist/types/utils/node.d.ts +28 -0
- package/dist/types/utils/sdfFolder.d.ts +75 -0
- package/dist/types/viewer/Graph.d.ts +31 -0
- package/package.json +19 -25
- package/src/context/context.tsx +43 -0
- package/src/graph/index.ts +76 -399
- package/src/index.ts +24 -26
- package/src/types/index.ts +139 -185
- package/src/utils/edge.ts +65 -0
- package/src/utils/node.ts +105 -0
- package/src/utils/sdfFolder.ts +141 -0
- package/src/viewer/Graph.tsx +159 -0
- package/css/styles.css +0 -56
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -35
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -11
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
- package/dist/cjs/_virtual/elk-worker.js +0 -8
- package/dist/cjs/components/ContextMenu.js +0 -133
- package/dist/cjs/components/Provider.js +0 -103
- package/dist/cjs/components/Tools.js +0 -205
- package/dist/cjs/components/Viewer.js +0 -59
- package/dist/cjs/components/context.js +0 -34
- package/dist/cjs/constants/index.js +0 -16
- package/dist/cjs/hooks/sigmaDragSelect.js +0 -169
- package/dist/cjs/hooks/sigmaHilighter.js +0 -83
- package/dist/cjs/hooks/sigmaMouseActions.js +0 -145
- package/dist/cjs/hooks/useGraphology.js +0 -41
- package/dist/cjs/hooks/useSigma.js +0 -112
- package/dist/cjs/programs/arrow-head/frag.glsl.js +0 -8
- package/dist/cjs/programs/arrow-head/index.js +0 -142
- package/dist/cjs/programs/arrow-head/vert.glsl.js +0 -8
- package/dist/cjs/programs/edge-curve/drawLabel.js +0 -136
- package/dist/cjs/programs/edge-curve/frag.glsl.js +0 -8
- package/dist/cjs/programs/edge-curve/index.js +0 -157
- package/dist/cjs/programs/edge-curve/vert.glsl.js +0 -8
- package/dist/cjs/programs/edge-line/drawLabel.js +0 -70
- package/dist/cjs/programs/edge-line/frag.glsl.js +0 -8
- package/dist/cjs/programs/edge-line/index.js +0 -166
- package/dist/cjs/programs/edge-line/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-badge/factory.js +0 -250
- package/dist/cjs/programs/node-badge/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-badge/index.js +0 -33
- package/dist/cjs/programs/node-badge/texture.js +0 -455
- package/dist/cjs/programs/node-badge/vert.glsl.js +0 -19
- package/dist/cjs/programs/node-circle/base/drawHover.js +0 -71
- package/dist/cjs/programs/node-circle/base/drawLabel.js +0 -113
- package/dist/cjs/programs/node-circle/base/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-circle/base/index.js +0 -136
- package/dist/cjs/programs/node-circle/base/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-circle/index.js +0 -15
- package/dist/cjs/programs/node-image/factory.js +0 -224
- package/dist/cjs/programs/node-image/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-image/index.js +0 -14
- package/dist/cjs/programs/node-image/texture.js +0 -472
- package/dist/cjs/programs/node-image/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-rect/base/drawHover.js +0 -68
- package/dist/cjs/programs/node-rect/base/drawLabel.js +0 -107
- package/dist/cjs/programs/node-rect/base/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-rect/base/index.js +0 -135
- package/dist/cjs/programs/node-rect/base/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-rect/index.js +0 -15
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -34
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -13
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
- package/dist/esm/_virtual/elk-worker.js +0 -8
- package/dist/esm/components/ContextMenu.js +0 -133
- package/dist/esm/components/Provider.js +0 -103
- package/dist/esm/components/Tools.js +0 -205
- package/dist/esm/components/Viewer.js +0 -59
- package/dist/esm/components/context.js +0 -33
- package/dist/esm/constants/index.js +0 -16
- package/dist/esm/hooks/sigmaDragSelect.js +0 -169
- package/dist/esm/hooks/sigmaHilighter.js +0 -83
- package/dist/esm/hooks/sigmaMouseActions.js +0 -145
- package/dist/esm/hooks/useGraphology.js +0 -41
- package/dist/esm/hooks/useSigma.js +0 -112
- package/dist/esm/programs/arrow-head/frag.glsl.js +0 -8
- package/dist/esm/programs/arrow-head/index.js +0 -141
- package/dist/esm/programs/arrow-head/vert.glsl.js +0 -8
- package/dist/esm/programs/edge-curve/drawLabel.js +0 -136
- package/dist/esm/programs/edge-curve/frag.glsl.js +0 -8
- package/dist/esm/programs/edge-curve/index.js +0 -156
- package/dist/esm/programs/edge-curve/vert.glsl.js +0 -8
- package/dist/esm/programs/edge-line/drawLabel.js +0 -70
- package/dist/esm/programs/edge-line/frag.glsl.js +0 -8
- package/dist/esm/programs/edge-line/index.js +0 -166
- package/dist/esm/programs/edge-line/vert.glsl.js +0 -8
- package/dist/esm/programs/node-badge/factory.js +0 -250
- package/dist/esm/programs/node-badge/frag.glsl.js +0 -8
- package/dist/esm/programs/node-badge/index.js +0 -32
- package/dist/esm/programs/node-badge/texture.js +0 -445
- package/dist/esm/programs/node-badge/vert.glsl.js +0 -19
- package/dist/esm/programs/node-circle/base/drawHover.js +0 -71
- package/dist/esm/programs/node-circle/base/drawLabel.js +0 -113
- package/dist/esm/programs/node-circle/base/frag.glsl.js +0 -8
- package/dist/esm/programs/node-circle/base/index.js +0 -136
- package/dist/esm/programs/node-circle/base/vert.glsl.js +0 -8
- package/dist/esm/programs/node-circle/index.js +0 -15
- package/dist/esm/programs/node-image/factory.js +0 -224
- package/dist/esm/programs/node-image/frag.glsl.js +0 -8
- package/dist/esm/programs/node-image/index.js +0 -13
- package/dist/esm/programs/node-image/texture.js +0 -462
- package/dist/esm/programs/node-image/vert.glsl.js +0 -8
- package/dist/esm/programs/node-rect/base/drawHover.js +0 -68
- package/dist/esm/programs/node-rect/base/drawLabel.js +0 -107
- package/dist/esm/programs/node-rect/base/frag.glsl.js +0 -8
- package/dist/esm/programs/node-rect/base/index.js +0 -135
- package/dist/esm/programs/node-rect/base/vert.glsl.js +0 -8
- package/dist/esm/programs/node-rect/index.js +0 -15
- package/dist/types/components/ContextMenu.d.ts +0 -1
- package/dist/types/components/Provider.d.ts +0 -3
- package/dist/types/components/Tools.d.ts +0 -1
- package/dist/types/components/Viewer.d.ts +0 -2
- package/dist/types/components/context.d.ts +0 -17
- package/dist/types/constants/index.d.ts +0 -12
- package/dist/types/graph/layout.worker.d.ts +0 -1
- package/dist/types/hooks/sigmaDragSelect.d.ts +0 -8
- package/dist/types/hooks/sigmaHilighter.d.ts +0 -3
- package/dist/types/hooks/sigmaMouseActions.d.ts +0 -3
- package/dist/types/hooks/useGraphology.d.ts +0 -6
- package/dist/types/hooks/useSigma.d.ts +0 -8
- package/dist/types/i18n/index.d.ts +0 -0
- package/dist/types/programs/arrow-head/frag.glsl.d.ts +0 -2
- package/dist/types/programs/arrow-head/index.d.ts +0 -9
- package/dist/types/programs/arrow-head/vert.glsl.d.ts +0 -2
- package/dist/types/programs/edge-curve/drawLabel.d.ts +0 -6
- package/dist/types/programs/edge-curve/frag.glsl.d.ts +0 -2
- package/dist/types/programs/edge-curve/index.d.ts +0 -43
- package/dist/types/programs/edge-curve/vert.glsl.d.ts +0 -2
- package/dist/types/programs/edge-line/drawLabel.d.ts +0 -5
- package/dist/types/programs/edge-line/frag.glsl.d.ts +0 -2
- package/dist/types/programs/edge-line/index.d.ts +0 -11
- package/dist/types/programs/edge-line/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-badge/factory.d.ts +0 -27
- package/dist/types/programs/node-badge/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-badge/index.d.ts +0 -5
- package/dist/types/programs/node-badge/texture.d.ts +0 -102
- package/dist/types/programs/node-badge/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-circle/base/drawHover.d.ts +0 -8
- package/dist/types/programs/node-circle/base/drawLabel.d.ts +0 -8
- package/dist/types/programs/node-circle/base/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-circle/base/index.d.ts +0 -37
- package/dist/types/programs/node-circle/base/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-circle/index.d.ts +0 -11
- package/dist/types/programs/node-image/factory.d.ts +0 -25
- package/dist/types/programs/node-image/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-image/index.d.ts +0 -5
- package/dist/types/programs/node-image/texture.d.ts +0 -102
- package/dist/types/programs/node-image/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-rect/base/drawHover.d.ts +0 -8
- package/dist/types/programs/node-rect/base/drawLabel.d.ts +0 -8
- package/dist/types/programs/node-rect/base/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-rect/base/index.d.ts +0 -34
- package/dist/types/programs/node-rect/base/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-rect/index.d.ts +0 -11
- package/src/components/ContextMenu.tsx +0 -138
- package/src/components/Provider.tsx +0 -116
- package/src/components/Tools.tsx +0 -68
- package/src/components/Viewer.tsx +0 -75
- package/src/components/context.ts +0 -43
- package/src/constants/index.ts +0 -22
- package/src/graph/layout.worker.ts +0 -42
- package/src/hooks/sigmaDragSelect.ts +0 -219
- package/src/hooks/sigmaHilighter.ts +0 -107
- package/src/hooks/sigmaMouseActions.ts +0 -153
- package/src/hooks/useGraphology.ts +0 -31
- package/src/hooks/useSigma.ts +0 -118
- package/src/i18n/index.ts +0 -0
- package/src/programs/arrow-head/frag.glsl.ts +0 -18
- package/src/programs/arrow-head/index.ts +0 -156
- package/src/programs/arrow-head/vert.glsl.ts +0 -75
- package/src/programs/edge-curve/drawLabel.ts +0 -166
- package/src/programs/edge-curve/frag.glsl.ts +0 -86
- package/src/programs/edge-curve/index.ts +0 -156
- package/src/programs/edge-curve/vert.glsl.ts +0 -110
- package/src/programs/edge-line/drawLabel.ts +0 -113
- package/src/programs/edge-line/frag.glsl.ts +0 -34
- package/src/programs/edge-line/index.ts +0 -163
- package/src/programs/edge-line/vert.glsl.ts +0 -104
- package/src/programs/node-badge/factory.ts +0 -325
- package/src/programs/node-badge/frag.glsl.ts +0 -79
- package/src/programs/node-badge/index.ts +0 -35
- package/src/programs/node-badge/texture.ts +0 -425
- package/src/programs/node-badge/vert.glsl.ts +0 -99
- package/src/programs/node-circle/base/drawHover.ts +0 -80
- package/src/programs/node-circle/base/drawLabel.ts +0 -145
- package/src/programs/node-circle/base/frag.glsl.ts +0 -72
- package/src/programs/node-circle/base/index.ts +0 -100
- package/src/programs/node-circle/base/vert.glsl.ts +0 -83
- package/src/programs/node-circle/index.ts +0 -19
- package/src/programs/node-image/factory.ts +0 -299
- package/src/programs/node-image/frag.glsl.ts +0 -97
- package/src/programs/node-image/index.ts +0 -7
- package/src/programs/node-image/texture.ts +0 -435
- package/src/programs/node-image/vert.glsl.ts +0 -60
- package/src/programs/node-rect/base/drawHover.ts +0 -77
- package/src/programs/node-rect/base/drawLabel.ts +0 -149
- package/src/programs/node-rect/base/frag.glsl.ts +0 -67
- package/src/programs/node-rect/base/index.ts +0 -107
- package/src/programs/node-rect/base/vert.glsl.ts +0 -87
- package/src/programs/node-rect/index.ts +0 -19
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { type Settings } from "sigma/settings";
|
|
2
|
-
import {
|
|
3
|
-
type EdgeAttributes,
|
|
4
|
-
type InternalNodeAttributes,
|
|
5
|
-
type NodeAttributes,
|
|
6
|
-
} from "../../../types";
|
|
7
|
-
|
|
8
|
-
/* istanbul ignore file */
|
|
9
|
-
|
|
10
|
-
export function drawNodeLabel(
|
|
11
|
-
context: CanvasRenderingContext2D,
|
|
12
|
-
data: InternalNodeAttributes & {
|
|
13
|
-
opacity: number;
|
|
14
|
-
x: number;
|
|
15
|
-
y: number;
|
|
16
|
-
size: number;
|
|
17
|
-
},
|
|
18
|
-
settings: Settings<NodeAttributes, EdgeAttributes>,
|
|
19
|
-
): void {
|
|
20
|
-
const nodeSize = data.size;
|
|
21
|
-
const size = settings.labelSize;
|
|
22
|
-
const font = settings.labelFont;
|
|
23
|
-
const weight = settings.labelWeight;
|
|
24
|
-
// use node color or default node color
|
|
25
|
-
const bg = settings.defaultNodeColor || "#fff";
|
|
26
|
-
// use label color or default label color
|
|
27
|
-
const color = data.labelColor ?? settings.labelColor.color ?? "#000";
|
|
28
|
-
|
|
29
|
-
if (data.highlight) {
|
|
30
|
-
// Then we draw the label background
|
|
31
|
-
context.strokeStyle = data.highlightColor ?? "#44BD87";
|
|
32
|
-
context.lineWidth = 1;
|
|
33
|
-
context.shadowOffsetX = 0;
|
|
34
|
-
context.shadowOffsetY = 0;
|
|
35
|
-
context.shadowBlur = 48;
|
|
36
|
-
context.shadowColor = data.highlightColor ?? "#44BD87";
|
|
37
|
-
|
|
38
|
-
const PADDING = 2;
|
|
39
|
-
|
|
40
|
-
// if (typeof data.label === "string") {
|
|
41
|
-
// const textWidth = context.measureText(data.label).width;
|
|
42
|
-
// const boxWidth = Math.round(textWidth + 5);
|
|
43
|
-
// const boxHeight = Math.round(size + 2 * PADDING);
|
|
44
|
-
// const radius = Math.max(nodeSize, size / 2) + PADDING;
|
|
45
|
-
|
|
46
|
-
// const angleRadian = Math.asin(boxHeight / 2 / radius);
|
|
47
|
-
// const xDeltaCoord = Math.sqrt(
|
|
48
|
-
// Math.abs(Math.pow(radius, 2) - Math.pow(boxHeight / 2, 2)),
|
|
49
|
-
// );
|
|
50
|
-
|
|
51
|
-
// context.beginPath();
|
|
52
|
-
// context.moveTo(data.x + xDeltaCoord, data.y + boxHeight / 2);
|
|
53
|
-
// context.lineTo(data.x + radius + boxWidth, data.y + boxHeight / 2);
|
|
54
|
-
// context.lineTo(data.x + radius + boxWidth, data.y - boxHeight / 2);
|
|
55
|
-
// context.lineTo(data.x + xDeltaCoord, data.y - boxHeight / 2);
|
|
56
|
-
// context.arc(data.x, data.y, radius, angleRadian, -angleRadian);
|
|
57
|
-
// context.closePath();
|
|
58
|
-
// context.stroke();
|
|
59
|
-
// } else {
|
|
60
|
-
context.beginPath();
|
|
61
|
-
context.arc(data.x, data.y, nodeSize + PADDING, 0, Math.PI * 2);
|
|
62
|
-
context.closePath();
|
|
63
|
-
context.stroke();
|
|
64
|
-
// }
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
context.shadowColor = "transparent";
|
|
68
|
-
context.shadowBlur = 0;
|
|
69
|
-
|
|
70
|
-
if (data.selected) {
|
|
71
|
-
// Then we draw the label background
|
|
72
|
-
context.strokeStyle = "#f00";
|
|
73
|
-
context.lineWidth = 2;
|
|
74
|
-
context.shadowOffsetX = 0;
|
|
75
|
-
context.shadowOffsetY = 0;
|
|
76
|
-
context.shadowBlur = 0;
|
|
77
|
-
|
|
78
|
-
const PADDING = data.selected ? 4 : 2;
|
|
79
|
-
|
|
80
|
-
// if (typeof data.label === "string") {
|
|
81
|
-
// const textWidth = context.measureText(data.label).width;
|
|
82
|
-
// const boxWidth = Math.round(textWidth + 5);
|
|
83
|
-
// const boxHeight = Math.round(size + 2 * PADDING);
|
|
84
|
-
// const radius = Math.max(nodeSize, size / 2) + PADDING;
|
|
85
|
-
|
|
86
|
-
// const angleRadian = Math.asin(boxHeight / 2 / radius);
|
|
87
|
-
// const xDeltaCoord = Math.sqrt(
|
|
88
|
-
// Math.abs(Math.pow(radius, 2) - Math.pow(boxHeight / 2, 2)),
|
|
89
|
-
// );
|
|
90
|
-
|
|
91
|
-
// context.beginPath();
|
|
92
|
-
// context.moveTo(data.x + xDeltaCoord, data.y + boxHeight / 2);
|
|
93
|
-
// context.lineTo(data.x + radius + boxWidth, data.y + boxHeight / 2);
|
|
94
|
-
// context.lineTo(data.x + radius + boxWidth, data.y - boxHeight / 2);
|
|
95
|
-
// context.lineTo(data.x + xDeltaCoord, data.y - boxHeight / 2);
|
|
96
|
-
// context.arc(data.x, data.y, radius, angleRadian, -angleRadian);
|
|
97
|
-
// context.closePath();
|
|
98
|
-
// context.stroke();
|
|
99
|
-
// } else {
|
|
100
|
-
context.beginPath();
|
|
101
|
-
context.arc(data.x, data.y, nodeSize + PADDING, 0, Math.PI * 2);
|
|
102
|
-
context.closePath();
|
|
103
|
-
context.stroke();
|
|
104
|
-
// }
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (data.isGroup) {
|
|
108
|
-
const container =
|
|
109
|
-
context.canvas.parentElement?.parentElement?.querySelector(
|
|
110
|
-
".sigma-groupHandles",
|
|
111
|
-
) as unknown as HTMLElement;
|
|
112
|
-
let handle = container.querySelector(
|
|
113
|
-
`[data-id="${data.id}"]`,
|
|
114
|
-
) as unknown as HTMLElement;
|
|
115
|
-
if (!handle) {
|
|
116
|
-
handle = document.createElement("div");
|
|
117
|
-
handle.className = "sigma-groupHandle";
|
|
118
|
-
handle.dataset.id = data.id;
|
|
119
|
-
container.appendChild(handle);
|
|
120
|
-
}
|
|
121
|
-
handle.innerText = data.expanded ? "−" : "+";
|
|
122
|
-
handle.style.transform = `translate(-50%, -50%)`;
|
|
123
|
-
handle.style.left = `${data.x}px`;
|
|
124
|
-
handle.style.top = `${data.y + nodeSize}px`;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (!data.label || data.opacity < 1) return;
|
|
128
|
-
const textWidth = context.measureText(data.label).width;
|
|
129
|
-
|
|
130
|
-
context.fillStyle = bg;
|
|
131
|
-
context.fillRect(
|
|
132
|
-
data.x - textWidth / 2,
|
|
133
|
-
data.y + nodeSize * 1.25,
|
|
134
|
-
textWidth,
|
|
135
|
-
size + 2,
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
context.fillStyle = color;
|
|
139
|
-
context.font = `${weight} ${size}px ${font}`;
|
|
140
|
-
context.fillText(
|
|
141
|
-
data.label,
|
|
142
|
-
data.x - textWidth / 2,
|
|
143
|
-
data.y + size + nodeSize * 1.25,
|
|
144
|
-
);
|
|
145
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/* istanbul ignore file */
|
|
2
|
-
|
|
3
|
-
// language=GLSL
|
|
4
|
-
const SHADER_SOURCE = /* glsl */ `
|
|
5
|
-
precision highp float;
|
|
6
|
-
|
|
7
|
-
varying vec4 v_color;
|
|
8
|
-
varying vec4 v_stroke;
|
|
9
|
-
varying vec2 v_diffVector;
|
|
10
|
-
varying float v_radius;
|
|
11
|
-
varying float v_border;
|
|
12
|
-
varying float v_segmentAngle;
|
|
13
|
-
varying vec4 v_colors_0;
|
|
14
|
-
varying vec4 v_colors_1;
|
|
15
|
-
varying vec4 v_colors_2;
|
|
16
|
-
varying vec4 v_colors_3;
|
|
17
|
-
varying vec4 v_colors_4;
|
|
18
|
-
varying vec4 v_colors_5;
|
|
19
|
-
varying vec4 v_colors_6;
|
|
20
|
-
|
|
21
|
-
uniform float u_sizeRatio;
|
|
22
|
-
uniform float u_correctionRatio;
|
|
23
|
-
|
|
24
|
-
const vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);
|
|
25
|
-
|
|
26
|
-
void main(void) {
|
|
27
|
-
float border = u_correctionRatio * 2.0;
|
|
28
|
-
float dist = length(v_diffVector) - v_radius + border;
|
|
29
|
-
|
|
30
|
-
float angle = atan(v_diffVector.y / v_diffVector.x);
|
|
31
|
-
if (v_diffVector.x < 0.0 && v_diffVector.y < 0.0) angle += ${Math.PI};
|
|
32
|
-
else if (v_diffVector.x < 0.0) angle += ${Math.PI};
|
|
33
|
-
else if (v_diffVector.y < 0.0) angle += ${2 * Math.PI};
|
|
34
|
-
|
|
35
|
-
// No antialiasing for picking mode:
|
|
36
|
-
#ifdef PICKING_MODE
|
|
37
|
-
if (dist > border)
|
|
38
|
-
gl_FragColor = transparent;
|
|
39
|
-
else
|
|
40
|
-
gl_FragColor = v_color;
|
|
41
|
-
#else
|
|
42
|
-
float t = 0.0;
|
|
43
|
-
vec4 color = v_color;
|
|
44
|
-
vec4 piecolor = vec4(0.0);
|
|
45
|
-
float pieSize = 4.0 * u_correctionRatio / u_sizeRatio * 4.0;
|
|
46
|
-
if(v_segmentAngle > 0.0) {
|
|
47
|
-
float segment = angle / v_segmentAngle;
|
|
48
|
-
if(segment >= 0.0) { piecolor = v_colors_0; }
|
|
49
|
-
if(segment >= 1.0) { piecolor = v_colors_1; }
|
|
50
|
-
if(segment >= 2.0) { piecolor = v_colors_2; }
|
|
51
|
-
if(segment >= 3.0) { piecolor = v_colors_3; }
|
|
52
|
-
if(segment >= 4.0) { piecolor = v_colors_4; }
|
|
53
|
-
if(segment >= 5.0) { piecolor = v_colors_5; }
|
|
54
|
-
if(segment >= 6.0) { piecolor = v_colors_6; }
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (dist > (v_radius - v_border) / 2.0) {
|
|
58
|
-
color = v_stroke;
|
|
59
|
-
}
|
|
60
|
-
else if (v_segmentAngle > 0.0 && dist > (v_radius - (v_border + pieSize)) / 2.0) {
|
|
61
|
-
color = piecolor;
|
|
62
|
-
}
|
|
63
|
-
if (dist > 0.0) {
|
|
64
|
-
t = dist / border;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
gl_FragColor = mix(color, transparent, t);
|
|
68
|
-
#endif
|
|
69
|
-
}
|
|
70
|
-
`;
|
|
71
|
-
|
|
72
|
-
export default SHADER_SOURCE;
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { NodeProgram, type ProgramInfo } from "sigma/rendering";
|
|
2
|
-
import { type NodeDisplayData, type RenderParams } from "sigma/types";
|
|
3
|
-
import { floatColor } from "sigma/utils";
|
|
4
|
-
|
|
5
|
-
import { type EdgeAttributes, type NodeAttributes } from "../../../types";
|
|
6
|
-
import FRAGMENT_SHADER_SOURCE from "./frag.glsl";
|
|
7
|
-
import VERTEX_SHADER_SOURCE from "./vert.glsl";
|
|
8
|
-
|
|
9
|
-
/* istanbul ignore file */
|
|
10
|
-
|
|
11
|
-
const { UNSIGNED_BYTE, FLOAT } = WebGLRenderingContext;
|
|
12
|
-
|
|
13
|
-
const UNIFORMS = ["u_sizeRatio", "u_correctionRatio", "u_matrix"] as const;
|
|
14
|
-
|
|
15
|
-
export class NodeCircleBase extends NodeProgram<
|
|
16
|
-
(typeof UNIFORMS)[number],
|
|
17
|
-
NodeAttributes,
|
|
18
|
-
EdgeAttributes
|
|
19
|
-
> {
|
|
20
|
-
static readonly ANGLE_1 = 0;
|
|
21
|
-
static readonly ANGLE_2 = (2 * Math.PI) / 3;
|
|
22
|
-
static readonly ANGLE_3 = (4 * Math.PI) / 3;
|
|
23
|
-
|
|
24
|
-
getDefinition() {
|
|
25
|
-
return {
|
|
26
|
-
VERTICES: 3,
|
|
27
|
-
VERTEX_SHADER_SOURCE,
|
|
28
|
-
FRAGMENT_SHADER_SOURCE,
|
|
29
|
-
METHOD: WebGLRenderingContext.TRIANGLES,
|
|
30
|
-
UNIFORMS,
|
|
31
|
-
ATTRIBUTES: [
|
|
32
|
-
{ name: "a_position", size: 2, type: FLOAT },
|
|
33
|
-
{ name: "a_size", size: 1, type: FLOAT },
|
|
34
|
-
{ name: "a_border", size: 1, type: FLOAT },
|
|
35
|
-
{ name: "a_opacity", size: 1, type: FLOAT },
|
|
36
|
-
{ name: "a_base", size: 4, type: UNSIGNED_BYTE, normalized: true },
|
|
37
|
-
{ name: "a_color", size: 4, type: UNSIGNED_BYTE, normalized: true },
|
|
38
|
-
{ name: "a_stroke", size: 4, type: UNSIGNED_BYTE, normalized: true },
|
|
39
|
-
{ name: "a_segments", size: 1, type: FLOAT },
|
|
40
|
-
...Array(7)
|
|
41
|
-
.fill(0)
|
|
42
|
-
.map((_, idx) => ({
|
|
43
|
-
name: "a_colors_" + idx,
|
|
44
|
-
size: 4,
|
|
45
|
-
type: UNSIGNED_BYTE,
|
|
46
|
-
normalized: true,
|
|
47
|
-
})),
|
|
48
|
-
{ name: "a_id", size: 4, type: UNSIGNED_BYTE, normalized: true },
|
|
49
|
-
],
|
|
50
|
-
CONSTANT_ATTRIBUTES: [{ name: "a_angle", size: 1, type: FLOAT }],
|
|
51
|
-
CONSTANT_DATA: [
|
|
52
|
-
[NodeCircleBase.ANGLE_1],
|
|
53
|
-
[NodeCircleBase.ANGLE_2],
|
|
54
|
-
[NodeCircleBase.ANGLE_3],
|
|
55
|
-
],
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
processVisibleItem(
|
|
60
|
-
nodeIndex: number,
|
|
61
|
-
startIndex: number,
|
|
62
|
-
data: NodeDisplayData & NodeAttributes & { opacity: number },
|
|
63
|
-
) {
|
|
64
|
-
const array = this.array;
|
|
65
|
-
const base = floatColor(this.renderer.getSetting("defaultNodeColor"));
|
|
66
|
-
const color = floatColor(
|
|
67
|
-
data.color ?? this.renderer.getSetting("defaultNodeColor"),
|
|
68
|
-
);
|
|
69
|
-
const stroke = floatColor(
|
|
70
|
-
data.borderColor ?? this.renderer.getSetting("defaultEdgeColor"),
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
array[startIndex++] = data.x;
|
|
74
|
-
array[startIndex++] = data.y;
|
|
75
|
-
array[startIndex++] = data.size;
|
|
76
|
-
array[startIndex++] = Math.min(data.border ?? 0, 4);
|
|
77
|
-
array[startIndex++] = data.opacity ?? 1;
|
|
78
|
-
array[startIndex++] = base;
|
|
79
|
-
array[startIndex++] = color;
|
|
80
|
-
array[startIndex++] = stroke;
|
|
81
|
-
array[startIndex++] = Math.min(7, data.pie?.length ?? 0);
|
|
82
|
-
Array(7)
|
|
83
|
-
.fill(0)
|
|
84
|
-
.forEach((_, idx) => {
|
|
85
|
-
array[startIndex++] = floatColor(data.pie?.[idx] ?? "#0000");
|
|
86
|
-
});
|
|
87
|
-
array[startIndex++] = nodeIndex;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
setUniforms(
|
|
91
|
-
params: RenderParams,
|
|
92
|
-
{ gl, uniformLocations }: ProgramInfo,
|
|
93
|
-
): void {
|
|
94
|
-
const { u_sizeRatio, u_correctionRatio, u_matrix } = uniformLocations;
|
|
95
|
-
|
|
96
|
-
gl.uniform1f(u_correctionRatio, params.correctionRatio);
|
|
97
|
-
gl.uniform1f(u_sizeRatio, params.sizeRatio);
|
|
98
|
-
gl.uniformMatrix3fv(u_matrix, false, params.matrix);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/* istanbul ignore file */
|
|
2
|
-
|
|
3
|
-
// language=GLSL
|
|
4
|
-
const SHADER_SOURCE = /* glsl */ `
|
|
5
|
-
attribute vec4 a_id;
|
|
6
|
-
attribute vec4 a_base;
|
|
7
|
-
attribute vec4 a_color;
|
|
8
|
-
attribute vec4 a_stroke;
|
|
9
|
-
attribute vec2 a_position;
|
|
10
|
-
attribute float a_size;
|
|
11
|
-
attribute float a_border;
|
|
12
|
-
attribute float a_angle;
|
|
13
|
-
attribute float a_opacity;
|
|
14
|
-
attribute float a_segments;
|
|
15
|
-
attribute vec4 a_colors_0;
|
|
16
|
-
attribute vec4 a_colors_1;
|
|
17
|
-
attribute vec4 a_colors_2;
|
|
18
|
-
attribute vec4 a_colors_3;
|
|
19
|
-
attribute vec4 a_colors_4;
|
|
20
|
-
attribute vec4 a_colors_5;
|
|
21
|
-
attribute vec4 a_colors_6;
|
|
22
|
-
|
|
23
|
-
uniform mat3 u_matrix;
|
|
24
|
-
uniform float u_sizeRatio;
|
|
25
|
-
uniform float u_correctionRatio;
|
|
26
|
-
|
|
27
|
-
varying vec4 v_color;
|
|
28
|
-
varying vec4 v_stroke;
|
|
29
|
-
varying vec2 v_diffVector;
|
|
30
|
-
varying float v_radius;
|
|
31
|
-
varying float v_border;
|
|
32
|
-
varying float v_segmentAngle;
|
|
33
|
-
varying vec4 v_colors_0;
|
|
34
|
-
varying vec4 v_colors_1;
|
|
35
|
-
varying vec4 v_colors_2;
|
|
36
|
-
varying vec4 v_colors_3;
|
|
37
|
-
varying vec4 v_colors_4;
|
|
38
|
-
varying vec4 v_colors_5;
|
|
39
|
-
varying vec4 v_colors_6;
|
|
40
|
-
|
|
41
|
-
const float bias = 255.0 / 254.0;
|
|
42
|
-
|
|
43
|
-
void main() {
|
|
44
|
-
float size = a_size * u_correctionRatio / u_sizeRatio * 4.0;
|
|
45
|
-
vec2 diffVector = size * vec2(cos(a_angle), sin(a_angle));
|
|
46
|
-
vec2 position = a_position + diffVector;
|
|
47
|
-
gl_Position = vec4(
|
|
48
|
-
(u_matrix * vec3(position, 1)).xy,
|
|
49
|
-
0,
|
|
50
|
-
1
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
v_diffVector = diffVector;
|
|
54
|
-
v_radius = size / 2.0;
|
|
55
|
-
v_border = (a_border + 8.0) * u_correctionRatio / u_sizeRatio * 4.0;
|
|
56
|
-
|
|
57
|
-
#ifdef PICKING_MODE
|
|
58
|
-
// For picking mode, we use the ID as the color:
|
|
59
|
-
v_color = a_id;
|
|
60
|
-
#else
|
|
61
|
-
// For normal mode, we use the color:
|
|
62
|
-
v_color = mix(a_base, a_color, a_opacity * bias);
|
|
63
|
-
v_stroke = mix(a_base, a_stroke, a_opacity * bias);
|
|
64
|
-
|
|
65
|
-
// pie colors
|
|
66
|
-
v_segmentAngle = 0.0;
|
|
67
|
-
if(a_segments > 0.0) {
|
|
68
|
-
v_segmentAngle = ${Math.PI * 2} / a_segments;
|
|
69
|
-
v_colors_0 = mix(a_base, a_colors_0, a_opacity * bias);
|
|
70
|
-
v_colors_1 = mix(a_base, a_colors_1, a_opacity * bias);
|
|
71
|
-
v_colors_2 = mix(a_base, a_colors_2, a_opacity * bias);
|
|
72
|
-
v_colors_3 = mix(a_base, a_colors_3, a_opacity * bias);
|
|
73
|
-
v_colors_4 = mix(a_base, a_colors_4, a_opacity * bias);
|
|
74
|
-
v_colors_5 = mix(a_base, a_colors_5, a_opacity * bias);
|
|
75
|
-
v_colors_6 = mix(a_base, a_colors_6, a_opacity * bias);
|
|
76
|
-
}
|
|
77
|
-
#endif
|
|
78
|
-
|
|
79
|
-
v_color.a *= bias;
|
|
80
|
-
}
|
|
81
|
-
`;
|
|
82
|
-
|
|
83
|
-
export default SHADER_SOURCE;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { createNodeCompoundProgram } from "sigma/rendering";
|
|
2
|
-
import { type NodeAttributes } from "../../types";
|
|
3
|
-
import { NodeBadgeProgram } from "../node-badge";
|
|
4
|
-
import { NodeImageProgram } from "../node-image";
|
|
5
|
-
import { NodeCircleBase } from "./base";
|
|
6
|
-
import { drawNodeHover } from "./base/drawHover";
|
|
7
|
-
import { drawNodeLabel } from "./base/drawLabel";
|
|
8
|
-
|
|
9
|
-
/* istanbul ignore file */
|
|
10
|
-
|
|
11
|
-
export const NodeCircleProgram = createNodeCompoundProgram<NodeAttributes<any>>(
|
|
12
|
-
[
|
|
13
|
-
NodeCircleBase,
|
|
14
|
-
NodeImageProgram(true),
|
|
15
|
-
...NodeBadgeProgram(true),
|
|
16
|
-
] as AnyObject,
|
|
17
|
-
drawNodeLabel as AnyObject,
|
|
18
|
-
drawNodeHover as AnyObject,
|
|
19
|
-
);
|