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 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
- setTimeout(() => {
29
- prepareLoadedRefs(touchableRefs.value);
30
- }, 1000);
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(_reactNativeReanimated.default.View, null, /*#__PURE__*/_react.default.createElement(_reactNativeSkia.Canvas, props, /*#__PURE__*/_react.default.createElement(_context.TouchHandlerContext.Provider, {
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","useEffect"],"sourceRoot":"../../src","sources":["canvas.tsx"],"mappings":"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"}
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
- setTimeout(() => {
21
- prepareLoadedRefs(touchableRefs.value);
22
- }, 1000);
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(Animated.View, null, /*#__PURE__*/React.createElement(SkiaCanvas, props, /*#__PURE__*/React.createElement(TouchHandlerContext.Provider, {
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":"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"}
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,KAAuC,MAAM,OAAO,CAAC;AAC5D,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;CACzB,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAqF1C,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
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>, "start" | "end"> & {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-skia-gesture",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "A detection system for React Native Skia components",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -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
- setTimeout(() => {
38
- prepareLoadedRefs(touchableRefs.value);
39
- }, 1000);
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
- <Animated.View>
98
- <SkiaCanvas {...props}>
99
- <TouchHandlerContext.Provider value={touchableRefs}>
100
- {children}
101
- </TouchHandlerContext.Provider>
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
  };