@aloudata/ink-flow 1.0.27 → 1.0.28

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 (237) hide show
  1. package/dist/components/A11yDescriptions/index.js +29 -0
  2. package/dist/components/A11yDescriptions/index.js.map +1 -0
  3. package/dist/components/BatchProvider/index.js +86 -0
  4. package/dist/components/BatchProvider/index.js.map +1 -0
  5. package/dist/components/BatchProvider/types.js +2 -0
  6. package/dist/components/BatchProvider/types.js.map +1 -0
  7. package/dist/components/BatchProvider/useQueue.js +56 -0
  8. package/dist/components/BatchProvider/useQueue.js.map +1 -0
  9. package/dist/components/ConnectionLine/index.js +62 -0
  10. package/dist/components/ConnectionLine/index.js.map +1 -0
  11. package/dist/components/EdgeLabelRenderer/index.js +12 -0
  12. package/dist/components/EdgeLabelRenderer/index.js.map +1 -0
  13. package/dist/components/EdgeWrapper/EdgeUpdateAnchors.js +68 -0
  14. package/dist/components/EdgeWrapper/EdgeUpdateAnchors.js.map +1 -0
  15. package/dist/components/EdgeWrapper/index.js +159 -0
  16. package/dist/components/EdgeWrapper/index.js.map +1 -0
  17. package/dist/components/EdgeWrapper/utils.js +17 -0
  18. package/dist/components/EdgeWrapper/utils.js.map +1 -0
  19. package/dist/components/Edges/BaseEdge.js +9 -0
  20. package/dist/components/Edges/BaseEdge.js.map +1 -0
  21. package/dist/components/Edges/BezierEdge.js +28 -0
  22. package/dist/components/Edges/BezierEdge.js.map +1 -0
  23. package/dist/components/Edges/EdgeAnchor.js +23 -0
  24. package/dist/components/Edges/EdgeAnchor.js.map +1 -0
  25. package/dist/components/Edges/EdgeText.js +31 -0
  26. package/dist/components/Edges/EdgeText.js.map +1 -0
  27. package/dist/components/Edges/SimpleBezierEdge.js +68 -0
  28. package/dist/components/Edges/SimpleBezierEdge.js.map +1 -0
  29. package/dist/components/Edges/SmoothStepEdge.js +29 -0
  30. package/dist/components/Edges/SmoothStepEdge.js.map +1 -0
  31. package/dist/components/Edges/StepEdge.js +18 -0
  32. package/dist/components/Edges/StepEdge.js.map +1 -0
  33. package/dist/components/Edges/StraightEdge.js +24 -0
  34. package/dist/components/Edges/StraightEdge.js.map +1 -0
  35. package/dist/components/Edges/index.js +9 -0
  36. package/dist/components/Edges/index.js.map +1 -0
  37. package/dist/components/Handle/index.d.ts.map +1 -1
  38. package/dist/components/Handle/index.js +179 -0
  39. package/dist/components/Handle/index.js.map +1 -0
  40. package/dist/components/InkFlowProvider/index.js +21 -0
  41. package/dist/components/InkFlowProvider/index.js.map +1 -0
  42. package/dist/components/NodeWrapper/index.js +150 -0
  43. package/dist/components/NodeWrapper/index.js.map +1 -0
  44. package/dist/components/NodeWrapper/useNodeObserver.js +54 -0
  45. package/dist/components/NodeWrapper/useNodeObserver.js.map +1 -0
  46. package/dist/components/NodeWrapper/utils.js +30 -0
  47. package/dist/components/NodeWrapper/utils.js.map +1 -0
  48. package/dist/components/Nodes/DefaultNode.js +8 -0
  49. package/dist/components/Nodes/DefaultNode.js.map +1 -0
  50. package/dist/components/Nodes/GroupNode.js +4 -0
  51. package/dist/components/Nodes/GroupNode.js.map +1 -0
  52. package/dist/components/Nodes/InputNode.js +8 -0
  53. package/dist/components/Nodes/InputNode.js.map +1 -0
  54. package/dist/components/Nodes/OutputNode.js +8 -0
  55. package/dist/components/Nodes/OutputNode.js.map +1 -0
  56. package/dist/components/Nodes/utils.js +23 -0
  57. package/dist/components/Nodes/utils.js.map +1 -0
  58. package/dist/components/Panel/index.js +11 -0
  59. package/dist/components/Panel/index.js.map +1 -0
  60. package/dist/components/StoreUpdater/index.js +169 -0
  61. package/dist/components/StoreUpdater/index.js.map +1 -0
  62. package/dist/components/UserSelection/index.js +20 -0
  63. package/dist/components/UserSelection/index.js.map +1 -0
  64. package/dist/constants/layout.js +5 -0
  65. package/dist/constants/layout.js.map +1 -0
  66. package/dist/container/EdgeRenderer/MarkerDefinitions.js +37 -0
  67. package/dist/container/EdgeRenderer/MarkerDefinitions.js.map +1 -0
  68. package/dist/container/EdgeRenderer/MarkerSymbols.js +38 -0
  69. package/dist/container/EdgeRenderer/MarkerSymbols.js.map +1 -0
  70. package/dist/container/EdgeRenderer/index.js +25 -0
  71. package/dist/container/EdgeRenderer/index.js.map +1 -0
  72. package/dist/container/FlowRenderer/index.js +29 -0
  73. package/dist/container/FlowRenderer/index.js.map +1 -0
  74. package/dist/container/GraphView/index.js +14 -0
  75. package/dist/container/GraphView/index.js.map +1 -0
  76. package/dist/container/InkFlow/Wrapper.js +13 -0
  77. package/dist/container/InkFlow/Wrapper.js.map +1 -0
  78. package/dist/container/InkFlow/index.d.ts.map +1 -1
  79. package/dist/container/InkFlow/index.js +22 -0
  80. package/dist/container/InkFlow/index.js.map +1 -0
  81. package/dist/container/InkFlow/init-values.js +11 -0
  82. package/dist/container/InkFlow/init-values.js.map +1 -0
  83. package/dist/container/NodeRenderer/index.js +29 -0
  84. package/dist/container/NodeRenderer/index.js.map +1 -0
  85. package/dist/container/NodeRenderer/useResizeObserver.js +29 -0
  86. package/dist/container/NodeRenderer/useResizeObserver.js.map +1 -0
  87. package/dist/container/Pane/index.js +207 -0
  88. package/dist/container/Pane/index.js.map +1 -0
  89. package/dist/container/Viewport/index.js +11 -0
  90. package/dist/container/Viewport/index.js.map +1 -0
  91. package/dist/container/ZoomPane/index.js +108 -0
  92. package/dist/container/ZoomPane/index.js.map +1 -0
  93. package/dist/contexts/NodeIdContext.js +10 -0
  94. package/dist/contexts/NodeIdContext.js.map +1 -0
  95. package/dist/contexts/StoreContext.js +5 -0
  96. package/dist/contexts/StoreContext.js.map +1 -0
  97. package/dist/hooks/index.js +7 -0
  98. package/dist/hooks/index.js.map +1 -0
  99. package/dist/hooks/useConnection.js +47 -0
  100. package/dist/hooks/useConnection.js.map +1 -0
  101. package/dist/hooks/useDrag.js +56 -0
  102. package/dist/hooks/useDrag.js.map +1 -0
  103. package/dist/hooks/useEdgesState.js +6 -0
  104. package/dist/hooks/useEdgesState.js.map +1 -0
  105. package/dist/hooks/useGlobalKeyHandler.js +34 -0
  106. package/dist/hooks/useGlobalKeyHandler.js.map +1 -0
  107. package/dist/hooks/useInkFlow.js +185 -0
  108. package/dist/hooks/useInkFlow.js.map +1 -0
  109. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  110. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  111. package/dist/hooks/useIsomorphicLayoutEffect.js +4 -0
  112. package/dist/hooks/useIsomorphicLayoutEffect.js.map +1 -0
  113. package/dist/hooks/useKeyPress.js +117 -0
  114. package/dist/hooks/useKeyPress.js.map +1 -0
  115. package/dist/hooks/useMoveSelectedNodes.js +65 -0
  116. package/dist/hooks/useMoveSelectedNodes.js.map +1 -0
  117. package/dist/hooks/useNodeInView.js +41 -0
  118. package/dist/hooks/useNodeInView.js.map +1 -0
  119. package/dist/hooks/useNodesInView.js +52 -0
  120. package/dist/hooks/useNodesInView.js.map +1 -0
  121. package/dist/hooks/useNodesState.js +6 -0
  122. package/dist/hooks/useNodesState.js.map +1 -0
  123. package/dist/hooks/useResizeHandler.js +38 -0
  124. package/dist/hooks/useResizeHandler.js.map +1 -0
  125. package/dist/hooks/useStore.js +37 -0
  126. package/dist/hooks/useStore.js.map +1 -0
  127. package/dist/hooks/useViewportHelper.js +149 -0
  128. package/dist/hooks/useViewportHelper.js.map +1 -0
  129. package/dist/hooks/useVisibleEdgeIds.js +50 -0
  130. package/dist/hooks/useVisibleEdgeIds.js.map +1 -0
  131. package/dist/hooks/useVisibleNodeIds.js +21 -0
  132. package/dist/hooks/useVisibleNodeIds.js.map +1 -0
  133. package/dist/index.js +18 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/plugins/Background/Background.js +49 -0
  136. package/dist/plugins/Background/Background.js.map +1 -0
  137. package/dist/plugins/Background/Patterns.js +11 -0
  138. package/dist/plugins/Background/Patterns.js.map +1 -0
  139. package/dist/plugins/Background/index.js +3 -0
  140. package/dist/plugins/Background/index.js.map +1 -0
  141. package/dist/plugins/Background/types.js +7 -0
  142. package/dist/plugins/Background/types.js.map +1 -0
  143. package/dist/plugins/Controls/ControlButton.js +7 -0
  144. package/dist/plugins/Controls/ControlButton.js.map +1 -0
  145. package/dist/plugins/Controls/Controls.js +49 -0
  146. package/dist/plugins/Controls/Controls.js.map +1 -0
  147. package/dist/plugins/Controls/Icons/FitView.js +5 -0
  148. package/dist/plugins/Controls/Icons/FitView.js.map +1 -0
  149. package/dist/plugins/Controls/Icons/Lock.js +5 -0
  150. package/dist/plugins/Controls/Icons/Lock.js.map +1 -0
  151. package/dist/plugins/Controls/Icons/Minus.js +5 -0
  152. package/dist/plugins/Controls/Icons/Minus.js.map +1 -0
  153. package/dist/plugins/Controls/Icons/Plus.js +5 -0
  154. package/dist/plugins/Controls/Icons/Plus.js.map +1 -0
  155. package/dist/plugins/Controls/Icons/Unlock.js +5 -0
  156. package/dist/plugins/Controls/Icons/Unlock.js.map +1 -0
  157. package/dist/plugins/Controls/index.js +3 -0
  158. package/dist/plugins/Controls/index.js.map +1 -0
  159. package/dist/plugins/Controls/types.js +2 -0
  160. package/dist/plugins/Controls/types.js.map +1 -0
  161. package/dist/plugins/NodeResizer/NodeResizeControl.js +166 -0
  162. package/dist/plugins/NodeResizer/NodeResizeControl.js.map +1 -0
  163. package/dist/plugins/NodeResizer/NodeResizer.js +35 -0
  164. package/dist/plugins/NodeResizer/NodeResizer.js.map +1 -0
  165. package/dist/plugins/NodeResizer/index.js +4 -0
  166. package/dist/plugins/NodeResizer/index.js.map +1 -0
  167. package/dist/plugins/NodeResizer/types.js +2 -0
  168. package/dist/plugins/NodeResizer/types.js.map +1 -0
  169. package/dist/plugins/index.js +4 -0
  170. package/dist/plugins/index.js.map +1 -0
  171. package/dist/store/index.d.ts.map +1 -1
  172. package/dist/store/index.js +384 -0
  173. package/dist/store/index.js.map +1 -0
  174. package/dist/store/initialState.d.ts.map +1 -1
  175. package/dist/store/initialState.js +84 -0
  176. package/dist/store/initialState.js.map +1 -0
  177. package/dist/styles/utils.js +8 -0
  178. package/dist/styles/utils.js.map +1 -0
  179. package/dist/types/edges.js +2 -0
  180. package/dist/types/edges.js.map +1 -0
  181. package/dist/types/general.js +2 -0
  182. package/dist/types/general.js.map +1 -0
  183. package/dist/types/index.js +7 -0
  184. package/dist/types/index.js.map +1 -0
  185. package/dist/types/instance.js +2 -0
  186. package/dist/types/instance.js.map +1 -0
  187. package/dist/types/layout.js +2 -0
  188. package/dist/types/layout.js.map +1 -0
  189. package/dist/types/nodes.js +2 -0
  190. package/dist/types/nodes.js.map +1 -0
  191. package/dist/types/props.js +2 -0
  192. package/dist/types/props.js.map +1 -0
  193. package/dist/types/store.js +2 -0
  194. package/dist/types/store.js.map +1 -0
  195. package/dist/types/utils/types.js +2 -0
  196. package/dist/types/utils/types.js.map +1 -0
  197. package/dist/utils/changes.js +213 -0
  198. package/dist/utils/changes.js.map +1 -0
  199. package/dist/utils/dom.d.ts.map +1 -1
  200. package/dist/utils/dom.js +38 -0
  201. package/dist/utils/dom.js.map +1 -0
  202. package/dist/utils/edges/bezier-edge.js +96 -0
  203. package/dist/utils/edges/bezier-edge.js.map +1 -0
  204. package/dist/utils/edges/general.d.ts.map +1 -1
  205. package/dist/utils/edges/general.js +108 -0
  206. package/dist/utils/edges/general.js.map +1 -0
  207. package/dist/utils/edges/index.js +6 -0
  208. package/dist/utils/edges/index.js.map +1 -0
  209. package/dist/utils/edges/positions.js +101 -0
  210. package/dist/utils/edges/positions.js.map +1 -0
  211. package/dist/utils/edges/smoothstep-edge.js +222 -0
  212. package/dist/utils/edges/smoothstep-edge.js.map +1 -0
  213. package/dist/utils/edges/straight-edge.js +32 -0
  214. package/dist/utils/edges/straight-edge.js.map +1 -0
  215. package/dist/utils/general.d.ts.map +1 -1
  216. package/dist/utils/general.js +228 -0
  217. package/dist/utils/general.js.map +1 -0
  218. package/dist/utils/graph.d.ts.map +1 -1
  219. package/dist/utils/graph.js +368 -0
  220. package/dist/utils/graph.js.map +1 -0
  221. package/dist/utils/layout.js +142 -0
  222. package/dist/utils/layout.js.map +1 -0
  223. package/dist/utils/marker.js +35 -0
  224. package/dist/utils/marker.js.map +1 -0
  225. package/dist/utils/node.js +42 -0
  226. package/dist/utils/node.js.map +1 -0
  227. package/dist/utils/positions.js +101 -0
  228. package/dist/utils/positions.js.map +1 -0
  229. package/dist/utils/store.d.ts.map +1 -1
  230. package/dist/utils/store.js +162 -0
  231. package/dist/utils/store.js.map +1 -0
  232. package/package.json +2 -2
  233. package/dist/index.cjs.js +0 -25
  234. package/dist/index.cjs.js.map +0 -1
  235. package/dist/index.esm.js +0 -25
  236. package/dist/index.esm.js.map +0 -1
  237. package/dist/style.css +0 -814
@@ -0,0 +1,117 @@
1
+ import { useState, useEffect, useRef, useMemo } from 'react';
2
+ import { isInputDOMNode } from '../utils/dom';
3
+ var defaultDoc = typeof document !== 'undefined' ? document : null;
4
+ /**
5
+ * Hook for handling key events.
6
+ *
7
+ * @public
8
+ * @param param.keyCode - The key code (string or array of strings) to use
9
+ * @param param.options - Options
10
+ * @returns boolean
11
+ */
12
+ export function useKeyPress(
13
+ // the keycode can be a string 'a' or an array of strings ['a', 'a+d']
14
+ // a string means a single key 'a' or a combination when '+' is used 'a+d'
15
+ // an array means different possibilites. Explainer: ['a', 'd+s'] here the
16
+ // user can use the single key 'a' or the combination 'd' + 's'
17
+ keyCode, options) {
18
+ if (keyCode === void 0) { keyCode = null; }
19
+ if (options === void 0) { options = {
20
+ target: defaultDoc,
21
+ actInsideInputWithModifier: true,
22
+ }; }
23
+ var _a = __read(useState(false), 2), keyPressed = _a[0], setKeyPressed = _a[1];
24
+ // we need to remember if a modifier key is pressed in order to track it
25
+ var modifierPressed = useRef(false);
26
+ // we need to remember the pressed keys in order to support combinations
27
+ var pressedKeys = useRef(new Set([]));
28
+ // keyCodes = array with single keys [['a']] or key combinations [['a', 's']]
29
+ // keysToWatch = array with all keys flattened ['a', 'd', 'ShiftLeft']
30
+ // used to check if we store event.code or event.key. When the code is in the list of keysToWatch
31
+ // we use the code otherwise the key. Explainer: When you press the left "command" key, the code is "MetaLeft"
32
+ // and the key is "Meta". We want users to be able to pass keys and codes so we assume that the key is meant when
33
+ // we can't find it in the list of keysToWatch.
34
+ var _b = __read(useMemo(function () {
35
+ if (keyCode !== null) {
36
+ var keyCodeArr = Array.isArray(keyCode) ? keyCode : [keyCode];
37
+ var keys = keyCodeArr
38
+ .filter(function (kc) { return typeof kc === 'string'; })
39
+ .map(function (kc) { return kc.split('+'); });
40
+ var keysFlat = keys.reduce(function (res, item) { return res.concat.apply(res, __spreadArray([], __read(item), false)); }, []);
41
+ return [keys, keysFlat];
42
+ }
43
+ return [[], []];
44
+ }, [keyCode]), 2), keyCodes = _b[0], keysToWatch = _b[1];
45
+ useEffect(function () {
46
+ var target = (options === null || options === void 0 ? void 0 : options.target) || defaultDoc;
47
+ if (keyCode !== null) {
48
+ var downHandler_1 = function (event) {
49
+ modifierPressed.current =
50
+ event.ctrlKey || event.metaKey || event.shiftKey;
51
+ var preventAction = (!modifierPressed.current ||
52
+ (modifierPressed.current && !options.actInsideInputWithModifier)) &&
53
+ isInputDOMNode(event);
54
+ if (preventAction) {
55
+ return false;
56
+ }
57
+ var keyOrCode = useKeyOrCode(event.code, keysToWatch);
58
+ pressedKeys.current.add(event[keyOrCode]);
59
+ if (isMatchingKey(keyCodes, pressedKeys.current, false)) {
60
+ event.preventDefault();
61
+ setKeyPressed(true);
62
+ }
63
+ };
64
+ var upHandler_1 = function (event) {
65
+ var preventAction = (!modifierPressed.current ||
66
+ (modifierPressed.current && !options.actInsideInputWithModifier)) &&
67
+ isInputDOMNode(event);
68
+ if (preventAction) {
69
+ return false;
70
+ }
71
+ var keyOrCode = useKeyOrCode(event.code, keysToWatch);
72
+ if (isMatchingKey(keyCodes, pressedKeys.current, true)) {
73
+ setKeyPressed(false);
74
+ pressedKeys.current.clear();
75
+ }
76
+ else {
77
+ pressedKeys.current.delete(event[keyOrCode]);
78
+ }
79
+ // fix for Mac: when cmd key is pressed, keyup is not triggered for any other key, see: https://stackoverflow.com/questions/27380018/when-cmd-key-is-kept-pressed-keyup-is-not-triggered-for-any-other-key
80
+ if (event.key === 'Meta') {
81
+ pressedKeys.current.clear();
82
+ }
83
+ modifierPressed.current = false;
84
+ };
85
+ var resetHandler_1 = function () {
86
+ pressedKeys.current.clear();
87
+ setKeyPressed(false);
88
+ };
89
+ target === null || target === void 0 ? void 0 : target.addEventListener('keydown', downHandler_1);
90
+ target === null || target === void 0 ? void 0 : target.addEventListener('keyup', upHandler_1);
91
+ window.addEventListener('blur', resetHandler_1);
92
+ window.addEventListener('contextmenu', resetHandler_1);
93
+ return function () {
94
+ target === null || target === void 0 ? void 0 : target.removeEventListener('keydown', downHandler_1);
95
+ target === null || target === void 0 ? void 0 : target.removeEventListener('keyup', upHandler_1);
96
+ window.removeEventListener('blur', resetHandler_1);
97
+ window.removeEventListener('contextmenu', resetHandler_1);
98
+ };
99
+ }
100
+ }, [keyCode, setKeyPressed]);
101
+ return keyPressed;
102
+ }
103
+ // utils
104
+ function isMatchingKey(keyCodes, pressedKeys, isUp) {
105
+ return (keyCodes
106
+ // we only want to compare same sizes of keyCode definitions
107
+ // and pressed keys. When the user specified 'Meta' as a key somewhere
108
+ // this would also be truthy without this filter when user presses 'Meta' + 'r'
109
+ .filter(function (keys) { return isUp || keys.length === pressedKeys.size; })
110
+ // since we want to support multiple possibilities only one of the
111
+ // combinations need to be part of the pressed keys
112
+ .some(function (keys) { return keys.every(function (k) { return pressedKeys.has(k); }); }));
113
+ }
114
+ function useKeyOrCode(eventCode, keysToWatch) {
115
+ return keysToWatch.includes(eventCode) ? 'code' : 'key';
116
+ }
117
+ //# sourceMappingURL=useKeyPress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyPress.js","sourceRoot":"","sources":["../../src/hooks/useKeyPress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { useCallback } from 'react';
2
+ import { useStoreApi } from './useStore';
3
+ import { snapPosition } from '../utils/general';
4
+ import { calculateNodePosition } from '../utils/graph';
5
+ var selectedAndDraggable = function (nodesDraggable) { return function (n) {
6
+ return n.selected &&
7
+ (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined'));
8
+ }; };
9
+ /**
10
+ * Hook for updating node positions by passing a direction and factor
11
+ *
12
+ * @internal
13
+ * @returns function for updating node positions
14
+ */
15
+ export function useMoveSelectedNodes() {
16
+ var store = useStoreApi();
17
+ var moveSelectedNodes = useCallback(function (params) {
18
+ var e_1, _a;
19
+ var _b = store.getState(), nodeExtent = _b.nodeExtent, snapToGrid = _b.snapToGrid, snapGrid = _b.snapGrid, nodesDraggable = _b.nodesDraggable, onError = _b.onError, updateNodePositions = _b.updateNodePositions, nodeLookup = _b.nodeLookup, nodeOrigin = _b.nodeOrigin;
20
+ var nodeUpdates = new Map();
21
+ var isSelected = selectedAndDraggable(nodesDraggable);
22
+ // by default a node moves 5px on each key press
23
+ // if snap grid is enabled, we use that for the velocity
24
+ var xVelo = snapToGrid ? snapGrid[0] : 5;
25
+ var yVelo = snapToGrid ? snapGrid[1] : 5;
26
+ var xDiff = params.direction.x * xVelo * params.factor;
27
+ var yDiff = params.direction.y * yVelo * params.factor;
28
+ try {
29
+ for (var nodeLookup_1 = __values(nodeLookup), nodeLookup_1_1 = nodeLookup_1.next(); !nodeLookup_1_1.done; nodeLookup_1_1 = nodeLookup_1.next()) {
30
+ var _c = __read(nodeLookup_1_1.value, 2), node = _c[1];
31
+ if (!isSelected(node)) {
32
+ continue;
33
+ }
34
+ var nextPosition = {
35
+ x: node.internals.positionAbsolute.x + xDiff,
36
+ y: node.internals.positionAbsolute.y + yDiff,
37
+ };
38
+ if (snapToGrid) {
39
+ nextPosition = snapPosition(nextPosition, snapGrid);
40
+ }
41
+ var _d = calculateNodePosition({
42
+ nodeId: node.id,
43
+ nextPosition: nextPosition,
44
+ nodeLookup: nodeLookup,
45
+ nodeExtent: nodeExtent,
46
+ nodeOrigin: nodeOrigin,
47
+ onError: onError,
48
+ }), position = _d.position, positionAbsolute = _d.positionAbsolute;
49
+ node.position = position;
50
+ node.internals.positionAbsolute = positionAbsolute;
51
+ nodeUpdates.set(node.id, node);
52
+ }
53
+ }
54
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
55
+ finally {
56
+ try {
57
+ if (nodeLookup_1_1 && !nodeLookup_1_1.done && (_a = nodeLookup_1.return)) _a.call(nodeLookup_1);
58
+ }
59
+ finally { if (e_1) throw e_1.error; }
60
+ }
61
+ updateNodePositions(nodeUpdates);
62
+ }, []);
63
+ return moveSelectedNodes;
64
+ }
65
+ //# sourceMappingURL=useMoveSelectedNodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMoveSelectedNodes.js","sourceRoot":"","sources":["../../src/hooks/useMoveSelectedNodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,IAAM,oBAAoB,GAAG,UAAC,cAAuB,IAAK,OAAA,UAAC,CAAO;IAChE,OAAA,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;AADvE,CACuE,EAFf,CAEe,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAE5B,IAAM,iBAAiB,GAAG,WAAW,CACnC,UAAC,MAAiD;;QAC1C,IAAA,KASF,KAAK,CAAC,QAAQ,EAAE,EARlB,UAAU,gBAAA,EACV,UAAU,gBAAA,EACV,QAAQ,cAAA,EACR,cAAc,oBAAA,EACd,OAAO,aAAA,EACP,mBAAmB,yBAAA,EACnB,UAAU,gBAAA,EACV,UAAU,gBACQ,CAAC;QACrB,IAAM,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAM,UAAU,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAExD,gDAAgD;QAChD,wDAAwD;QACxD,IAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QACzD,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;YAEzD,KAAuB,IAAA,eAAA,SAAA,UAAU,CAAA,sCAAA,8DAAE,CAAC;gBAAzB,IAAA,KAAA,+BAAQ,EAAL,IAAI,QAAA;gBAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,SAAS;gBACX,CAAC;gBAED,IAAI,YAAY,GAAG;oBACjB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,GAAG,KAAK;oBAC5C,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,GAAG,KAAK;iBAC7C,CAAC;gBAEF,IAAI,UAAU,EAAE,CAAC;oBACf,YAAY,GAAG,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACtD,CAAC;gBAEK,IAAA,KAAiC,qBAAqB,CAAC;oBAC3D,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,YAAY,cAAA;oBACZ,UAAU,YAAA;oBACV,UAAU,YAAA;oBACV,UAAU,YAAA;oBACV,OAAO,SAAA;iBACR,CAAC,EAPM,QAAQ,cAAA,EAAE,gBAAgB,sBAOhC,CAAC;gBAEH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACzB,IAAI,CAAC,SAAS,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;gBAEnD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;;;;;;;;;QAED,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { useCallback } from 'react';
2
+ import { useStore } from './useStore';
3
+ import { isNodeInViewport, pointToRendererPoint, } from '../utils/general';
4
+ /**
5
+ * Hook for checking if a specific node is visible in the viewport.
6
+ *
7
+ * @public
8
+ * @param nodeId - The id of the node to check visibility for
9
+ * @returns boolean indicating if the node is visible in the viewport
10
+ *
11
+ */
12
+ export function useNodeInView(nodeId) {
13
+ var isInView = useStore(useCallback(function (s) {
14
+ if (!s.width || !s.height) {
15
+ return false;
16
+ }
17
+ if (s.autoLayout && !s.layoutComplete) {
18
+ return false;
19
+ }
20
+ var node = s.nodeLookup.get(nodeId);
21
+ if (!node) {
22
+ return false;
23
+ }
24
+ // Calculate viewport rect in renderer coordinates
25
+ var _a = __read(s.transform, 3), tx = _a[0], ty = _a[1], tScale = _a[2];
26
+ var paneOrigin = pointToRendererPoint({ x: 0, y: 0 }, [
27
+ tx,
28
+ ty,
29
+ tScale,
30
+ ]);
31
+ var paneRect = {
32
+ x: paneOrigin.x,
33
+ y: paneOrigin.y,
34
+ width: s.width / tScale,
35
+ height: s.height / tScale,
36
+ };
37
+ return isNodeInViewport(node, paneRect);
38
+ }, [nodeId]));
39
+ return isInView;
40
+ }
41
+ //# sourceMappingURL=useNodeInView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNodeInView.js","sourceRoot":"","sources":["../../src/hooks/useNodeInView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAM,QAAQ,GAAG,QAAQ,CACvB,WAAW,CACT,UAAC,CAAe;QACd,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kDAAkD;QAC5C,IAAA,KAAA,OAAmB,CAAC,CAAC,SAAS,IAAA,EAA7B,EAAE,QAAA,EAAE,EAAE,QAAA,EAAE,MAAM,QAAe,CAAC;QACrC,IAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACtD,EAAE;YACF,EAAE;YACF,MAAM;SACP,CAAC,CAAC;QACH,IAAM,QAAQ,GAAG;YACf,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM;YACvB,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM;SAC1B,CAAC;QAEF,OAAO,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { useCallback } from 'react';
2
+ import { shallow } from 'zustand/shallow';
3
+ import { useStore } from './useStore';
4
+ import { isNodeInViewport, pointToRendererPoint } from '../utils/general';
5
+ /**
6
+ * Hook for getting nodes that are currently visible in the viewport.
7
+ * Unlike getNodesInside, this hook does NOT force initial render visibility,
8
+ * making it suitable for lazy loading scenarios.
9
+ *
10
+ * @public
11
+ * @returns array of visible nodes
12
+ *
13
+ */
14
+ export function useNodesInView() {
15
+ var visibleNodes = useStore(useCallback(function (s) {
16
+ var e_1, _a;
17
+ if (!s.width || !s.height) {
18
+ return [];
19
+ }
20
+ // 如果开启了自动布局,须等待布局完成
21
+ if (s.autoLayout && !s.layoutComplete) {
22
+ return [];
23
+ }
24
+ var _b = __read(s.transform, 3), tx = _b[0], ty = _b[1], tScale = _b[2];
25
+ var paneOrigin = pointToRendererPoint({ x: 0, y: 0 }, [tx, ty, tScale]);
26
+ var paneRect = {
27
+ x: paneOrigin.x,
28
+ y: paneOrigin.y,
29
+ width: s.width / tScale,
30
+ height: s.height / tScale,
31
+ };
32
+ var result = [];
33
+ try {
34
+ for (var _c = __values(s.nodeLookup.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
35
+ var node = _d.value;
36
+ if (isNodeInViewport(node, paneRect)) {
37
+ result.push(node.internals.userNode);
38
+ }
39
+ }
40
+ }
41
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
42
+ finally {
43
+ try {
44
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
45
+ }
46
+ finally { if (e_1) throw e_1.error; }
47
+ }
48
+ return result;
49
+ }, []), shallow);
50
+ return visibleNodes;
51
+ }
52
+ //# sourceMappingURL=useNodesInView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNodesInView.js","sourceRoot":"","sources":["../../src/hooks/useNodesInView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE1E;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAM,YAAY,GAAG,QAAQ,CAC3B,WAAW,CACT,UAAC,CAAe;;QACd,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,EAAgB,CAAC;QAC1B,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;YACtC,OAAO,EAAgB,CAAC;QAC1B,CAAC;QAEK,IAAA,KAAA,OAAmB,CAAC,CAAC,SAAS,IAAA,EAA7B,EAAE,QAAA,EAAE,EAAE,QAAA,EAAE,MAAM,QAAe,CAAC;QACrC,IAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1E,IAAM,QAAQ,GAAG;YACf,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM;YACvB,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM;SAC1B,CAAC;QAEF,IAAM,MAAM,GAAe,EAAE,CAAC;;YAE9B,KAAmB,IAAA,KAAA,SAAA,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAA,gBAAA,4BAAE,CAAC;gBAAtC,IAAM,IAAI,WAAA;gBACb,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAoB,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;;;;;;;;;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,EAAE,CACH,EACD,OAAO,CACR,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { useState } from 'react';
2
+ export function useNodesState(initialNodes) {
3
+ var _a = __read(useState(initialNodes), 2), nodes = _a[0], setNodes = _a[1];
4
+ return [nodes, setNodes];
5
+ }
6
+ //# sourceMappingURL=useNodesState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNodesState.js","sourceRoot":"","sources":["../../src/hooks/useNodesState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAC;AAGrE,MAAM,UAAU,aAAa,CAC3B,YAAwB;IAElB,IAAA,KAAA,OAAoB,QAAQ,CAAC,YAAY,CAAC,IAAA,EAAzC,KAAK,QAAA,EAAE,QAAQ,QAA0B,CAAC;IAEjD,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { useEffect } from 'react';
2
+ import { useStoreApi } from '../hooks/useStore';
3
+ import { getDimensions } from '../utils/dom';
4
+ import { errorMessages } from '@aloudata/ink-core';
5
+ /**
6
+ * Hook for handling resize events.
7
+ *
8
+ * @internal
9
+ */
10
+ export function useResizeHandler(domNode) {
11
+ var store = useStoreApi();
12
+ useEffect(function () {
13
+ var updateDimensions = function () {
14
+ var _a, _b;
15
+ if (!domNode.current) {
16
+ return false;
17
+ }
18
+ var size = getDimensions(domNode.current);
19
+ if (size.height === 0 || size.width === 0) {
20
+ (_b = (_a = store.getState()).onError) === null || _b === void 0 ? void 0 : _b.call(_a, '004', errorMessages['error004']());
21
+ }
22
+ store.setState({ width: size.width || 500, height: size.height || 500 });
23
+ };
24
+ if (domNode.current) {
25
+ updateDimensions();
26
+ window.addEventListener('resize', updateDimensions);
27
+ var resizeObserver_1 = new ResizeObserver(function () { return updateDimensions(); });
28
+ resizeObserver_1.observe(domNode.current);
29
+ return function () {
30
+ window.removeEventListener('resize', updateDimensions);
31
+ if (resizeObserver_1 && domNode.current) {
32
+ resizeObserver_1.unobserve(domNode.current);
33
+ }
34
+ };
35
+ }
36
+ }, []);
37
+ }
38
+ //# sourceMappingURL=useResizeHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResizeHandler.js","sourceRoot":"","sources":["../../src/hooks/useResizeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAgD;IAEhD,IAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAE5B,SAAS,CAAC;QACR,IAAM,gBAAgB,GAAG;;YACvB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAA,MAAA,KAAK,CAAC,QAAQ,EAAE,EAAC,OAAO,mDAAG,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC;QAEF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAC;YACnB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAEpD,IAAM,gBAAc,GAAG,IAAI,cAAc,CAAC,cAAM,OAAA,gBAAgB,EAAE,EAAlB,CAAkB,CAAC,CAAC;YACpE,gBAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAExC,OAAO;gBACL,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;gBAEvD,IAAI,gBAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACtC,gBAAc,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { useContext, useMemo } from 'react';
2
+ import { useStoreWithEqualityFn as useZustandStore, } from 'zustand/traditional';
3
+ import StoreContext from '../contexts/StoreContext';
4
+ import { errorMessages } from '@aloudata/ink-core';
5
+ var zustandErrorMessage = errorMessages['error001']();
6
+ /**
7
+ * Hook for accessing the internal store. Should only be used in rare cases.
8
+ *
9
+ * @public
10
+ * @param selector
11
+ * @param equalityFn
12
+ * @returns The selected state slice
13
+ *
14
+ * @example
15
+ * const nodes = useStore((state: InkFlowState<MyNodeType>) => state.nodes);
16
+ *
17
+ */
18
+ function useStore(selector, equalityFn) {
19
+ var store = useContext(StoreContext);
20
+ if (store === null) {
21
+ throw new Error(zustandErrorMessage);
22
+ }
23
+ return useZustandStore(store, selector, equalityFn);
24
+ }
25
+ function useStoreApi() {
26
+ var store = useContext(StoreContext);
27
+ if (store === null) {
28
+ throw new Error(zustandErrorMessage);
29
+ }
30
+ return useMemo(function () { return ({
31
+ getState: store.getState,
32
+ setState: store.setState,
33
+ subscribe: store.subscribe,
34
+ }); }, [store]);
35
+ }
36
+ export { useStore, useStoreApi };
37
+ //# sourceMappingURL=useStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStore.js","sourceRoot":"","sources":["../../src/hooks/useStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAEL,sBAAsB,IAAI,eAAe,GAC1C,MAAM,qBAAqB,CAAC;AAI7B,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,IAAM,mBAAmB,GAAG,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,SAAS,QAAQ,CACf,QAA6C,EAC7C,UAAsD;IAEtD,IAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAEvC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,WAAW;IAIlB,IAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAE7B,CAAC;IAET,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,OAAO,CACZ,cAAM,OAAA,CAAC;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,EAJI,CAIJ,EACF,CAAC,KAAK,CAAC,CACR,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,149 @@
1
+ import { useMemo } from 'react';
2
+ import { useStoreApi } from '../hooks/useStore';
3
+ import { getViewportForBounds, pointToRendererPoint, rendererPointToPoint, } from '../utils/general';
4
+ import { fitView } from '../utils/graph';
5
+ import { getDimensions, getFitViewNodes, } from '@aloudata/ink-core';
6
+ /**
7
+ * Hook for getting viewport helper functions.
8
+ *
9
+ * @internal
10
+ * @returns viewport helper functions
11
+ */
12
+ var useViewportHelper = function () {
13
+ var store = useStoreApi();
14
+ return useMemo(function () {
15
+ return {
16
+ zoomIn: function (options) {
17
+ var panZoom = store.getState().panZoom;
18
+ return panZoom
19
+ ? panZoom.scaleBy(1.2, { duration: options === null || options === void 0 ? void 0 : options.duration })
20
+ : Promise.resolve(false);
21
+ },
22
+ zoomOut: function (options) {
23
+ var panZoom = store.getState().panZoom;
24
+ return panZoom
25
+ ? panZoom.scaleBy(1 / 1.2, { duration: options === null || options === void 0 ? void 0 : options.duration })
26
+ : Promise.resolve(false);
27
+ },
28
+ zoomTo: function (zoomLevel, options) {
29
+ var panZoom = store.getState().panZoom;
30
+ return panZoom
31
+ ? panZoom.scaleTo(zoomLevel, { duration: options === null || options === void 0 ? void 0 : options.duration })
32
+ : Promise.resolve(false);
33
+ },
34
+ getZoom: function () { return store.getState().transform[2]; },
35
+ setViewport: function (viewport, options) { return __awaiter(void 0, void 0, void 0, function () {
36
+ var _a, _b, tX, tY, tZoom, panZoom;
37
+ var _c, _d, _e;
38
+ return __generator(this, function (_f) {
39
+ switch (_f.label) {
40
+ case 0:
41
+ _a = store.getState(), _b = __read(_a.transform, 3), tX = _b[0], tY = _b[1], tZoom = _b[2], panZoom = _a.panZoom;
42
+ if (!panZoom) {
43
+ return [2 /*return*/, Promise.resolve(false)];
44
+ }
45
+ return [4 /*yield*/, panZoom.setViewport({
46
+ x: (_c = viewport.x) !== null && _c !== void 0 ? _c : tX,
47
+ y: (_d = viewport.y) !== null && _d !== void 0 ? _d : tY,
48
+ zoom: (_e = viewport.zoom) !== null && _e !== void 0 ? _e : tZoom,
49
+ }, { duration: options === null || options === void 0 ? void 0 : options.duration })];
50
+ case 1:
51
+ _f.sent();
52
+ return [2 /*return*/, Promise.resolve(true)];
53
+ }
54
+ });
55
+ }); },
56
+ getViewport: function () {
57
+ var _a = __read(store.getState().transform, 3), x = _a[0], y = _a[1], zoom = _a[2];
58
+ return { x: x, y: y, zoom: zoom };
59
+ },
60
+ fitView: function (options) {
61
+ var _a = store.getState(), nodeLookup = _a.nodeLookup, minZoom = _a.minZoom, maxZoom = _a.maxZoom, panZoom = _a.panZoom, domNode = _a.domNode;
62
+ if (!panZoom || !domNode) {
63
+ return Promise.resolve(false);
64
+ }
65
+ var fitViewNodes = getFitViewNodes(nodeLookup, options);
66
+ var _b = getDimensions(domNode), width = _b.width, height = _b.height;
67
+ return fitView({
68
+ nodes: fitViewNodes,
69
+ width: width,
70
+ height: height,
71
+ minZoom: minZoom,
72
+ maxZoom: maxZoom,
73
+ panZoom: panZoom,
74
+ }, options);
75
+ },
76
+ setCenter: function (x, y, options) { return __awaiter(void 0, void 0, void 0, function () {
77
+ var _a, width, height, maxZoom, panZoom, nextZoom, centerX, centerY;
78
+ return __generator(this, function (_b) {
79
+ switch (_b.label) {
80
+ case 0:
81
+ _a = store.getState(), width = _a.width, height = _a.height, maxZoom = _a.maxZoom, panZoom = _a.panZoom;
82
+ nextZoom = typeof (options === null || options === void 0 ? void 0 : options.zoom) !== 'undefined' ? options.zoom : maxZoom;
83
+ centerX = width / 2 - x * nextZoom;
84
+ centerY = height / 2 - y * nextZoom;
85
+ if (!panZoom) {
86
+ return [2 /*return*/, Promise.resolve(false)];
87
+ }
88
+ return [4 /*yield*/, panZoom.setViewport({
89
+ x: centerX,
90
+ y: centerY,
91
+ zoom: nextZoom,
92
+ }, { duration: options === null || options === void 0 ? void 0 : options.duration })];
93
+ case 1:
94
+ _b.sent();
95
+ return [2 /*return*/, Promise.resolve(true)];
96
+ }
97
+ });
98
+ }); },
99
+ fitBounds: function (bounds, options) { return __awaiter(void 0, void 0, void 0, function () {
100
+ var _a, width, height, minZoom, maxZoom, panZoom, viewport;
101
+ var _b;
102
+ return __generator(this, function (_c) {
103
+ switch (_c.label) {
104
+ case 0:
105
+ _a = store.getState(), width = _a.width, height = _a.height, minZoom = _a.minZoom, maxZoom = _a.maxZoom, panZoom = _a.panZoom;
106
+ viewport = getViewportForBounds(bounds, width, height, minZoom, maxZoom, (_b = options === null || options === void 0 ? void 0 : options.padding) !== null && _b !== void 0 ? _b : 0.1);
107
+ if (!panZoom) {
108
+ return [2 /*return*/, Promise.resolve(false)];
109
+ }
110
+ return [4 /*yield*/, panZoom.setViewport(viewport, { duration: options === null || options === void 0 ? void 0 : options.duration })];
111
+ case 1:
112
+ _c.sent();
113
+ return [2 /*return*/, Promise.resolve(true)];
114
+ }
115
+ });
116
+ }); },
117
+ screenToFlowPosition: function (clientPosition, options) {
118
+ var _a, _b;
119
+ if (options === void 0) { options = {}; }
120
+ var _c = store.getState(), transform = _c.transform, snapGrid = _c.snapGrid, snapToGrid = _c.snapToGrid, domNode = _c.domNode;
121
+ if (!domNode) {
122
+ return clientPosition;
123
+ }
124
+ var _d = domNode.getBoundingClientRect(), domX = _d.x, domY = _d.y;
125
+ var correctedPosition = {
126
+ x: clientPosition.x - domX,
127
+ y: clientPosition.y - domY,
128
+ };
129
+ var _snapGrid = (_a = options.snapGrid) !== null && _a !== void 0 ? _a : snapGrid;
130
+ var _snapToGrid = (_b = options.snapToGrid) !== null && _b !== void 0 ? _b : snapToGrid;
131
+ return pointToRendererPoint(correctedPosition, transform, _snapToGrid, _snapGrid);
132
+ },
133
+ flowToScreenPosition: function (flowPosition) {
134
+ var _a = store.getState(), transform = _a.transform, domNode = _a.domNode;
135
+ if (!domNode) {
136
+ return flowPosition;
137
+ }
138
+ var _b = domNode.getBoundingClientRect(), domX = _b.x, domY = _b.y;
139
+ var rendererPosition = rendererPointToPoint(flowPosition, transform);
140
+ return {
141
+ x: rendererPosition.x + domX,
142
+ y: rendererPosition.y + domY,
143
+ };
144
+ },
145
+ };
146
+ }, []);
147
+ };
148
+ export default useViewportHelper;
149
+ //# sourceMappingURL=useViewportHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useViewportHelper.js","sourceRoot":"","sources":["../../src/hooks/useViewportHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { useCallback } from 'react';
2
+ import { shallow } from 'zustand/shallow';
3
+ import { useStore } from './useStore';
4
+ import { isEdgeVisible } from '../utils/edges';
5
+ /**
6
+ * Hook for getting the visible edge ids from the store.
7
+ *
8
+ * @internal
9
+ * @param onlyRenderVisible
10
+ * @returns array with visible edge ids
11
+ */
12
+ export function useVisibleEdgeIds(onlyRenderVisible) {
13
+ var edgeIds = useStore(useCallback(function (s) {
14
+ var e_1, _a;
15
+ if (!onlyRenderVisible) {
16
+ return s.edges.map(function (edge) { return edge.id; });
17
+ }
18
+ var visibleEdgeIds = [];
19
+ if (s.width && s.height) {
20
+ try {
21
+ for (var _b = __values(s.edges), _c = _b.next(); !_c.done; _c = _b.next()) {
22
+ var edge = _c.value;
23
+ var sourceNode = s.nodeLookup.get(edge.source);
24
+ var targetNode = s.nodeLookup.get(edge.target);
25
+ if (sourceNode &&
26
+ targetNode &&
27
+ isEdgeVisible({
28
+ sourceNode: sourceNode,
29
+ targetNode: targetNode,
30
+ width: s.width,
31
+ height: s.height,
32
+ transform: s.transform,
33
+ })) {
34
+ visibleEdgeIds.push(edge.id);
35
+ }
36
+ }
37
+ }
38
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
39
+ finally {
40
+ try {
41
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
42
+ }
43
+ finally { if (e_1) throw e_1.error; }
44
+ }
45
+ }
46
+ return visibleEdgeIds;
47
+ }, [onlyRenderVisible]), shallow);
48
+ return edgeIds;
49
+ }
50
+ //# sourceMappingURL=useVisibleEdgeIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVisibleEdgeIds.js","sourceRoot":"","sources":["../../src/hooks/useVisibleEdgeIds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,iBAA0B;IAC1D,IAAM,OAAO,GAAG,QAAQ,CACtB,WAAW,CACT,UAAC,CAAe;;QACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,EAAE,EAAP,CAAO,CAAC,CAAC;QACxC,CAAC;QAED,IAAM,cAAc,GAAG,EAAE,CAAC;QAE1B,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;;gBACxB,KAAmB,IAAA,KAAA,SAAA,CAAC,CAAC,KAAK,CAAA,gBAAA,4BAAE,CAAC;oBAAxB,IAAM,IAAI,WAAA;oBACb,IAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACjD,IAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAEjD,IACE,UAAU;wBACV,UAAU;wBACV,aAAa,CAAC;4BACZ,UAAU,YAAA;4BACV,UAAU,YAAA;4BACV,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,MAAM,EAAE,CAAC,CAAC,MAAM;4BAChB,SAAS,EAAE,CAAC,CAAC,SAAS;yBACvB,CAAC,EACF,CAAC;wBACD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;;;;;;;;;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,EACD,OAAO,CACR,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { useCallback } from 'react';
2
+ import { shallow } from 'zustand/shallow';
3
+ import { useStore } from './useStore';
4
+ import { getNodesInside } from '../utils/graph';
5
+ var selector = function (onlyRenderVisible) { return function (s) {
6
+ return onlyRenderVisible
7
+ ? getNodesInside(s.nodeLookup, { x: 0, y: 0, width: s.width, height: s.height }, s.transform, true).map(function (node) { return node.id; })
8
+ : Array.from(s.nodeLookup.keys());
9
+ }; };
10
+ /**
11
+ * Hook for getting the visible node ids from the store.
12
+ *
13
+ * @internal
14
+ * @param onlyRenderVisible
15
+ * @returns array with visible node ids
16
+ */
17
+ export function useVisibleNodeIds(onlyRenderVisible) {
18
+ var nodeIds = useStore(useCallback(selector(onlyRenderVisible), [onlyRenderVisible]), shallow);
19
+ return nodeIds;
20
+ }
21
+ //# sourceMappingURL=useVisibleNodeIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVisibleNodeIds.js","sourceRoot":"","sources":["../../src/hooks/useVisibleNodeIds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,IAAM,QAAQ,GAAG,UAAC,iBAA0B,IAAK,OAAA,UAAC,CAAe;IAC/D,OAAO,iBAAiB;QACtB,CAAC,CAAC,cAAc,CACZ,CAAC,CAAC,UAAU,EACZ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAChD,CAAC,CAAC,SAAS,EACX,IAAI,CACL,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,EAAE,EAAP,CAAO,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,CAAC,EATgD,CAShD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,iBAA0B;IAC1D,IAAM,OAAO,GAAG,QAAQ,CACtB,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAC7D,OAAO,CACR,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}