@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.
Files changed (224) hide show
  1. package/dist/cjs/context/context.js +16 -0
  2. package/dist/cjs/graph/index.js +58 -381
  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 +59 -382
  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/ContextMenu.js +0 -133
  40. package/dist/cjs/components/Provider.js +0 -103
  41. package/dist/cjs/components/Tools.js +0 -205
  42. package/dist/cjs/components/Viewer.js +0 -59
  43. package/dist/cjs/components/context.js +0 -34
  44. package/dist/cjs/constants/index.js +0 -16
  45. package/dist/cjs/hooks/sigmaDragSelect.js +0 -169
  46. package/dist/cjs/hooks/sigmaHilighter.js +0 -83
  47. package/dist/cjs/hooks/sigmaMouseActions.js +0 -145
  48. package/dist/cjs/hooks/useGraphology.js +0 -41
  49. package/dist/cjs/hooks/useSigma.js +0 -112
  50. package/dist/cjs/programs/arrow-head/frag.glsl.js +0 -8
  51. package/dist/cjs/programs/arrow-head/index.js +0 -142
  52. package/dist/cjs/programs/arrow-head/vert.glsl.js +0 -8
  53. package/dist/cjs/programs/edge-curve/drawLabel.js +0 -136
  54. package/dist/cjs/programs/edge-curve/frag.glsl.js +0 -8
  55. package/dist/cjs/programs/edge-curve/index.js +0 -157
  56. package/dist/cjs/programs/edge-curve/vert.glsl.js +0 -8
  57. package/dist/cjs/programs/edge-line/drawLabel.js +0 -70
  58. package/dist/cjs/programs/edge-line/frag.glsl.js +0 -8
  59. package/dist/cjs/programs/edge-line/index.js +0 -166
  60. package/dist/cjs/programs/edge-line/vert.glsl.js +0 -8
  61. package/dist/cjs/programs/node-badge/factory.js +0 -250
  62. package/dist/cjs/programs/node-badge/frag.glsl.js +0 -8
  63. package/dist/cjs/programs/node-badge/index.js +0 -33
  64. package/dist/cjs/programs/node-badge/texture.js +0 -455
  65. package/dist/cjs/programs/node-badge/vert.glsl.js +0 -19
  66. package/dist/cjs/programs/node-circle/base/drawHover.js +0 -71
  67. package/dist/cjs/programs/node-circle/base/drawLabel.js +0 -113
  68. package/dist/cjs/programs/node-circle/base/frag.glsl.js +0 -8
  69. package/dist/cjs/programs/node-circle/base/index.js +0 -136
  70. package/dist/cjs/programs/node-circle/base/vert.glsl.js +0 -8
  71. package/dist/cjs/programs/node-circle/index.js +0 -15
  72. package/dist/cjs/programs/node-image/factory.js +0 -224
  73. package/dist/cjs/programs/node-image/frag.glsl.js +0 -8
  74. package/dist/cjs/programs/node-image/index.js +0 -14
  75. package/dist/cjs/programs/node-image/texture.js +0 -472
  76. package/dist/cjs/programs/node-image/vert.glsl.js +0 -8
  77. package/dist/cjs/programs/node-rect/base/drawHover.js +0 -68
  78. package/dist/cjs/programs/node-rect/base/drawLabel.js +0 -107
  79. package/dist/cjs/programs/node-rect/base/frag.glsl.js +0 -8
  80. package/dist/cjs/programs/node-rect/base/index.js +0 -135
  81. package/dist/cjs/programs/node-rect/base/vert.glsl.js +0 -8
  82. package/dist/cjs/programs/node-rect/index.js +0 -15
  83. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
  84. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
  85. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -34
  86. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -13
  87. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
  88. package/dist/esm/_virtual/elk-worker.js +0 -8
  89. package/dist/esm/components/ContextMenu.js +0 -133
  90. package/dist/esm/components/Provider.js +0 -103
  91. package/dist/esm/components/Tools.js +0 -205
  92. package/dist/esm/components/Viewer.js +0 -59
  93. package/dist/esm/components/context.js +0 -33
  94. package/dist/esm/constants/index.js +0 -16
  95. package/dist/esm/hooks/sigmaDragSelect.js +0 -169
  96. package/dist/esm/hooks/sigmaHilighter.js +0 -83
  97. package/dist/esm/hooks/sigmaMouseActions.js +0 -145
  98. package/dist/esm/hooks/useGraphology.js +0 -41
  99. package/dist/esm/hooks/useSigma.js +0 -112
  100. package/dist/esm/programs/arrow-head/frag.glsl.js +0 -8
  101. package/dist/esm/programs/arrow-head/index.js +0 -141
  102. package/dist/esm/programs/arrow-head/vert.glsl.js +0 -8
  103. package/dist/esm/programs/edge-curve/drawLabel.js +0 -136
  104. package/dist/esm/programs/edge-curve/frag.glsl.js +0 -8
  105. package/dist/esm/programs/edge-curve/index.js +0 -156
  106. package/dist/esm/programs/edge-curve/vert.glsl.js +0 -8
  107. package/dist/esm/programs/edge-line/drawLabel.js +0 -70
  108. package/dist/esm/programs/edge-line/frag.glsl.js +0 -8
  109. package/dist/esm/programs/edge-line/index.js +0 -166
  110. package/dist/esm/programs/edge-line/vert.glsl.js +0 -8
  111. package/dist/esm/programs/node-badge/factory.js +0 -250
  112. package/dist/esm/programs/node-badge/frag.glsl.js +0 -8
  113. package/dist/esm/programs/node-badge/index.js +0 -32
  114. package/dist/esm/programs/node-badge/texture.js +0 -445
  115. package/dist/esm/programs/node-badge/vert.glsl.js +0 -19
  116. package/dist/esm/programs/node-circle/base/drawHover.js +0 -71
  117. package/dist/esm/programs/node-circle/base/drawLabel.js +0 -113
  118. package/dist/esm/programs/node-circle/base/frag.glsl.js +0 -8
  119. package/dist/esm/programs/node-circle/base/index.js +0 -136
  120. package/dist/esm/programs/node-circle/base/vert.glsl.js +0 -8
  121. package/dist/esm/programs/node-circle/index.js +0 -15
  122. package/dist/esm/programs/node-image/factory.js +0 -224
  123. package/dist/esm/programs/node-image/frag.glsl.js +0 -8
  124. package/dist/esm/programs/node-image/index.js +0 -13
  125. package/dist/esm/programs/node-image/texture.js +0 -462
  126. package/dist/esm/programs/node-image/vert.glsl.js +0 -8
  127. package/dist/esm/programs/node-rect/base/drawHover.js +0 -68
  128. package/dist/esm/programs/node-rect/base/drawLabel.js +0 -107
  129. package/dist/esm/programs/node-rect/base/frag.glsl.js +0 -8
  130. package/dist/esm/programs/node-rect/base/index.js +0 -135
  131. package/dist/esm/programs/node-rect/base/vert.glsl.js +0 -8
  132. package/dist/esm/programs/node-rect/index.js +0 -15
  133. package/dist/types/components/ContextMenu.d.ts +0 -1
  134. package/dist/types/components/Provider.d.ts +0 -3
  135. package/dist/types/components/Tools.d.ts +0 -1
  136. package/dist/types/components/Viewer.d.ts +0 -2
  137. package/dist/types/components/context.d.ts +0 -17
  138. package/dist/types/constants/index.d.ts +0 -12
  139. package/dist/types/graph/layout.worker.d.ts +0 -1
  140. package/dist/types/hooks/sigmaDragSelect.d.ts +0 -8
  141. package/dist/types/hooks/sigmaHilighter.d.ts +0 -3
  142. package/dist/types/hooks/sigmaMouseActions.d.ts +0 -3
  143. package/dist/types/hooks/useGraphology.d.ts +0 -6
  144. package/dist/types/hooks/useSigma.d.ts +0 -8
  145. package/dist/types/i18n/index.d.ts +0 -0
  146. package/dist/types/programs/arrow-head/frag.glsl.d.ts +0 -2
  147. package/dist/types/programs/arrow-head/index.d.ts +0 -9
  148. package/dist/types/programs/arrow-head/vert.glsl.d.ts +0 -2
  149. package/dist/types/programs/edge-curve/drawLabel.d.ts +0 -6
  150. package/dist/types/programs/edge-curve/frag.glsl.d.ts +0 -2
  151. package/dist/types/programs/edge-curve/index.d.ts +0 -43
  152. package/dist/types/programs/edge-curve/vert.glsl.d.ts +0 -2
  153. package/dist/types/programs/edge-line/drawLabel.d.ts +0 -5
  154. package/dist/types/programs/edge-line/frag.glsl.d.ts +0 -2
  155. package/dist/types/programs/edge-line/index.d.ts +0 -11
  156. package/dist/types/programs/edge-line/vert.glsl.d.ts +0 -2
  157. package/dist/types/programs/node-badge/factory.d.ts +0 -27
  158. package/dist/types/programs/node-badge/frag.glsl.d.ts +0 -2
  159. package/dist/types/programs/node-badge/index.d.ts +0 -5
  160. package/dist/types/programs/node-badge/texture.d.ts +0 -102
  161. package/dist/types/programs/node-badge/vert.glsl.d.ts +0 -2
  162. package/dist/types/programs/node-circle/base/drawHover.d.ts +0 -8
  163. package/dist/types/programs/node-circle/base/drawLabel.d.ts +0 -8
  164. package/dist/types/programs/node-circle/base/frag.glsl.d.ts +0 -2
  165. package/dist/types/programs/node-circle/base/index.d.ts +0 -37
  166. package/dist/types/programs/node-circle/base/vert.glsl.d.ts +0 -2
  167. package/dist/types/programs/node-circle/index.d.ts +0 -11
  168. package/dist/types/programs/node-image/factory.d.ts +0 -25
  169. package/dist/types/programs/node-image/frag.glsl.d.ts +0 -2
  170. package/dist/types/programs/node-image/index.d.ts +0 -5
  171. package/dist/types/programs/node-image/texture.d.ts +0 -102
  172. package/dist/types/programs/node-image/vert.glsl.d.ts +0 -2
  173. package/dist/types/programs/node-rect/base/drawHover.d.ts +0 -8
  174. package/dist/types/programs/node-rect/base/drawLabel.d.ts +0 -8
  175. package/dist/types/programs/node-rect/base/frag.glsl.d.ts +0 -2
  176. package/dist/types/programs/node-rect/base/index.d.ts +0 -34
  177. package/dist/types/programs/node-rect/base/vert.glsl.d.ts +0 -2
  178. package/dist/types/programs/node-rect/index.d.ts +0 -11
  179. package/src/components/ContextMenu.tsx +0 -138
  180. package/src/components/Provider.tsx +0 -116
  181. package/src/components/Tools.tsx +0 -68
  182. package/src/components/Viewer.tsx +0 -75
  183. package/src/components/context.ts +0 -43
  184. package/src/constants/index.ts +0 -22
  185. package/src/graph/layout.worker.ts +0 -42
  186. package/src/hooks/sigmaDragSelect.ts +0 -219
  187. package/src/hooks/sigmaHilighter.ts +0 -107
  188. package/src/hooks/sigmaMouseActions.ts +0 -153
  189. package/src/hooks/useGraphology.ts +0 -31
  190. package/src/hooks/useSigma.ts +0 -118
  191. package/src/i18n/index.ts +0 -0
  192. package/src/programs/arrow-head/frag.glsl.ts +0 -18
  193. package/src/programs/arrow-head/index.ts +0 -156
  194. package/src/programs/arrow-head/vert.glsl.ts +0 -75
  195. package/src/programs/edge-curve/drawLabel.ts +0 -166
  196. package/src/programs/edge-curve/frag.glsl.ts +0 -86
  197. package/src/programs/edge-curve/index.ts +0 -156
  198. package/src/programs/edge-curve/vert.glsl.ts +0 -110
  199. package/src/programs/edge-line/drawLabel.ts +0 -113
  200. package/src/programs/edge-line/frag.glsl.ts +0 -34
  201. package/src/programs/edge-line/index.ts +0 -163
  202. package/src/programs/edge-line/vert.glsl.ts +0 -104
  203. package/src/programs/node-badge/factory.ts +0 -325
  204. package/src/programs/node-badge/frag.glsl.ts +0 -79
  205. package/src/programs/node-badge/index.ts +0 -35
  206. package/src/programs/node-badge/texture.ts +0 -425
  207. package/src/programs/node-badge/vert.glsl.ts +0 -99
  208. package/src/programs/node-circle/base/drawHover.ts +0 -80
  209. package/src/programs/node-circle/base/drawLabel.ts +0 -145
  210. package/src/programs/node-circle/base/frag.glsl.ts +0 -72
  211. package/src/programs/node-circle/base/index.ts +0 -100
  212. package/src/programs/node-circle/base/vert.glsl.ts +0 -83
  213. package/src/programs/node-circle/index.ts +0 -19
  214. package/src/programs/node-image/factory.ts +0 -299
  215. package/src/programs/node-image/frag.glsl.ts +0 -97
  216. package/src/programs/node-image/index.ts +0 -7
  217. package/src/programs/node-image/texture.ts +0 -435
  218. package/src/programs/node-image/vert.glsl.ts +0 -60
  219. package/src/programs/node-rect/base/drawHover.ts +0 -77
  220. package/src/programs/node-rect/base/drawLabel.ts +0 -149
  221. package/src/programs/node-rect/base/frag.glsl.ts +0 -67
  222. package/src/programs/node-rect/base/index.ts +0 -107
  223. package/src/programs/node-rect/base/vert.glsl.ts +0 -87
  224. package/src/programs/node-rect/index.ts +0 -19
@@ -1,325 +0,0 @@
1
- import { type Attributes } from "graphology-types";
2
- import type Sigma from "sigma";
3
- import {
4
- type NodeHoverDrawingFunction,
5
- type NodeLabelDrawingFunction,
6
- NodeProgram,
7
- type NodeProgramType,
8
- type ProgramInfo,
9
- } from "sigma/rendering";
10
- import { type NodeDisplayData, type RenderParams } from "sigma/types";
11
- import { floatColor } from "sigma/utils";
12
- import { type EdgeAttributes, type NodeAttributes } from "../../types";
13
- import FRAGMENT_SHADER_SOURCE from "./frag.glsl";
14
- import {
15
- type Atlas,
16
- DEFAULT_TEXTURE_MANAGER_OPTIONS,
17
- TextureManager,
18
- type TextureManagerOptions,
19
- } from "./texture";
20
- import VERTEX_SHADER_SOURCE from "./vert.glsl";
21
-
22
- const ICON_MAP: KeyValue = {
23
- star: "M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z",
24
- exclaim:
25
- "M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",
26
- thumbUp:
27
- "M23,10C23,8.89 22.1,8 21,8H14.68L15.64,3.43C15.66,3.33 15.67,3.22 15.67,3.11C15.67,2.7 15.5,2.32 15.23,2.05L14.17,1L7.59,7.58C7.22,7.95 7,8.45 7,9V19A2,2 0 0,0 9,21H18C18.83,21 19.54,20.5 19.84,19.78L22.86,12.73C22.95,12.5 23,12.26 23,12V10M1,21H5V9H1V21Z",
28
- thumbDown:
29
- "M19,15H23V3H19M15,3H6C5.17,3 4.46,3.5 4.16,4.22L1.14,11.27C1.05,11.5 1,11.74 1,12V14A2,2 0 0,0 3,16H9.31L8.36,20.57C8.34,20.67 8.33,20.77 8.33,20.88C8.33,21.3 8.5,21.67 8.77,21.94L9.83,23L16.41,16.41C16.78,16.05 17,15.55 17,15V5C17,3.89 16.1,3 15,3Z",
30
- };
31
-
32
- const POSITION: KeyValue = {
33
- "top-left": 0,
34
- "top-right": 1,
35
- "bottom-left": 2,
36
- "bottom-right": 3,
37
- top: 4,
38
- left: 5,
39
- right: 6,
40
- bottom: 7,
41
- };
42
-
43
- /* istanbul ignore file */
44
-
45
- const { UNSIGNED_BYTE, FLOAT } = WebGLRenderingContext;
46
-
47
- interface CreateNodeImageProgramOptions<
48
- N extends Attributes,
49
- E extends Attributes,
50
- G extends Attributes,
51
- > extends TextureManagerOptions {
52
- // - If "background", color will be used to color full node behind the image.
53
- // - If "color", color will be used to color image pixels (for pictograms)
54
- drawingMode: "background" | "color";
55
- // If true, the images are always cropped to the circle
56
- keepWithinCircle: boolean;
57
- // Allows overriding drawLabel and drawHover returned class static methods.
58
- drawLabel: NodeLabelDrawingFunction<N, E, G> | undefined;
59
- drawHover: NodeHoverDrawingFunction<N, E, G> | undefined;
60
- // The padding should be expressed as a [0, 1] percentage.
61
- // A padding of 0.05 will always be 5% of the diameter of a node.
62
- padding: number;
63
- // Allows using a different color attribute name.
64
- colorAttribute: string;
65
- }
66
-
67
- const DEFAULT_CREATE_NODE_IMAGE_OPTIONS: CreateNodeImageProgramOptions<
68
- Attributes,
69
- Attributes,
70
- Attributes
71
- > = {
72
- ...DEFAULT_TEXTURE_MANAGER_OPTIONS,
73
- drawingMode: "background",
74
- keepWithinCircle: true,
75
- drawLabel: undefined,
76
- drawHover: undefined,
77
- padding: 0,
78
- colorAttribute: "color",
79
- };
80
-
81
- const UNIFORMS = [
82
- "u_sizeRatio",
83
- "u_correctionRatio",
84
- "u_cameraAngle",
85
- "u_percentagePadding",
86
- "u_matrix",
87
- "u_colorizeImages",
88
- "u_keepWithinCircle",
89
- "u_atlas",
90
- ] as const;
91
-
92
- /**
93
- * To share the texture between the program instances of the graph and the
94
- * hovered nodes (to prevent some flickering, mostly), this program must be
95
- * "built" for each sigma instance:
96
- */
97
- export default function getNodeImageProgram(
98
- options?: Partial<
99
- CreateNodeImageProgramOptions<
100
- NodeAttributes & { bg: string; opacity: number },
101
- EdgeAttributes,
102
- Attributes
103
- >
104
- > & { badgePosition: string },
105
- ): NodeProgramType<
106
- NodeAttributes & { bg: string; opacity: number },
107
- EdgeAttributes
108
- > {
109
- const {
110
- drawHover,
111
- drawLabel,
112
- drawingMode,
113
- keepWithinCircle,
114
- padding,
115
- colorAttribute,
116
- badgePosition,
117
- ...textureManagerOptions
118
- }: CreateNodeImageProgramOptions<
119
- NodeAttributes & { bg: string; opacity: number },
120
- EdgeAttributes,
121
- Attributes
122
- > & { badgePosition: string } = {
123
- badgePosition: "top-right",
124
- ...DEFAULT_CREATE_NODE_IMAGE_OPTIONS,
125
- ...(options ?? {}),
126
- drawLabel: undefined,
127
- drawHover: undefined,
128
- };
129
-
130
- /**
131
- * This texture manager is shared between all instances of this exact class,
132
- * returned by this call to getNodeProgramImage. This means that remounting
133
- * the sigma instance will not reload the images and regenerate the texture.
134
- */
135
- const textureManager = new TextureManager(textureManagerOptions);
136
-
137
- return class NodeImageProgram extends NodeProgram<
138
- (typeof UNIFORMS)[number],
139
- NodeAttributes & { bg: string; opacity: number },
140
- EdgeAttributes,
141
- Attributes
142
- > {
143
- static readonly ANGLE_1 = (1 * Math.PI) / 4;
144
- static readonly ANGLE_2 = (3 * Math.PI) / 4;
145
- static readonly ANGLE_3 = (5 * Math.PI) / 4;
146
- static readonly ANGLE_4 = (7 * Math.PI) / 4;
147
-
148
- static drawLabel = drawLabel;
149
- static drawHover = drawHover;
150
-
151
- getDefinition() {
152
- return {
153
- VERTICES: 4,
154
- VERTEX_SHADER_SOURCE,
155
- FRAGMENT_SHADER_SOURCE,
156
- METHOD: WebGLRenderingContext.TRIANGLE_FAN,
157
- UNIFORMS,
158
- ATTRIBUTES: [
159
- { name: "a_position", size: 2, type: FLOAT },
160
- { name: "a_size", size: 1, type: FLOAT },
161
- { name: "a_opacity", size: 1, type: FLOAT },
162
- { name: "a_circle", size: 1, type: FLOAT },
163
- { name: "a_placement", size: 1, type: FLOAT },
164
- { name: "a_fill", size: 4, type: UNSIGNED_BYTE, normalized: true },
165
- { name: "a_color", size: 4, type: UNSIGNED_BYTE, normalized: true },
166
- { name: "a_id", size: 4, type: UNSIGNED_BYTE, normalized: true },
167
- { name: "a_texture", size: 4, type: FLOAT },
168
- ],
169
- CONSTANT_ATTRIBUTES: [{ name: "a_angle", size: 1, type: FLOAT }],
170
- CONSTANT_DATA: [
171
- [NodeImageProgram.ANGLE_1],
172
- [NodeImageProgram.ANGLE_2],
173
- [NodeImageProgram.ANGLE_3],
174
- [NodeImageProgram.ANGLE_4],
175
- ],
176
- };
177
- }
178
-
179
- atlas: Atlas;
180
- texture: WebGLTexture;
181
- textureImage: ImageData;
182
- latestRenderParams?: RenderParams;
183
- textureManagerCallback: () => void;
184
-
185
- constructor(
186
- gl: WebGLRenderingContext,
187
- pickingBuffer: WebGLFramebuffer | null,
188
- renderer: Sigma<
189
- NodeAttributes & { bg: string; opacity: number },
190
- EdgeAttributes,
191
- Attributes
192
- >,
193
- ) {
194
- super(gl, pickingBuffer, renderer);
195
-
196
- this.textureManagerCallback = () => {
197
- if (!this) return;
198
-
199
- if (this.bindTexture) {
200
- this.atlas = textureManager.getAtlas();
201
- this.textureImage = textureManager.getTexture();
202
- this.bindTexture();
203
- if (this.latestRenderParams) this.render(this.latestRenderParams);
204
- }
205
-
206
- if (renderer?.refresh) renderer.refresh();
207
- };
208
- textureManager.on(
209
- TextureManager.NEW_TEXTURE_EVENT,
210
- this.textureManagerCallback,
211
- );
212
-
213
- this.atlas = textureManager.getAtlas();
214
- this.textureImage = textureManager.getTexture();
215
- this.texture = gl.createTexture() as AnyObject;
216
- this.bindTexture();
217
- }
218
-
219
- kill() {
220
- textureManager.off(
221
- TextureManager.NEW_TEXTURE_EVENT,
222
- this.textureManagerCallback,
223
- );
224
- }
225
-
226
- bindTexture() {
227
- const gl = this.normalProgram.gl;
228
-
229
- gl.bindTexture(gl.TEXTURE_2D, this.texture);
230
- gl.texImage2D(
231
- gl.TEXTURE_2D,
232
- 0,
233
- gl.RGBA,
234
- gl.RGBA,
235
- gl.UNSIGNED_BYTE,
236
- this.textureImage,
237
- );
238
- gl.generateMipmap(gl.TEXTURE_2D);
239
- }
240
-
241
- protected renderProgram(params: RenderParams, programInfo: ProgramInfo) {
242
- if (!programInfo.isPicking) {
243
- // Rebind texture (since it's been just unbound by picking):
244
- const gl = programInfo.gl;
245
- gl.bindTexture(gl.TEXTURE_2D, this.texture);
246
- }
247
- super.renderProgram(params, programInfo);
248
- }
249
-
250
- processVisibleItem(
251
- nodeIndex: number,
252
- startIndex: number,
253
- data: NodeDisplayData &
254
- NodeAttributes & { opacity: number; labelColor: string },
255
- ): void {
256
- const array = this.array;
257
-
258
- const badge = data.badge?.find((b) => b.position === badgePosition);
259
-
260
- const fill = floatColor(badge?.color ?? "#00000000");
261
- const color = floatColor(
262
- badge?.iconColor ??
263
- this.renderer.getSetting("labelColor").color ??
264
- "#000",
265
- );
266
-
267
- const imageSource = badge
268
- ? ICON_MAP[badge.type as any] ?? badge.path
269
- : undefined;
270
-
271
- const imagePosition = imageSource ? this.atlas[imageSource] : undefined;
272
-
273
- if (typeof imageSource === "string" && !imagePosition)
274
- void textureManager.registerImage(imageSource);
275
-
276
- array[startIndex++] = data.x;
277
- array[startIndex++] = data.y;
278
- array[startIndex++] = data.size;
279
- array[startIndex++] = !imageSource ? 0 : data.opacity ?? 1;
280
- array[startIndex++] = keepWithinCircle ? 1 : 0;
281
- array[startIndex++] = POSITION[badgePosition] ?? 0;
282
- array[startIndex++] = fill;
283
- array[startIndex++] = color;
284
- array[startIndex++] = nodeIndex;
285
-
286
- // Reference texture:
287
- if (imagePosition) {
288
- const { width, height } = this.textureImage;
289
- array[startIndex++] = imagePosition.x / width;
290
- array[startIndex++] = imagePosition.y / height;
291
- array[startIndex++] = imagePosition.size / width;
292
- array[startIndex++] = imagePosition.size / height;
293
- } else {
294
- array[startIndex++] = 0;
295
- array[startIndex++] = 0;
296
- array[startIndex++] = 0;
297
- array[startIndex++] = 0;
298
- }
299
- }
300
-
301
- setUniforms(
302
- params: RenderParams,
303
- { gl, uniformLocations }: ProgramInfo,
304
- ): void {
305
- const {
306
- u_sizeRatio,
307
- u_correctionRatio,
308
- u_matrix,
309
- u_atlas,
310
- u_keepWithinCircle,
311
- u_cameraAngle,
312
- u_percentagePadding,
313
- } = uniformLocations;
314
- this.latestRenderParams = params;
315
-
316
- gl.uniform1f(u_correctionRatio, params.correctionRatio);
317
- gl.uniform1f(u_sizeRatio, params.sizeRatio);
318
- gl.uniform1f(u_cameraAngle, params.cameraAngle);
319
- gl.uniform1f(u_percentagePadding, padding);
320
- gl.uniformMatrix3fv(u_matrix, false, params.matrix);
321
- gl.uniform1i(u_atlas, 0);
322
- gl.uniform1i(u_keepWithinCircle, keepWithinCircle ? 1 : 0);
323
- }
324
- };
325
- }
@@ -1,79 +0,0 @@
1
- /* istanbul ignore file */
2
-
3
- // language=GLSL
4
- const SHADER_SOURCE = /* glsl */ `
5
- precision highp float;
6
-
7
- varying vec4 v_fill;
8
- varying vec4 v_color;
9
- varying vec4 v_texture;
10
- varying vec2 v_diffVector;
11
- varying float v_opacity;
12
- varying float v_radius;
13
-
14
- uniform sampler2D u_atlas;
15
- uniform float u_correctionRatio;
16
- uniform float u_cameraAngle;
17
- uniform float u_percentagePadding;
18
- uniform bool u_keepWithinCircle;
19
- uniform bool u_shape;
20
-
21
- const vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);
22
-
23
- const float radius = 0.5;
24
-
25
- void main(void) {
26
- float border = 2.0 * u_correctionRatio;
27
- float dist = length(v_diffVector);
28
- vec4 color = v_fill;
29
-
30
- float c = cos(-u_cameraAngle);
31
- float s = sin(-u_cameraAngle);
32
- vec2 diffVector = mat2(c, s, -s, c) * (v_diffVector);
33
-
34
- // No antialiasing for picking mode:
35
- #ifdef PICKING_MODE
36
- border = 0.0;
37
- gl_FragColor = v_color;
38
-
39
- #else
40
- // First case: No image to display
41
- if (v_texture.w <= 0.0) {
42
- color = v_fill;
43
- }
44
-
45
- // Second case: Image loaded into the texture
46
- else {
47
- float paddingRatio = 1.0 + 2.0 * u_percentagePadding;
48
- float coef = 1.0;
49
- vec2 coordinateInTexture = diffVector * vec2(paddingRatio, -paddingRatio) / v_radius / 2.0 * coef + vec2(0.5, 0.5);
50
- vec4 texel = texture2D(u_atlas, (v_texture.xy + coordinateInTexture * v_texture.zw), -1.0);
51
-
52
- // Colorize all visible image pixels:
53
- color = mix(v_fill, v_color, texel.a);
54
-
55
- // Erase pixels "in the padding":
56
- if (abs(diffVector.x) > v_radius / paddingRatio || abs(diffVector.y) > v_radius / paddingRatio) {
57
- color = v_fill;
58
- }
59
- }
60
-
61
- // Crop in a circle when u_keepWithinCircle is truthy:
62
- if(v_opacity == 0.0) {
63
- gl_FragColor = transparent;
64
- }
65
- else if (dist - v_radius + border > border)
66
- gl_FragColor = transparent;
67
- else if (dist - v_radius + border > 0.0) {
68
- gl_FragColor = mix(v_fill, transparent, (dist - v_radius + border) / border);
69
- }
70
- else {
71
- gl_FragColor = mix(v_fill, color, v_opacity);
72
- }
73
- #endif
74
-
75
-
76
- }
77
- `;
78
-
79
- export default SHADER_SOURCE;
@@ -1,35 +0,0 @@
1
- /* istanbul ignore file */
2
-
3
- import createNodeImageProgram from "./factory";
4
-
5
- export { default as createNodeImageProgram } from "./factory";
6
- export const NodeBadgeProgram = (isCircle: boolean) => [
7
- createNodeImageProgram({
8
- keepWithinCircle: isCircle,
9
- badgePosition: "top-right",
10
- }),
11
- createNodeImageProgram({
12
- keepWithinCircle: isCircle,
13
- badgePosition: "top-left",
14
- }),
15
- createNodeImageProgram({
16
- keepWithinCircle: isCircle,
17
- badgePosition: "bottom-right",
18
- }),
19
- createNodeImageProgram({
20
- keepWithinCircle: isCircle,
21
- badgePosition: "bottom-left",
22
- }),
23
- createNodeImageProgram({
24
- keepWithinCircle: isCircle,
25
- badgePosition: "top",
26
- }),
27
- createNodeImageProgram({
28
- keepWithinCircle: isCircle,
29
- badgePosition: "left",
30
- }),
31
- createNodeImageProgram({
32
- keepWithinCircle: isCircle,
33
- badgePosition: "right",
34
- }),
35
- ];