@react-fabric/graph 1.0.0-beta.62 → 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.
Files changed (220) hide show
  1. package/dist/cjs/context/context.js +16 -0
  2. package/dist/cjs/graph/index.js +62 -385
  3. package/dist/cjs/index.js +25 -21
  4. package/dist/cjs/utils/edge.js +76 -0
  5. package/dist/cjs/utils/node.js +93 -0
  6. package/dist/cjs/utils/sdfFolder.js +107 -0
  7. package/dist/cjs/viewer/Graph.js +174 -0
  8. package/dist/esm/context/context.js +15 -0
  9. package/dist/esm/graph/index.js +63 -386
  10. package/dist/esm/index.js +24 -20
  11. package/dist/esm/utils/edge.js +75 -0
  12. package/dist/esm/utils/node.js +92 -0
  13. package/dist/esm/utils/sdfFolder.js +107 -0
  14. package/dist/esm/viewer/Graph.js +174 -0
  15. package/dist/types/context/context.d.ts +35 -0
  16. package/dist/types/graph/index.d.ts +47 -24
  17. package/dist/types/index.d.ts +28 -2
  18. package/dist/types/types/index.d.ts +124 -175
  19. package/dist/types/utils/edge.d.ts +28 -0
  20. package/dist/types/utils/node.d.ts +28 -0
  21. package/dist/types/utils/sdfFolder.d.ts +75 -0
  22. package/dist/types/viewer/Graph.d.ts +31 -0
  23. package/package.json +19 -25
  24. package/src/context/context.tsx +43 -0
  25. package/src/graph/index.ts +76 -399
  26. package/src/index.ts +24 -26
  27. package/src/types/index.ts +139 -185
  28. package/src/utils/edge.ts +65 -0
  29. package/src/utils/node.ts +105 -0
  30. package/src/utils/sdfFolder.ts +141 -0
  31. package/src/viewer/Graph.tsx +159 -0
  32. package/css/styles.css +0 -56
  33. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
  34. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
  35. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -35
  36. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -11
  37. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
  38. package/dist/cjs/_virtual/elk-worker.js +0 -8
  39. package/dist/cjs/components/Context.js +0 -107
  40. package/dist/cjs/components/ContextMenu.js +0 -133
  41. package/dist/cjs/components/Tools.js +0 -205
  42. package/dist/cjs/components/Viewer.js +0 -58
  43. package/dist/cjs/constants/index.js +0 -16
  44. package/dist/cjs/hooks/sigmaDragSelect.js +0 -169
  45. package/dist/cjs/hooks/sigmaHilighter.js +0 -83
  46. package/dist/cjs/hooks/sigmaMouseActions.js +0 -145
  47. package/dist/cjs/hooks/useGraphology.js +0 -41
  48. package/dist/cjs/hooks/useSigma.js +0 -112
  49. package/dist/cjs/programs/arrow-head/frag.glsl.js +0 -8
  50. package/dist/cjs/programs/arrow-head/index.js +0 -142
  51. package/dist/cjs/programs/arrow-head/vert.glsl.js +0 -8
  52. package/dist/cjs/programs/edge-curve/drawLabel.js +0 -136
  53. package/dist/cjs/programs/edge-curve/frag.glsl.js +0 -8
  54. package/dist/cjs/programs/edge-curve/index.js +0 -157
  55. package/dist/cjs/programs/edge-curve/vert.glsl.js +0 -8
  56. package/dist/cjs/programs/edge-line/drawLabel.js +0 -70
  57. package/dist/cjs/programs/edge-line/frag.glsl.js +0 -8
  58. package/dist/cjs/programs/edge-line/index.js +0 -166
  59. package/dist/cjs/programs/edge-line/vert.glsl.js +0 -8
  60. package/dist/cjs/programs/node-badge/factory.js +0 -249
  61. package/dist/cjs/programs/node-badge/frag.glsl.js +0 -8
  62. package/dist/cjs/programs/node-badge/index.js +0 -33
  63. package/dist/cjs/programs/node-badge/texture.js +0 -455
  64. package/dist/cjs/programs/node-badge/vert.glsl.js +0 -19
  65. package/dist/cjs/programs/node-circle/base/drawHover.js +0 -71
  66. package/dist/cjs/programs/node-circle/base/drawLabel.js +0 -113
  67. package/dist/cjs/programs/node-circle/base/frag.glsl.js +0 -8
  68. package/dist/cjs/programs/node-circle/base/index.js +0 -136
  69. package/dist/cjs/programs/node-circle/base/vert.glsl.js +0 -8
  70. package/dist/cjs/programs/node-circle/index.js +0 -15
  71. package/dist/cjs/programs/node-image/factory.js +0 -223
  72. package/dist/cjs/programs/node-image/frag.glsl.js +0 -8
  73. package/dist/cjs/programs/node-image/index.js +0 -14
  74. package/dist/cjs/programs/node-image/texture.js +0 -472
  75. package/dist/cjs/programs/node-image/vert.glsl.js +0 -8
  76. package/dist/cjs/programs/node-rect/base/drawHover.js +0 -68
  77. package/dist/cjs/programs/node-rect/base/drawLabel.js +0 -107
  78. package/dist/cjs/programs/node-rect/base/frag.glsl.js +0 -8
  79. package/dist/cjs/programs/node-rect/base/index.js +0 -135
  80. package/dist/cjs/programs/node-rect/base/vert.glsl.js +0 -8
  81. package/dist/cjs/programs/node-rect/index.js +0 -15
  82. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
  83. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
  84. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -34
  85. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -13
  86. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
  87. package/dist/esm/_virtual/elk-worker.js +0 -8
  88. package/dist/esm/components/Context.js +0 -106
  89. package/dist/esm/components/ContextMenu.js +0 -133
  90. package/dist/esm/components/Tools.js +0 -205
  91. package/dist/esm/components/Viewer.js +0 -58
  92. package/dist/esm/constants/index.js +0 -16
  93. package/dist/esm/hooks/sigmaDragSelect.js +0 -169
  94. package/dist/esm/hooks/sigmaHilighter.js +0 -83
  95. package/dist/esm/hooks/sigmaMouseActions.js +0 -145
  96. package/dist/esm/hooks/useGraphology.js +0 -41
  97. package/dist/esm/hooks/useSigma.js +0 -112
  98. package/dist/esm/programs/arrow-head/frag.glsl.js +0 -8
  99. package/dist/esm/programs/arrow-head/index.js +0 -141
  100. package/dist/esm/programs/arrow-head/vert.glsl.js +0 -8
  101. package/dist/esm/programs/edge-curve/drawLabel.js +0 -136
  102. package/dist/esm/programs/edge-curve/frag.glsl.js +0 -8
  103. package/dist/esm/programs/edge-curve/index.js +0 -156
  104. package/dist/esm/programs/edge-curve/vert.glsl.js +0 -8
  105. package/dist/esm/programs/edge-line/drawLabel.js +0 -70
  106. package/dist/esm/programs/edge-line/frag.glsl.js +0 -8
  107. package/dist/esm/programs/edge-line/index.js +0 -166
  108. package/dist/esm/programs/edge-line/vert.glsl.js +0 -8
  109. package/dist/esm/programs/node-badge/factory.js +0 -249
  110. package/dist/esm/programs/node-badge/frag.glsl.js +0 -8
  111. package/dist/esm/programs/node-badge/index.js +0 -32
  112. package/dist/esm/programs/node-badge/texture.js +0 -445
  113. package/dist/esm/programs/node-badge/vert.glsl.js +0 -19
  114. package/dist/esm/programs/node-circle/base/drawHover.js +0 -71
  115. package/dist/esm/programs/node-circle/base/drawLabel.js +0 -113
  116. package/dist/esm/programs/node-circle/base/frag.glsl.js +0 -8
  117. package/dist/esm/programs/node-circle/base/index.js +0 -136
  118. package/dist/esm/programs/node-circle/base/vert.glsl.js +0 -8
  119. package/dist/esm/programs/node-circle/index.js +0 -15
  120. package/dist/esm/programs/node-image/factory.js +0 -223
  121. package/dist/esm/programs/node-image/frag.glsl.js +0 -8
  122. package/dist/esm/programs/node-image/index.js +0 -13
  123. package/dist/esm/programs/node-image/texture.js +0 -462
  124. package/dist/esm/programs/node-image/vert.glsl.js +0 -8
  125. package/dist/esm/programs/node-rect/base/drawHover.js +0 -68
  126. package/dist/esm/programs/node-rect/base/drawLabel.js +0 -107
  127. package/dist/esm/programs/node-rect/base/frag.glsl.js +0 -8
  128. package/dist/esm/programs/node-rect/base/index.js +0 -135
  129. package/dist/esm/programs/node-rect/base/vert.glsl.js +0 -8
  130. package/dist/esm/programs/node-rect/index.js +0 -15
  131. package/dist/types/components/Context.d.ts +0 -18
  132. package/dist/types/components/ContextMenu.d.ts +0 -1
  133. package/dist/types/components/Tools.d.ts +0 -1
  134. package/dist/types/components/Viewer.d.ts +0 -2
  135. package/dist/types/constants/index.d.ts +0 -12
  136. package/dist/types/graph/layout.worker.d.ts +0 -1
  137. package/dist/types/hooks/sigmaDragSelect.d.ts +0 -8
  138. package/dist/types/hooks/sigmaHilighter.d.ts +0 -3
  139. package/dist/types/hooks/sigmaMouseActions.d.ts +0 -3
  140. package/dist/types/hooks/useGraphology.d.ts +0 -6
  141. package/dist/types/hooks/useSigma.d.ts +0 -8
  142. package/dist/types/i18n/index.d.ts +0 -0
  143. package/dist/types/programs/arrow-head/frag.glsl.d.ts +0 -2
  144. package/dist/types/programs/arrow-head/index.d.ts +0 -9
  145. package/dist/types/programs/arrow-head/vert.glsl.d.ts +0 -2
  146. package/dist/types/programs/edge-curve/drawLabel.d.ts +0 -6
  147. package/dist/types/programs/edge-curve/frag.glsl.d.ts +0 -2
  148. package/dist/types/programs/edge-curve/index.d.ts +0 -43
  149. package/dist/types/programs/edge-curve/vert.glsl.d.ts +0 -2
  150. package/dist/types/programs/edge-line/drawLabel.d.ts +0 -5
  151. package/dist/types/programs/edge-line/frag.glsl.d.ts +0 -2
  152. package/dist/types/programs/edge-line/index.d.ts +0 -11
  153. package/dist/types/programs/edge-line/vert.glsl.d.ts +0 -2
  154. package/dist/types/programs/node-badge/factory.d.ts +0 -27
  155. package/dist/types/programs/node-badge/frag.glsl.d.ts +0 -2
  156. package/dist/types/programs/node-badge/index.d.ts +0 -5
  157. package/dist/types/programs/node-badge/texture.d.ts +0 -102
  158. package/dist/types/programs/node-badge/vert.glsl.d.ts +0 -2
  159. package/dist/types/programs/node-circle/base/drawHover.d.ts +0 -8
  160. package/dist/types/programs/node-circle/base/drawLabel.d.ts +0 -8
  161. package/dist/types/programs/node-circle/base/frag.glsl.d.ts +0 -2
  162. package/dist/types/programs/node-circle/base/index.d.ts +0 -37
  163. package/dist/types/programs/node-circle/base/vert.glsl.d.ts +0 -2
  164. package/dist/types/programs/node-circle/index.d.ts +0 -11
  165. package/dist/types/programs/node-image/factory.d.ts +0 -25
  166. package/dist/types/programs/node-image/frag.glsl.d.ts +0 -2
  167. package/dist/types/programs/node-image/index.d.ts +0 -5
  168. package/dist/types/programs/node-image/texture.d.ts +0 -102
  169. package/dist/types/programs/node-image/vert.glsl.d.ts +0 -2
  170. package/dist/types/programs/node-rect/base/drawHover.d.ts +0 -8
  171. package/dist/types/programs/node-rect/base/drawLabel.d.ts +0 -8
  172. package/dist/types/programs/node-rect/base/frag.glsl.d.ts +0 -2
  173. package/dist/types/programs/node-rect/base/index.d.ts +0 -34
  174. package/dist/types/programs/node-rect/base/vert.glsl.d.ts +0 -2
  175. package/dist/types/programs/node-rect/index.d.ts +0 -11
  176. package/src/components/Context.tsx +0 -143
  177. package/src/components/ContextMenu.tsx +0 -174
  178. package/src/components/Tools.tsx +0 -106
  179. package/src/components/Viewer.tsx +0 -76
  180. package/src/constants/index.ts +0 -22
  181. package/src/graph/layout.worker.ts +0 -42
  182. package/src/hooks/sigmaDragSelect.ts +0 -219
  183. package/src/hooks/sigmaHilighter.ts +0 -107
  184. package/src/hooks/sigmaMouseActions.ts +0 -153
  185. package/src/hooks/useGraphology.ts +0 -31
  186. package/src/hooks/useSigma.ts +0 -118
  187. package/src/i18n/index.ts +0 -0
  188. package/src/programs/arrow-head/frag.glsl.ts +0 -18
  189. package/src/programs/arrow-head/index.ts +0 -157
  190. package/src/programs/arrow-head/vert.glsl.ts +0 -75
  191. package/src/programs/edge-curve/drawLabel.ts +0 -166
  192. package/src/programs/edge-curve/frag.glsl.ts +0 -86
  193. package/src/programs/edge-curve/index.ts +0 -158
  194. package/src/programs/edge-curve/vert.glsl.ts +0 -110
  195. package/src/programs/edge-line/drawLabel.ts +0 -113
  196. package/src/programs/edge-line/frag.glsl.ts +0 -34
  197. package/src/programs/edge-line/index.ts +0 -165
  198. package/src/programs/edge-line/vert.glsl.ts +0 -104
  199. package/src/programs/node-badge/factory.ts +0 -327
  200. package/src/programs/node-badge/frag.glsl.ts +0 -79
  201. package/src/programs/node-badge/index.ts +0 -35
  202. package/src/programs/node-badge/texture.ts +0 -425
  203. package/src/programs/node-badge/vert.glsl.ts +0 -99
  204. package/src/programs/node-circle/base/drawHover.ts +0 -80
  205. package/src/programs/node-circle/base/drawLabel.ts +0 -145
  206. package/src/programs/node-circle/base/frag.glsl.ts +0 -72
  207. package/src/programs/node-circle/base/index.ts +0 -102
  208. package/src/programs/node-circle/base/vert.glsl.ts +0 -83
  209. package/src/programs/node-circle/index.ts +0 -19
  210. package/src/programs/node-image/factory.ts +0 -301
  211. package/src/programs/node-image/frag.glsl.ts +0 -97
  212. package/src/programs/node-image/index.ts +0 -7
  213. package/src/programs/node-image/texture.ts +0 -435
  214. package/src/programs/node-image/vert.glsl.ts +0 -60
  215. package/src/programs/node-rect/base/drawHover.ts +0 -77
  216. package/src/programs/node-rect/base/drawLabel.ts +0 -149
  217. package/src/programs/node-rect/base/frag.glsl.ts +0 -67
  218. package/src/programs/node-rect/base/index.ts +0 -109
  219. package/src/programs/node-rect/base/vert.glsl.ts +0 -87
  220. package/src/programs/node-rect/index.ts +0 -19
@@ -1,158 +0,0 @@
1
- /* eslint-disable @typescript-eslint/naming-convention */
2
-
3
- import { DEFAULT_EDGE_CURVATURE } from "@sigma/edge-curve";
4
- import { type Attributes } from "graphology-types";
5
- import {
6
- createEdgeCompoundProgram,
7
- EdgeProgram,
8
- type ProgramInfo,
9
- } from "sigma/rendering";
10
- import {
11
- type EdgeDisplayData,
12
- type NodeDisplayData,
13
- type RenderParams,
14
- } from "sigma/types";
15
- import { floatColor } from "sigma/utils";
16
- import { type InternalEdgeAttributes } from "../../types";
17
- import { createDrawCurvedEdgeLabel } from "./drawLabel";
18
- import FRAGMENT_SHADER_SOURCE from "./frag.glsl";
19
- import VERTEX_SHADER_SOURCE from "./vert.glsl";
20
-
21
- /* istanbul ignore file */
22
-
23
- const { UNSIGNED_BYTE, FLOAT } = WebGLRenderingContext;
24
-
25
- const UNIFORMS = [
26
- "u_matrix",
27
- "u_sizeRatio",
28
- "u_dimensions",
29
- "u_pixelRatio",
30
- "u_feather",
31
- "u_minEdgeThickness",
32
- "u_lengthToThicknessRatio",
33
- "u_widenessToThicknessRatio",
34
- ] as const;
35
-
36
- export class EdgeCurveProgramBase<
37
- N extends Attributes = Attributes,
38
- E extends Attributes = Attributes,
39
- G extends Attributes = Attributes,
40
- > extends EdgeProgram<(typeof UNIFORMS)[number], N, E, G> {
41
- getDefinition() {
42
- return {
43
- VERTICES: 6,
44
- VERTEX_SHADER_SOURCE,
45
- FRAGMENT_SHADER_SOURCE,
46
- METHOD: WebGLRenderingContext.TRIANGLES,
47
- UNIFORMS,
48
- ATTRIBUTES: [
49
- { name: "a_source", size: 2, type: FLOAT },
50
- { name: "a_target", size: 2, type: FLOAT },
51
- { name: "a_thickness", size: 1, type: FLOAT },
52
- { name: "a_curvature", size: 1, type: FLOAT },
53
- { name: "a_color", size: 4, type: UNSIGNED_BYTE, normalized: true },
54
- { name: "a_opacity", size: 1, type: FLOAT },
55
- { name: "a_id", size: 4, type: UNSIGNED_BYTE, normalized: true },
56
- { name: "a_sourceSize", size: 1, type: FLOAT },
57
- { name: "a_targetSize", size: 1, type: FLOAT },
58
- ],
59
- CONSTANT_ATTRIBUTES: [
60
- { name: "a_current", size: 1, type: FLOAT }, // TODO: could optimize to bool
61
- { name: "a_direction", size: 1, type: FLOAT }, // TODO: could optimize to byte
62
- ],
63
- CONSTANT_DATA: [
64
- [0, 1],
65
- [0, -1],
66
- [1, 1],
67
- [0, -1],
68
- [1, 1],
69
- [1, -1],
70
- ],
71
- };
72
- }
73
-
74
- processVisibleItem(
75
- edgeIndex: number,
76
- startIndex: number,
77
- sourceData: NodeDisplayData,
78
- targetData: NodeDisplayData,
79
- data: EdgeDisplayData & InternalEdgeAttributes,
80
- ) {
81
- let color = data.color ?? this.renderer.getSetting("defaultEdgeColor");
82
- if (data.selected) color = "#f00";
83
- if (data.highlight) color = "#F54A4A";
84
-
85
- const thickness =
86
- Math.min(data.size || 1, 0.5) *
87
- (data.selected ?? data.highlight ? 16 : 8);
88
- const x1 = sourceData.x;
89
- const y1 = sourceData.y;
90
- const x2 = targetData.x;
91
- const y2 = targetData.y;
92
- const curvature = data.curvature ?? DEFAULT_EDGE_CURVATURE;
93
-
94
- const sourceRadius = sourceData.size || 1;
95
- const targetRadius = targetData.size || 1;
96
-
97
- const array = this.array;
98
-
99
- // First point
100
- array[startIndex++] = x1;
101
- array[startIndex++] = y1;
102
- array[startIndex++] = x2;
103
- array[startIndex++] = y2;
104
- array[startIndex++] = thickness;
105
- array[startIndex++] = curvature;
106
- array[startIndex++] = floatColor(color);
107
- array[startIndex++] = data.opacity ?? 1;
108
- array[startIndex++] = edgeIndex;
109
- array[startIndex++] = ["both", "source"].includes(data.arrow ?? "")
110
- ? sourceRadius
111
- : 0;
112
- array[startIndex++] = ["both", "target"].includes(data.arrow ?? "")
113
- ? targetRadius
114
- : 0;
115
- }
116
-
117
- setUniforms(
118
- params: RenderParams,
119
- { gl, uniformLocations }: ProgramInfo,
120
- ): void {
121
- const {
122
- u_matrix,
123
- u_pixelRatio,
124
- u_feather,
125
- u_sizeRatio,
126
- u_dimensions,
127
- u_minEdgeThickness,
128
- u_lengthToThicknessRatio,
129
- u_widenessToThicknessRatio,
130
- } = uniformLocations;
131
-
132
- gl.uniformMatrix3fv(u_matrix, false, params.matrix);
133
- gl.uniform1f(u_pixelRatio, params.pixelRatio);
134
- gl.uniform1f(u_sizeRatio, params.sizeRatio);
135
- gl.uniform1f(u_feather, params.antiAliasingFeather);
136
- gl.uniform2f(
137
- u_dimensions,
138
- params.width * params.pixelRatio,
139
- params.height * params.pixelRatio,
140
- );
141
- gl.uniform1f(u_minEdgeThickness, params.minEdgeThickness);
142
- gl.uniform1f(u_lengthToThicknessRatio, 2.5);
143
- gl.uniform1f(u_widenessToThicknessRatio, 2);
144
- }
145
- }
146
-
147
- export const EdgeCurveProgram = createEdgeCompoundProgram(
148
- [
149
- EdgeCurveProgramBase,
150
- // createEdgeArrowHeadProgram({ extremity: "source" }),
151
- // createEdgeArrowHeadProgram({ extremity: "target" }),
152
- ],
153
- createDrawCurvedEdgeLabel({
154
- curvatureAttribute: "curvature",
155
- defaultCurvature: DEFAULT_EDGE_CURVATURE,
156
- arrowHead: null,
157
- }) as any,
158
- );
@@ -1,110 +0,0 @@
1
- /* istanbul ignore file */
2
-
3
- // language=GLSL
4
- const SHADER = /* glsl */ `
5
- attribute vec4 a_id;
6
- attribute vec4 a_color;
7
- attribute float a_direction;
8
- attribute float a_thickness;
9
- attribute float a_opacity;
10
- attribute vec2 a_source;
11
- attribute vec2 a_target;
12
- attribute float a_current;
13
- attribute float a_curvature;
14
- attribute float a_sourceSize;
15
- attribute float a_targetSize;
16
-
17
- uniform mat3 u_matrix;
18
- uniform float u_sizeRatio;
19
- uniform float u_pixelRatio;
20
- uniform vec2 u_dimensions;
21
- uniform float u_minEdgeThickness;
22
- uniform float u_feather;
23
- uniform float u_widenessToThicknessRatio;
24
-
25
- varying vec4 v_color;
26
- varying float v_opacity;
27
- varying float v_thickness;
28
- varying float v_feather;
29
- varying vec2 v_cpA;
30
- varying vec2 v_cpB;
31
- varying vec2 v_cpC;
32
- varying float v_sourceSize;
33
- varying vec2 v_sourcePoint;
34
- varying float v_targetSize;
35
- varying vec2 v_targetPoint;
36
-
37
- const float bias = 255.0 / 254.0;
38
- const float epsilon = 0.7;
39
-
40
- vec2 clipspaceToViewport(vec2 pos, vec2 dimensions) {
41
- return vec2(
42
- (pos.x + 1.0) * dimensions.x / 2.0,
43
- (pos.y + 1.0) * dimensions.y / 2.0
44
- );
45
- }
46
-
47
- vec2 viewportToClipspace(vec2 pos, vec2 dimensions) {
48
- return vec2(
49
- pos.x / dimensions.x * 2.0 - 1.0,
50
- pos.y / dimensions.y * 2.0 - 1.0
51
- );
52
- }
53
-
54
- void main() {
55
- float minThickness = u_minEdgeThickness;
56
- // Selecting the correct position
57
- // Branchless "position = a_source if a_current == 1.0 else a_target"
58
- vec2 position = a_source * max(0.0, a_current) + a_target * max(0.0, 1.0 - a_current);
59
- position = (u_matrix * vec3(position, 1)).xy;
60
-
61
- vec2 source = (u_matrix * vec3(a_source, 1)).xy;
62
- vec2 target = (u_matrix * vec3(a_target, 1)).xy;
63
-
64
- vec2 viewportPosition = clipspaceToViewport(position, u_dimensions);
65
- vec2 viewportSource = clipspaceToViewport(source, u_dimensions);
66
- vec2 viewportTarget = clipspaceToViewport(target, u_dimensions);
67
-
68
- vec2 delta = viewportTarget.xy - viewportSource.xy;
69
- float len = length(delta);
70
- vec2 normal = vec2(-delta.y, delta.x) * a_direction;
71
- vec2 unitNormal = normal / len;
72
- float boundingBoxThickness = len * a_curvature;
73
- float curveThickness = max(minThickness, a_thickness / 2.0 / u_sizeRatio * u_pixelRatio);
74
-
75
- v_thickness = curveThickness;
76
- v_feather = u_feather;
77
-
78
- v_cpA = viewportSource;
79
- v_cpB = 0.5 * (viewportSource + viewportTarget) + unitNormal * a_direction * boundingBoxThickness;
80
- v_cpC = viewportTarget;
81
-
82
- vec2 viewportOffsetPosition = (
83
- viewportPosition +
84
- unitNormal * (boundingBoxThickness / 2.0 + sign(boundingBoxThickness) * (curveThickness + epsilon)) *
85
- max(0.0, a_direction) // NOTE: cutting the bounding box in half to avoid overdraw
86
- );
87
-
88
- position = viewportToClipspace(viewportOffsetPosition, u_dimensions);
89
- gl_Position = vec4(position, 0, 1);
90
-
91
- v_sourceSize = a_sourceSize * u_pixelRatio / u_sizeRatio;
92
- v_sourcePoint = viewportSource;
93
-
94
- v_targetSize = a_targetSize * u_pixelRatio / u_sizeRatio;
95
- v_targetPoint = viewportTarget;
96
-
97
- #ifdef PICKING_MODE
98
- // For picking mode, we use the ID as the color:
99
- v_color = a_id;
100
- #else
101
- // For normal mode, we use the color:
102
- v_color = a_color;
103
- v_opacity = a_opacity;
104
- #endif
105
-
106
- v_color.a *= bias;
107
- }
108
- `;
109
-
110
- export default SHADER;
@@ -1,113 +0,0 @@
1
- import { type Attributes } from "graphology-types";
2
- import { type Settings } from "sigma/settings";
3
- import {
4
- type EdgeDisplayData,
5
- type NodeDisplayData,
6
- type PartialButFor,
7
- } from "sigma/types";
8
-
9
- /* istanbul ignore file */
10
-
11
- export type EdgeLabelDrawingFunction<
12
- N extends Attributes = Attributes,
13
- E extends Attributes = Attributes,
14
- G extends Attributes = Attributes,
15
- > = (
16
- context: CanvasRenderingContext2D,
17
- edgeData: PartialButFor<EdgeDisplayData, "label" | "color" | "size">,
18
- sourceData: PartialButFor<NodeDisplayData, "x" | "y" | "size">,
19
- targetData: PartialButFor<NodeDisplayData, "x" | "y" | "size">,
20
- settings: Settings<N, E, G>,
21
- ) => void;
22
-
23
- export function drawLineLabel<
24
- N extends Attributes = Attributes,
25
- E extends Attributes = Attributes,
26
- G extends Attributes = Attributes,
27
- >(
28
- context: CanvasRenderingContext2D,
29
- edgeData: PartialButFor<EdgeDisplayData, "label" | "color" | "size">,
30
- sourceData: PartialButFor<NodeDisplayData, "x" | "y" | "size">,
31
- targetData: PartialButFor<NodeDisplayData, "x" | "y" | "size">,
32
- settings: Settings<N, E, G>,
33
- ): void {
34
- const size = settings.edgeLabelSize;
35
- const font = settings.edgeLabelFont;
36
- const weight = settings.edgeLabelWeight;
37
- let color = edgeData.color ?? settings.defaultEdgeColor;
38
-
39
- if (edgeData.selected) color = "#f00";
40
- if (edgeData.highlight) color = "#F54A4A";
41
-
42
- let label = edgeData.label;
43
-
44
- if (!label || edgeData.opacity < 1) return;
45
-
46
- context.font = `${weight} ${size}px ${font}`;
47
-
48
- // Computing positions without considering nodes sizes:
49
- const sSize = sourceData.size;
50
- const tSize = targetData.size;
51
- let sx = sourceData.x;
52
- let sy = sourceData.y;
53
- let tx = targetData.x;
54
- let ty = targetData.y;
55
- let cx = (sx + tx) / 2;
56
- let cy = (sy + ty) / 2;
57
- let dx = tx - sx;
58
- let dy = ty - sy;
59
- let d = Math.sqrt(dx * dx + dy * dy);
60
-
61
- if (d < sSize + tSize) return;
62
-
63
- // Adding nodes sizes:
64
- sx += (dx * sSize) / d;
65
- sy += (dy * sSize) / d;
66
- tx -= (dx * tSize) / d;
67
- ty -= (dy * tSize) / d;
68
- cx = (sx + tx) / 2;
69
- cy = (sy + ty) / 2;
70
- dx = tx - sx;
71
- dy = ty - sy;
72
- d = Math.sqrt(dx * dx + dy * dy);
73
-
74
- // Handling ellipsis
75
- let textLength = context.measureText(label).width;
76
-
77
- if (textLength > d) {
78
- const ellipsis = "…";
79
- label = label + ellipsis;
80
- textLength = context.measureText(label).width;
81
-
82
- while (textLength > d && label.length > 1) {
83
- label = label.slice(0, -2) + ellipsis;
84
- textLength = context.measureText(label).width;
85
- }
86
-
87
- if (label.length < 4) return;
88
- }
89
-
90
- let angle;
91
- if (dx > 0) {
92
- if (dy > 0) angle = Math.acos(dx / d);
93
- else angle = Math.asin(dy / d);
94
- } else {
95
- if (dy > 0) angle = Math.acos(dx / d) + Math.PI;
96
- else angle = Math.asin(dx / d) + Math.PI / 2;
97
- }
98
-
99
- context.save();
100
- context.translate(cx, cy);
101
- context.rotate(angle);
102
- context.fillStyle = settings.defaultNodeColor || "#fff";
103
- context.fillRect(
104
- -textLength / 2 - 4,
105
- edgeData.size - size + 2,
106
- textLength + 8,
107
- size + 2,
108
- );
109
- context.fillStyle = color;
110
- context.fillText(label, -textLength / 2, edgeData.size);
111
-
112
- context.restore();
113
- }
@@ -1,34 +0,0 @@
1
- /* istanbul ignore file */
2
-
3
- // language=GLSL
4
- const SHADER_SOURCE = /* glsl */ `
5
- precision mediump float;
6
-
7
- varying vec4 v_color;
8
- varying vec2 v_normal;
9
- varying float v_opacity;
10
- varying float v_thickness;
11
- varying float v_feather;
12
-
13
- const vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);
14
-
15
- void main(void) {
16
- // We only handle antialiasing for normal mode:
17
- #ifdef PICKING_MODE
18
- gl_FragColor = v_color;
19
- #else
20
- float dist = length(v_normal) * v_thickness;
21
-
22
- float t = smoothstep(
23
- v_thickness - v_feather,
24
- v_thickness,
25
- dist
26
- );
27
-
28
- gl_FragColor = mix(v_color, transparent, t);
29
- gl_FragColor = mix(transparent, gl_FragColor, v_opacity);
30
- #endif
31
- }
32
- `;
33
-
34
- export default SHADER_SOURCE;
@@ -1,165 +0,0 @@
1
- /* eslint-disable @typescript-eslint/naming-convention */
2
-
3
- import { type Attributes } from "graphology-types";
4
- import {
5
- createEdgeCompoundProgram,
6
- EdgeProgram,
7
- type ProgramInfo,
8
- } from "sigma/rendering";
9
- import {
10
- type EdgeDisplayData,
11
- type NodeDisplayData,
12
- type RenderParams,
13
- } from "sigma/types";
14
- import { floatColor } from "sigma/utils";
15
- import { type InternalEdgeAttributes } from "../../types";
16
- import { createEdgeArrowHeadProgram } from "../arrow-head";
17
- import { drawLineLabel } from "./drawLabel";
18
- import FRAGMENT_SHADER_SOURCE from "./frag.glsl";
19
- import VERTEX_SHADER_SOURCE from "./vert.glsl";
20
-
21
- /* istanbul ignore file */
22
-
23
- const { UNSIGNED_BYTE, FLOAT } = WebGLRenderingContext;
24
-
25
- const UNIFORMS = [
26
- "u_matrix",
27
- "u_zoomRatio",
28
- "u_sizeRatio",
29
- "u_correctionRatio",
30
- "u_pixelRatio",
31
- "u_feather",
32
- "u_minEdgeThickness",
33
- "u_lengthToThicknessRatio",
34
- ] as const;
35
-
36
- class EdgeLineProgramBase<
37
- N extends Attributes = Attributes,
38
- E extends Attributes = Attributes,
39
- G extends Attributes = Attributes,
40
- > extends EdgeProgram<(typeof UNIFORMS)[number], N, E, G> {
41
- getDefinition() {
42
- return {
43
- VERTICES: 6,
44
- VERTEX_SHADER_SOURCE,
45
- FRAGMENT_SHADER_SOURCE,
46
- METHOD: WebGLRenderingContext.TRIANGLES,
47
- UNIFORMS,
48
- ATTRIBUTES: [
49
- { name: "a_positionStart", size: 2, type: FLOAT },
50
- { name: "a_positionEnd", size: 2, type: FLOAT },
51
- { name: "a_normal", size: 2, type: FLOAT },
52
- { name: "a_color", size: 4, type: UNSIGNED_BYTE, normalized: true },
53
- { name: "a_opacity", size: 1, type: FLOAT },
54
- { name: "a_id", size: 4, type: UNSIGNED_BYTE, normalized: true },
55
- { name: "a_sourceRadius", size: 1, type: FLOAT },
56
- { name: "a_targetRadius", size: 1, type: FLOAT },
57
- ],
58
- CONSTANT_ATTRIBUTES: [
59
- // If 0, then position will be a_positionStart
60
- // If 2, then position will be a_positionEnd
61
- { name: "a_positionCoef", size: 1, type: FLOAT },
62
- { name: "a_normalCoef", size: 1, type: FLOAT },
63
- { name: "a_sourceRadiusCoef", size: 1, type: FLOAT },
64
- { name: "a_targetRadiusCoef", size: 1, type: FLOAT },
65
- ],
66
- CONSTANT_DATA: [
67
- [0, 1, -1, 0],
68
- [0, -1, 1, 0],
69
- [1, 1, 0, 1],
70
- [1, 1, 0, 1],
71
- [0, -1, 1, 0],
72
- [1, -1, 0, -1],
73
- ],
74
- };
75
- }
76
-
77
- processVisibleItem(
78
- edgeIndex: number,
79
- startIndex: number,
80
- sourceData: NodeDisplayData,
81
- targetData: NodeDisplayData,
82
- data: EdgeDisplayData & InternalEdgeAttributes,
83
- ) {
84
- let color = data.color ?? this.renderer.getSetting("defaultEdgeColor");
85
- if (data.selected) color = "#f00";
86
- if (data.highlight) color = "#F54A4A";
87
-
88
- const thickness =
89
- Math.min(data.size || 1, 0.5) * (data.selected ?? data.highlight ? 8 : 4);
90
- const x1 = sourceData.x;
91
- const y1 = sourceData.y;
92
- const x2 = targetData.x;
93
- const y2 = targetData.y;
94
-
95
- // Computing normals
96
- const dx = x2 - x1;
97
- const dy = y2 - y1;
98
-
99
- const sourceRadius = sourceData.size || 1;
100
- const targetRadius = targetData.size || 1;
101
-
102
- let len = dx * dx + dy * dy;
103
- let n1 = 0;
104
- let n2 = 0;
105
-
106
- if (len) {
107
- len = 1 / Math.sqrt(len);
108
-
109
- n1 = -dy * len * thickness;
110
- n2 = dx * len * thickness;
111
- }
112
-
113
- const array = this.array;
114
-
115
- array[startIndex++] = x1;
116
- array[startIndex++] = y1;
117
- array[startIndex++] = x2;
118
- array[startIndex++] = y2;
119
- array[startIndex++] = n1;
120
- array[startIndex++] = n2;
121
- array[startIndex++] = floatColor(color);
122
- array[startIndex++] = data.opacity ?? 1;
123
- array[startIndex++] = edgeIndex;
124
- array[startIndex++] = ["both", "source"].includes(data.arrow ?? "")
125
- ? sourceRadius
126
- : 0;
127
- array[startIndex++] = ["both", "target"].includes(data.arrow ?? "")
128
- ? targetRadius
129
- : 0;
130
- }
131
-
132
- setUniforms(
133
- params: RenderParams,
134
- { gl, uniformLocations }: ProgramInfo,
135
- ): void {
136
- const {
137
- u_matrix,
138
- u_zoomRatio,
139
- u_feather,
140
- u_pixelRatio,
141
- u_correctionRatio,
142
- u_sizeRatio,
143
- u_minEdgeThickness,
144
- u_lengthToThicknessRatio,
145
- } = uniformLocations;
146
-
147
- gl.uniformMatrix3fv(u_matrix, false, params.matrix);
148
- gl.uniform1f(u_zoomRatio, params.zoomRatio);
149
- gl.uniform1f(u_sizeRatio, params.sizeRatio);
150
- gl.uniform1f(u_correctionRatio, params.correctionRatio);
151
- gl.uniform1f(u_pixelRatio, params.pixelRatio);
152
- gl.uniform1f(u_feather, params.antiAliasingFeather);
153
- gl.uniform1f(u_minEdgeThickness, params.minEdgeThickness);
154
- gl.uniform1f(u_lengthToThicknessRatio, 2.5);
155
- }
156
- }
157
-
158
- export const EdgeLineProgram = createEdgeCompoundProgram(
159
- [
160
- EdgeLineProgramBase,
161
- createEdgeArrowHeadProgram({ extremity: "source" }),
162
- createEdgeArrowHeadProgram({ extremity: "target" }),
163
- ],
164
- drawLineLabel as any,
165
- );
@@ -1,104 +0,0 @@
1
- /* istanbul ignore file */
2
-
3
- // language=GLSL
4
- const SHADER_SOURCE = /* glsl */ `
5
- attribute vec4 a_id;
6
- attribute vec4 a_color;
7
- attribute vec2 a_normal;
8
- attribute float a_opacity;
9
- attribute float a_normalCoef;
10
- attribute vec2 a_positionStart;
11
- attribute vec2 a_positionEnd;
12
- attribute float a_positionCoef;
13
- attribute float a_sourceRadius;
14
- attribute float a_targetRadius;
15
- attribute float a_sourceRadiusCoef;
16
- attribute float a_targetRadiusCoef;
17
-
18
- uniform mat3 u_matrix;
19
- uniform float u_sizeRatio;
20
- uniform float u_zoomRatio;
21
- uniform float u_pixelRatio;
22
- uniform float u_correctionRatio;
23
- uniform float u_minEdgeThickness;
24
- uniform float u_lengthToThicknessRatio;
25
- uniform float u_feather;
26
-
27
- varying vec4 v_color;
28
- varying vec2 v_normal;
29
- varying float v_opacity;
30
- varying float v_thickness;
31
- varying float v_feather;
32
-
33
- const float minThickness = 1.7;
34
- const float bias = 255.0 / 254.0;
35
-
36
- void main() {
37
- vec2 normal = a_normal * a_normalCoef;
38
- vec2 position = a_positionStart * (1.0 - a_positionCoef) + a_positionEnd * a_positionCoef;
39
-
40
- float normalLength = length(normal);
41
- vec2 unitNormal = normal / normalLength;
42
-
43
- // We require edges to be at least "minThickness" pixels thick *on screen*
44
- // (so we need to compensate the size ratio):
45
- float pixelsThickness = max(normalLength, minThickness * u_sizeRatio);
46
-
47
- // Then, we need to retrieve the normalized thickness of the edge in the WebGL
48
- // referential (in a ([0, 1], [0, 1]) space), using our "magic" correction
49
- // ratio:
50
- float webGLThickness = pixelsThickness * u_correctionRatio / u_sizeRatio;
51
-
52
- // Here, we move the point to leave space for the arrow heads:
53
- // Source arrow head
54
- float sourceRadius = a_sourceRadius * a_sourceRadiusCoef;
55
- float sourceDirection = sign(sourceRadius);
56
- float webGLSourceRadius = sourceDirection * sourceRadius * 2.0 * u_correctionRatio / u_sizeRatio;
57
- float webGLSourceArrowHeadLength = webGLThickness * u_lengthToThicknessRatio * 2.0;
58
- vec2 sourceCompensationVector =
59
- vec2(-sourceDirection * unitNormal.y, sourceDirection * unitNormal.x)
60
- * (webGLSourceRadius + webGLSourceArrowHeadLength);
61
-
62
- // Target arrow head
63
- float targetRadius = a_targetRadius * a_targetRadiusCoef;
64
- float targetDirection = sign(targetRadius);
65
- float webGLTargetRadius = targetDirection * targetRadius * 2.0 * u_correctionRatio / u_sizeRatio;
66
- float webGLTargetArrowHeadLength = webGLThickness * u_lengthToThicknessRatio * 2.0;
67
- vec2 targetCompensationVector =
68
- vec2(-targetDirection * unitNormal.y, targetDirection * unitNormal.x)
69
- * (webGLTargetRadius + webGLTargetArrowHeadLength);
70
-
71
- if(a_sourceRadius == 0.0) {
72
- sourceCompensationVector = vec2(0.0, 0.0);
73
- }
74
- if(a_targetRadius == 0.0) {
75
- targetCompensationVector = vec2(0.0, 0.0);
76
- }
77
-
78
- // Here is the proper position of the vertex
79
- gl_Position = vec4((u_matrix * vec3(position + unitNormal * webGLThickness + sourceCompensationVector + targetCompensationVector, 1)).xy, 0, 1);
80
-
81
- // For the fragment shader though, we need a thickness that takes the "magic"
82
- // correction ratio into account (as in webGLThickness), but so that the
83
- // antialiasing effect does not depend on the zoom level. So here's yet
84
- // another thickness version:
85
- v_thickness = webGLThickness / u_zoomRatio;
86
-
87
- v_normal = unitNormal;
88
-
89
- v_feather = u_feather * u_correctionRatio / u_zoomRatio / u_pixelRatio * 2.0;
90
-
91
- #ifdef PICKING_MODE
92
- // For picking mode, we use the ID as the color:
93
- v_color = a_id;
94
- #else
95
- // For normal mode, we use the color:
96
- v_color = a_color;
97
- v_opacity = a_opacity;
98
- #endif
99
-
100
- v_color.a *= bias;
101
- }
102
- `;
103
-
104
- export default SHADER_SOURCE;