@react-fabric/graph 1.0.0-beta.58

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 (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/css/styles.css +56 -0
  4. package/dist/cjs/_virtual/_commonjs-dynamic-modules.js +7 -0
  5. package/dist/cjs/_virtual/_commonjsHelpers.js +7 -0
  6. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +14 -0
  7. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +9 -0
  8. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +35 -0
  9. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +11 -0
  10. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +20 -0
  11. package/dist/cjs/_virtual/elk-worker.js +8 -0
  12. package/dist/cjs/_virtual/elk.bundled.js +5 -0
  13. package/dist/cjs/node_modules/elkjs/lib/elk.bundled.js +6667 -0
  14. package/dist/cjs/packages/graph/src/components/Context.js +108 -0
  15. package/dist/cjs/packages/graph/src/components/ContextMenu.js +134 -0
  16. package/dist/cjs/packages/graph/src/components/Tools.js +127 -0
  17. package/dist/cjs/packages/graph/src/components/Viewer.js +57 -0
  18. package/dist/cjs/packages/graph/src/constants/index.js +16 -0
  19. package/dist/cjs/packages/graph/src/graph/index.js +425 -0
  20. package/dist/cjs/packages/graph/src/hooks/sigmaDragSelect.js +169 -0
  21. package/dist/cjs/packages/graph/src/hooks/sigmaHilighter.js +83 -0
  22. package/dist/cjs/packages/graph/src/hooks/sigmaMouseActions.js +145 -0
  23. package/dist/cjs/packages/graph/src/hooks/useGraphology.js +41 -0
  24. package/dist/cjs/packages/graph/src/hooks/useSigma.js +112 -0
  25. package/dist/cjs/packages/graph/src/index.js +33 -0
  26. package/dist/cjs/packages/graph/src/programs/arrow-head/frag.glsl.js +8 -0
  27. package/dist/cjs/packages/graph/src/programs/arrow-head/index.js +142 -0
  28. package/dist/cjs/packages/graph/src/programs/arrow-head/vert.glsl.js +8 -0
  29. package/dist/cjs/packages/graph/src/programs/edge-curve/drawLabel.js +136 -0
  30. package/dist/cjs/packages/graph/src/programs/edge-curve/frag.glsl.js +8 -0
  31. package/dist/cjs/packages/graph/src/programs/edge-curve/index.js +157 -0
  32. package/dist/cjs/packages/graph/src/programs/edge-curve/vert.glsl.js +8 -0
  33. package/dist/cjs/packages/graph/src/programs/edge-line/drawLabel.js +70 -0
  34. package/dist/cjs/packages/graph/src/programs/edge-line/frag.glsl.js +8 -0
  35. package/dist/cjs/packages/graph/src/programs/edge-line/index.js +166 -0
  36. package/dist/cjs/packages/graph/src/programs/edge-line/vert.glsl.js +8 -0
  37. package/dist/cjs/packages/graph/src/programs/node-badge/factory.js +249 -0
  38. package/dist/cjs/packages/graph/src/programs/node-badge/frag.glsl.js +8 -0
  39. package/dist/cjs/packages/graph/src/programs/node-badge/index.js +33 -0
  40. package/dist/cjs/packages/graph/src/programs/node-badge/texture.js +455 -0
  41. package/dist/cjs/packages/graph/src/programs/node-badge/vert.glsl.js +19 -0
  42. package/dist/cjs/packages/graph/src/programs/node-circle/base/drawHover.js +70 -0
  43. package/dist/cjs/packages/graph/src/programs/node-circle/base/drawLabel.js +112 -0
  44. package/dist/cjs/packages/graph/src/programs/node-circle/base/frag.glsl.js +8 -0
  45. package/dist/cjs/packages/graph/src/programs/node-circle/base/index.js +136 -0
  46. package/dist/cjs/packages/graph/src/programs/node-circle/base/vert.glsl.js +8 -0
  47. package/dist/cjs/packages/graph/src/programs/node-circle/index.js +15 -0
  48. package/dist/cjs/packages/graph/src/programs/node-image/factory.js +223 -0
  49. package/dist/cjs/packages/graph/src/programs/node-image/frag.glsl.js +8 -0
  50. package/dist/cjs/packages/graph/src/programs/node-image/index.js +14 -0
  51. package/dist/cjs/packages/graph/src/programs/node-image/texture.js +472 -0
  52. package/dist/cjs/packages/graph/src/programs/node-image/vert.glsl.js +8 -0
  53. package/dist/cjs/packages/graph/src/programs/node-rect/base/drawHover.js +67 -0
  54. package/dist/cjs/packages/graph/src/programs/node-rect/base/drawLabel.js +106 -0
  55. package/dist/cjs/packages/graph/src/programs/node-rect/base/frag.glsl.js +8 -0
  56. package/dist/cjs/packages/graph/src/programs/node-rect/base/index.js +135 -0
  57. package/dist/cjs/packages/graph/src/programs/node-rect/base/vert.glsl.js +8 -0
  58. package/dist/cjs/packages/graph/src/programs/node-rect/index.js +15 -0
  59. package/dist/esm/_virtual/_commonjs-dynamic-modules.js +7 -0
  60. package/dist/esm/_virtual/_commonjsHelpers.js +7 -0
  61. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +14 -0
  62. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +9 -0
  63. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +34 -0
  64. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +13 -0
  65. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +20 -0
  66. package/dist/esm/_virtual/elk-worker.js +8 -0
  67. package/dist/esm/_virtual/elk.bundled.js +5 -0
  68. package/dist/esm/node_modules/elkjs/lib/elk.bundled.js +6667 -0
  69. package/dist/esm/packages/graph/src/components/Context.js +107 -0
  70. package/dist/esm/packages/graph/src/components/ContextMenu.js +134 -0
  71. package/dist/esm/packages/graph/src/components/Tools.js +127 -0
  72. package/dist/esm/packages/graph/src/components/Viewer.js +57 -0
  73. package/dist/esm/packages/graph/src/constants/index.js +16 -0
  74. package/dist/esm/packages/graph/src/graph/index.js +425 -0
  75. package/dist/esm/packages/graph/src/hooks/sigmaDragSelect.js +169 -0
  76. package/dist/esm/packages/graph/src/hooks/sigmaHilighter.js +83 -0
  77. package/dist/esm/packages/graph/src/hooks/sigmaMouseActions.js +145 -0
  78. package/dist/esm/packages/graph/src/hooks/useGraphology.js +41 -0
  79. package/dist/esm/packages/graph/src/hooks/useSigma.js +112 -0
  80. package/dist/esm/packages/graph/src/index.js +30 -0
  81. package/dist/esm/packages/graph/src/programs/arrow-head/frag.glsl.js +8 -0
  82. package/dist/esm/packages/graph/src/programs/arrow-head/index.js +141 -0
  83. package/dist/esm/packages/graph/src/programs/arrow-head/vert.glsl.js +8 -0
  84. package/dist/esm/packages/graph/src/programs/edge-curve/drawLabel.js +136 -0
  85. package/dist/esm/packages/graph/src/programs/edge-curve/frag.glsl.js +8 -0
  86. package/dist/esm/packages/graph/src/programs/edge-curve/index.js +156 -0
  87. package/dist/esm/packages/graph/src/programs/edge-curve/vert.glsl.js +8 -0
  88. package/dist/esm/packages/graph/src/programs/edge-line/drawLabel.js +70 -0
  89. package/dist/esm/packages/graph/src/programs/edge-line/frag.glsl.js +8 -0
  90. package/dist/esm/packages/graph/src/programs/edge-line/index.js +166 -0
  91. package/dist/esm/packages/graph/src/programs/edge-line/vert.glsl.js +8 -0
  92. package/dist/esm/packages/graph/src/programs/node-badge/factory.js +249 -0
  93. package/dist/esm/packages/graph/src/programs/node-badge/frag.glsl.js +8 -0
  94. package/dist/esm/packages/graph/src/programs/node-badge/index.js +32 -0
  95. package/dist/esm/packages/graph/src/programs/node-badge/texture.js +445 -0
  96. package/dist/esm/packages/graph/src/programs/node-badge/vert.glsl.js +19 -0
  97. package/dist/esm/packages/graph/src/programs/node-circle/base/drawHover.js +70 -0
  98. package/dist/esm/packages/graph/src/programs/node-circle/base/drawLabel.js +112 -0
  99. package/dist/esm/packages/graph/src/programs/node-circle/base/frag.glsl.js +8 -0
  100. package/dist/esm/packages/graph/src/programs/node-circle/base/index.js +136 -0
  101. package/dist/esm/packages/graph/src/programs/node-circle/base/vert.glsl.js +8 -0
  102. package/dist/esm/packages/graph/src/programs/node-circle/index.js +15 -0
  103. package/dist/esm/packages/graph/src/programs/node-image/factory.js +223 -0
  104. package/dist/esm/packages/graph/src/programs/node-image/frag.glsl.js +8 -0
  105. package/dist/esm/packages/graph/src/programs/node-image/index.js +13 -0
  106. package/dist/esm/packages/graph/src/programs/node-image/texture.js +462 -0
  107. package/dist/esm/packages/graph/src/programs/node-image/vert.glsl.js +8 -0
  108. package/dist/esm/packages/graph/src/programs/node-rect/base/drawHover.js +67 -0
  109. package/dist/esm/packages/graph/src/programs/node-rect/base/drawLabel.js +106 -0
  110. package/dist/esm/packages/graph/src/programs/node-rect/base/frag.glsl.js +8 -0
  111. package/dist/esm/packages/graph/src/programs/node-rect/base/index.js +135 -0
  112. package/dist/esm/packages/graph/src/programs/node-rect/base/vert.glsl.js +8 -0
  113. package/dist/esm/packages/graph/src/programs/node-rect/index.js +15 -0
  114. package/dist/types/components/Context.d.ts +18 -0
  115. package/dist/types/components/ContextMenu.d.ts +1 -0
  116. package/dist/types/components/Tools.d.ts +1 -0
  117. package/dist/types/components/Viewer.d.ts +2 -0
  118. package/dist/types/constants/index.d.ts +12 -0
  119. package/dist/types/graph/index.d.ts +30 -0
  120. package/dist/types/graph/layout.worker.d.ts +1 -0
  121. package/dist/types/hooks/sigmaDragSelect.d.ts +8 -0
  122. package/dist/types/hooks/sigmaHilighter.d.ts +3 -0
  123. package/dist/types/hooks/sigmaMouseActions.d.ts +3 -0
  124. package/dist/types/hooks/useGraphology.d.ts +6 -0
  125. package/dist/types/hooks/useSigma.d.ts +8 -0
  126. package/dist/types/index.d.ts +3 -0
  127. package/dist/types/programs/arrow-head/frag.glsl.d.ts +2 -0
  128. package/dist/types/programs/arrow-head/index.d.ts +9 -0
  129. package/dist/types/programs/arrow-head/vert.glsl.d.ts +2 -0
  130. package/dist/types/programs/edge-curve/drawLabel.d.ts +6 -0
  131. package/dist/types/programs/edge-curve/frag.glsl.d.ts +2 -0
  132. package/dist/types/programs/edge-curve/index.d.ts +43 -0
  133. package/dist/types/programs/edge-curve/vert.glsl.d.ts +2 -0
  134. package/dist/types/programs/edge-line/drawLabel.d.ts +5 -0
  135. package/dist/types/programs/edge-line/frag.glsl.d.ts +2 -0
  136. package/dist/types/programs/edge-line/index.d.ts +11 -0
  137. package/dist/types/programs/edge-line/vert.glsl.d.ts +2 -0
  138. package/dist/types/programs/node-badge/factory.d.ts +27 -0
  139. package/dist/types/programs/node-badge/frag.glsl.d.ts +2 -0
  140. package/dist/types/programs/node-badge/index.d.ts +5 -0
  141. package/dist/types/programs/node-badge/texture.d.ts +102 -0
  142. package/dist/types/programs/node-badge/vert.glsl.d.ts +2 -0
  143. package/dist/types/programs/node-circle/base/drawHover.d.ts +8 -0
  144. package/dist/types/programs/node-circle/base/drawLabel.d.ts +8 -0
  145. package/dist/types/programs/node-circle/base/frag.glsl.d.ts +2 -0
  146. package/dist/types/programs/node-circle/base/index.d.ts +37 -0
  147. package/dist/types/programs/node-circle/base/vert.glsl.d.ts +2 -0
  148. package/dist/types/programs/node-circle/index.d.ts +11 -0
  149. package/dist/types/programs/node-image/factory.d.ts +25 -0
  150. package/dist/types/programs/node-image/frag.glsl.d.ts +2 -0
  151. package/dist/types/programs/node-image/index.d.ts +5 -0
  152. package/dist/types/programs/node-image/texture.d.ts +102 -0
  153. package/dist/types/programs/node-image/vert.glsl.d.ts +2 -0
  154. package/dist/types/programs/node-rect/base/drawHover.d.ts +8 -0
  155. package/dist/types/programs/node-rect/base/drawLabel.d.ts +8 -0
  156. package/dist/types/programs/node-rect/base/frag.glsl.d.ts +2 -0
  157. package/dist/types/programs/node-rect/base/index.d.ts +34 -0
  158. package/dist/types/programs/node-rect/base/vert.glsl.d.ts +2 -0
  159. package/dist/types/programs/node-rect/index.d.ts +11 -0
  160. package/dist/types/types/index.d.ts +189 -0
  161. package/package.json +69 -0
  162. package/src/components/Context.tsx +135 -0
  163. package/src/components/ContextMenu.tsx +156 -0
  164. package/src/components/Tools.tsx +107 -0
  165. package/src/components/Viewer.tsx +75 -0
  166. package/src/constants/index.ts +22 -0
  167. package/src/graph/index.ts +428 -0
  168. package/src/graph/layout.worker.ts +42 -0
  169. package/src/hooks/sigmaDragSelect.ts +219 -0
  170. package/src/hooks/sigmaHilighter.ts +107 -0
  171. package/src/hooks/sigmaMouseActions.ts +153 -0
  172. package/src/hooks/useGraphology.ts +31 -0
  173. package/src/hooks/useSigma.ts +118 -0
  174. package/src/index.ts +34 -0
  175. package/src/programs/arrow-head/frag.glsl.ts +18 -0
  176. package/src/programs/arrow-head/index.ts +148 -0
  177. package/src/programs/arrow-head/vert.glsl.ts +75 -0
  178. package/src/programs/edge-curve/drawLabel.ts +166 -0
  179. package/src/programs/edge-curve/frag.glsl.ts +86 -0
  180. package/src/programs/edge-curve/index.ts +158 -0
  181. package/src/programs/edge-curve/vert.glsl.ts +110 -0
  182. package/src/programs/edge-line/drawLabel.ts +113 -0
  183. package/src/programs/edge-line/frag.glsl.ts +34 -0
  184. package/src/programs/edge-line/index.ts +165 -0
  185. package/src/programs/edge-line/vert.glsl.ts +104 -0
  186. package/src/programs/node-badge/factory.ts +327 -0
  187. package/src/programs/node-badge/frag.glsl.ts +79 -0
  188. package/src/programs/node-badge/index.ts +35 -0
  189. package/src/programs/node-badge/texture.ts +425 -0
  190. package/src/programs/node-badge/vert.glsl.ts +99 -0
  191. package/src/programs/node-circle/base/drawHover.ts +80 -0
  192. package/src/programs/node-circle/base/drawLabel.ts +145 -0
  193. package/src/programs/node-circle/base/frag.glsl.ts +72 -0
  194. package/src/programs/node-circle/base/index.ts +102 -0
  195. package/src/programs/node-circle/base/vert.glsl.ts +83 -0
  196. package/src/programs/node-circle/index.ts +19 -0
  197. package/src/programs/node-image/factory.ts +301 -0
  198. package/src/programs/node-image/frag.glsl.ts +97 -0
  199. package/src/programs/node-image/index.ts +7 -0
  200. package/src/programs/node-image/texture.ts +435 -0
  201. package/src/programs/node-image/vert.glsl.ts +60 -0
  202. package/src/programs/node-rect/base/drawHover.ts +77 -0
  203. package/src/programs/node-rect/base/drawLabel.ts +149 -0
  204. package/src/programs/node-rect/base/frag.glsl.ts +67 -0
  205. package/src/programs/node-rect/base/index.ts +109 -0
  206. package/src/programs/node-rect/base/vert.glsl.ts +87 -0
  207. package/src/programs/node-rect/index.ts +19 -0
  208. package/src/types/index.ts +210 -0
@@ -0,0 +1,425 @@
1
+ 'use strict';
2
+
3
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
4
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
5
+ var _typeof = require('@babel/runtime/helpers/typeof');
6
+ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
7
+ var _createClass = require('@babel/runtime/helpers/createClass');
8
+ var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
9
+ var _get = require('@babel/runtime/helpers/get');
10
+ var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
11
+ var _inherits = require('@babel/runtime/helpers/inherits');
12
+ var _regeneratorRuntime = require('@babel/runtime/regenerator');
13
+ var utilities = require('@react-fabric/utilities');
14
+ var edgeCurve = require('@sigma/edge-curve');
15
+ var elk_bundled = require('../../../../node_modules/elkjs/lib/elk.bundled.js');
16
+ var elkWorker = require('../../../../_virtual/elk-worker.js');
17
+ var Graphology = require('graphology');
18
+ var graphologyLayout = require('graphology-layout');
19
+ var utils = require('sigma/utils');
20
+
21
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
22
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
23
+ var Graph = /*#__PURE__*/function (_Graphology) {
24
+ function Graph(options) {
25
+ var _this;
26
+ _classCallCheck(this, Graph);
27
+ _this = _callSuper(this, Graph, [options]);
28
+ var edgeHandler = utilities.debounce(function () {
29
+ return _this.checkParallelEdges();
30
+ });
31
+ _this.on("edgeAdded", edgeHandler);
32
+ _this.on("edgeDropped", edgeHandler);
33
+ var fireNodeSelect = utilities.debounce(function () {
34
+ _this.emit("nodesSelected", _this.filterNodes(function (_, atts) {
35
+ return atts.selected;
36
+ }));
37
+ });
38
+ var nodeSelectHandler = function nodeSelectHandler(_ref) {
39
+ var name = _ref.name;
40
+ if (name === "selected") {
41
+ fireNodeSelect();
42
+ }
43
+ };
44
+ _this.on("nodeDropped", fireNodeSelect);
45
+ _this.on("nodeAttributesUpdated", nodeSelectHandler);
46
+ return _this;
47
+ }
48
+ _inherits(Graph, _Graphology);
49
+ return _createClass(Graph, [{
50
+ key: "on",
51
+ value: function on(type, listener) {
52
+ return _get(_getPrototypeOf(Graph.prototype), "on", this).call(this, type, listener);
53
+ }
54
+ }, {
55
+ key: "off",
56
+ value: function off(type, listener) {
57
+ return _get(_getPrototypeOf(Graph.prototype), "off", this).call(this, type, listener);
58
+ }
59
+ }, {
60
+ key: "emit",
61
+ value: function emit(type) {
62
+ var _get2;
63
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
64
+ args[_key - 1] = arguments[_key];
65
+ }
66
+ return (_get2 = _get(_getPrototypeOf(Graph.prototype), "emit", this)).call.apply(_get2, [this, type].concat(args));
67
+ }
68
+ }, {
69
+ key: "mergeNodes",
70
+ value: function mergeNodes(key, nodes, attributesOrNodeReducer, edgeReducer) {
71
+ var _this2 = this;
72
+ if (!nodes.length) return;
73
+ var newNodeAttributes = {};
74
+ var edgeList = [];
75
+ var attributeList = [];
76
+ nodes.forEach(function (n) {
77
+ var atts = _this2.getNodeAttributes(n);
78
+ if (atts) {
79
+ attributeList.push(atts);
80
+ }
81
+ var edges = _this2.edges(n);
82
+ if (edges.length) {
83
+ edges.forEach(function (e) {
84
+ var source = _this2.source(e);
85
+ var target = _this2.target(e);
86
+ var edge = _this2.getEdgeAttributes(e);
87
+ if (edge) {
88
+ edgeList.push({
89
+ key: e,
90
+ // move source to new node if source is old node
91
+ source: source === n ? key : source,
92
+ // move target to new node if target is old node
93
+ target: target === n ? key : target,
94
+ attributes: edge
95
+ });
96
+ }
97
+ });
98
+ }
99
+ });
100
+ if (typeof attributesOrNodeReducer === "function") {
101
+ newNodeAttributes = attributesOrNodeReducer(attributeList);
102
+ } else if (_typeof(attributesOrNodeReducer) === "object") {
103
+ Object.assign(newNodeAttributes, attributesOrNodeReducer);
104
+ }
105
+ if (typeof edgeReducer === "function") {
106
+ edgeList = edgeReducer(edgeList);
107
+ }
108
+ this.dropNodes(nodes);
109
+ this["import"]({
110
+ nodes: [{
111
+ key: key,
112
+ attributes: newNodeAttributes
113
+ }],
114
+ edges: edgeList
115
+ }, true);
116
+ return this;
117
+ }
118
+ }, {
119
+ key: "groupNodes",
120
+ value: function groupNodes(key, nodes, attributesOrNodeReducer, edgeReducer) {
121
+ var _this3 = this;
122
+ if (!nodes.length) return;
123
+ var newNodeAttributes = {
124
+ nodeList: nodes,
125
+ isGroup: true,
126
+ expanded: false
127
+ };
128
+ var edgeList = [];
129
+ var movedEdges = [];
130
+ var attributeList = [];
131
+ nodes.forEach(function (n) {
132
+ var atts = _this3.getNodeAttributes(n);
133
+ if (atts) {
134
+ attributeList.push(atts);
135
+ }
136
+ var edges = _this3.edges(n);
137
+ if (edges.length) {
138
+ var nodeEdges = edges.map(function (e) {
139
+ var source = _this3.source(e);
140
+ var target = _this3.target(e);
141
+ var edge = _this3.getEdgeAttributes(e);
142
+ if (edge) {
143
+ movedEdges.push({
144
+ key: e,
145
+ // move source to group node if source is not old node
146
+ source: source === n ? n : key,
147
+ // move target to group node if target is not old node
148
+ target: target === n ? n : key,
149
+ attributes: edge
150
+ });
151
+ // make new connection to neighboring node
152
+ edgeList.push({
153
+ key: "".concat(key, "-").concat(e),
154
+ source: source === n ? key : source,
155
+ target: target === n ? key : target,
156
+ attributes: edge
157
+ });
158
+ }
159
+ _this3.dropEdge(e);
160
+ return {
161
+ key: e,
162
+ // move source to group node if source is not old node
163
+ source: source,
164
+ // move target to group node if target is not old node
165
+ target: target,
166
+ attributes: edge
167
+ };
168
+ });
169
+ _this3.setNodeAttribute(n, "hidden", true);
170
+ _this3.setNodeAttribute(n, "selected", false);
171
+ // store original edges for grouped node
172
+ _this3.setNodeAttribute(n, "originalEdges", nodeEdges);
173
+ }
174
+ });
175
+ if (typeof attributesOrNodeReducer === "function") {
176
+ newNodeAttributes = Object.assign(newNodeAttributes, attributesOrNodeReducer(attributeList));
177
+ } else if (_typeof(attributesOrNodeReducer) === "object") {
178
+ Object.assign(newNodeAttributes, attributesOrNodeReducer);
179
+ }
180
+ if (typeof edgeReducer === "function") {
181
+ edgeList = edgeReducer(edgeList);
182
+ }
183
+ this["import"]({
184
+ nodes: [{
185
+ key: key,
186
+ attributes: newNodeAttributes
187
+ }],
188
+ edges: edgeList.concat(movedEdges)
189
+ }, true);
190
+ return this;
191
+ }
192
+ }, {
193
+ key: "ungroupNode",
194
+ value: function ungroupNode(node) {
195
+ var _this4 = this;
196
+ var atts = this.getNodeAttributes(node);
197
+ if (!atts || !atts.isGroup) return;
198
+ var nodes = atts.nodeList || [];
199
+ nodes.forEach(function (n) {
200
+ var originalEdges = _this4.getNodeAttribute(n, "originalEdges");
201
+ if (originalEdges && Array.isArray(originalEdges)) {
202
+ originalEdges.forEach(function (e) {
203
+ _this4.addEdgeWithKey(e.key, e.source, e.target, e.attributes);
204
+ });
205
+ }
206
+ _this4.setNodeAttribute(n, "hidden", false);
207
+ _this4.removeNodeAttribute(n, "originalEdges");
208
+ });
209
+ this.dropNode(node);
210
+ return this;
211
+ }
212
+ }, {
213
+ key: "toggleExpanded",
214
+ value: function toggleExpanded(node, force) {
215
+ var _this5 = this;
216
+ var expanded = force !== null && force !== void 0 ? force : !this.getNodeAttribute(node, "expanded");
217
+ var nodes = this.getNodeAttribute(node, "nodeList");
218
+ this.setNodeAttribute(node, "expanded", expanded);
219
+ nodes === null || nodes === void 0 || nodes.forEach(function (n) {
220
+ _this5.setNodeAttribute(n, "hidden", !expanded);
221
+ });
222
+ return this;
223
+ }
224
+
225
+ // @ts-expect-error ignore
226
+ }, {
227
+ key: "import",
228
+ value: function _import(data, merge) {
229
+ var _this6 = this;
230
+ var newNodes = [];
231
+ if (data instanceof Graph) {
232
+ newNodes.push.apply(newNodes, _toConsumableArray(data.nodes()));
233
+ } else {
234
+ newNodes.push.apply(newNodes, _toConsumableArray(data.nodes.map(function (n) {
235
+ return n.key;
236
+ })));
237
+ }
238
+ _get(_getPrototypeOf(Graph.prototype), "import", this).call(this, data, merge);
239
+ // fire events for nodes added
240
+ this.emit("nodesLoaded", newNodes);
241
+ // apply random positions for nodes
242
+ var positions = graphologyLayout.random(this);
243
+ utils.animateNodes(this, positions, {
244
+ duration: 200
245
+ }, function () {
246
+ // fire layout done event
247
+ _this6.emit("layoutDone");
248
+ });
249
+ return this;
250
+ }
251
+
252
+ // circularLayout() {
253
+ // if (this.size === 0) return this;
254
+ // const positions = circular(this as any);
255
+ // animateNodes(
256
+ // this as any,
257
+ // positions,
258
+ // {
259
+ // duration: 200,
260
+ // },
261
+ // () => {
262
+ // this.emit("layoutDone");
263
+ // },
264
+ // );
265
+ // return this;
266
+ // }
267
+
268
+ // private _timer: any;
269
+ // private _worker?: forceAtlas2Worker;
270
+ // forceLayout(settings: ForceAtlas2Settings = {}) {
271
+ // if (this.size === 0) return this;
272
+ // const sensibleSettings = forceAtlas2.inferSettings(this as any);
273
+ // if (this._worker?.isRunning()) {
274
+ // clearTimeout(this._timer);
275
+ // }
276
+ // this._worker?.kill();
277
+ // this._worker = new forceAtlas2Worker(this as any, {
278
+ // settings: {
279
+ // ...sensibleSettings,
280
+ // ...settings,
281
+ // },
282
+ // });
283
+ // this.emit("layoutRunning", true);
284
+ // this._worker.start();
285
+ // this._timer = setTimeout(
286
+ // () => {
287
+ // this._worker?.stop();
288
+ // this._worker?.kill();
289
+ // this.emit("layoutRunning", false);
290
+ // this.emit("layoutDone");
291
+ // },
292
+ // // @ts-expect-error ignore
293
+ // this.nodes().length * window.__GRAPH_LAYOUT_DURATION_MULTIPLIER__,
294
+ // );
295
+ // return this;
296
+ // }
297
+
298
+ // @ts-expect-error ignore
299
+ }, {
300
+ key: "elkLayout",
301
+ value: function () {
302
+ var _elkLayout = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(type) {
303
+ var _this7 = this;
304
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
305
+ while (1) switch (_context.prev = _context.next) {
306
+ case 0:
307
+ if (!this.elk) this.elk = new elk_bundled({
308
+ workerFactory: function workerFactory() {
309
+ return new elkWorker();
310
+ }
311
+ });
312
+ this.emit("layoutRunning", true);
313
+ this.elk.layout({
314
+ id: "root",
315
+ width: 1600,
316
+ height: 900,
317
+ children: this.mapNodes(function (node, atts) {
318
+ var _atts$size, _atts$weight, _atts$size2, _atts$weight2;
319
+ return {
320
+ id: node,
321
+ width: (_atts$size = atts.size) !== null && _atts$size !== void 0 ? _atts$size : Math.max(16, ((_atts$weight = atts.weight) !== null && _atts$weight !== void 0 ? _atts$weight : 0) * 3),
322
+ height: (_atts$size2 = atts.size) !== null && _atts$size2 !== void 0 ? _atts$size2 : Math.max(16, ((_atts$weight2 = atts.weight) !== null && _atts$weight2 !== void 0 ? _atts$weight2 : 0) * 3)
323
+ };
324
+ }),
325
+ edges: this.mapEdges(function (edge, _, source, target) {
326
+ return {
327
+ id: edge,
328
+ sources: [source],
329
+ targets: [target]
330
+ };
331
+ })
332
+ }, {
333
+ logging: true,
334
+ measureExecutionTime: true,
335
+ layoutOptions: {
336
+ "elk.algorithm": type
337
+ }
338
+ }).then(function (graph) {
339
+ var _graph$children$map, _graph$children;
340
+ var positions = Object.fromEntries((_graph$children$map = (_graph$children = graph.children) === null || _graph$children === void 0 ? void 0 : _graph$children.map(function (node) {
341
+ var _node$x, _node$y;
342
+ return [node.id, {
343
+ x: (_node$x = node.x) !== null && _node$x !== void 0 ? _node$x : 0,
344
+ y: (_node$y = node.y) !== null && _node$y !== void 0 ? _node$y : 0
345
+ }];
346
+ })) !== null && _graph$children$map !== void 0 ? _graph$children$map : []);
347
+ utils.animateNodes(_this7, positions, {
348
+ duration: 200
349
+ }, function () {
350
+ setTimeout(function () {
351
+ _this7.emit("layoutDone");
352
+ }, 100);
353
+ });
354
+ })["catch"](console.error)["finally"](function () {
355
+ _this7.emit("layoutRunning", false);
356
+ });
357
+ case 3:
358
+ case "end":
359
+ return _context.stop();
360
+ }
361
+ }, _callee, this);
362
+ }));
363
+ function elkLayout(_x) {
364
+ return _elkLayout.apply(this, arguments);
365
+ }
366
+ return elkLayout;
367
+ }()
368
+ }, {
369
+ key: "dropNodes",
370
+ value: function dropNodes(nodes) {
371
+ var _this8 = this;
372
+ if (!nodes.length) return;
373
+ nodes.forEach(function (n) {
374
+ return _this8.dropNode(n);
375
+ });
376
+ }
377
+
378
+ /**
379
+ * parallel edge check to be called after adding edges
380
+ */
381
+ }, {
382
+ key: "getCurvature",
383
+ value: function getCurvature(index) {
384
+ var maxIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
385
+ if (maxIndex <= 0) throw new Error("Invalid maxIndex");
386
+ if (index < 0) return -this.getCurvature(-index, maxIndex);
387
+ var amplitude = 0.25;
388
+ var maxCurvature = amplitude * (1 - Math.exp(-maxIndex / amplitude)) * edgeCurve.DEFAULT_EDGE_CURVATURE;
389
+ return maxCurvature * index / maxIndex;
390
+ }
391
+ }, {
392
+ key: "checkParallelEdges",
393
+ value: function checkParallelEdges() {
394
+ var _this9 = this;
395
+ // Use dedicated helper to identify parallel edges:
396
+ // @ts-expect-error ignore
397
+ edgeCurve.indexParallelEdgesIndex(this, {
398
+ edgeIndexAttribute: "parallelIndex",
399
+ edgeMinIndexAttribute: "parallelMinIndex",
400
+ edgeMaxIndexAttribute: "parallelMaxIndex"
401
+ });
402
+ // Adapt types and curvature of parallel edges for rendering:
403
+ this.forEachEdge(function (edge, _ref2) {
404
+ var parallelIndex = _ref2.parallelIndex,
405
+ parallelMinIndex = _ref2.parallelMinIndex,
406
+ parallelMaxIndex = _ref2.parallelMaxIndex;
407
+ if (typeof parallelMinIndex === "number") {
408
+ _this9.mergeEdgeAttributes(edge, {
409
+ type: parallelIndex ? "curved" : "line",
410
+ curvature: _this9.getCurvature(parallelIndex !== null && parallelIndex !== void 0 ? parallelIndex : 1, parallelMaxIndex !== null && parallelMaxIndex !== void 0 ? parallelMaxIndex : 1)
411
+ });
412
+ } else if (typeof parallelIndex === "number") {
413
+ _this9.mergeEdgeAttributes(edge, {
414
+ type: "curved",
415
+ curvature: _this9.getCurvature(parallelIndex !== null && parallelIndex !== void 0 ? parallelIndex : 1, parallelMaxIndex !== null && parallelMaxIndex !== void 0 ? parallelMaxIndex : 1)
416
+ });
417
+ } else {
418
+ _this9.setEdgeAttribute(edge, "type", "line");
419
+ }
420
+ });
421
+ }
422
+ }]);
423
+ }(Graphology);
424
+
425
+ exports.Graph = Graph;
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var react = require('react');
5
+
6
+ var useDragSelection = function useDragSelection(renderer) {
7
+ var isDrawing = react.useRef(false);
8
+ var drawPoints = react.useRef([]);
9
+ var drawingCanvas = react.useRef(undefined);
10
+ var drawingContext = react.useRef(null);
11
+ var _useState = react.useState(false),
12
+ _useState2 = _slicedToArray(_useState, 2),
13
+ mode = _useState2[0],
14
+ setMode = _useState2[1];
15
+ var selectionMode = react.useRef(false);
16
+ react.useEffect(function () {
17
+ selectionMode.current = mode;
18
+ }, [mode]);
19
+ var startDrawing = function startDrawing(evt) {
20
+ isDrawing.current = true;
21
+ if (drawingCanvas.current) {
22
+ drawingContext.current = drawingCanvas.current.getContext("2d");
23
+ if (drawingContext.current) {
24
+ drawingContext.current.setLineDash([2, 4]);
25
+ drawingContext.current.lineWidth = 2;
26
+ drawingContext.current.strokeStyle = "#3a766c40";
27
+ drawingContext.current.fillStyle = "#3a766c10";
28
+ drawingContext.current.lineJoin = "round";
29
+ drawingContext.current.lineCap = "round";
30
+ }
31
+ var drawingRectangle = drawingCanvas.current.getBoundingClientRect();
32
+ drawPoints.current = [{
33
+ x: evt.clientX - drawingRectangle.left,
34
+ y: evt.clientY - drawingRectangle.top
35
+ }];
36
+ }
37
+ evt.stopImmediatePropagation();
38
+ evt.stopPropagation();
39
+ evt.preventDefault();
40
+ };
41
+ var drawPath = function drawPath(evt) {
42
+ if (!isDrawing) return;
43
+ if (drawingCanvas.current) {
44
+ var drawingRectangle = drawingCanvas.current.getBoundingClientRect();
45
+ if (drawingContext.current) {
46
+ if (selectionMode.current === "rectangle") {
47
+ drawingContext.current.clearRect(0, 0, drawingCanvas.current.width, drawingCanvas.current.height);
48
+ var _drawPoints$current$ = drawPoints.current[0],
49
+ x = _drawPoints$current$.x,
50
+ y = _drawPoints$current$.y;
51
+ drawingContext.current.beginPath();
52
+ drawingContext.current.rect(Math.min(x, evt.clientX), Math.min(y, evt.clientY), Math.abs(evt.clientX - drawingRectangle.left - x), Math.abs(evt.clientY - drawingRectangle.top - y));
53
+ drawingContext.current.stroke();
54
+ drawingContext.current.fill();
55
+ }
56
+ if (selectionMode.current === "lasso") {
57
+ drawPoints.current.push({
58
+ x: evt.clientX - drawingRectangle.left,
59
+ y: evt.clientY - drawingRectangle.top
60
+ });
61
+
62
+ // Clear the canvas
63
+ drawingContext.current.clearRect(0, 0, drawingContext.current.canvas.width, drawingContext.current.canvas.height);
64
+
65
+ // Redraw the complete path for a smoother effect
66
+ // Even smoother with quadratic curves
67
+ var sourcePoint = drawPoints.current[0];
68
+ var destinationPoint = drawPoints.current[1];
69
+ var pointsLength = drawPoints.current.length;
70
+ var getMiddlePointCoordinates = function getMiddlePointCoordinates(firstPoint, secondPoint) {
71
+ return {
72
+ x: firstPoint.x + (secondPoint.x - firstPoint.x) / 2,
73
+ y: firstPoint.y + (secondPoint.y - firstPoint.y) / 2
74
+ };
75
+ };
76
+ drawingContext.current.beginPath();
77
+ drawingContext.current.moveTo(sourcePoint.x, sourcePoint.y);
78
+ for (var i = 1; i < pointsLength; i++) {
79
+ var middlePoint = getMiddlePointCoordinates(sourcePoint, destinationPoint);
80
+ // drawingContext.current.lineTo(drawPoints[i].x, drawPoints[i].y);
81
+ drawingContext.current.quadraticCurveTo(sourcePoint.x, sourcePoint.y, middlePoint.x, middlePoint.y);
82
+ sourcePoint = drawPoints.current[i];
83
+ destinationPoint = drawPoints.current[i + 1];
84
+ }
85
+ drawingContext.current.lineTo(sourcePoint.x, sourcePoint.y);
86
+ drawingContext.current.stroke();
87
+ drawingContext.current.fill();
88
+ }
89
+ }
90
+ }
91
+ };
92
+ var stopDrawing = function stopDrawing(evt) {
93
+ if (!renderer) return;
94
+ if (!isDrawing) return;
95
+ var nodes = Array.from(renderer.getGraph().nodes());
96
+ nodes.forEach(function (node) {
97
+ if (!renderer) return;
98
+ var _ref = renderer.getNodeDisplayData(node),
99
+ _ref$x = _ref.x,
100
+ nx = _ref$x === void 0 ? 0 : _ref$x,
101
+ _ref$y = _ref.y,
102
+ ny = _ref$y === void 0 ? 0 : _ref$y,
103
+ hidden = _ref.hidden;
104
+ var _renderer$framedGraph = renderer.framedGraphToViewport({
105
+ x: nx,
106
+ y: ny
107
+ }),
108
+ x = _renderer$framedGraph.x,
109
+ y = _renderer$framedGraph.y;
110
+ if (evt.shiftKey) {
111
+ var _drawingContext$curre;
112
+ ((_drawingContext$curre = drawingContext.current) === null || _drawingContext$curre === void 0 ? void 0 : _drawingContext$curre.isPointInPath(x, y)) && !hidden && renderer.getGraph().setNodeAttribute(node, "selected", true);
113
+ } else {
114
+ var _drawingContext$curre2;
115
+ !hidden && renderer.getGraph().setNodeAttribute(node, "selected", (_drawingContext$curre2 = drawingContext.current) === null || _drawingContext$curre2 === void 0 ? void 0 : _drawingContext$curre2.isPointInPath(x, y));
116
+ }
117
+ });
118
+ dettachListeners();
119
+ };
120
+ var attachListeners = function attachListeners() {
121
+ if (!renderer) return;
122
+ drawingCanvas.current = document.createElement("canvas");
123
+ var rect = renderer.getContainer().getBoundingClientRect();
124
+ drawingCanvas.current.width = rect.width;
125
+ drawingCanvas.current.height = rect.height;
126
+ drawingCanvas.current.style.setProperty("inset", "0");
127
+ drawingCanvas.current.style.setProperty("position", "absolute");
128
+ renderer.getContainer().appendChild(drawingCanvas.current);
129
+ drawingCanvas.current.style.cursor = "crosshair";
130
+ drawingCanvas.current.addEventListener("mousedown", startDrawing, {
131
+ capture: true
132
+ });
133
+ document.addEventListener("mousemove", drawPath);
134
+ document.addEventListener("mouseup", stopDrawing);
135
+ };
136
+ var dettachListeners = function dettachListeners() {
137
+ if (drawingContext.current) {
138
+ drawingContext.current.clearRect(0, 0, drawingContext.current.canvas.width, drawingContext.current.canvas.height);
139
+ drawingContext.current = null;
140
+ }
141
+ if (drawingCanvas.current) {
142
+ var _drawingCanvas$curren;
143
+ (_drawingCanvas$curren = drawingCanvas.current) === null || _drawingCanvas$curren === void 0 || _drawingCanvas$curren.remove();
144
+ }
145
+ document.removeEventListener("mousemove", drawPath);
146
+ document.removeEventListener("mouseup", stopDrawing);
147
+ isDrawing.current = false;
148
+ setMode(false);
149
+ };
150
+ var startRectangleSelection = function startRectangleSelection() {
151
+ setMode("rectangle");
152
+ attachListeners();
153
+ };
154
+ var startLassoSelection = function startLassoSelection() {
155
+ setMode("lasso");
156
+ attachListeners();
157
+ };
158
+ var cancelSelection = function cancelSelection() {
159
+ dettachListeners();
160
+ };
161
+ return {
162
+ selectionMode: mode,
163
+ startRectangleSelection: startRectangleSelection,
164
+ startLassoSelection: startLassoSelection,
165
+ cancelSelection: cancelSelection
166
+ };
167
+ };
168
+
169
+ exports.useDragSelection = useDragSelection;
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ var utilities = require('@react-fabric/utilities');
4
+
5
+ var attachHighlighter = function attachHighlighter(renderer) {
6
+ var handleEnterNode = function handleEnterNode(id, graph) {
7
+ try {
8
+ var neighbors = graph.neighbors(id);
9
+ graph.forEachNode(function (node) {
10
+ graph.setNodeAttribute(node, "opacity", node !== id && !neighbors.includes(node) ? 0.1 : 1);
11
+ });
12
+ graph.forEachEdge(function (edge) {
13
+ graph.setEdgeAttribute(edge, "opacity", !graph.hasExtremity(edge, id) ? 0.1 : 1);
14
+ });
15
+ } catch (_unused) {
16
+ //
17
+ }
18
+ };
19
+ var handleLeaveNode = function handleLeaveNode(graph) {
20
+ graph.forEachNode(function (node) {
21
+ graph.setNodeAttribute(node, "opacity", 1);
22
+ });
23
+ graph.forEachEdge(function (edge) {
24
+ graph.setEdgeAttribute(edge, "opacity", 1);
25
+ });
26
+ };
27
+ var handleEnterEdge = function handleEnterEdge(id, graph) {
28
+ try {
29
+ var source = graph.source(id);
30
+ var target = graph.target(id);
31
+ graph.setEdgeAttribute(id, "zIndex", 2);
32
+ graph.setNodeAttribute(source, "zIndex", 2);
33
+ graph.setNodeAttribute(target, "zIndex", 2);
34
+ graph.setEdgeAttribute(id, "highlight", true);
35
+ graph.setNodeAttribute(source, "highlight", true);
36
+ graph.setNodeAttribute(target, "highlight", true);
37
+ graph.forEachNode(function (node) {
38
+ graph.setNodeAttribute(node, "opacity", node !== source && node !== target ? 0.1 : 1);
39
+ });
40
+ graph.forEachEdge(function (edge) {
41
+ graph.setEdgeAttribute(edge, "opacity", edge !== id ? 0.1 : 1);
42
+ });
43
+ } catch (_unused2) {
44
+ //
45
+ }
46
+ };
47
+ var handleLeaveEdge = function handleLeaveEdge(id, graph) {
48
+ var source = graph.source(id);
49
+ var target = graph.target(id);
50
+ graph.setEdgeAttribute(id, "zIndex", 0);
51
+ graph.setNodeAttribute(source, "zIndex", 0);
52
+ graph.setNodeAttribute(target, "zIndex", 0);
53
+ graph.setEdgeAttribute(id, "highlight", false);
54
+ graph.setNodeAttribute(source, "highlight", false);
55
+ graph.setNodeAttribute(target, "highlight", false);
56
+ graph.forEachNode(function (node) {
57
+ graph.setNodeAttribute(node, "opacity", 1);
58
+ graph.setNodeAttribute(node, "highlight", false);
59
+ });
60
+ graph.forEachEdge(function (edge) {
61
+ graph.setEdgeAttribute(edge, "opacity", 1);
62
+ graph.setEdgeAttribute(edge, "highlight", false);
63
+ });
64
+ };
65
+ var debouceNodeEnter = utilities.debounce(function (e) {
66
+ handleEnterNode(e.node, renderer.getGraph());
67
+ });
68
+ var debouceEdgeEnter = utilities.debounce(function (e) {
69
+ handleEnterEdge(e.edge, renderer.getGraph());
70
+ }, 100);
71
+ renderer.on("enterNode", debouceNodeEnter);
72
+ renderer.on("leaveNode", function (e) {
73
+ debouceNodeEnter.cancel();
74
+ handleLeaveNode(renderer.getGraph());
75
+ });
76
+ renderer.on("enterEdge", debouceEdgeEnter);
77
+ renderer.on("leaveEdge", function (e) {
78
+ debouceEdgeEnter.cancel();
79
+ handleLeaveEdge(e.edge, renderer.getGraph());
80
+ });
81
+ };
82
+
83
+ exports.attachHighlighter = attachHighlighter;