react-native-skia-gesture 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +71 -20
  2. package/lib/commonjs/canvas/canvas.js +57 -56
  3. package/lib/commonjs/canvas/canvas.js.map +1 -1
  4. package/lib/commonjs/canvas/context.js +1 -1
  5. package/lib/commonjs/canvas/context.js.map +1 -1
  6. package/lib/commonjs/components/index.js +4 -4
  7. package/lib/commonjs/components/index.js.map +1 -1
  8. package/lib/commonjs/hoc/with-touchable-handler.js +29 -34
  9. package/lib/commonjs/hoc/with-touchable-handler.js.map +1 -1
  10. package/lib/commonjs/hooks/use-gesture-handler.js +11 -5
  11. package/lib/commonjs/hooks/use-gesture-handler.js.map +1 -1
  12. package/lib/commonjs/index.js +1 -1
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/commonjs/utils/get-circle-path.js +2 -0
  15. package/lib/commonjs/utils/get-circle-path.js.map +1 -1
  16. package/lib/commonjs/utils/get-rect-path.js +8 -5
  17. package/lib/commonjs/utils/get-rect-path.js.map +1 -1
  18. package/lib/commonjs/utils/unwrap-animated-value.js +7 -0
  19. package/lib/commonjs/utils/unwrap-animated-value.js.map +1 -1
  20. package/lib/module/canvas/canvas.js +59 -58
  21. package/lib/module/canvas/canvas.js.map +1 -1
  22. package/lib/module/canvas/context.js +1 -1
  23. package/lib/module/canvas/context.js.map +1 -1
  24. package/lib/module/components/index.js +4 -4
  25. package/lib/module/components/index.js.map +1 -1
  26. package/lib/module/hoc/with-touchable-handler.js +28 -34
  27. package/lib/module/hoc/with-touchable-handler.js.map +1 -1
  28. package/lib/module/hooks/use-gesture-handler.js +11 -5
  29. package/lib/module/hooks/use-gesture-handler.js.map +1 -1
  30. package/lib/module/index.js +1 -1
  31. package/lib/module/index.js.map +1 -1
  32. package/lib/module/utils/get-circle-path.js +2 -0
  33. package/lib/module/utils/get-circle-path.js.map +1 -1
  34. package/lib/module/utils/get-rect-path.js +9 -6
  35. package/lib/module/utils/get-rect-path.js.map +1 -1
  36. package/lib/module/utils/unwrap-animated-value.js +7 -0
  37. package/lib/module/utils/unwrap-animated-value.js.map +1 -1
  38. package/lib/typescript/canvas/canvas.d.ts +6 -2
  39. package/lib/typescript/canvas/canvas.d.ts.map +1 -1
  40. package/lib/typescript/canvas/context.d.ts +6 -5
  41. package/lib/typescript/canvas/context.d.ts.map +1 -1
  42. package/lib/typescript/components/index.d.ts.map +1 -1
  43. package/lib/typescript/hoc/with-touchable-handler.d.ts +7 -9
  44. package/lib/typescript/hoc/with-touchable-handler.d.ts.map +1 -1
  45. package/lib/typescript/hooks/use-gesture-handler.d.ts +7 -8
  46. package/lib/typescript/hooks/use-gesture-handler.d.ts.map +1 -1
  47. package/lib/typescript/index.d.ts +1 -1
  48. package/lib/typescript/index.d.ts.map +1 -1
  49. package/lib/typescript/utils/get-circle-path.d.ts.map +1 -1
  50. package/lib/typescript/utils/get-rect-path.d.ts.map +1 -1
  51. package/lib/typescript/utils/unwrap-animated-value.d.ts +2 -1
  52. package/lib/typescript/utils/unwrap-animated-value.d.ts.map +1 -1
  53. package/package.json +6 -4
  54. package/src/canvas/canvas.tsx +96 -80
  55. package/src/canvas/context.tsx +19 -10
  56. package/src/components/index.ts +5 -4
  57. package/src/hoc/with-touchable-handler.tsx +40 -35
  58. package/src/hooks/use-gesture-handler.ts +25 -16
  59. package/src/index.ts +1 -1
  60. package/src/utils/get-circle-path.ts +1 -0
  61. package/src/utils/get-rect-path.ts +11 -6
  62. package/src/utils/unwrap-animated-value.ts +9 -1
package/README.md CHANGED
@@ -4,10 +4,6 @@ React Native Skia Gesture 🤌🏽
4
4
 
5
5
  _A detection system for React Native Skia components._
6
6
 
7
- <div align="center">
8
- <img src="https://github.com/enzomanuelmangano/react-native-skia-gesture/blob/main/.assets/example.gif" title="react-native-skia-gesture">
9
- </div>
10
-
11
7
  ### Motivation
12
8
 
13
9
  React Native Skia, provides many declarative APIs for building screens using React Components. However, [Skia components are not real components, but abstract representations of a part of a drawing](https://github.com/Shopify/react-native-skia/issues/513#issuecomment-1290126304).
@@ -17,43 +13,49 @@ This package, simply provides a set of APIs to be able to interact directly with
17
13
 
18
14
  ## Installation
19
15
 
20
- **You need to have already installed [@shopify/react-native-skia (>= 0.1.157)](https://shopify.github.io/react-native-skia/docs/getting-started/installation)**
16
+ **You need to have already installed [@shopify/react-native-skia (>= 0.1.221)](https://shopify.github.io/react-native-skia/docs/getting-started/installation)**
17
+
18
+ ### Since v0.3.0
21
19
 
22
- Open a Terminal in your project's folder and install the library using `yarn`:
20
+ You need to install Reanimated (v3.0.0+) and Gesture Handler (v2.0.0+)
23
21
 
24
22
  ```sh
25
- yarn add react-native-skia-gesture
23
+ yarn add react-native-reanimated react-native-gesture-handler
26
24
  ```
27
25
 
28
- or with `npm`:
26
+ ### Install Skia Gesture
27
+
28
+ Open a Terminal in your project's folder and then install the library using `yarn`:
29
29
 
30
30
  ```sh
31
- npm install react-native-skia-gesture
31
+ yarn add react-native-skia-gesture
32
32
  ```
33
33
 
34
34
  ## Usage
35
35
 
36
36
  ```jsx
37
37
  import {
38
- useValue,
39
- } from '@shopify/react-native-skia';
38
+ useSharedValue,
39
+ } from 'react-native-reanimated';
40
40
 
41
41
  import Touchable, {
42
42
  useGestureHandler,
43
43
  } from 'react-native-skia-gesture';
44
44
 
45
45
  export default function App() {
46
- const cx = useValue(100);
47
- const cy = useValue(100);
46
+ const cx = useSharedValue(100);
47
+ const cy = useSharedValue(100);
48
48
 
49
49
  const circleGesture = useGestureHandler<{ x: number; y: number }>({
50
50
  onStart: (_, context) => {
51
- context.x = cx.current;
52
- context.y = cy.current;
51
+ 'worklet'; // Remember the 'worklet' keyword
52
+ context.x = cx.value;
53
+ context.y = cy.value;
53
54
  },
54
55
  onActive: ({ translationX, translationY }, context) => {
55
- cx.current = context.x + translationX;
56
- cy.current = context.y + translationY;
56
+ 'worklet';
57
+ cx.value = context.x + translationX;
58
+ cy.value = context.y + translationY;
57
59
  },
58
60
  });
59
61
 
@@ -69,9 +71,9 @@ If the element is a **Circle**, **Rect**, **RoundedRect**, or a **Path** the pac
69
71
 
70
72
  ```jsx
71
73
  ...
72
- const touchablePath = useComputedValue(() => {
74
+ const touchablePath = useDerivedValue(() => {
73
75
  const path = new Path();
74
- path.addCircle(cx.current, cy.current, 50);
76
+ path.addCircle(cx.value, cy.value, 50);
75
77
  return path;
76
78
  }, [cx, cy]);
77
79
 
@@ -83,6 +85,40 @@ return (
83
85
  ...
84
86
  ```
85
87
 
88
+ ### Run the Gestures on JS thread
89
+
90
+ You might want to run the gestures on the JS thread (but it's not recommended).
91
+ However it could be useful if you want to slowly migrate from the v0.2.0 to the v0.3.0.
92
+
93
+ To handle that you need to define the panGesture and pass it to the Touchable.Canvas
94
+
95
+ ```jsx
96
+ import { Gesture } from 'react-native-gesture-handler';
97
+
98
+ ...
99
+
100
+ const panGesture = Gesture.Pan().runOnJS(true)
101
+
102
+ const circleGesture = useGestureHandler<{ x: number; y: number }>({
103
+ // You can avoid the 'worklet' keyword if you are running the gesture on JS thread
104
+ onStart: (_, context) => {
105
+ context.x = cx.value;
106
+ context.y = cy.value;
107
+ },
108
+ onActive: ({ translationX, translationY }, context) => {
109
+ cx.value = context.x + translationX;
110
+ cy.value = context.y + translationY;
111
+ },
112
+ });
113
+
114
+ return (
115
+ <Touchable.Canvas style={styles.fill} panGesture={panGesture}>
116
+ <Touchable.Circle cx={cx} cy={cy} r={50} color="red" {...circleGesture} />
117
+ </Touchable.Canvas>
118
+ );
119
+
120
+ ```
121
+
86
122
  ## Ingredients
87
123
 
88
124
  ### `Canvas`
@@ -93,13 +129,28 @@ It's simply a Wrapper of Skia's Canvas.
93
129
 
94
130
  ### `withTouchableHandler`
95
131
 
96
- It's a HOC with which to wrap all Skia components with which you want to interact directly.
132
+ It's a HOC with which to wrap all Skia components with which you want to interact directly. You will need to pass a `touchablePath` to the component.
97
133
 
98
134
  ```jsx
99
135
  import { Image } from '@shopify/react-native-skia';
100
136
  import { withTouchableHandler } from 'react-native-skia-gesture';
101
137
 
102
138
  const TouchableImage = withTouchableHandler(Image);
139
+ const touchablePath = Skia.Path.Make().addCircle(x, y, 50);
140
+
141
+ return (
142
+ <Touchable.Canvas style={styles.fill}>
143
+ <TouchableImage
144
+ image={image}
145
+ x={x}
146
+ y={y}
147
+ width={50}
148
+ height={50}
149
+ touchablePath={touchablePath}
150
+ {...circleGesture}
151
+ />
152
+ </Touchable.Canvas>
153
+ );
103
154
  ```
104
155
 
105
156
  ---
@@ -6,75 +6,76 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Canvas = void 0;
7
7
  var _reactNativeSkia = require("@shopify/react-native-skia");
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
10
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
9
11
  var _context = require("./context");
10
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); }
11
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; }
12
- 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); }
13
- const Canvas = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
14
+ const Canvas = _ref => {
14
15
  let {
15
16
  children,
16
- onTouch,
17
+ panGesture = _reactNativeGestureHandler.Gesture.Pan(),
17
18
  ...props
18
19
  } = _ref;
19
- const touchableRefs = (0, _reactNativeSkia.useValue)({});
20
- const activeKey = (0, _reactNativeSkia.useValue)([]);
21
- const touchHandler = (0, _reactNativeSkia.useMultiTouchHandler)({
22
- onStart: event => {
23
- const keys = Object.keys(touchableRefs.current);
24
- for (let i = 0; i < keys.length; i++) {
25
- const key = keys[i];
26
- const touchableItem = touchableRefs.current[key];
27
- if (touchableItem !== null && touchableItem !== void 0 && touchableItem.isPointInPath(event)) {
28
- var _touchableItem$onStar;
29
- activeKey.current.push(`${key}__${event.id}`);
30
- (_touchableItem$onStar = touchableItem.onStart) === null || _touchableItem$onStar === void 0 ? void 0 : _touchableItem$onStar.call(touchableItem, event);
31
- return;
32
- }
33
- }
34
- },
35
- onActive: event => {
36
- var _activatedKey$split, _touchableItem$onActi;
37
- const activatedKey = activeKey.current.find(key => key.includes(event.id.toString()));
38
- if (!activatedKey) {
39
- return;
40
- }
41
- const indexedKey = (_activatedKey$split = activatedKey.split('__')) === null || _activatedKey$split === void 0 ? void 0 : _activatedKey$split[0];
42
- if (!indexedKey) {
43
- return;
44
- }
45
- const touchableItem = touchableRefs.current[indexedKey];
46
- return touchableItem === null || touchableItem === void 0 ? void 0 : (_touchableItem$onActi = touchableItem.onActive) === null || _touchableItem$onActi === void 0 ? void 0 : _touchableItem$onActi.call(touchableItem, event);
47
- },
48
- onEnd: event => {
49
- var _activatedKey$split2, _touchableItem$onEnd;
50
- const activatedKey = activeKey.current.find(key => key.includes(event.id.toString()));
51
- if (!activatedKey) {
52
- return;
53
- }
54
- const indexedKey = (_activatedKey$split2 = activatedKey.split('__')) === null || _activatedKey$split2 === void 0 ? void 0 : _activatedKey$split2[0];
55
- if (!indexedKey) {
56
- return;
20
+ // Instead of value, provide a subscribe method and reload the refs
21
+ const touchableRefs = (0, _react.useMemo)(() => {
22
+ return {
23
+ value: {}
24
+ };
25
+ }, []);
26
+ const activeKey = (0, _reactNativeReanimated.useSharedValue)([]);
27
+ const [loadedRefs, prepareLoadedRefs] = (0, _react.useState)({});
28
+ setTimeout(() => {
29
+ prepareLoadedRefs(touchableRefs.value);
30
+ }, 1000);
31
+ const mainGesture = panGesture.onBegin(event => {
32
+ const keys = Object.keys(loadedRefs);
33
+ for (let i = 0; i < keys.length; i++) {
34
+ const key = keys[i];
35
+ const touchableItem = loadedRefs[key];
36
+ const isPointInPath = touchableItem === null || touchableItem === void 0 ? void 0 : touchableItem.isPointInPath(event);
37
+ if (isPointInPath && touchableItem !== null && touchableItem !== void 0 && touchableItem.onStart) {
38
+ var _touchableItem$onStar;
39
+ activeKey.value.push(`${key}__${event.handlerTag}`);
40
+ (_touchableItem$onStar = touchableItem.onStart) === null || _touchableItem$onStar === void 0 ? void 0 : _touchableItem$onStar.call(touchableItem, event);
57
41
  }
58
- const touchableItem = touchableRefs.current[indexedKey];
59
- activeKey.current = activeKey.current.filter(key => !key.includes(event.id.toString()));
60
- return touchableItem === null || touchableItem === void 0 ? void 0 : (_touchableItem$onEnd = touchableItem.onEnd) === null || _touchableItem$onEnd === void 0 ? void 0 : _touchableItem$onEnd.call(touchableItem, event);
61
42
  }
62
- }, [touchableRefs, activeKey]);
43
+ }).onUpdate(event => {
44
+ var _activatedKey$split, _touchableItem$onActi;
45
+ const activatedKey = activeKey.value.find(key => key.includes(event.handlerTag.toString()));
46
+ if (!activatedKey) {
47
+ return;
48
+ }
49
+ const indexedKey = (_activatedKey$split = activatedKey.split('__')) === null || _activatedKey$split === void 0 ? void 0 : _activatedKey$split[0];
50
+ if (!indexedKey) {
51
+ return;
52
+ }
53
+ const touchableItem = loadedRefs[indexedKey];
54
+ return touchableItem === null || touchableItem === void 0 ? void 0 : (_touchableItem$onActi = touchableItem.onActive) === null || _touchableItem$onActi === void 0 ? void 0 : _touchableItem$onActi.call(touchableItem, event);
55
+ }).onFinalize(event => {
56
+ var _activatedKey$split2, _touchableItem$onEnd;
57
+ const activatedKey = activeKey.value.find(key => key.includes(event.handlerTag.toString()));
58
+ if (!activatedKey) {
59
+ return;
60
+ }
61
+ const indexedKey = (_activatedKey$split2 = activatedKey.split('__')) === null || _activatedKey$split2 === void 0 ? void 0 : _activatedKey$split2[0];
62
+ if (!indexedKey) {
63
+ return;
64
+ }
65
+ const touchableItem = loadedRefs[indexedKey];
66
+ activeKey.value = activeKey.value.filter(key => !key.includes(event.handlerTag.toString()));
67
+ return touchableItem === null || touchableItem === void 0 ? void 0 : (_touchableItem$onEnd = touchableItem.onEnd) === null || _touchableItem$onEnd === void 0 ? void 0 : _touchableItem$onEnd.call(touchableItem, event);
68
+ });
63
69
  (0, _react.useEffect)(() => {
64
70
  return () => {
65
- touchableRefs.current = {};
71
+ touchableRefs.value = {};
66
72
  };
67
73
  }, [touchableRefs]);
68
- return /*#__PURE__*/_react.default.createElement(_reactNativeSkia.Canvas, _extends({
69
- ref: ref
70
- }, props, {
71
- onTouch: touchInfo => {
72
- touchHandler(touchInfo);
73
- return onTouch === null || onTouch === void 0 ? void 0 : onTouch(touchInfo);
74
- }
75
- }), /*#__PURE__*/_react.default.createElement(_context.TouchHandlerContext.Provider, {
74
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
75
+ 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, {
76
77
  value: touchableRefs
77
- }, children));
78
- });
78
+ }, children))));
79
+ };
79
80
  exports.Canvas = Canvas;
80
81
  //# sourceMappingURL=canvas.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Canvas","React","forwardRef","ref","children","onTouch","props","touchableRefs","useValue","activeKey","touchHandler","useMultiTouchHandler","onStart","event","keys","Object","current","i","length","key","touchableItem","isPointInPath","push","id","onActive","activatedKey","find","includes","toString","indexedKey","split","onEnd","filter","useEffect","touchInfo"],"sourceRoot":"../../src","sources":["canvas.tsx"],"mappings":"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"}
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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"}
@@ -8,7 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  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); }
9
9
  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; }
10
10
  const TouchHandlerContext = /*#__PURE__*/_react.default.createContext({
11
- current: {}
11
+ value: {}
12
12
  });
13
13
  exports.TouchHandlerContext = TouchHandlerContext;
14
14
  const useTouchHandlerContext = () => {
@@ -1 +1 @@
1
- {"version":3,"names":["TouchHandlerContext","React","createContext","current","useTouchHandlerContext","useContext"],"sourceRoot":"../../src","sources":["context.tsx"],"mappings":";;;;;;AAKA;AAA0C;AAAA;AAa1C,MAAMA,mBAAmB,gBAAGC,cAAK,CAACC,aAAa,CAA8B;EAC3EC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAAC;AAEH,MAAMC,sBAAsB,GAAG,MAAM;EACnC,OAAO,IAAAC,iBAAU,EAACL,mBAAmB,CAAC;AACxC,CAAC;AAAC"}
1
+ {"version":3,"names":["TouchHandlerContext","React","createContext","value","useTouchHandlerContext","useContext"],"sourceRoot":"../../src","sources":["context.tsx"],"mappings":";;;;;;AAAA;AAA0C;AAAA;AA2B1C,MAAMA,mBAAmB,gBAAGC,cAAK,CAACC,aAAa,CAA8B;EAC3EC,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AAAC;AAEH,MAAMC,sBAAsB,GAAG,MAAM;EACnC,OAAO,IAAAC,iBAAU,EAACL,mBAAmB,CAAC;AACxC,CAAC;AAAC"}
@@ -13,12 +13,12 @@ exports.RoundedRect = exports.Rect = exports.Path = exports.Circle = void 0;
13
13
  var _reactNativeSkia = require("@shopify/react-native-skia");
14
14
  var _hoc = require("../hoc");
15
15
  var _canvas = require("../canvas");
16
- const Circle = (0, _hoc.withTouchableHandler)(_reactNativeSkia.Circle);
16
+ const Circle = (0, _hoc.withTouchableHandler)(_reactNativeSkia.Circle, 'Circle');
17
17
  exports.Circle = Circle;
18
- const RoundedRect = (0, _hoc.withTouchableHandler)(_reactNativeSkia.RoundedRect);
18
+ const RoundedRect = (0, _hoc.withTouchableHandler)(_reactNativeSkia.RoundedRect, 'RoundedRect');
19
19
  exports.RoundedRect = RoundedRect;
20
- const Rect = (0, _hoc.withTouchableHandler)(_reactNativeSkia.Rect);
20
+ const Rect = (0, _hoc.withTouchableHandler)(_reactNativeSkia.Rect, 'Rect');
21
21
  exports.Rect = Rect;
22
- const Path = (0, _hoc.withTouchableHandler)(_reactNativeSkia.Path);
22
+ const Path = (0, _hoc.withTouchableHandler)(_reactNativeSkia.Path, 'Path');
23
23
  exports.Path = Path;
24
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Circle","withTouchableHandler","SkiaCircle","RoundedRect","SkiaRoundedRect","Rect","SkiaRect","Path","SkiaPath"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;AAAA;AAMA;AAEA;AAEO,MAAMA,MAAM,GAAG,IAAAC,yBAAoB,EAACC,uBAAU,CAAC;AAAC;AAChD,MAAMC,WAAW,GAAG,IAAAF,yBAAoB,EAACG,4BAAe,CAAC;AAAC;AAC1D,MAAMC,IAAI,GAAG,IAAAJ,yBAAoB,EAACK,qBAAQ,CAAC;AAAC;AAC5C,MAAMC,IAAI,GAAG,IAAAN,yBAAoB,EAACO,qBAAQ,CAAC;AAAC"}
1
+ {"version":3,"names":["Circle","withTouchableHandler","SkiaCircle","RoundedRect","SkiaRoundedRect","Rect","SkiaRect","Path","SkiaPath"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;AAAA;AAOA;AAEA;AAEO,MAAMA,MAAM,GAAG,IAAAC,yBAAoB,EAACC,uBAAU,EAAE,QAAQ,CAAC;AAAC;AAC1D,MAAMC,WAAW,GAAG,IAAAF,yBAAoB,EAACG,4BAAe,EAAE,aAAa,CAAC;AAAC;AACzE,MAAMC,IAAI,GAAG,IAAAJ,yBAAoB,EAACK,qBAAQ,EAAE,MAAM,CAAC;AAAC;AACpD,MAAMC,IAAI,GAAG,IAAAN,yBAAoB,EAACO,qBAAQ,EAAE,MAAM,CAAC;AAAC"}
@@ -3,14 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.withTouchableHandler = void 0;
7
- var _reactNativeSkia = require("@shopify/react-native-skia");
6
+ exports.withTouchableHandler = exports.getSkiaPath = void 0;
8
7
  var _react = require("react");
8
+ var _context = require("../canvas/context");
9
9
  var _getCirclePath = require("../utils/get-circle-path");
10
10
  var _getRectPath = require("../utils/get-rect-path");
11
11
  var _unwrapAnimatedValue = require("../utils/unwrap-animated-value");
12
- var _context = require("../canvas/context");
13
12
  const getSkiaPath = (key, props) => {
13
+ 'worklet';
14
+
14
15
  const unwrappedProps = (0, _unwrapAnimatedValue.unwrapAnimatedValueObject)(props);
15
16
  switch (key) {
16
17
  case 'Circle':
@@ -25,7 +26,8 @@ const getSkiaPath = (key, props) => {
25
26
  return null;
26
27
  }
27
28
  };
28
- const withTouchableHandler = Component => {
29
+ exports.getSkiaPath = getSkiaPath;
30
+ const withTouchableHandler = (Component, componentName) => {
29
31
  return _ref => {
30
32
  let {
31
33
  onStart: onStartProp,
@@ -36,59 +38,52 @@ const withTouchableHandler = Component => {
36
38
  } = _ref;
37
39
  const id = (0, _react.useId)();
38
40
  const ref = (0, _context.useTouchHandlerContext)();
39
- const startingPoint = (0, _reactNativeSkia.useValue)(null);
40
41
  const onStart = (0, _react.useCallback)(event => {
41
- startingPoint.current = {
42
- x: event.x,
43
- y: event.y
44
- };
42
+ 'worklet';
43
+
45
44
  return onStartProp === null || onStartProp === void 0 ? void 0 : onStartProp(event);
46
- }, [onStartProp, startingPoint]);
45
+ }, [onStartProp]);
47
46
  const onActive = (0, _react.useCallback)(event => {
48
- var _startingPoint$curren, _startingPoint$curren2;
49
- const translationX = event.x - (((_startingPoint$curren = startingPoint.current) === null || _startingPoint$curren === void 0 ? void 0 : _startingPoint$curren.x) ?? 0);
50
- const translationY = event.y - (((_startingPoint$curren2 = startingPoint.current) === null || _startingPoint$curren2 === void 0 ? void 0 : _startingPoint$curren2.y) ?? 0);
51
- return onActiveProp === null || onActiveProp === void 0 ? void 0 : onActiveProp({
52
- ...event,
53
- translationX,
54
- translationY
55
- });
56
- }, [onActiveProp, startingPoint]);
47
+ 'worklet';
48
+
49
+ return onActiveProp === null || onActiveProp === void 0 ? void 0 : onActiveProp(event);
50
+ }, [onActiveProp]);
57
51
  const onEnd = (0, _react.useCallback)(event => {
58
- var _startingPoint$curren3, _startingPoint$curren4;
59
- const translationX = event.x - (((_startingPoint$curren3 = startingPoint.current) === null || _startingPoint$curren3 === void 0 ? void 0 : _startingPoint$curren3.x) ?? 0);
60
- const translationY = event.y - (((_startingPoint$curren4 = startingPoint.current) === null || _startingPoint$curren4 === void 0 ? void 0 : _startingPoint$curren4.y) ?? 0);
61
- return onEndProp === null || onEndProp === void 0 ? void 0 : onEndProp({
62
- ...event,
63
- translationX,
64
- translationY
65
- });
66
- }, [onEndProp, startingPoint]);
52
+ 'worklet';
53
+
54
+ return onEndProp === null || onEndProp === void 0 ? void 0 : onEndProp(event);
55
+ }, [onEndProp]);
67
56
  const isPointInPath = (0, _react.useCallback)(point => {
57
+ 'worklet';
58
+
68
59
  if (touchablePath) {
69
60
  return (0, _unwrapAnimatedValue.unwrapAnimatedValue)(touchablePath).contains(point.x, point.y);
70
61
  }
71
- const path = getSkiaPath(Component.name, props);
62
+ if (!componentName) return false;
63
+ const path = getSkiaPath(componentName, props);
72
64
  if (!path) {
73
65
  throw Error('No touchablePath provided');
74
66
  }
75
67
  return path.contains(point.x, point.y);
76
68
  }, [props, touchablePath]);
77
69
  (0, _react.useEffect)(() => {
78
- ref.current = {
70
+ ref.value = {
79
71
  [`id:${id}`]: {
80
72
  isPointInPath,
81
73
  onStart,
82
74
  onActive,
83
75
  onEnd
84
76
  },
85
- ...ref.current
77
+ ...ref.value
86
78
  };
79
+ // eslint-disable-next-line react-hooks/exhaustive-deps
80
+ }, [id, isPointInPath, onActive, onEnd, onStart]);
81
+ (0, _react.useEffect)(() => {
87
82
  return () => {
88
- var _ref$current;
89
- (_ref$current = ref.current) === null || _ref$current === void 0 ? true : delete _ref$current[id];
83
+ var _ref$value;
84
+ (_ref$value = ref.value) === null || _ref$value === void 0 ? true : delete _ref$value[`id:${id}`];
90
85
  };
91
- }, [id, isPointInPath, onActive, onEnd, onStart, ref, touchablePath]);
86
+ }, [id, props, ref, touchablePath]);
92
87
  return Component(props);
93
88
  };
94
89
  };
@@ -1 +1 @@
1
- {"version":3,"names":["getSkiaPath","key","props","unwrappedProps","unwrapAnimatedValueObject","getCirclePath","getRectPath","getRoundedRectPath","path","withTouchableHandler","Component","onStart","onStartProp","onActive","onActiveProp","onEnd","onEndProp","touchablePath","id","useId","ref","useTouchHandlerContext","startingPoint","useValue","useCallback","event","current","x","y","translationX","translationY","isPointInPath","point","unwrapAnimatedValue","contains","name","Error","useEffect"],"sourceRoot":"../../src","sources":["with-touchable-handler.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["getSkiaPath","key","props","unwrappedProps","unwrapAnimatedValueObject","getCirclePath","getRectPath","getRoundedRectPath","path","withTouchableHandler","Component","componentName","onStart","onStartProp","onActive","onActiveProp","onEnd","onEndProp","touchablePath","id","useId","ref","useTouchHandlerContext","useCallback","event","isPointInPath","point","unwrapAnimatedValue","contains","x","y","Error","useEffect","value"],"sourceRoot":"../../src","sources":["with-touchable-handler.tsx"],"mappings":";;;;;;AAKA;AAEA;AACA;AACA;AACA;AA0BO,MAAMA,WAAW,GAAG,CAACC,GAAW,EAAEC,KAAU,KAAK;EACtD,SAAS;;EAET,MAAMC,cAAc,GAAG,IAAAC,8CAAyB,EAACF,KAAK,CAAQ;EAC9D,QAAQD,GAAG;IACT,KAAK,QAAQ;MACX,OAAO,IAAAI,4BAAa,EAACF,cAAc,CAAC;IACtC,KAAK,MAAM;MACT,OAAO,IAAAG,wBAAW,EAACH,cAAc,CAAC;IACpC,KAAK,aAAa;MAChB,OAAO,IAAAI,+BAAkB,EAACJ,cAAc,CAAC;IAC3C,KAAK,MAAM;MACT,OAAOA,cAAc,CAACK,IAAI;IAC5B;MACE,OAAO,IAAI;EAAC;AAElB,CAAC;AAAC;AAEF,MAAMC,oBAAoB,GAAG,CAC3BC,SAA+D,EAC/DC,aAAsB,KACnB;EACH,OAAO,QAM6B;IAAA,IAN5B;MACNC,OAAO,EAAEC,WAAW;MACpBC,QAAQ,EAAEC,YAAY;MACtBC,KAAK,EAAEC,SAAS;MAChBC,aAAa;MACb,GAAGhB;IACyB,CAAC;IAC7B,MAAMiB,EAAE,GAAG,IAAAC,YAAK,GAAE;IAClB,MAAMC,GAAG,GAAG,IAAAC,+BAAsB,GAAE;IAEpC,MAAMV,OAAyC,GAAG,IAAAW,kBAAW,EAC1DC,KAAK,IAAK;MACT,SAAS;;MACT,OAAOX,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAGW,KAAK,CAAC;IAC7B,CAAC,EACD,CAACX,WAAW,CAAC,CACd;IACD,MAAMC,QAA2C,GAAG,IAAAS,kBAAW,EAC5DC,KAAK,IAAK;MACT,SAAS;;MACT,OAAOT,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGS,KAAK,CAAC;IAC9B,CAAC,EACD,CAACT,YAAY,CAAC,CACf;IACD,MAAMC,KAAqC,GAAG,IAAAO,kBAAW,EACtDC,KAAK,IAAK;MACT,SAAS;;MACT,OAAOP,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAGO,KAAK,CAAC;IAC3B,CAAC,EACD,CAACP,SAAS,CAAC,CACZ;IAED,MAAMQ,aAAa,GAAG,IAAAF,kBAAW,EAC9BG,KAAa,IAAK;MACjB,SAAS;;MACT,IAAIR,aAAa,EAAE;QACjB,OAAO,IAAAS,wCAAmB,EAACT,aAAa,CAAC,CAACU,QAAQ,CAACF,KAAK,CAACG,CAAC,EAAEH,KAAK,CAACI,CAAC,CAAC;MACtE;MAEA,IAAI,CAACnB,aAAa,EAAE,OAAO,KAAK;MAChC,MAAMH,IAAI,GAAGR,WAAW,CAACW,aAAa,EAAET,KAAK,CAAC;MAE9C,IAAI,CAACM,IAAI,EAAE;QACT,MAAMuB,KAAK,CAAC,2BAA2B,CAAC;MAC1C;MACA,OAAOvB,IAAI,CAACoB,QAAQ,CAACF,KAAK,CAACG,CAAC,EAAEH,KAAK,CAACI,CAAC,CAAC;IACxC,CAAC,EACD,CAAC5B,KAAK,EAAEgB,aAAa,CAAC,CACvB;IAED,IAAAc,gBAAS,EAAC,MAAM;MACdX,GAAG,CAACY,KAAK,GAAG;QACV,CAAE,MAAKd,EAAG,EAAC,GAAG;UACZM,aAAa;UACbb,OAAO;UACPE,QAAQ;UACRE;QACF,CAAC;QACD,GAAGK,GAAG,CAACY;MACT,CAAQ;MACR;IACF,CAAC,EAAE,CAACd,EAAE,EAAEM,aAAa,EAAEX,QAAQ,EAAEE,KAAK,EAAEJ,OAAO,CAAC,CAAC;IAEjD,IAAAoB,gBAAS,EAAC,MAAM;MACd,OAAO,MAAM;QAAA;QACX,cAAOX,GAAG,CAACY,KAAK,6CAAhB,OAAO,WAAa,MAAKd,EAAG,EAAC,CAAC;MAChC,CAAC;IACH,CAAC,EAAE,CAACA,EAAE,EAAEjB,KAAK,EAAEmB,GAAG,EAAEH,aAAa,CAAC,CAAC;IAEnC,OAAOR,SAAS,CAACR,KAAK,CAAQ;EAChC,CAAC;AACH,CAAC;AAAC"}
@@ -4,26 +4,32 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useGestureHandler = void 0;
7
- var _reactNativeSkia = require("@shopify/react-native-skia");
8
7
  var _react = require("react");
8
+ var _reactNativeReanimated = require("react-native-reanimated");
9
9
  const useGestureHandler = gestureHandlers => {
10
10
  const {
11
11
  onStart,
12
12
  onActive,
13
13
  onEnd
14
14
  } = gestureHandlers;
15
- const context = (0, _reactNativeSkia.useValue)({});
15
+ const context = (0, _reactNativeReanimated.useSharedValue)({});
16
16
  const handleStart = (0, _react.useCallback)(touchInfo => {
17
+ 'worklet';
18
+
17
19
  if (!onStart) return;
18
- return onStart(touchInfo, context.current);
20
+ return onStart(touchInfo, context.value);
19
21
  }, [context, onStart]);
20
22
  const handleActive = (0, _react.useCallback)(extendedTouchInfo => {
23
+ 'worklet';
24
+
21
25
  if (!onActive) return;
22
- return onActive(extendedTouchInfo, context.current);
26
+ return onActive(extendedTouchInfo, context.value);
23
27
  }, [context, onActive]);
24
28
  const handleEnd = (0, _react.useCallback)(extendedTouchInfo => {
29
+ 'worklet';
30
+
25
31
  if (!onEnd) return;
26
- return onEnd(extendedTouchInfo, context.current);
32
+ return onEnd(extendedTouchInfo, context.value);
27
33
  }, [context, onEnd]);
28
34
  return {
29
35
  onStart: handleStart,
@@ -1 +1 @@
1
- {"version":3,"names":["useGestureHandler","gestureHandlers","onStart","onActive","onEnd","context","useValue","handleStart","useCallback","touchInfo","current","handleActive","extendedTouchInfo","handleEnd"],"sourceRoot":"../../src","sources":["use-gesture-handler.ts"],"mappings":";;;;;;AAAA;AAKA;AAeA,MAAMA,iBAAiB,GACrBC,eAAqD,IAClD;EACH,MAAM;IAAEC,OAAO;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGH,eAAe;EAEpD,MAAMI,OAAO,GAAG,IAAAC,yBAAQ,EAAc,CAAC,CAAC,CAAQ;EAEhD,MAAMC,WAAW,GAAG,IAAAC,kBAAW,EAC5BC,SAAoB,IAAK;IACxB,IAAI,CAACP,OAAO,EAAE;IACd,OAAOA,OAAO,CAACO,SAAS,EAAEJ,OAAO,CAACK,OAAO,CAAC;EAC5C,CAAC,EACD,CAACL,OAAO,EAAEH,OAAO,CAAC,CACnB;EAED,MAAMS,YAAY,GAAG,IAAAH,kBAAW,EAC7BI,iBAAsD,IAAK;IAC1D,IAAI,CAACT,QAAQ,EAAE;IACf,OAAOA,QAAQ,CAACS,iBAAiB,EAAEP,OAAO,CAACK,OAAO,CAAC;EACrD,CAAC,EACD,CAACL,OAAO,EAAEF,QAAQ,CAAC,CACpB;EAED,MAAMU,SAAS,GAAG,IAAAL,kBAAW,EAC1BI,iBAAsD,IAAK;IAC1D,IAAI,CAACR,KAAK,EAAE;IACZ,OAAOA,KAAK,CAACQ,iBAAiB,EAAEP,OAAO,CAACK,OAAO,CAAC;EAClD,CAAC,EACD,CAACL,OAAO,EAAED,KAAK,CAAC,CACjB;EAED,OAAO;IACLF,OAAO,EAAEK,WAAW;IACpBJ,QAAQ,EAAEQ,YAAY;IACtBP,KAAK,EAAES;EACT,CAAC;AACH,CAAC;AAAC"}
1
+ {"version":3,"names":["useGestureHandler","gestureHandlers","onStart","onActive","onEnd","context","useSharedValue","handleStart","useCallback","touchInfo","value","handleActive","extendedTouchInfo","handleEnd"],"sourceRoot":"../../src","sources":["use-gesture-handler.ts"],"mappings":";;;;;;AAAA;AACA;AAuBA,MAAMA,iBAAiB,GACrBC,eAAqD,IAClD;EACH,MAAM;IAAEC,OAAO;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGH,eAAe;EAEpD,MAAMI,OAAO,GAAG,IAAAC,qCAAc,EAAc,CAAC,CAAC,CAAQ;EAEtD,MAAMC,WAAW,GAAG,IAAAC,kBAAW,EAC5BC,SAAiE,IAAK;IACrE,SAAS;;IACT,IAAI,CAACP,OAAO,EAAE;IACd,OAAOA,OAAO,CAACO,SAAS,EAAEJ,OAAO,CAACK,KAAK,CAAC;EAC1C,CAAC,EACD,CAACL,OAAO,EAAEH,OAAO,CAAC,CACnB;EAED,MAAMS,YAAY,GAAG,IAAAH,kBAAW,EAC7BI,iBAAoE,IAAK;IACxE,SAAS;;IACT,IAAI,CAACT,QAAQ,EAAE;IACf,OAAOA,QAAQ,CAACS,iBAAiB,EAAEP,OAAO,CAACK,KAAK,CAAC;EACnD,CAAC,EACD,CAACL,OAAO,EAAEF,QAAQ,CAAC,CACpB;EAED,MAAMU,SAAS,GAAG,IAAAL,kBAAW,EAEzBI,iBAAyE,IACtE;IACH,SAAS;;IACT,IAAI,CAACR,KAAK,EAAE;IACZ,OAAOA,KAAK,CAACQ,iBAAiB,EAAEP,OAAO,CAACK,KAAK,CAAC;EAChD,CAAC,EACD,CAACL,OAAO,EAAED,KAAK,CAAC,CACjB;EAED,OAAO;IACLF,OAAO,EAAEK,WAAW;IACpBJ,QAAQ,EAAEQ,YAAY;IACtBP,KAAK,EAAES;EACT,CAAC;AACH,CAAC;AAAC"}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  var _exportNames = {};
7
7
  exports.default = void 0;
8
+ var Touchable = _interopRequireWildcard(require("./components"));
8
9
  var _hoc = require("./hoc");
9
10
  Object.keys(_hoc).forEach(function (key) {
10
11
  if (key === "default" || key === "__esModule") return;
@@ -29,7 +30,6 @@ Object.keys(_useGestureHandler).forEach(function (key) {
29
30
  }
30
31
  });
31
32
  });
32
- var Touchable = _interopRequireWildcard(require("./components"));
33
33
  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); }
34
34
  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; }
35
35
  var _default = Touchable;
@@ -1 +1 @@
1
- {"version":3,"names":["Touchable"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;AAAA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAA0C;AAAA;AAAA,eAE3BA,SAAS;AAAA"}
1
+ {"version":3,"names":["Touchable"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAA4C;AAAA;AAAA,eAE7BA,SAAS;AAAA"}
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getCirclePath = void 0;
7
7
  var _reactNativeSkia = require("@shopify/react-native-skia");
8
8
  const getCirclePath = _ref => {
9
+ 'worklet';
10
+
9
11
  let {
10
12
  cx,
11
13
  cy,
@@ -1 +1 @@
1
- {"version":3,"names":["getCirclePath","cx","cy","r","Skia","Path","Make","addCircle"],"sourceRoot":"../../src","sources":["get-circle-path.ts"],"mappings":";;;;;;AAAA;AAIO,MAAMA,aAAa,GAAG,QAAwC;EAAA,IAAvC;IAAEC,EAAE;IAAEC,EAAE;IAAEC;EAAuB,CAAC;EAC9D,OAAOC,qBAAI,CAACC,IAAI,CAACC,IAAI,EAAE,CAACC,SAAS,CAACN,EAAE,EAAEC,EAAE,EAAEC,CAAC,CAAC;AAC9C,CAAC;AAAC"}
1
+ {"version":3,"names":["getCirclePath","cx","cy","r","Skia","Path","Make","addCircle"],"sourceRoot":"../../src","sources":["get-circle-path.ts"],"mappings":";;;;;;AAAA;AAIO,MAAMA,aAAa,GAAG,QAAwC;EACnE,SAAS;;EAAC,IADkB;IAAEC,EAAE;IAAEC,EAAE;IAAEC;EAAuB,CAAC;EAE9D,OAAOC,qBAAI,CAACC,IAAI,CAACC,IAAI,EAAE,CAACC,SAAS,CAACN,EAAE,EAAEC,EAAE,EAAEC,CAAC,CAAC;AAC9C,CAAC;AAAC"}
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getRoundedRectPath = exports.getRectPath = void 0;
7
7
  var _reactNativeSkia = require("@shopify/react-native-skia");
8
8
  const getRectPath = params => {
9
+ 'worklet';
10
+
9
11
  const skPath = _reactNativeSkia.Skia.Path.Make();
10
12
  if ('rect' in params) {
11
- // eslint-disable-next-line @typescript-eslint/no-shadow
12
13
  const {
13
14
  rect
14
15
  } = params;
@@ -21,21 +22,22 @@ const getRectPath = params => {
21
22
  width,
22
23
  height
23
24
  } = params;
24
- skPath.addRect((0, _reactNativeSkia.rect)(x, y, width, height));
25
+ skPath.addRect(_reactNativeSkia.Skia.XYWHRect(x, y, width, height));
25
26
  return skPath;
26
27
  };
27
28
  exports.getRectPath = getRectPath;
28
29
  const getRoundedRectPath = params => {
30
+ 'worklet';
31
+
29
32
  const {
30
33
  r
31
34
  } = params;
32
35
  const skPath = _reactNativeSkia.Skia.Path.Make();
33
36
  if ('rect' in params) {
34
- // eslint-disable-next-line @typescript-eslint/no-shadow
35
37
  const {
36
38
  rect
37
39
  } = params;
38
- skPath.addRRect((0, _reactNativeSkia.rrect)(rect, r, r));
40
+ skPath.addRRect(_reactNativeSkia.Skia.RRectXY(rect, r, r));
39
41
  return skPath;
40
42
  }
41
43
  const {
@@ -44,7 +46,8 @@ const getRoundedRectPath = params => {
44
46
  width,
45
47
  height
46
48
  } = params;
47
- skPath.addRRect((0, _reactNativeSkia.rrect)((0, _reactNativeSkia.rect)(x, y, width, height), r, r));
49
+ const roundedRect = _reactNativeSkia.Skia.RRectXY(_reactNativeSkia.Skia.XYWHRect(x, y, width, height), r, r);
50
+ skPath.addRRect(roundedRect);
48
51
  return skPath;
49
52
  };
50
53
  exports.getRoundedRectPath = getRoundedRectPath;