react-native-wagmi-charts 2.7.1 → 2.7.2
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/lib/commonjs/charts/candle/Crosshair.js +32 -26
- package/lib/commonjs/charts/candle/Crosshair.js.map +1 -1
- package/lib/commonjs/charts/line/Cursor.js +49 -33
- package/lib/commonjs/charts/line/Cursor.js.map +1 -1
- package/lib/module/charts/candle/Crosshair.js +34 -28
- package/lib/module/charts/candle/Crosshair.js.map +1 -1
- package/lib/module/charts/line/Cursor.js +52 -36
- package/lib/module/charts/line/Cursor.js.map +1 -1
- package/lib/typescript/src/charts/candle/Crosshair.d.ts +2 -21
- package/lib/typescript/src/charts/candle/Crosshair.d.ts.map +1 -1
- package/lib/typescript/src/charts/line/Cursor.d.ts +5 -3
- package/lib/typescript/src/charts/line/Cursor.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/charts/candle/Crosshair.tsx +37 -49
- package/src/charts/line/Cursor.tsx +66 -43
|
@@ -22,8 +22,7 @@ function CandlestickChartCrosshair({
|
|
|
22
22
|
children,
|
|
23
23
|
horizontalCrosshairProps = {},
|
|
24
24
|
verticalCrosshairProps = {},
|
|
25
|
-
lineProps = {}
|
|
26
|
-
...props
|
|
25
|
+
lineProps = {}
|
|
27
26
|
}) {
|
|
28
27
|
const {
|
|
29
28
|
width,
|
|
@@ -36,26 +35,35 @@ function CandlestickChartCrosshair({
|
|
|
36
35
|
} = (0, _useCandlestickChart.useCandlestickChart)();
|
|
37
36
|
const tooltipPosition = (0, _reactNativeReanimated.useSharedValue)('left');
|
|
38
37
|
const opacity = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
} else {
|
|
48
|
-
tooltipPosition.value = 'left';
|
|
49
|
-
}
|
|
50
|
-
opacity.value = 1;
|
|
51
|
-
currentY.value = (0, _reactNativeRedash.clamp)(y, 0, height);
|
|
52
|
-
currentX.value = boundedX - boundedX % step + step / 2;
|
|
53
|
-
},
|
|
54
|
-
onEnd: () => {
|
|
55
|
-
opacity.value = 0;
|
|
56
|
-
currentY.value = -1;
|
|
57
|
-
currentX.value = -1;
|
|
38
|
+
const updatePosition = (x, y) => {
|
|
39
|
+
'worklet';
|
|
40
|
+
|
|
41
|
+
const boundedX = x <= width - 1 ? x : width - 1;
|
|
42
|
+
if (boundedX < 100) {
|
|
43
|
+
tooltipPosition.value = 'right';
|
|
44
|
+
} else {
|
|
45
|
+
tooltipPosition.value = 'left';
|
|
58
46
|
}
|
|
47
|
+
currentY.value = (0, _reactNativeRedash.clamp)(y, 0, height);
|
|
48
|
+
currentX.value = boundedX - boundedX % step + step / 2;
|
|
49
|
+
};
|
|
50
|
+
const longPressGesture = _reactNativeGestureHandler.Gesture.LongPress().minDuration(0).maxDistance(999999).onStart(event => {
|
|
51
|
+
'worklet';
|
|
52
|
+
|
|
53
|
+
opacity.value = 1;
|
|
54
|
+
updatePosition(event.x, event.y);
|
|
55
|
+
}).onTouchesMove(event => {
|
|
56
|
+
'worklet';
|
|
57
|
+
|
|
58
|
+
if (opacity.value === 1 && event.allTouches.length > 0) {
|
|
59
|
+
updatePosition(event.allTouches[0].x, event.allTouches[0].y);
|
|
60
|
+
}
|
|
61
|
+
}).onEnd(() => {
|
|
62
|
+
'worklet';
|
|
63
|
+
|
|
64
|
+
opacity.value = 0;
|
|
65
|
+
currentY.value = -1;
|
|
66
|
+
currentX.value = -1;
|
|
59
67
|
});
|
|
60
68
|
const horizontal = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
|
|
61
69
|
opacity: opacity.value,
|
|
@@ -74,11 +82,9 @@ function CandlestickChartCrosshair({
|
|
|
74
82
|
(0, _reactNativeReanimated.runOnJS)(onCurrentXChange)(data);
|
|
75
83
|
}
|
|
76
84
|
}, [currentX]);
|
|
77
|
-
return /*#__PURE__*/React.createElement(_reactNativeGestureHandler.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
onGestureEvent: onGestureEvent
|
|
81
|
-
}, props), /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, {
|
|
85
|
+
return /*#__PURE__*/React.createElement(_reactNativeGestureHandler.GestureDetector, {
|
|
86
|
+
gesture: longPressGesture
|
|
87
|
+
}, /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, {
|
|
82
88
|
style: _reactNative.StyleSheet.absoluteFill
|
|
83
89
|
}, /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, _extends({
|
|
84
90
|
style: [_reactNative.StyleSheet.absoluteFill, horizontal]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_reactNativeRedash","_Chart","_Line","_useCandlestickChart","_CrosshairTooltip","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","prototype","apply","CandlestickChartCrosshair","color","onCurrentXChange","children","horizontalCrosshairProps","verticalCrosshairProps","lineProps","
|
|
1
|
+
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_reactNativeRedash","_Chart","_Line","_useCandlestickChart","_CrosshairTooltip","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","prototype","apply","CandlestickChartCrosshair","color","onCurrentXChange","children","horizontalCrosshairProps","verticalCrosshairProps","lineProps","width","height","useContext","CandlestickChartDimensionsContext","currentX","currentY","step","useCandlestickChart","tooltipPosition","useSharedValue","opacity","updatePosition","x","y","boundedX","value","clamp","longPressGesture","Gesture","LongPress","minDuration","maxDistance","onStart","event","onTouchesMove","allTouches","onEnd","horizontal","useAnimatedStyle","transform","translateY","vertical","translateX","useAnimatedReaction","data","prevData","runOnJS","createElement","GestureDetector","gesture","View","style","StyleSheet","absoluteFill","CandlestickChartLine","CandlestickChartCrosshairTooltipContext","Provider","position"],"sourceRoot":"../../../../src","sources":["charts/candle/Crosshair.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,7 +16,6 @@ var _d3Scale = require("d3-scale");
|
|
|
16
16
|
var _useLineChart = require("./useLineChart");
|
|
17
17
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
18
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
20
19
|
const CursorContext = exports.CursorContext = /*#__PURE__*/React.createContext({
|
|
21
20
|
type: ''
|
|
22
21
|
});
|
|
@@ -26,7 +25,9 @@ function LineChartCursor({
|
|
|
26
25
|
snapToPoint,
|
|
27
26
|
type,
|
|
28
27
|
at,
|
|
29
|
-
|
|
28
|
+
shouldCancelWhenOutside = false,
|
|
29
|
+
onActivated,
|
|
30
|
+
onEnded
|
|
30
31
|
}) {
|
|
31
32
|
const {
|
|
32
33
|
pathWidth: width,
|
|
@@ -74,45 +75,60 @@ function LineChartCursor({
|
|
|
74
75
|
isActive.value = true;
|
|
75
76
|
}
|
|
76
77
|
}, [at, scaleX]);
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
x
|
|
80
|
-
}) => {
|
|
81
|
-
if (parsedPath) {
|
|
82
|
-
const xPosition = Math.max(0, x <= width ? x : width);
|
|
83
|
-
isActive.value = true;
|
|
78
|
+
const updatePosition = xPosition => {
|
|
79
|
+
'worklet';
|
|
84
80
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
81
|
+
if (parsedPath) {
|
|
82
|
+
// on Web, we could drag the cursor to be negative, breaking it
|
|
83
|
+
// so we clamp the index at 0 to fix it
|
|
84
|
+
// https://github.com/coinjar/react-native-wagmi-charts/issues/24
|
|
85
|
+
const minIndex = 0;
|
|
86
|
+
const boundedIndex = Math.max(minIndex, Math.round(xPosition / width / (1 / (data ? data.length - 1 : 1))));
|
|
87
|
+
if (snapToPoint) {
|
|
88
|
+
// We have to run this on the JS thread unfortunately as the scaleLinear functions won't work on UI thread
|
|
89
|
+
(0, _reactNativeReanimated.runOnJS)(linearScalePositionAndIndex)({
|
|
90
|
+
xPosition
|
|
91
|
+
});
|
|
92
|
+
} else if (!snapToPoint) {
|
|
93
|
+
currentX.value = xPosition;
|
|
94
|
+
currentIndex.value = boundedIndex;
|
|
99
95
|
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const longPressGesture = _reactNativeGestureHandler.Gesture.LongPress().minDuration(0).maxDistance(999999).shouldCancelWhenOutside(shouldCancelWhenOutside).onStart(event => {
|
|
99
|
+
'worklet';
|
|
100
|
+
|
|
101
|
+
if (parsedPath) {
|
|
102
|
+
const xPosition = Math.max(0, event.x <= width ? event.x : width);
|
|
103
|
+
isActive.value = true;
|
|
104
|
+
updatePosition(xPosition);
|
|
105
|
+
if (onActivated) {
|
|
106
|
+
(0, _reactNativeReanimated.runOnJS)(onActivated)();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}).onTouchesMove(event => {
|
|
110
|
+
'worklet';
|
|
111
|
+
|
|
112
|
+
if (parsedPath && isActive.value && event.allTouches.length > 0) {
|
|
113
|
+
const xPosition = Math.max(0, event.allTouches[0].x <= width ? event.allTouches[0].x : width);
|
|
114
|
+
updatePosition(xPosition);
|
|
115
|
+
}
|
|
116
|
+
}).onEnd(() => {
|
|
117
|
+
'worklet';
|
|
118
|
+
|
|
119
|
+
isActive.value = false;
|
|
120
|
+
currentIndex.value = -1;
|
|
121
|
+
if (onEnded) {
|
|
122
|
+
(0, _reactNativeReanimated.runOnJS)(onEnded)();
|
|
104
123
|
}
|
|
105
124
|
});
|
|
106
125
|
return /*#__PURE__*/React.createElement(CursorContext.Provider, {
|
|
107
126
|
value: {
|
|
108
127
|
type
|
|
109
128
|
}
|
|
110
|
-
}, /*#__PURE__*/React.createElement(_reactNativeGestureHandler.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
onGestureEvent: onGestureEvent,
|
|
114
|
-
shouldCancelWhenOutside: false
|
|
115
|
-
}, props), /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, {
|
|
129
|
+
}, /*#__PURE__*/React.createElement(_reactNativeGestureHandler.GestureDetector, {
|
|
130
|
+
gesture: longPressGesture
|
|
131
|
+
}, /*#__PURE__*/React.createElement(_reactNativeReanimated.default.View, {
|
|
116
132
|
style: _reactNative.StyleSheet.absoluteFill
|
|
117
133
|
}, children)));
|
|
118
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","React","_reactNativeReanimated","_reactNativeGestureHandler","_Chart","_reactNative","_d3Array","_d3Scale","_useLineChart","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","React","_reactNativeReanimated","_reactNativeGestureHandler","_Chart","_reactNative","_d3Array","_d3Scale","_useLineChart","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","CursorContext","exports","createContext","type","LineChartCursor","displayName","children","snapToPoint","at","shouldCancelWhenOutside","onActivated","onEnded","pathWidth","width","parsedPath","useContext","LineChartDimensionsContext","currentX","currentIndex","isActive","data","xDomain","useLineChart","xValues","useMemo","map","timestamp","scaleX","domainArray","length","scaleLinear","domain","range","linearScalePositionAndIndex","xPosition","xRelative","invert","closestIndex","bisectCenter","pathDataDelta","Math","abs","curves","closestPathCurve","max","min","newXPosition","to","move","x","value","useEffect","undefined","runOnJS","updatePosition","minIndex","boundedIndex","round","longPressGesture","Gesture","LongPress","minDuration","maxDistance","onStart","event","onTouchesMove","allTouches","onEnd","createElement","Provider","GestureDetector","gesture","View","style","StyleSheet","absoluteFill"],"sourceRoot":"../../../../src","sources":["charts/line/Cursor.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { StyleSheet } from 'react-native';
|
|
4
|
-
import {
|
|
5
|
-
import Animated, {
|
|
4
|
+
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
5
|
+
import Animated, { useSharedValue, useAnimatedStyle, useAnimatedReaction, runOnJS } from 'react-native-reanimated';
|
|
6
6
|
import { clamp } from 'react-native-redash';
|
|
7
7
|
import { CandlestickChartDimensionsContext } from './Chart';
|
|
8
8
|
import { CandlestickChartLine } from './Line';
|
|
@@ -14,8 +14,7 @@ export function CandlestickChartCrosshair({
|
|
|
14
14
|
children,
|
|
15
15
|
horizontalCrosshairProps = {},
|
|
16
16
|
verticalCrosshairProps = {},
|
|
17
|
-
lineProps = {}
|
|
18
|
-
...props
|
|
17
|
+
lineProps = {}
|
|
19
18
|
}) {
|
|
20
19
|
const {
|
|
21
20
|
width,
|
|
@@ -28,26 +27,35 @@ export function CandlestickChartCrosshair({
|
|
|
28
27
|
} = useCandlestickChart();
|
|
29
28
|
const tooltipPosition = useSharedValue('left');
|
|
30
29
|
const opacity = useSharedValue(0);
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
} else {
|
|
40
|
-
tooltipPosition.value = 'left';
|
|
41
|
-
}
|
|
42
|
-
opacity.value = 1;
|
|
43
|
-
currentY.value = clamp(y, 0, height);
|
|
44
|
-
currentX.value = boundedX - boundedX % step + step / 2;
|
|
45
|
-
},
|
|
46
|
-
onEnd: () => {
|
|
47
|
-
opacity.value = 0;
|
|
48
|
-
currentY.value = -1;
|
|
49
|
-
currentX.value = -1;
|
|
30
|
+
const updatePosition = (x, y) => {
|
|
31
|
+
'worklet';
|
|
32
|
+
|
|
33
|
+
const boundedX = x <= width - 1 ? x : width - 1;
|
|
34
|
+
if (boundedX < 100) {
|
|
35
|
+
tooltipPosition.value = 'right';
|
|
36
|
+
} else {
|
|
37
|
+
tooltipPosition.value = 'left';
|
|
50
38
|
}
|
|
39
|
+
currentY.value = clamp(y, 0, height);
|
|
40
|
+
currentX.value = boundedX - boundedX % step + step / 2;
|
|
41
|
+
};
|
|
42
|
+
const longPressGesture = Gesture.LongPress().minDuration(0).maxDistance(999999).onStart(event => {
|
|
43
|
+
'worklet';
|
|
44
|
+
|
|
45
|
+
opacity.value = 1;
|
|
46
|
+
updatePosition(event.x, event.y);
|
|
47
|
+
}).onTouchesMove(event => {
|
|
48
|
+
'worklet';
|
|
49
|
+
|
|
50
|
+
if (opacity.value === 1 && event.allTouches.length > 0) {
|
|
51
|
+
updatePosition(event.allTouches[0].x, event.allTouches[0].y);
|
|
52
|
+
}
|
|
53
|
+
}).onEnd(() => {
|
|
54
|
+
'worklet';
|
|
55
|
+
|
|
56
|
+
opacity.value = 0;
|
|
57
|
+
currentY.value = -1;
|
|
58
|
+
currentX.value = -1;
|
|
51
59
|
});
|
|
52
60
|
const horizontal = useAnimatedStyle(() => ({
|
|
53
61
|
opacity: opacity.value,
|
|
@@ -66,11 +74,9 @@ export function CandlestickChartCrosshair({
|
|
|
66
74
|
runOnJS(onCurrentXChange)(data);
|
|
67
75
|
}
|
|
68
76
|
}, [currentX]);
|
|
69
|
-
return /*#__PURE__*/React.createElement(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
onGestureEvent: onGestureEvent
|
|
73
|
-
}, props), /*#__PURE__*/React.createElement(Animated.View, {
|
|
77
|
+
return /*#__PURE__*/React.createElement(GestureDetector, {
|
|
78
|
+
gesture: longPressGesture
|
|
79
|
+
}, /*#__PURE__*/React.createElement(Animated.View, {
|
|
74
80
|
style: StyleSheet.absoluteFill
|
|
75
81
|
}, /*#__PURE__*/React.createElement(Animated.View, _extends({
|
|
76
82
|
style: [StyleSheet.absoluteFill, horizontal]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","StyleSheet","
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","Gesture","GestureDetector","Animated","useSharedValue","useAnimatedStyle","useAnimatedReaction","runOnJS","clamp","CandlestickChartDimensionsContext","CandlestickChartLine","useCandlestickChart","CandlestickChartCrosshairTooltipContext","CandlestickChartCrosshair","color","onCurrentXChange","children","horizontalCrosshairProps","verticalCrosshairProps","lineProps","width","height","useContext","currentX","currentY","step","tooltipPosition","opacity","updatePosition","x","y","boundedX","value","longPressGesture","LongPress","minDuration","maxDistance","onStart","event","onTouchesMove","allTouches","length","onEnd","horizontal","transform","translateY","vertical","translateX","data","prevData","createElement","gesture","View","style","absoluteFill","_extends","Provider","position"],"sourceRoot":"../../../../src","sources":["charts/candle/Crosshair.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
1
|
import * as React from 'react';
|
|
3
|
-
import Animated, { runOnJS
|
|
4
|
-
import {
|
|
2
|
+
import Animated, { runOnJS } from 'react-native-reanimated';
|
|
3
|
+
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
5
4
|
import { LineChartDimensionsContext } from './Chart';
|
|
6
5
|
import { StyleSheet } from 'react-native';
|
|
7
6
|
import { bisectCenter } from 'd3-array';
|
|
8
7
|
import { scaleLinear } from 'd3-scale';
|
|
9
8
|
import { useLineChart } from './useLineChart';
|
|
10
|
-
import { useEffect } from
|
|
9
|
+
import { useEffect } from 'react';
|
|
11
10
|
export const CursorContext = /*#__PURE__*/React.createContext({
|
|
12
11
|
type: ''
|
|
13
12
|
});
|
|
@@ -17,7 +16,9 @@ export function LineChartCursor({
|
|
|
17
16
|
snapToPoint,
|
|
18
17
|
type,
|
|
19
18
|
at,
|
|
20
|
-
|
|
19
|
+
shouldCancelWhenOutside = false,
|
|
20
|
+
onActivated,
|
|
21
|
+
onEnded
|
|
21
22
|
}) {
|
|
22
23
|
const {
|
|
23
24
|
pathWidth: width,
|
|
@@ -65,45 +66,60 @@ export function LineChartCursor({
|
|
|
65
66
|
isActive.value = true;
|
|
66
67
|
}
|
|
67
68
|
}, [at, scaleX]);
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
x
|
|
71
|
-
}) => {
|
|
72
|
-
if (parsedPath) {
|
|
73
|
-
const xPosition = Math.max(0, x <= width ? x : width);
|
|
74
|
-
isActive.value = true;
|
|
69
|
+
const updatePosition = xPosition => {
|
|
70
|
+
'worklet';
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
72
|
+
if (parsedPath) {
|
|
73
|
+
// on Web, we could drag the cursor to be negative, breaking it
|
|
74
|
+
// so we clamp the index at 0 to fix it
|
|
75
|
+
// https://github.com/coinjar/react-native-wagmi-charts/issues/24
|
|
76
|
+
const minIndex = 0;
|
|
77
|
+
const boundedIndex = Math.max(minIndex, Math.round(xPosition / width / (1 / (data ? data.length - 1 : 1))));
|
|
78
|
+
if (snapToPoint) {
|
|
79
|
+
// We have to run this on the JS thread unfortunately as the scaleLinear functions won't work on UI thread
|
|
80
|
+
runOnJS(linearScalePositionAndIndex)({
|
|
81
|
+
xPosition
|
|
82
|
+
});
|
|
83
|
+
} else if (!snapToPoint) {
|
|
84
|
+
currentX.value = xPosition;
|
|
85
|
+
currentIndex.value = boundedIndex;
|
|
90
86
|
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const longPressGesture = Gesture.LongPress().minDuration(0).maxDistance(999999).shouldCancelWhenOutside(shouldCancelWhenOutside).onStart(event => {
|
|
90
|
+
'worklet';
|
|
91
|
+
|
|
92
|
+
if (parsedPath) {
|
|
93
|
+
const xPosition = Math.max(0, event.x <= width ? event.x : width);
|
|
94
|
+
isActive.value = true;
|
|
95
|
+
updatePosition(xPosition);
|
|
96
|
+
if (onActivated) {
|
|
97
|
+
runOnJS(onActivated)();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}).onTouchesMove(event => {
|
|
101
|
+
'worklet';
|
|
102
|
+
|
|
103
|
+
if (parsedPath && isActive.value && event.allTouches.length > 0) {
|
|
104
|
+
const xPosition = Math.max(0, event.allTouches[0].x <= width ? event.allTouches[0].x : width);
|
|
105
|
+
updatePosition(xPosition);
|
|
106
|
+
}
|
|
107
|
+
}).onEnd(() => {
|
|
108
|
+
'worklet';
|
|
109
|
+
|
|
110
|
+
isActive.value = false;
|
|
111
|
+
currentIndex.value = -1;
|
|
112
|
+
if (onEnded) {
|
|
113
|
+
runOnJS(onEnded)();
|
|
95
114
|
}
|
|
96
115
|
});
|
|
97
116
|
return /*#__PURE__*/React.createElement(CursorContext.Provider, {
|
|
98
117
|
value: {
|
|
99
118
|
type
|
|
100
119
|
}
|
|
101
|
-
}, /*#__PURE__*/React.createElement(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
onGestureEvent: onGestureEvent,
|
|
105
|
-
shouldCancelWhenOutside: false
|
|
106
|
-
}, props), /*#__PURE__*/React.createElement(Animated.View, {
|
|
120
|
+
}, /*#__PURE__*/React.createElement(GestureDetector, {
|
|
121
|
+
gesture: longPressGesture
|
|
122
|
+
}, /*#__PURE__*/React.createElement(Animated.View, {
|
|
107
123
|
style: StyleSheet.absoluteFill
|
|
108
124
|
}, children)));
|
|
109
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","runOnJS","
|
|
1
|
+
{"version":3,"names":["React","Animated","runOnJS","Gesture","GestureDetector","LineChartDimensionsContext","StyleSheet","bisectCenter","scaleLinear","useLineChart","useEffect","CursorContext","createContext","type","LineChartCursor","displayName","children","snapToPoint","at","shouldCancelWhenOutside","onActivated","onEnded","pathWidth","width","parsedPath","useContext","currentX","currentIndex","isActive","data","xDomain","xValues","useMemo","map","timestamp","i","scaleX","domainArray","length","domain","range","linearScalePositionAndIndex","xPosition","xRelative","invert","closestIndex","pathDataDelta","Math","abs","curves","closestPathCurve","max","min","newXPosition","to","move","x","value","undefined","updatePosition","minIndex","boundedIndex","round","longPressGesture","LongPress","minDuration","maxDistance","onStart","event","onTouchesMove","allTouches","onEnd","createElement","Provider","gesture","View","style","absoluteFill"],"sourceRoot":"../../../../src","sources":["charts/line/Cursor.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,27 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ViewProps } from 'react-native';
|
|
3
|
-
import { LongPressGestureHandler, LongPressGestureHandlerProps } from 'react-native-gesture-handler';
|
|
4
3
|
import Animated from 'react-native-reanimated';
|
|
5
4
|
import { CandlestickChartLineProps } from './Line';
|
|
6
|
-
type
|
|
7
|
-
type MaxDistOverride = LongPressGestureHandlerProps['maxDist'];
|
|
8
|
-
type LongPressGestureHandlerOverride = Omit<LongPressGestureHandler, 'minDuration' | 'maxDist'> & {
|
|
9
|
-
/**
|
|
10
|
-
* Minimum time, expressed in milliseconds, that a finger must remain
|
|
11
|
-
* pressed on the corresponding view.
|
|
12
|
-
* @default 0
|
|
13
|
-
*/
|
|
14
|
-
minDuration?: MinDurationOverride;
|
|
15
|
-
/**
|
|
16
|
-
* Maximum distance, expressed in points, that defines how far the finger is
|
|
17
|
-
* allowed to travel during a long press gesture. If the finger travels
|
|
18
|
-
* further than the defined distance and the handler hasn't yet activated,
|
|
19
|
-
* it will fail to recognize the gesture.
|
|
20
|
-
* @default 999999
|
|
21
|
-
*/
|
|
22
|
-
maxDist?: MaxDistOverride;
|
|
23
|
-
};
|
|
24
|
-
type CandlestickChartCrosshairProps = LongPressGestureHandlerOverride & {
|
|
5
|
+
type CandlestickChartCrosshairProps = {
|
|
25
6
|
color?: string;
|
|
26
7
|
children?: React.ReactNode;
|
|
27
8
|
onCurrentXChange?: (value: number) => unknown;
|
|
@@ -29,6 +10,6 @@ type CandlestickChartCrosshairProps = LongPressGestureHandlerOverride & {
|
|
|
29
10
|
verticalCrosshairProps?: Animated.AnimateProps<ViewProps>;
|
|
30
11
|
lineProps?: Partial<CandlestickChartLineProps>;
|
|
31
12
|
};
|
|
32
|
-
export declare function CandlestickChartCrosshair({ color, onCurrentXChange, children, horizontalCrosshairProps, verticalCrosshairProps, lineProps,
|
|
13
|
+
export declare function CandlestickChartCrosshair({ color, onCurrentXChange, children, horizontalCrosshairProps, verticalCrosshairProps, lineProps, }: CandlestickChartCrosshairProps): React.JSX.Element;
|
|
33
14
|
export {};
|
|
34
15
|
//# sourceMappingURL=Crosshair.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Crosshair.d.ts","sourceRoot":"","sources":["../../../../../src/charts/candle/Crosshair.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Crosshair.d.ts","sourceRoot":"","sources":["../../../../../src/charts/candle/Crosshair.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;AAOrD,OAAO,QAKN,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAwB,yBAAyB,EAAE,MAAM,QAAQ,CAAC;AAIzE,KAAK,8BAA8B,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,wBAAwB,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5D,sBAAsB,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,gBAAgB,EAChB,QAAQ,EACR,wBAA6B,EAC7B,sBAA2B,EAC3B,SAAc,GACf,EAAE,8BAA8B,qBA0FhC"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
export type LineChartCursorProps = LongPressGestureHandlerProps & {
|
|
2
|
+
export type LineChartCursorProps = {
|
|
4
3
|
children: React.ReactNode;
|
|
5
4
|
type: 'line' | 'crosshair';
|
|
6
5
|
snapToPoint?: boolean;
|
|
7
6
|
at?: number;
|
|
7
|
+
shouldCancelWhenOutside?: boolean;
|
|
8
|
+
onActivated?: () => void;
|
|
9
|
+
onEnded?: () => void;
|
|
8
10
|
};
|
|
9
11
|
export declare const CursorContext: React.Context<{
|
|
10
12
|
type: string;
|
|
11
13
|
}>;
|
|
12
|
-
export declare function LineChartCursor({ children, snapToPoint, type, at,
|
|
14
|
+
export declare function LineChartCursor({ children, snapToPoint, type, at, shouldCancelWhenOutside, onActivated, onEnded, }: LineChartCursorProps): React.JSX.Element;
|
|
13
15
|
export declare namespace LineChartCursor {
|
|
14
16
|
var displayName: string;
|
|
15
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cursor.d.ts","sourceRoot":"","sources":["../../../../../src/charts/line/Cursor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Cursor.d.ts","sourceRoot":"","sources":["../../../../../src/charts/line/Cursor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,aAAa;;EAAoC,CAAC;AAI/D,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,EAAE,EACF,uBAA+B,EAC/B,WAAW,EACX,OAAO,GACR,EAAE,oBAAoB,qBAuHtB;yBA/He,eAAe"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { StyleSheet, ViewProps } from 'react-native';
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
Gesture,
|
|
5
|
+
GestureDetector,
|
|
6
|
+
GestureStateChangeEvent,
|
|
6
7
|
LongPressGestureHandlerEventPayload,
|
|
7
|
-
LongPressGestureHandlerProps,
|
|
8
8
|
} from 'react-native-gesture-handler';
|
|
9
9
|
import Animated, {
|
|
10
|
-
useAnimatedGestureHandler,
|
|
11
10
|
useSharedValue,
|
|
12
11
|
useAnimatedStyle,
|
|
13
12
|
useAnimatedReaction,
|
|
@@ -20,27 +19,7 @@ import { CandlestickChartLine, CandlestickChartLineProps } from './Line';
|
|
|
20
19
|
import { useCandlestickChart } from './useCandlestickChart';
|
|
21
20
|
import { CandlestickChartCrosshairTooltipContext } from './CrosshairTooltip';
|
|
22
21
|
|
|
23
|
-
type
|
|
24
|
-
type MaxDistOverride = LongPressGestureHandlerProps['maxDist'];
|
|
25
|
-
|
|
26
|
-
type LongPressGestureHandlerOverride = Omit<LongPressGestureHandler, 'minDuration' | 'maxDist'> & {
|
|
27
|
-
/**
|
|
28
|
-
* Minimum time, expressed in milliseconds, that a finger must remain
|
|
29
|
-
* pressed on the corresponding view.
|
|
30
|
-
* @default 0
|
|
31
|
-
*/
|
|
32
|
-
minDuration?: MinDurationOverride;
|
|
33
|
-
/**
|
|
34
|
-
* Maximum distance, expressed in points, that defines how far the finger is
|
|
35
|
-
* allowed to travel during a long press gesture. If the finger travels
|
|
36
|
-
* further than the defined distance and the handler hasn't yet activated,
|
|
37
|
-
* it will fail to recognize the gesture.
|
|
38
|
-
* @default 999999
|
|
39
|
-
*/
|
|
40
|
-
maxDist?: MaxDistOverride;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
type CandlestickChartCrosshairProps = LongPressGestureHandlerOverride & {
|
|
22
|
+
type CandlestickChartCrosshairProps = {
|
|
44
23
|
color?: string;
|
|
45
24
|
children?: React.ReactNode;
|
|
46
25
|
onCurrentXChange?: (value: number) => unknown;
|
|
@@ -56,7 +35,6 @@ export function CandlestickChartCrosshair({
|
|
|
56
35
|
horizontalCrosshairProps = {},
|
|
57
36
|
verticalCrosshairProps = {},
|
|
58
37
|
lineProps = {},
|
|
59
|
-
...props
|
|
60
38
|
}: CandlestickChartCrosshairProps) {
|
|
61
39
|
const { width, height } = React.useContext(CandlestickChartDimensionsContext);
|
|
62
40
|
const { currentX, currentY, step } = useCandlestickChart();
|
|
@@ -64,26 +42,41 @@ export function CandlestickChartCrosshair({
|
|
|
64
42
|
const tooltipPosition = useSharedValue<'left' | 'right'>('left');
|
|
65
43
|
|
|
66
44
|
const opacity = useSharedValue(0);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
45
|
+
|
|
46
|
+
const updatePosition = (x: number, y: number) => {
|
|
47
|
+
'worklet';
|
|
48
|
+
const boundedX = x <= width - 1 ? x : width - 1;
|
|
49
|
+
if (boundedX < 100) {
|
|
50
|
+
tooltipPosition.value = 'right';
|
|
51
|
+
} else {
|
|
52
|
+
tooltipPosition.value = 'left';
|
|
53
|
+
}
|
|
54
|
+
currentY.value = clamp(y, 0, height);
|
|
55
|
+
currentX.value = boundedX - (boundedX % step) + step / 2;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const longPressGesture = Gesture.LongPress()
|
|
59
|
+
.minDuration(0)
|
|
60
|
+
.maxDistance(999999)
|
|
61
|
+
.onStart(
|
|
62
|
+
(event: GestureStateChangeEvent<LongPressGestureHandlerEventPayload>) => {
|
|
63
|
+
'worklet';
|
|
64
|
+
opacity.value = 1;
|
|
65
|
+
updatePosition(event.x, event.y);
|
|
76
66
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
67
|
+
)
|
|
68
|
+
.onTouchesMove((event) => {
|
|
69
|
+
'worklet';
|
|
70
|
+
if (opacity.value === 1 && event.allTouches.length > 0) {
|
|
71
|
+
updatePosition(event.allTouches[0]!.x, event.allTouches[0]!.y);
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
.onEnd(() => {
|
|
75
|
+
'worklet';
|
|
82
76
|
opacity.value = 0;
|
|
83
77
|
currentY.value = -1;
|
|
84
78
|
currentX.value = -1;
|
|
85
|
-
}
|
|
86
|
-
});
|
|
79
|
+
});
|
|
87
80
|
const horizontal = useAnimatedStyle(
|
|
88
81
|
() => ({
|
|
89
82
|
opacity: opacity.value,
|
|
@@ -110,12 +103,7 @@ export function CandlestickChartCrosshair({
|
|
|
110
103
|
);
|
|
111
104
|
|
|
112
105
|
return (
|
|
113
|
-
<
|
|
114
|
-
minDurationMs={0}
|
|
115
|
-
maxDist={999999}
|
|
116
|
-
onGestureEvent={onGestureEvent}
|
|
117
|
-
{...props}
|
|
118
|
-
>
|
|
106
|
+
<GestureDetector gesture={longPressGesture}>
|
|
119
107
|
<Animated.View style={StyleSheet.absoluteFill}>
|
|
120
108
|
<Animated.View
|
|
121
109
|
style={[StyleSheet.absoluteFill, horizontal]}
|
|
@@ -135,6 +123,6 @@ export function CandlestickChartCrosshair({
|
|
|
135
123
|
<CandlestickChartLine color={color} x={0} y={height} {...lineProps} />
|
|
136
124
|
</Animated.View>
|
|
137
125
|
</Animated.View>
|
|
138
|
-
</
|
|
126
|
+
</GestureDetector>
|
|
139
127
|
);
|
|
140
128
|
}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
|
|
3
|
-
import Animated, {
|
|
4
|
-
runOnJS,
|
|
5
|
-
useAnimatedGestureHandler,
|
|
6
|
-
} from 'react-native-reanimated';
|
|
3
|
+
import Animated, { runOnJS } from 'react-native-reanimated';
|
|
7
4
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
Gesture,
|
|
6
|
+
GestureDetector,
|
|
7
|
+
GestureStateChangeEvent,
|
|
10
8
|
LongPressGestureHandlerEventPayload,
|
|
11
|
-
LongPressGestureHandlerProps,
|
|
12
9
|
} from 'react-native-gesture-handler';
|
|
13
10
|
|
|
14
11
|
import { LineChartDimensionsContext } from './Chart';
|
|
@@ -16,14 +13,17 @@ import { StyleSheet } from 'react-native';
|
|
|
16
13
|
import { bisectCenter } from 'd3-array';
|
|
17
14
|
import { scaleLinear } from 'd3-scale';
|
|
18
15
|
import { useLineChart } from './useLineChart';
|
|
19
|
-
import { useEffect } from
|
|
16
|
+
import { useEffect } from 'react';
|
|
20
17
|
|
|
21
|
-
export type LineChartCursorProps =
|
|
18
|
+
export type LineChartCursorProps = {
|
|
22
19
|
children: React.ReactNode;
|
|
23
20
|
type: 'line' | 'crosshair';
|
|
24
21
|
// Does not work on web due to how the Cursor operates on web
|
|
25
22
|
snapToPoint?: boolean;
|
|
26
23
|
at?: number;
|
|
24
|
+
shouldCancelWhenOutside?: boolean;
|
|
25
|
+
onActivated?: () => void;
|
|
26
|
+
onEnded?: () => void;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
export const CursorContext = React.createContext({ type: '' });
|
|
@@ -35,7 +35,9 @@ export function LineChartCursor({
|
|
|
35
35
|
snapToPoint,
|
|
36
36
|
type,
|
|
37
37
|
at,
|
|
38
|
-
|
|
38
|
+
shouldCancelWhenOutside = false,
|
|
39
|
+
onActivated,
|
|
40
|
+
onEnded,
|
|
39
41
|
}: LineChartCursorProps) {
|
|
40
42
|
const { pathWidth: width, parsedPath } = React.useContext(
|
|
41
43
|
LineChartDimensionsContext
|
|
@@ -89,49 +91,70 @@ export function LineChartCursor({
|
|
|
89
91
|
}
|
|
90
92
|
}, [at, scaleX]);
|
|
91
93
|
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
94
|
+
const updatePosition = (xPosition: number) => {
|
|
95
|
+
'worklet';
|
|
96
|
+
if (parsedPath) {
|
|
97
|
+
// on Web, we could drag the cursor to be negative, breaking it
|
|
98
|
+
// so we clamp the index at 0 to fix it
|
|
99
|
+
// https://github.com/coinjar/react-native-wagmi-charts/issues/24
|
|
100
|
+
const minIndex = 0;
|
|
101
|
+
const boundedIndex = Math.max(
|
|
102
|
+
minIndex,
|
|
103
|
+
Math.round(xPosition / width / (1 / (data ? data.length - 1 : 1)))
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
if (snapToPoint) {
|
|
107
|
+
// We have to run this on the JS thread unfortunately as the scaleLinear functions won't work on UI thread
|
|
108
|
+
runOnJS(linearScalePositionAndIndex)({ xPosition });
|
|
109
|
+
} else if (!snapToPoint) {
|
|
110
|
+
currentX.value = xPosition;
|
|
111
|
+
currentIndex.value = boundedIndex;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const longPressGesture = Gesture.LongPress()
|
|
117
|
+
.minDuration(0)
|
|
118
|
+
.maxDistance(999999)
|
|
119
|
+
.shouldCancelWhenOutside(shouldCancelWhenOutside)
|
|
120
|
+
.onStart(
|
|
121
|
+
(event: GestureStateChangeEvent<LongPressGestureHandlerEventPayload>) => {
|
|
122
|
+
'worklet';
|
|
123
|
+
if (parsedPath) {
|
|
124
|
+
const xPosition = Math.max(0, event.x <= width ? event.x : width);
|
|
125
|
+
isActive.value = true;
|
|
126
|
+
updatePosition(xPosition);
|
|
127
|
+
|
|
128
|
+
if (onActivated) {
|
|
129
|
+
runOnJS(onActivated)();
|
|
130
|
+
}
|
|
113
131
|
}
|
|
114
132
|
}
|
|
115
|
-
|
|
116
|
-
|
|
133
|
+
)
|
|
134
|
+
.onTouchesMove((event) => {
|
|
135
|
+
'worklet';
|
|
136
|
+
if (parsedPath && isActive.value && event.allTouches.length > 0) {
|
|
137
|
+
const xPosition = Math.max(0, event.allTouches[0]!.x <= width ? event.allTouches[0]!.x : width);
|
|
138
|
+
updatePosition(xPosition);
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
.onEnd(() => {
|
|
142
|
+
'worklet';
|
|
117
143
|
isActive.value = false;
|
|
118
144
|
currentIndex.value = -1;
|
|
119
|
-
|
|
120
|
-
|
|
145
|
+
|
|
146
|
+
if (onEnded) {
|
|
147
|
+
runOnJS(onEnded)();
|
|
148
|
+
}
|
|
149
|
+
});
|
|
121
150
|
|
|
122
151
|
return (
|
|
123
152
|
<CursorContext.Provider value={{ type }}>
|
|
124
|
-
<
|
|
125
|
-
minDurationMs={0}
|
|
126
|
-
maxDist={999999}
|
|
127
|
-
onGestureEvent={onGestureEvent}
|
|
128
|
-
shouldCancelWhenOutside={false}
|
|
129
|
-
{...props}
|
|
130
|
-
>
|
|
153
|
+
<GestureDetector gesture={longPressGesture}>
|
|
131
154
|
<Animated.View style={StyleSheet.absoluteFill}>
|
|
132
155
|
{children}
|
|
133
156
|
</Animated.View>
|
|
134
|
-
</
|
|
157
|
+
</GestureDetector>
|
|
135
158
|
</CursorContext.Provider>
|
|
136
159
|
);
|
|
137
160
|
}
|