react-native-skia-gesture 0.3.1 → 0.3.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/README.md +6 -0
- package/lib/commonjs/canvas/canvas.js +16 -5
- package/lib/commonjs/canvas/canvas.js.map +1 -1
- package/lib/module/canvas/canvas.js +17 -6
- package/lib/module/canvas/canvas.js.map +1 -1
- package/lib/typescript/canvas/canvas.d.ts +1 -0
- package/lib/typescript/canvas/canvas.d.ts.map +1 -1
- package/lib/typescript/components/index.d.ts +2 -2
- package/package.json +1 -1
- package/src/canvas/canvas.tsx +23 -11
package/README.md
CHANGED
@@ -11,6 +11,12 @@ Therefore direct interactions with individual Skia components can only be achiev
|
|
11
11
|
|
12
12
|
This package, simply provides a set of APIs to be able to interact directly with individual components.
|
13
13
|
|
14
|
+
|
15
|
+
<a href="https://github.com/enzomanuelmangano/react-native-skia-gesture">
|
16
|
+
<img src="https://raw.githubusercontent.com/enzomanuelmangano/react-native-skia-gesture/main/.assets/demo.gif" title="react-native-skia-gesture">
|
17
|
+
</a>
|
18
|
+
|
19
|
+
|
14
20
|
## Installation
|
15
21
|
|
16
22
|
**You need to have already installed [@shopify/react-native-skia (>= 0.1.221)](https://shopify.github.io/react-native-skia/docs/getting-started/installation)**
|
@@ -11,10 +11,12 @@ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reani
|
|
11
11
|
var _context = require("./context");
|
12
12
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
13
13
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
14
|
+
const AnimatedSkiaCanvas = _reactNativeReanimated.default.createAnimatedComponent(_reactNativeSkia.Canvas);
|
14
15
|
const Canvas = _ref => {
|
15
16
|
let {
|
16
17
|
children,
|
17
18
|
panGesture = _reactNativeGestureHandler.Gesture.Pan(),
|
19
|
+
timeoutBeforeCollectingRefs = 100,
|
18
20
|
...props
|
19
21
|
} = _ref;
|
20
22
|
// Instead of value, provide a subscribe method and reload the refs
|
@@ -24,10 +26,19 @@ const Canvas = _ref => {
|
|
24
26
|
};
|
25
27
|
}, []);
|
26
28
|
const activeKey = (0, _reactNativeReanimated.useSharedValue)([]);
|
29
|
+
|
30
|
+
// This must be improved, it's a hack to wait for the refs to be loaded
|
27
31
|
const [loadedRefs, prepareLoadedRefs] = (0, _react.useState)({});
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
const ref = (0, _react.useRef)();
|
33
|
+
(0, _react.useEffect)(() => {
|
34
|
+
ref.current = setTimeout(() => {
|
35
|
+
prepareLoadedRefs(touchableRefs.value);
|
36
|
+
}, timeoutBeforeCollectingRefs);
|
37
|
+
return () => {
|
38
|
+
clearTimeout(ref.current);
|
39
|
+
};
|
40
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
41
|
+
}, [timeoutBeforeCollectingRefs]);
|
31
42
|
const mainGesture = panGesture.onBegin(event => {
|
32
43
|
const keys = Object.keys(loadedRefs);
|
33
44
|
for (let i = 0; i < keys.length; i++) {
|
@@ -73,9 +84,9 @@ const Canvas = _ref => {
|
|
73
84
|
}, [touchableRefs]);
|
74
85
|
return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
|
75
86
|
gesture: mainGesture
|
76
|
-
}, /*#__PURE__*/_react.default.createElement(
|
87
|
+
}, /*#__PURE__*/_react.default.createElement(AnimatedSkiaCanvas, props, /*#__PURE__*/_react.default.createElement(_context.TouchHandlerContext.Provider, {
|
77
88
|
value: touchableRefs
|
78
|
-
}, children)))
|
89
|
+
}, children)));
|
79
90
|
};
|
80
91
|
exports.Canvas = Canvas;
|
81
92
|
//# sourceMappingURL=canvas.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["Canvas","children","panGesture","Gesture","Pan","props","touchableRefs","useMemo","value","activeKey","useSharedValue","loadedRefs","prepareLoadedRefs","useState","setTimeout","mainGesture","onBegin","event","keys","Object","i","length","key","touchableItem","isPointInPath","onStart","push","handlerTag","onUpdate","activatedKey","find","includes","toString","indexedKey","split","onActive","onFinalize","filter","onEnd"
|
1
|
+
{"version":3,"names":["AnimatedSkiaCanvas","Animated","createAnimatedComponent","SkiaCanvas","Canvas","children","panGesture","Gesture","Pan","timeoutBeforeCollectingRefs","props","touchableRefs","useMemo","value","activeKey","useSharedValue","loadedRefs","prepareLoadedRefs","useState","ref","useRef","useEffect","current","setTimeout","clearTimeout","mainGesture","onBegin","event","keys","Object","i","length","key","touchableItem","isPointInPath","onStart","push","handlerTag","onUpdate","activatedKey","find","includes","toString","indexedKey","split","onActive","onFinalize","filter","onEnd"],"sourceRoot":"../../src","sources":["canvas.tsx"],"mappings":"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"}
|
@@ -1,12 +1,14 @@
|
|
1
1
|
import { Canvas as SkiaCanvas } from '@shopify/react-native-skia';
|
2
|
-
import React, { useEffect, useMemo, useState } from 'react';
|
2
|
+
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
3
3
|
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
4
4
|
import Animated, { useSharedValue } from 'react-native-reanimated';
|
5
5
|
import { TouchHandlerContext } from './context';
|
6
|
+
const AnimatedSkiaCanvas = Animated.createAnimatedComponent(SkiaCanvas);
|
6
7
|
const Canvas = _ref => {
|
7
8
|
let {
|
8
9
|
children,
|
9
10
|
panGesture = Gesture.Pan(),
|
11
|
+
timeoutBeforeCollectingRefs = 100,
|
10
12
|
...props
|
11
13
|
} = _ref;
|
12
14
|
// Instead of value, provide a subscribe method and reload the refs
|
@@ -16,10 +18,19 @@ const Canvas = _ref => {
|
|
16
18
|
};
|
17
19
|
}, []);
|
18
20
|
const activeKey = useSharedValue([]);
|
21
|
+
|
22
|
+
// This must be improved, it's a hack to wait for the refs to be loaded
|
19
23
|
const [loadedRefs, prepareLoadedRefs] = useState({});
|
20
|
-
|
21
|
-
|
22
|
-
|
24
|
+
const ref = useRef();
|
25
|
+
useEffect(() => {
|
26
|
+
ref.current = setTimeout(() => {
|
27
|
+
prepareLoadedRefs(touchableRefs.value);
|
28
|
+
}, timeoutBeforeCollectingRefs);
|
29
|
+
return () => {
|
30
|
+
clearTimeout(ref.current);
|
31
|
+
};
|
32
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
33
|
+
}, [timeoutBeforeCollectingRefs]);
|
23
34
|
const mainGesture = panGesture.onBegin(event => {
|
24
35
|
const keys = Object.keys(loadedRefs);
|
25
36
|
for (let i = 0; i < keys.length; i++) {
|
@@ -65,9 +76,9 @@ const Canvas = _ref => {
|
|
65
76
|
}, [touchableRefs]);
|
66
77
|
return /*#__PURE__*/React.createElement(GestureDetector, {
|
67
78
|
gesture: mainGesture
|
68
|
-
}, /*#__PURE__*/React.createElement(
|
79
|
+
}, /*#__PURE__*/React.createElement(AnimatedSkiaCanvas, props, /*#__PURE__*/React.createElement(TouchHandlerContext.Provider, {
|
69
80
|
value: touchableRefs
|
70
|
-
}, children)))
|
81
|
+
}, children)));
|
71
82
|
};
|
72
83
|
export { Canvas };
|
73
84
|
//# sourceMappingURL=canvas.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["Canvas","SkiaCanvas","React","useEffect","useMemo","useState","Gesture","GestureDetector","Animated","useSharedValue","TouchHandlerContext","children","panGesture","Pan","props","touchableRefs","value","activeKey","loadedRefs","prepareLoadedRefs","setTimeout","mainGesture","onBegin","event","keys","Object","i","length","key","touchableItem","isPointInPath","onStart","push","handlerTag","onUpdate","activatedKey","find","includes","toString","indexedKey","split","onActive","onFinalize","filter","onEnd"],"sourceRoot":"../../src","sources":["canvas.tsx"],"mappings":"AAAA,SAASA,MAAM,IAAIC,UAAU,QAAQ,4BAA4B;AACjE,OAAOC,KAAK,IAAIC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;
|
1
|
+
{"version":3,"names":["Canvas","SkiaCanvas","React","useEffect","useMemo","useRef","useState","Gesture","GestureDetector","Animated","useSharedValue","TouchHandlerContext","AnimatedSkiaCanvas","createAnimatedComponent","children","panGesture","Pan","timeoutBeforeCollectingRefs","props","touchableRefs","value","activeKey","loadedRefs","prepareLoadedRefs","ref","current","setTimeout","clearTimeout","mainGesture","onBegin","event","keys","Object","i","length","key","touchableItem","isPointInPath","onStart","push","handlerTag","onUpdate","activatedKey","find","includes","toString","indexedKey","split","onActive","onFinalize","filter","onEnd"],"sourceRoot":"../../src","sources":["canvas.tsx"],"mappings":"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"}
|
@@ -3,6 +3,7 @@ import { PanGesture } from 'react-native-gesture-handler';
|
|
3
3
|
import type { CanvasProps } from '@shopify/react-native-skia';
|
4
4
|
type TouchableCanvasProps = CanvasProps & {
|
5
5
|
panGesture?: PanGesture;
|
6
|
+
timeoutBeforeCollectingRefs?: number;
|
6
7
|
};
|
7
8
|
declare const Canvas: React.FC<TouchableCanvasProps>;
|
8
9
|
export { Canvas };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/canvas.tsx"],"names":[],"mappings":"AACA,OAAO,
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/canvas.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+C,MAAM,OAAO,CAAC;AACpE,OAAO,EAGL,UAAU,EACX,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,KAAK,oBAAoB,GAAG,WAAW,GAAG;IACxC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAIF,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA8F1C,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
@@ -2,8 +2,8 @@ export { Canvas } from '../canvas';
|
|
2
2
|
export declare const Circle: ({ onStart: onStartProp, onActive: onActiveProp, onEnd: onEndProp, touchablePath, ...props }: import("@shopify/react-native-skia").AnimatedProps<import("@shopify/react-native-skia").CircleProps, never> & Partial<import("../hoc").TouchableHandlerProps>) => JSX.Element;
|
3
3
|
export declare const RoundedRect: ({ onStart: onStartProp, onActive: onActiveProp, onEnd: onEndProp, touchablePath, ...props }: import("@shopify/react-native-skia").AnimatedProps<import("@shopify/react-native-skia").RoundedRectProps, never> & Partial<import("../hoc").TouchableHandlerProps>) => JSX.Element;
|
4
4
|
export declare const Rect: ({ onStart: onStartProp, onActive: onActiveProp, onEnd: onEndProp, touchablePath, ...props }: import("@shopify/react-native-skia").AnimatedProps<import("@shopify/react-native-skia").RectProps, never> & Partial<import("../hoc").TouchableHandlerProps>) => JSX.Element;
|
5
|
-
export declare const Path: ({ onStart: onStartProp, onActive: onActiveProp, onEnd: onEndProp, touchablePath, ...props }: Omit<import("@shopify/react-native-skia").AnimatedProps<import("@shopify/react-native-skia").PathProps, never>, "
|
6
|
-
start?: import("@shopify/react-native-skia").AnimatedProp<number, any> | undefined;
|
5
|
+
export declare const Path: ({ onStart: onStartProp, onActive: onActiveProp, onEnd: onEndProp, touchablePath, ...props }: Omit<import("@shopify/react-native-skia").AnimatedProps<import("@shopify/react-native-skia").PathProps, never>, "end" | "start"> & {
|
7
6
|
end?: import("@shopify/react-native-skia").AnimatedProp<number, any> | undefined;
|
7
|
+
start?: import("@shopify/react-native-skia").AnimatedProp<number, any> | undefined;
|
8
8
|
} & Partial<import("../hoc").TouchableHandlerProps>) => JSX.Element;
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/package.json
CHANGED
package/src/canvas/canvas.tsx
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Canvas as SkiaCanvas } from '@shopify/react-native-skia';
|
2
|
-
import React, { useEffect, useMemo, useState } from 'react';
|
2
|
+
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
3
3
|
import {
|
4
4
|
Gesture,
|
5
5
|
GestureDetector,
|
@@ -16,11 +16,15 @@ import type { CanvasProps } from '@shopify/react-native-skia';
|
|
16
16
|
|
17
17
|
type TouchableCanvasProps = CanvasProps & {
|
18
18
|
panGesture?: PanGesture;
|
19
|
+
timeoutBeforeCollectingRefs?: number; // default 100
|
19
20
|
};
|
20
21
|
|
22
|
+
const AnimatedSkiaCanvas = Animated.createAnimatedComponent(SkiaCanvas);
|
23
|
+
|
21
24
|
const Canvas: React.FC<TouchableCanvasProps> = ({
|
22
25
|
children,
|
23
26
|
panGesture = Gesture.Pan(),
|
27
|
+
timeoutBeforeCollectingRefs = 100,
|
24
28
|
...props
|
25
29
|
}) => {
|
26
30
|
// Instead of value, provide a subscribe method and reload the refs
|
@@ -30,13 +34,23 @@ const Canvas: React.FC<TouchableCanvasProps> = ({
|
|
30
34
|
|
31
35
|
const activeKey = useSharedValue<string[]>([]);
|
32
36
|
|
37
|
+
// This must be improved, it's a hack to wait for the refs to be loaded
|
33
38
|
const [loadedRefs, prepareLoadedRefs] = useState<
|
34
39
|
TouchableHandlerContextType['value']
|
35
40
|
>({});
|
36
41
|
|
37
|
-
|
38
|
-
|
39
|
-
|
42
|
+
const ref = useRef<NodeJS.Timeout>();
|
43
|
+
|
44
|
+
useEffect(() => {
|
45
|
+
ref.current = setTimeout(() => {
|
46
|
+
prepareLoadedRefs(touchableRefs.value);
|
47
|
+
}, timeoutBeforeCollectingRefs);
|
48
|
+
|
49
|
+
return () => {
|
50
|
+
clearTimeout(ref.current);
|
51
|
+
};
|
52
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
53
|
+
}, [timeoutBeforeCollectingRefs]);
|
40
54
|
|
41
55
|
const mainGesture = panGesture
|
42
56
|
.onBegin((event) => {
|
@@ -94,13 +108,11 @@ const Canvas: React.FC<TouchableCanvasProps> = ({
|
|
94
108
|
|
95
109
|
return (
|
96
110
|
<GestureDetector gesture={mainGesture}>
|
97
|
-
<
|
98
|
-
<
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
</SkiaCanvas>
|
103
|
-
</Animated.View>
|
111
|
+
<AnimatedSkiaCanvas {...props}>
|
112
|
+
<TouchHandlerContext.Provider value={touchableRefs}>
|
113
|
+
{children}
|
114
|
+
</TouchHandlerContext.Provider>
|
115
|
+
</AnimatedSkiaCanvas>
|
104
116
|
</GestureDetector>
|
105
117
|
);
|
106
118
|
};
|