@lincle/react-native-interactive 0.4.0-next.2 → 0.4.0-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.d.ts +1 -1
- package/dist/base.js +1 -1
- package/dist/components/Edge/Path/index.d.ts +1 -0
- package/dist/components/Edge/Path/index.js +1 -0
- package/dist/components/Edge/index.d.ts +2 -1
- package/dist/components/Edge/index.js +2 -1
- package/dist/components/Edges/Connections/index.d.ts +4 -0
- package/dist/components/Edges/Connections/index.js +39 -0
- package/dist/components/Edges/index.d.ts +4 -1
- package/dist/components/Edges/index.js +31 -1
- package/dist/components/{Grid → Graph/Grid}/index.d.ts +1 -1
- package/dist/components/Graph/Grid/index.js +56 -0
- package/dist/components/Graph/index.d.ts +1 -1
- package/dist/components/Graph/index.js +9 -7
- package/dist/components/Node/Draggable.d.ts +41 -0
- package/dist/components/Node/Draggable.js +270 -0
- package/dist/components/Node/MoveNode/index.js +5 -3
- package/dist/components/Node/PullNode/index.js +119 -2
- package/dist/components/Node/index.d.ts +3 -1
- package/dist/components/Node/index.js +130 -16
- package/dist/components/{Interaction → Nodes/Interaction}/index.d.ts +1 -1
- package/dist/components/Nodes/Interaction/index.js +105 -0
- package/dist/components/Nodes/index.d.ts +4 -1
- package/dist/components/Nodes/index.js +20 -1
- package/dist/components/index.d.ts +5 -8
- package/dist/components/index.js +5 -8
- package/dist/shared.d.ts +15 -17
- package/dist/shared.js +2 -1
- package/package.json +20 -25
- package/dist/components/GraphContexts/index.d.ts +0 -4
- package/dist/components/GraphContexts/index.js +0 -162
- package/dist/components/Grid/index.js +0 -11
- package/dist/components/Interaction/index.js +0 -17
- package/dist/components/Path/index.d.ts +0 -1
- package/dist/components/Path/index.js +0 -1
- package/dist/components/Pull/index.d.ts +0 -4
- package/dist/components/Pull/index.js +0 -5
|
@@ -1,19 +1,133 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
-
t[p] = s[p];
|
|
5
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
-
t[p[i]] = s[p[i]];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useDefaultLine, useDefaultNodeHeight, useDefaultNodeWidth, useDefaultShape, useMode, useModeGiven, useMove, useOnNodeDrag, useOnNodeEdgeDrop, useOnNodeSelect, useOnNodeStart, useOnNodeStop, usePull, useSnap } from '../../shared';
|
|
13
3
|
import MoveNode from './MoveNode';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
import PullNode from './PullNode';
|
|
5
|
+
import { useCallback, useMemo, useRef } from 'react';
|
|
6
|
+
const emptySnap = [
|
|
7
|
+
1,
|
|
8
|
+
1
|
|
9
|
+
];
|
|
10
|
+
const Node = ({ children, height: givenHeight, id, line: givenLine, mode: givenMode, move: givenMove, onDrag, onEdgeDrop: givenOnEdgeDrop, onSelect: givenOnSelect, onStart, onStop, pull: givenPull, shape: givenShape, style, width: givenWidth, x, y }) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const defaultHeight = useDefaultNodeHeight();
|
|
13
|
+
const defaultLine = useDefaultLine();
|
|
14
|
+
const defaultShape = useDefaultShape();
|
|
15
|
+
const defaultWidth = useDefaultNodeWidth();
|
|
16
|
+
const snap = useSnap();
|
|
17
|
+
const [snapX, snapY] = snap && Array.isArray(snap) ?
|
|
18
|
+
snap :
|
|
19
|
+
emptySnap;
|
|
20
|
+
const graphMode = useMode();
|
|
21
|
+
const graphGivenMode = useModeGiven();
|
|
22
|
+
const mode = (_a = givenMode !== null && givenMode !== void 0 ? givenMode : graphGivenMode) !== null && _a !== void 0 ? _a : graphMode;
|
|
23
|
+
const graphMove = useMove();
|
|
24
|
+
const graphPull = usePull();
|
|
25
|
+
const onNodeDrag = useOnNodeDrag();
|
|
26
|
+
const onNodeEdgeDrop = useOnNodeEdgeDrop();
|
|
27
|
+
const onNodeSelect = useOnNodeSelect();
|
|
28
|
+
const onNodeStart = useOnNodeStart();
|
|
29
|
+
const onNodeStop = useOnNodeStop();
|
|
30
|
+
const move = givenMove !== null && givenMove !== void 0 ? givenMove : graphMove;
|
|
31
|
+
const pull = givenPull !== null && givenPull !== void 0 ? givenPull : graphPull;
|
|
32
|
+
const onEdgeDrop = givenOnEdgeDrop !== null && givenOnEdgeDrop !== void 0 ? givenOnEdgeDrop : onNodeEdgeDrop;
|
|
33
|
+
const onSelect = givenOnSelect !== null && givenOnSelect !== void 0 ? givenOnSelect : onNodeSelect;
|
|
34
|
+
const pullPosition = useRef({
|
|
35
|
+
x,
|
|
36
|
+
y
|
|
37
|
+
});
|
|
38
|
+
const { height, line, shape, width } = useMemo(() => {
|
|
39
|
+
return {
|
|
40
|
+
height: givenHeight !== null && givenHeight !== void 0 ? givenHeight : defaultHeight,
|
|
41
|
+
line: givenLine !== null && givenLine !== void 0 ? givenLine : defaultLine,
|
|
42
|
+
shape: givenShape !== null && givenShape !== void 0 ? givenShape : defaultShape,
|
|
43
|
+
width: givenWidth !== null && givenWidth !== void 0 ? givenWidth : defaultWidth
|
|
44
|
+
};
|
|
45
|
+
}, [
|
|
46
|
+
defaultHeight,
|
|
47
|
+
defaultLine,
|
|
48
|
+
defaultShape,
|
|
49
|
+
defaultWidth,
|
|
50
|
+
givenHeight,
|
|
51
|
+
givenLine,
|
|
52
|
+
givenShape,
|
|
53
|
+
givenWidth
|
|
54
|
+
]);
|
|
55
|
+
const handleOnStart = useCallback((event) => {
|
|
56
|
+
if (onStart) {
|
|
57
|
+
onStart(event);
|
|
58
|
+
}
|
|
59
|
+
else if (onNodeStart) {
|
|
60
|
+
onNodeStart(event, id);
|
|
61
|
+
}
|
|
62
|
+
}, [
|
|
63
|
+
id,
|
|
64
|
+
onNodeStart,
|
|
65
|
+
onStart
|
|
66
|
+
]);
|
|
67
|
+
const handleOnDrag = useCallback((event, data) => {
|
|
68
|
+
if (onDrag) {
|
|
69
|
+
onDrag(event, data);
|
|
70
|
+
}
|
|
71
|
+
else if (onNodeDrag) {
|
|
72
|
+
onNodeDrag(event, id, data);
|
|
73
|
+
}
|
|
74
|
+
}, [
|
|
75
|
+
id,
|
|
76
|
+
onDrag,
|
|
77
|
+
onNodeDrag
|
|
78
|
+
]);
|
|
79
|
+
const handleOnStop = useCallback((event, data) => {
|
|
80
|
+
if (onStop) {
|
|
81
|
+
onStop(event, data);
|
|
82
|
+
}
|
|
83
|
+
else if (onNodeStop) {
|
|
84
|
+
onNodeStop(event, id, data);
|
|
85
|
+
}
|
|
86
|
+
}, [
|
|
87
|
+
id,
|
|
88
|
+
onNodeStop,
|
|
89
|
+
onStop
|
|
90
|
+
]);
|
|
91
|
+
const handleMoveStart = useCallback((event) => {
|
|
92
|
+
handleOnStart(event);
|
|
93
|
+
}, [
|
|
94
|
+
handleOnStart
|
|
95
|
+
]);
|
|
96
|
+
const handleMoveDrag = useCallback((event, data, position) => {
|
|
97
|
+
pullPosition.current = {
|
|
98
|
+
x: position.x,
|
|
99
|
+
y: position.y
|
|
100
|
+
};
|
|
101
|
+
handleOnDrag(event, data);
|
|
102
|
+
}, [
|
|
103
|
+
handleOnDrag
|
|
104
|
+
]);
|
|
105
|
+
const handleMoveStop = useCallback((event, data) => {
|
|
106
|
+
handleOnStop(event, data);
|
|
107
|
+
}, [
|
|
108
|
+
handleOnStop
|
|
109
|
+
]);
|
|
110
|
+
const pullNode = useMemo(() => {
|
|
111
|
+
return mode === 'pull' && pull ?
|
|
112
|
+
(_jsx(PullNode, { height: height, line: line, mode: mode, onEdgeDrop: onEdgeDrop, shape: shape, sourceId: id, style: style, width: width, x: pullPosition.current.x, y: pullPosition.current.y })) :
|
|
113
|
+
null;
|
|
114
|
+
}, [
|
|
115
|
+
mode
|
|
116
|
+
]);
|
|
117
|
+
const snapper = useMemo(() => {
|
|
118
|
+
return {
|
|
119
|
+
x: Math.ceil((x !== null && x !== void 0 ? x : 0) / snapX) * snapX,
|
|
120
|
+
y: Math.ceil((y !== null && y !== void 0 ? y : 0) / snapY) * snapY
|
|
121
|
+
};
|
|
122
|
+
}, [
|
|
123
|
+
snapX,
|
|
124
|
+
snapY,
|
|
125
|
+
x,
|
|
126
|
+
y
|
|
127
|
+
]);
|
|
128
|
+
return (_jsxs(_Fragment, { children: [_jsx(MoveNode, { disabled: (_b = mode === 'pull') !== null && _b !== void 0 ? _b : !move, height: height, id: id, mode: mode, onDrag: handleMoveDrag, onSelect: onSelect, onStart: handleMoveStart, onStop: handleMoveStop, shape: shape, snap: snap, style: style, width: width, x: snapper.x, y: snapper.y, children: children }), pullNode] }));
|
|
17
129
|
};
|
|
18
130
|
Node.displayName = 'LincleInteractiveNode';
|
|
19
|
-
export
|
|
131
|
+
export { Node };
|
|
132
|
+
export { default as MoveNode } from './MoveNode';
|
|
133
|
+
export { default as PullNode } from './PullNode';
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMode, useOnMode, useOnScale, useOnTranslateThrottle, useScale, useTranslate } from '../../../shared';
|
|
3
|
+
import { ReactNativeZoomableView } from '@openspacelabs/react-native-zoomable-view';
|
|
4
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
5
|
+
import { StyleSheet, View } from 'react-native';
|
|
6
|
+
const CLICK_TIME = 500;
|
|
7
|
+
const useDoubleTap = () => {
|
|
8
|
+
const timer = useRef(null);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
return () => {
|
|
11
|
+
if (timer.current) {
|
|
12
|
+
clearTimeout(timer.current);
|
|
13
|
+
timer.current = null;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}, []);
|
|
17
|
+
return useCallback((callback, threshold = CLICK_TIME) => {
|
|
18
|
+
if (timer.current) {
|
|
19
|
+
clearTimeout(timer.current);
|
|
20
|
+
timer.current = null;
|
|
21
|
+
return callback();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
timer.current = setTimeout(() => {
|
|
25
|
+
timer.current = null;
|
|
26
|
+
}, threshold);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}, []);
|
|
30
|
+
};
|
|
31
|
+
const styles = StyleSheet.create({
|
|
32
|
+
container: {
|
|
33
|
+
height: '100%',
|
|
34
|
+
overflow: 'visible'
|
|
35
|
+
},
|
|
36
|
+
zoomable: {
|
|
37
|
+
overflow: 'visible'
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const Interaction = ({ children, onPointerUp }) => {
|
|
41
|
+
const scale = useScale();
|
|
42
|
+
const translate = useTranslate();
|
|
43
|
+
const onScale = useOnScale();
|
|
44
|
+
const onTranslateThrottle = useOnTranslateThrottle();
|
|
45
|
+
const graphMode = useMode();
|
|
46
|
+
const onMode = useOnMode();
|
|
47
|
+
const handleDoubleTap = useDoubleTap();
|
|
48
|
+
const handleOnTransform = useCallback((event) => {
|
|
49
|
+
const { offsetX, offsetY, originalHeight, originalWidth, zoomLevel } = event;
|
|
50
|
+
onTranslateThrottle(originalWidth, originalHeight, offsetX, offsetY, zoomLevel);
|
|
51
|
+
}, [
|
|
52
|
+
onTranslateThrottle
|
|
53
|
+
]);
|
|
54
|
+
const handleZoom = useCallback((event, gestureState, zoomableViewEventObject) => {
|
|
55
|
+
const { offsetX, offsetY, originalHeight, originalWidth, zoomLevel } = zoomableViewEventObject;
|
|
56
|
+
onTranslateThrottle(originalWidth, originalHeight, offsetX, offsetY, zoomLevel);
|
|
57
|
+
if (onScale) {
|
|
58
|
+
onScale(zoomLevel);
|
|
59
|
+
}
|
|
60
|
+
}, [
|
|
61
|
+
onScale,
|
|
62
|
+
onTranslateThrottle
|
|
63
|
+
]);
|
|
64
|
+
const handleTapEnd = useCallback(() => {
|
|
65
|
+
if (onMode) {
|
|
66
|
+
switch (graphMode) {
|
|
67
|
+
case 'move': {
|
|
68
|
+
return handleDoubleTap(() => {
|
|
69
|
+
onMode('pull');
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
case 'pull': {
|
|
73
|
+
return handleDoubleTap(() => {
|
|
74
|
+
onMode('select');
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
case 'select':
|
|
78
|
+
default: {
|
|
79
|
+
return handleDoubleTap(() => {
|
|
80
|
+
onMode('move');
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}, [
|
|
89
|
+
graphMode,
|
|
90
|
+
handleDoubleTap,
|
|
91
|
+
onMode
|
|
92
|
+
]);
|
|
93
|
+
const handlePointerUp = useCallback((event) => {
|
|
94
|
+
handleTapEnd();
|
|
95
|
+
if (onPointerUp) {
|
|
96
|
+
onPointerUp(event);
|
|
97
|
+
}
|
|
98
|
+
}, [
|
|
99
|
+
handleTapEnd,
|
|
100
|
+
onPointerUp
|
|
101
|
+
]);
|
|
102
|
+
return (_jsx(View, { style: styles.container, children: _jsx(ReactNativeZoomableView, { bindToBorders: false, doubleTapDelay: 1, doubleTapZoomToCenter: false, initialOffsetX: translate.x, initialOffsetY: translate.y, initialZoom: scale, maxZoom: 1.5, minZoom: 0.5, movementSensibility: 1, onSingleTap: handlePointerUp, onTransform: handleOnTransform, onZoomAfter: handleZoom, panEnabled: true, style: styles.zoomable, visualTouchFeedbackEnabled: false, zoomStep: 0.5, children: children }) }));
|
|
103
|
+
};
|
|
104
|
+
Interaction.displayName = 'LincleInteractiveInteraction';
|
|
105
|
+
export default Interaction;
|
|
@@ -1 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { Nodes as BaseNodes } from '../../base';
|
|
14
|
+
import Interaction from './Interaction';
|
|
15
|
+
const Nodes = (_a) => {
|
|
16
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
|
17
|
+
return (_jsx(Interaction, { children: _jsx(BaseNodes, Object.assign({}, props, { children: children })) }));
|
|
18
|
+
};
|
|
19
|
+
Nodes.displayName = 'LincleInteractiveNodes';
|
|
20
|
+
export { Nodes };
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export { default as Node } from './Node';
|
|
7
|
-
export { default as Nodes } from './Nodes';
|
|
8
|
-
export { default as Pull } from './Pull';
|
|
1
|
+
export * from './Edge';
|
|
2
|
+
export * from './Edges';
|
|
3
|
+
export * from './Graph';
|
|
4
|
+
export * from './Node';
|
|
5
|
+
export * from './Nodes';
|
package/dist/components/index.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export { default as Node } from './Node';
|
|
7
|
-
export { default as Nodes } from './Nodes';
|
|
8
|
-
export { default as Pull } from './Pull';
|
|
1
|
+
export * from './Edge';
|
|
2
|
+
export * from './Edges';
|
|
3
|
+
export * from './Graph';
|
|
4
|
+
export * from './Node';
|
|
5
|
+
export * from './Nodes';
|
package/dist/shared.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
4
|
-
import { type GestureResponderEvent, type ViewStyle } from 'react-native';
|
|
5
|
-
export { defaultScale, defaultSettings, disableMove, disablePull, type DraggableData, type EdgeNodeProps, GraphContext, GridContext, type GridProps, ModeContext, type ModeType, NodeContext, type Position, ScaleContext, SnapContext, TransformContext, transformDefaults, TranslateContext, translateDefaults } from '@lincle/react-interactive-shared';
|
|
1
|
+
import { type EdgeControlProps, type GraphProps as InteractiveGraphProps, type MoveNodeProps as SharedMoveNodeProps, type NodeProps as SharedNodeProps, type Position, type PullNodeProps as SharedPullNodeProps, type PullProps as SharedPullProps } from '@lincle/react-interactive-shared';
|
|
2
|
+
import { type EdgeProps as BaseEdgeProps, type EdgesProps as BaseEdgesProps, type NodeProps as BaseNodeProps, type NodesProps as BaseNodesProps } from '@lincle/react-native-base';
|
|
3
|
+
import { type PropsWithChildren } from 'react';
|
|
4
|
+
import { type GestureResponderEvent, type PanResponderGestureState, type ViewStyle } from 'react-native';
|
|
6
5
|
export type DraggableEvent = GestureResponderEvent;
|
|
6
|
+
export type DraggableData = PanResponderGestureState;
|
|
7
7
|
export type NodeControlProps = {
|
|
8
8
|
onDrag?: (event: DraggableEvent, data: DraggableData) => void;
|
|
9
|
-
onEdgeDrop?: (sourceId: number | string, targetId?: number | string) => void;
|
|
9
|
+
onEdgeDrop?: (event: DraggableEvent, sourceId: number | string, targetId?: number | string) => void;
|
|
10
10
|
onSelect?: () => void;
|
|
11
11
|
onStart?: (event: DraggableEvent) => void;
|
|
12
12
|
onStop?: (event: DraggableEvent, data: DraggableData) => void;
|
|
@@ -17,6 +17,7 @@ export type GraphNodeControlProps = {
|
|
|
17
17
|
onNodeStart?: (event: DraggableEvent, nodeId: number | string) => void;
|
|
18
18
|
onNodeStop?: (event: DraggableEvent, nodeId: number | string, data: DraggableData) => void;
|
|
19
19
|
};
|
|
20
|
+
export type NodeProps = SharedNodeProps & Omit<BaseNodeProps, 'ref'> & NodeControlProps;
|
|
20
21
|
export type PullProps = Omit<EdgeProps, 'children' | 'id' | 'path' | 'targetId'> & Omit<NodeProps, 'children' | 'id'> & SharedPullProps & {
|
|
21
22
|
style?: {
|
|
22
23
|
pull?: ViewStyle;
|
|
@@ -28,20 +29,17 @@ export type PullNodeProps = Omit<NodeProps, 'id'> & SharedPullNodeProps & {
|
|
|
28
29
|
pull?: ViewStyle;
|
|
29
30
|
};
|
|
30
31
|
};
|
|
31
|
-
export type NodeProps = SharedNodeProps & BaseNodeProps & NodeControlProps;
|
|
32
32
|
export type NodeContextProps = EdgeControlProps & GraphNodeControlProps;
|
|
33
|
-
export type GraphContextsProps = BaseGraphContextsProps & EdgeControlProps & GraphNodeControlProps & Partial<Mode> & ScaleProps & SnapProps & TransformProps & TranslateProps;
|
|
34
33
|
export type InteractionControlProps = {
|
|
35
|
-
|
|
36
|
-
onMouseUp?: (event: GestureResponderEvent) => void;
|
|
37
|
-
onTouchEnd?: (event: GestureResponderEvent) => void;
|
|
38
|
-
onTouchStart?: (event: GestureResponderEvent) => void;
|
|
39
|
-
};
|
|
40
|
-
export type InteractionProps = InteractionControlProps & Pick<GraphProps, 'children'>;
|
|
41
|
-
export type GraphProps = EdgeControlProps & GraphNodeControlProps & InteractionControlProps & Omit<BaseGraphProps, 'children' | 'id'> & Partial<Mode> & ScaleProps & SnapProps & TransformProps & TranslateProps & {
|
|
42
|
-
children?: Array<ReactElement<EdgesProps | NodesProps>> | ReactNode | ReactNode[];
|
|
43
|
-
id?: number | string;
|
|
34
|
+
onPointerUp?: (event: GestureResponderEvent) => void;
|
|
44
35
|
};
|
|
36
|
+
export type InteractionProps = PropsWithChildren<InteractionControlProps>;
|
|
37
|
+
export type NodesProps = BaseNodesProps;
|
|
38
|
+
export type EdgeProps = BaseEdgeProps;
|
|
39
|
+
export type EdgesProps = BaseEdgesProps;
|
|
45
40
|
export type MoveNodeProps = Omit<NodeProps, 'onDrag' | 'onSelect'> & SharedMoveNodeProps & BaseNodeProps & {
|
|
46
41
|
readonly onDrag?: (event: GestureResponderEvent, data: DraggableData, position: Position) => void;
|
|
47
42
|
};
|
|
43
|
+
export type GraphProps = Omit<InteractiveGraphProps, 'onNodeDrag' | 'onNodeSelect' | 'onNodeStart' | 'onNodeStop'> & GraphNodeControlProps;
|
|
44
|
+
export { type Connection, type Connections, type ConnectionsProps, type EdgeNodeProps, type GridProps, type ModeType, type Position, Providers, useConnection, useConnections, useDefaultLine, useDefaultNodeHeight, useDefaultNodeWidth, useDefaultShape, useDiagramId, useMode, useModeGiven, useMove, useNodePositions, useOnMode, useOnNodeDrag, useOnNodeEdgeDrop, useOnNodeSelect, useOnNodeStart, useOnNodeStop, useOnScale, useOnTranslateThrottle, usePull, useScale, useSetConnection, useSnap, useTranslate } from '@lincle/react-interactive-shared';
|
|
45
|
+
export { Graph as GraphBase, Marker, useUpdateEdge } from '@lincle/react-native-base';
|
package/dist/shared.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { Providers, useConnection, useConnections, useDefaultLine, useDefaultNodeHeight, useDefaultNodeWidth, useDefaultShape, useDiagramId, useMode, useModeGiven, useMove, useNodePositions, useOnMode, useOnNodeDrag, useOnNodeEdgeDrop, useOnNodeSelect, useOnNodeStart, useOnNodeStop, useOnScale, useOnTranslateThrottle, usePull, useScale, useSetConnection, useSnap, useTranslate } from '@lincle/react-interactive-shared';
|
|
2
|
+
export { Graph as GraphBase, Marker, useUpdateEdge } from '@lincle/react-native-base';
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lincle/react-native-interactive",
|
|
3
|
-
"title": "lincle react
|
|
3
|
+
"title": "lincle react native interactive",
|
|
4
4
|
"license": "LGPL-3.0-or-later",
|
|
5
|
-
"version": "0.4.0-next.
|
|
5
|
+
"version": "0.4.0-next.4",
|
|
6
6
|
"private": false,
|
|
7
7
|
"description": "A 'reactive' React node and edge generator",
|
|
8
8
|
"author": "wallzero @wallzeroblog (http://wallzero.com)",
|
|
@@ -43,20 +43,17 @@
|
|
|
43
43
|
"clean:dist": "rimraf dist"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@digest/eslint-config-jest": "^4.3
|
|
47
|
-
"@digest/eslint-config-react": "^4.3
|
|
48
|
-
"@digest/eslint-config-typescript": "^4.3
|
|
49
|
-
"@digest/jest-junit": "^4.3
|
|
50
|
-
"@digest/jest-react": "^4.3
|
|
51
|
-
"@digest/jest-typescript": "^4.3
|
|
52
|
-
"@digest/typescript": "^4.3
|
|
46
|
+
"@digest/eslint-config-jest": "^4.4.3",
|
|
47
|
+
"@digest/eslint-config-react": "^4.4.3",
|
|
48
|
+
"@digest/eslint-config-typescript": "^4.4.3",
|
|
49
|
+
"@digest/jest-junit": "^4.4.3",
|
|
50
|
+
"@digest/jest-react": "^4.4.3",
|
|
51
|
+
"@digest/jest-typescript": "^4.4.3",
|
|
52
|
+
"@digest/typescript": "^4.4.3",
|
|
53
53
|
"@openspacelabs/react-native-zoomable-view": "^2.1.6",
|
|
54
|
-
"@types/bezier-js": "^4.1.3",
|
|
55
54
|
"@types/jest": "^29.5.12",
|
|
56
|
-
"@types/
|
|
57
|
-
"@types/
|
|
58
|
-
"@types/node": "^20.12.12",
|
|
59
|
-
"@types/react": "^18.3.2",
|
|
55
|
+
"@types/node": "^22.0.0",
|
|
56
|
+
"@types/react": "^18.3.3",
|
|
60
57
|
"@types/react-native": "^0.73.0",
|
|
61
58
|
"@types/react-test-renderer": "^18.3.0",
|
|
62
59
|
"cross-env": "^7.0.3",
|
|
@@ -65,25 +62,23 @@
|
|
|
65
62
|
"ncp": "^2.0.0",
|
|
66
63
|
"npm-run-all": "^4.1.5",
|
|
67
64
|
"react": "^18.3.1",
|
|
68
|
-
"react-native": "^0.74.
|
|
65
|
+
"react-native": "^0.74.4",
|
|
69
66
|
"react-native-draggable": "^3.3.0",
|
|
70
|
-
"react-native-reanimated": "^3.
|
|
71
|
-
"react-native-svg": "^15.
|
|
67
|
+
"react-native-reanimated": "^3.14.0",
|
|
68
|
+
"react-native-svg": "^15.4.0",
|
|
72
69
|
"react-test-renderer": "^18.3.1",
|
|
73
|
-
"rimraf": "^
|
|
70
|
+
"rimraf": "^6.0.1"
|
|
74
71
|
},
|
|
75
72
|
"dependencies": {
|
|
76
|
-
"@lincle/react-interactive-shared": "^0.4.0-next.
|
|
77
|
-
"@lincle/react-native-base": "^0.4.0-next.
|
|
78
|
-
"@lincle/react-shared": "^0.4.0-next.
|
|
79
|
-
"react-native-draggable": "^3.3.0"
|
|
73
|
+
"@lincle/react-interactive-shared": "^0.4.0-next.4",
|
|
74
|
+
"@lincle/react-native-base": "^0.4.0-next.4",
|
|
75
|
+
"@lincle/react-shared": "^0.4.0-next.4"
|
|
80
76
|
},
|
|
81
77
|
"peerDependencies": {
|
|
82
78
|
"@openspacelabs/react-native-zoomable-view": "^2.1.0",
|
|
83
79
|
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
|
|
84
80
|
"react-native": "^0.72.0",
|
|
85
81
|
"react-native-draggable": "^3.3.0",
|
|
86
|
-
"react-native-pan-pinch-view": "^2.0.0",
|
|
87
82
|
"react-native-reanimated": "^3.0.0",
|
|
88
83
|
"react-native-svg": "^13.0.0"
|
|
89
84
|
},
|
|
@@ -94,7 +89,7 @@
|
|
|
94
89
|
"react",
|
|
95
90
|
"reactjs",
|
|
96
91
|
"react-dom",
|
|
97
|
-
"react-
|
|
92
|
+
"react-native",
|
|
98
93
|
"reactive",
|
|
99
94
|
"react-draggable",
|
|
100
95
|
"interactive",
|
|
@@ -106,5 +101,5 @@
|
|
|
106
101
|
"dragndrop",
|
|
107
102
|
"drag"
|
|
108
103
|
],
|
|
109
|
-
"gitHead": "
|
|
104
|
+
"gitHead": "6bbaaf166913673c8990505ea8de66a0587ce372"
|
|
110
105
|
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { GraphContexts as WrappedGraphContexts } from '../../base';
|
|
3
|
-
import { defaultScale, defaultSettings, disableMove as defaultDisableMove, disablePull as defaultDisablePull, GridContext, ModeContext, NodeContext, ScaleContext, SnapContext, TransformContext, transformDefaults, TranslateContext, translateDefaults } from '../../shared';
|
|
4
|
-
import Grid from '../Grid';
|
|
5
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
6
|
-
const noGrid = [
|
|
7
|
-
1,
|
|
8
|
-
1
|
|
9
|
-
];
|
|
10
|
-
const GraphContexts = ({ children, disableMove = defaultDisableMove, disablePan = transformDefaults.disablePan, disablePull = defaultDisablePull, disableScale = transformDefaults.disableScale, edgeFrequency = defaultSettings.edgeFrequency, grid: givenGrid, id, line = defaultSettings.line, maxScale = transformDefaults.maxScale, minScale = transformDefaults.minScale, mode: givenMode, nodeFrequency = defaultSettings.nodeFrequency, nodeHeight = defaultSettings.height, nodeWidth = defaultSettings.width, onEdgeDrop, onNodeDrag, onNodeSelect, onNodeStart, onNodeStop, onScale, onTranslate, scale: givenScale = defaultScale, shape = defaultSettings.shape, snap, xOffset = translateDefaults.x, yOffset = translateDefaults.y }) => {
|
|
11
|
-
const [nodeControls, setNodeControls] = useState({
|
|
12
|
-
onEdgeDrop,
|
|
13
|
-
onNodeDrag,
|
|
14
|
-
onNodeSelect,
|
|
15
|
-
onNodeStart,
|
|
16
|
-
onNodeStop
|
|
17
|
-
});
|
|
18
|
-
const NodeControls = useMemo(() => {
|
|
19
|
-
return {
|
|
20
|
-
onEdgeDrop,
|
|
21
|
-
onNodeDrag,
|
|
22
|
-
onNodeSelect,
|
|
23
|
-
onNodeStart,
|
|
24
|
-
onNodeStop,
|
|
25
|
-
setNodeControls
|
|
26
|
-
};
|
|
27
|
-
}, [
|
|
28
|
-
onEdgeDrop,
|
|
29
|
-
onNodeDrag,
|
|
30
|
-
onNodeSelect,
|
|
31
|
-
onNodeStart,
|
|
32
|
-
onNodeStop,
|
|
33
|
-
setNodeControls
|
|
34
|
-
]);
|
|
35
|
-
const transform = useMemo(() => {
|
|
36
|
-
return {
|
|
37
|
-
disablePan,
|
|
38
|
-
disableScale,
|
|
39
|
-
maxScale,
|
|
40
|
-
minScale
|
|
41
|
-
};
|
|
42
|
-
}, [
|
|
43
|
-
disablePan,
|
|
44
|
-
disableScale,
|
|
45
|
-
maxScale,
|
|
46
|
-
minScale
|
|
47
|
-
]);
|
|
48
|
-
const [mode, setMode] = useState(givenMode);
|
|
49
|
-
const handleMode = useCallback((newMode) => {
|
|
50
|
-
setMode(newMode);
|
|
51
|
-
}, []);
|
|
52
|
-
const Mode = useMemo(() => {
|
|
53
|
-
return {
|
|
54
|
-
disableMove,
|
|
55
|
-
disablePull,
|
|
56
|
-
givenMode,
|
|
57
|
-
mode,
|
|
58
|
-
onMode: handleMode
|
|
59
|
-
};
|
|
60
|
-
}, [
|
|
61
|
-
disableMove,
|
|
62
|
-
disablePull,
|
|
63
|
-
givenMode,
|
|
64
|
-
handleMode,
|
|
65
|
-
mode
|
|
66
|
-
]);
|
|
67
|
-
useEffect(() => {
|
|
68
|
-
handleMode(givenMode);
|
|
69
|
-
}, [
|
|
70
|
-
givenMode,
|
|
71
|
-
handleMode
|
|
72
|
-
]);
|
|
73
|
-
const [scale, setScale] = useState(givenScale);
|
|
74
|
-
const handleScale = useCallback((newScale) => {
|
|
75
|
-
if (onScale) {
|
|
76
|
-
onScale(newScale);
|
|
77
|
-
}
|
|
78
|
-
setScale(newScale);
|
|
79
|
-
}, [
|
|
80
|
-
onScale
|
|
81
|
-
]);
|
|
82
|
-
const Scale = useMemo(() => {
|
|
83
|
-
return {
|
|
84
|
-
onScale: handleScale,
|
|
85
|
-
scale
|
|
86
|
-
};
|
|
87
|
-
}, [
|
|
88
|
-
handleScale,
|
|
89
|
-
scale
|
|
90
|
-
]);
|
|
91
|
-
useEffect(() => {
|
|
92
|
-
setScale(givenScale);
|
|
93
|
-
}, [
|
|
94
|
-
givenScale
|
|
95
|
-
]);
|
|
96
|
-
const [translate, setTranslate] = useState({
|
|
97
|
-
x: xOffset,
|
|
98
|
-
y: yOffset
|
|
99
|
-
});
|
|
100
|
-
const handleTranslate = useCallback((newTranslate) => {
|
|
101
|
-
if (onTranslate) {
|
|
102
|
-
onTranslate(newTranslate);
|
|
103
|
-
}
|
|
104
|
-
setTranslate(newTranslate);
|
|
105
|
-
}, [
|
|
106
|
-
onTranslate
|
|
107
|
-
]);
|
|
108
|
-
const Translate = useMemo(() => {
|
|
109
|
-
return {
|
|
110
|
-
onTranslate: handleTranslate,
|
|
111
|
-
translate
|
|
112
|
-
};
|
|
113
|
-
}, [
|
|
114
|
-
handleTranslate,
|
|
115
|
-
translate
|
|
116
|
-
]);
|
|
117
|
-
useEffect(() => {
|
|
118
|
-
setTranslate({
|
|
119
|
-
x: xOffset,
|
|
120
|
-
y: yOffset
|
|
121
|
-
});
|
|
122
|
-
}, [
|
|
123
|
-
xOffset,
|
|
124
|
-
yOffset
|
|
125
|
-
]);
|
|
126
|
-
const grid = useMemo(() => {
|
|
127
|
-
var _a;
|
|
128
|
-
return (_a = (givenGrid === false ?
|
|
129
|
-
noGrid :
|
|
130
|
-
givenGrid)) !== null && _a !== void 0 ? _a : defaultSettings.grid;
|
|
131
|
-
}, [
|
|
132
|
-
givenGrid
|
|
133
|
-
]);
|
|
134
|
-
const derivedSnap = useMemo(() => {
|
|
135
|
-
if (snap === undefined) {
|
|
136
|
-
return givenGrid === undefined ?
|
|
137
|
-
noGrid :
|
|
138
|
-
grid;
|
|
139
|
-
}
|
|
140
|
-
if (snap === false) {
|
|
141
|
-
return noGrid;
|
|
142
|
-
}
|
|
143
|
-
if (snap === true) {
|
|
144
|
-
return grid;
|
|
145
|
-
}
|
|
146
|
-
return snap;
|
|
147
|
-
}, [
|
|
148
|
-
givenGrid,
|
|
149
|
-
grid,
|
|
150
|
-
snap
|
|
151
|
-
]);
|
|
152
|
-
const hiddenGrid = givenGrid === false ?
|
|
153
|
-
null :
|
|
154
|
-
(_jsx(Grid, {}));
|
|
155
|
-
const staticContexts = (_jsx(NodeContext.Provider, { value: NodeControls, children: _jsx(SnapContext.Provider, { value: derivedSnap, children: _jsx(TransformContext.Provider, { value: transform, children: _jsx(ModeContext.Provider, { value: Mode, children: _jsx(ScaleContext.Provider, { value: Scale, children: _jsxs(TranslateContext.Provider, { value: Translate, children: [hiddenGrid, children] }) }) }) }) }) }));
|
|
156
|
-
const gridContext = givenGrid === false ?
|
|
157
|
-
staticContexts :
|
|
158
|
-
(_jsx(GridContext.Provider, { value: givenGrid !== null && givenGrid !== void 0 ? givenGrid : defaultSettings.grid, children: staticContexts }));
|
|
159
|
-
return (_jsx(WrappedGraphContexts, { edgeFrequency: edgeFrequency, grid: false, id: id, line: line, nodeFrequency: nodeFrequency, nodeHeight: nodeHeight, nodeWidth: nodeWidth, shape: shape, children: gridContext }));
|
|
160
|
-
};
|
|
161
|
-
GraphContexts.displayName = 'LincleInteractiveGraphContexts';
|
|
162
|
-
export default GraphContexts;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Grid as GridBase } from '../../base';
|
|
3
|
-
import { ScaleContext, TranslateContext } from '../../shared';
|
|
4
|
-
import { useContext } from 'react';
|
|
5
|
-
const Grid = ({ children }) => {
|
|
6
|
-
const { scale } = useContext(ScaleContext);
|
|
7
|
-
const { translate } = useContext(TranslateContext);
|
|
8
|
-
return (_jsx(GridBase, { scale: scale, xOffset: translate.x, yOffset: translate.y, children: children }));
|
|
9
|
-
};
|
|
10
|
-
Grid.displayName = 'LincleInteractiveGrid';
|
|
11
|
-
export default Grid;
|