@tamagui/sheet 2.0.0-1769233344020 → 2.0.0-1769288527117

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 (146) hide show
  1. package/dist/cjs/GestureDetectorWrapper.cjs +48 -0
  2. package/dist/cjs/GestureDetectorWrapper.js +29 -0
  3. package/dist/cjs/GestureDetectorWrapper.js.map +6 -0
  4. package/dist/cjs/GestureDetectorWrapper.native.js +53 -0
  5. package/dist/cjs/GestureDetectorWrapper.native.js.map +1 -0
  6. package/dist/cjs/GestureSheetContext.cjs +52 -0
  7. package/dist/cjs/GestureSheetContext.js +43 -0
  8. package/dist/cjs/GestureSheetContext.js.map +6 -0
  9. package/dist/cjs/GestureSheetContext.native.js +56 -0
  10. package/dist/cjs/GestureSheetContext.native.js.map +1 -0
  11. package/dist/cjs/SheetImplementationCustom.cjs +85 -40
  12. package/dist/cjs/SheetImplementationCustom.js +81 -58
  13. package/dist/cjs/SheetImplementationCustom.js.map +1 -1
  14. package/dist/cjs/SheetImplementationCustom.native.js +105 -50
  15. package/dist/cjs/SheetImplementationCustom.native.js.map +1 -1
  16. package/dist/cjs/SheetScrollView.cjs +88 -17
  17. package/dist/cjs/SheetScrollView.js +85 -26
  18. package/dist/cjs/SheetScrollView.js.map +1 -1
  19. package/dist/cjs/SheetScrollView.native.js +102 -19
  20. package/dist/cjs/SheetScrollView.native.js.map +1 -1
  21. package/dist/cjs/gestureState.cjs +39 -0
  22. package/dist/cjs/gestureState.js +34 -0
  23. package/dist/cjs/gestureState.js.map +6 -0
  24. package/dist/cjs/gestureState.native.js +42 -0
  25. package/dist/cjs/gestureState.native.js.map +1 -0
  26. package/dist/cjs/setupGestureHandler.cjs +46 -0
  27. package/dist/cjs/setupGestureHandler.js +38 -0
  28. package/dist/cjs/setupGestureHandler.js.map +6 -0
  29. package/dist/cjs/setupGestureHandler.native.js +50 -0
  30. package/dist/cjs/setupGestureHandler.native.js.map +1 -0
  31. package/dist/cjs/useGestureHandlerPan.cjs +126 -0
  32. package/dist/cjs/useGestureHandlerPan.js +117 -0
  33. package/dist/cjs/useGestureHandlerPan.js.map +6 -0
  34. package/dist/cjs/useGestureHandlerPan.native.js +135 -0
  35. package/dist/cjs/useGestureHandlerPan.native.js.map +1 -0
  36. package/dist/esm/GestureDetectorWrapper.js +15 -0
  37. package/dist/esm/GestureDetectorWrapper.js.map +6 -0
  38. package/dist/esm/GestureDetectorWrapper.mjs +25 -0
  39. package/dist/esm/GestureDetectorWrapper.mjs.map +1 -0
  40. package/dist/esm/GestureDetectorWrapper.native.js +27 -0
  41. package/dist/esm/GestureDetectorWrapper.native.js.map +1 -0
  42. package/dist/esm/GestureSheetContext.js +28 -0
  43. package/dist/esm/GestureSheetContext.js.map +6 -0
  44. package/dist/esm/GestureSheetContext.mjs +28 -0
  45. package/dist/esm/GestureSheetContext.mjs.map +1 -0
  46. package/dist/esm/GestureSheetContext.native.js +29 -0
  47. package/dist/esm/GestureSheetContext.native.js.map +1 -0
  48. package/dist/esm/SheetImplementationCustom.js +83 -57
  49. package/dist/esm/SheetImplementationCustom.js.map +1 -1
  50. package/dist/esm/SheetImplementationCustom.mjs +85 -40
  51. package/dist/esm/SheetImplementationCustom.mjs.map +1 -1
  52. package/dist/esm/SheetImplementationCustom.native.js +105 -50
  53. package/dist/esm/SheetImplementationCustom.native.js.map +1 -1
  54. package/dist/esm/SheetScrollView.js +87 -26
  55. package/dist/esm/SheetScrollView.js.map +1 -1
  56. package/dist/esm/SheetScrollView.mjs +89 -18
  57. package/dist/esm/SheetScrollView.mjs.map +1 -1
  58. package/dist/esm/SheetScrollView.native.js +103 -20
  59. package/dist/esm/SheetScrollView.native.js.map +1 -1
  60. package/dist/esm/gestureState.js +18 -0
  61. package/dist/esm/gestureState.js.map +6 -0
  62. package/dist/esm/gestureState.mjs +13 -0
  63. package/dist/esm/gestureState.mjs.map +1 -0
  64. package/dist/esm/gestureState.native.js +13 -0
  65. package/dist/esm/gestureState.native.js.map +1 -0
  66. package/dist/esm/setupGestureHandler.js +22 -0
  67. package/dist/esm/setupGestureHandler.js.map +6 -0
  68. package/dist/esm/setupGestureHandler.mjs +22 -0
  69. package/dist/esm/setupGestureHandler.mjs.map +1 -0
  70. package/dist/esm/setupGestureHandler.native.js +23 -0
  71. package/dist/esm/setupGestureHandler.native.js.map +1 -0
  72. package/dist/esm/useGestureHandlerPan.js +102 -0
  73. package/dist/esm/useGestureHandlerPan.js.map +6 -0
  74. package/dist/esm/useGestureHandlerPan.mjs +103 -0
  75. package/dist/esm/useGestureHandlerPan.mjs.map +1 -0
  76. package/dist/esm/useGestureHandlerPan.native.js +109 -0
  77. package/dist/esm/useGestureHandlerPan.native.js.map +1 -0
  78. package/dist/jsx/GestureDetectorWrapper.js +15 -0
  79. package/dist/jsx/GestureDetectorWrapper.js.map +6 -0
  80. package/dist/jsx/GestureDetectorWrapper.mjs +25 -0
  81. package/dist/jsx/GestureDetectorWrapper.mjs.map +1 -0
  82. package/dist/jsx/GestureDetectorWrapper.native.js +53 -0
  83. package/dist/jsx/GestureDetectorWrapper.native.js.map +1 -0
  84. package/dist/jsx/GestureSheetContext.js +28 -0
  85. package/dist/jsx/GestureSheetContext.js.map +6 -0
  86. package/dist/jsx/GestureSheetContext.mjs +28 -0
  87. package/dist/jsx/GestureSheetContext.mjs.map +1 -0
  88. package/dist/jsx/GestureSheetContext.native.js +56 -0
  89. package/dist/jsx/GestureSheetContext.native.js.map +1 -0
  90. package/dist/jsx/SheetImplementationCustom.js +83 -57
  91. package/dist/jsx/SheetImplementationCustom.js.map +1 -1
  92. package/dist/jsx/SheetImplementationCustom.mjs +85 -40
  93. package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
  94. package/dist/jsx/SheetImplementationCustom.native.js +105 -50
  95. package/dist/jsx/SheetImplementationCustom.native.js.map +1 -1
  96. package/dist/jsx/SheetScrollView.js +87 -26
  97. package/dist/jsx/SheetScrollView.js.map +1 -1
  98. package/dist/jsx/SheetScrollView.mjs +89 -18
  99. package/dist/jsx/SheetScrollView.mjs.map +1 -1
  100. package/dist/jsx/SheetScrollView.native.js +102 -19
  101. package/dist/jsx/SheetScrollView.native.js.map +1 -1
  102. package/dist/jsx/gestureState.js +18 -0
  103. package/dist/jsx/gestureState.js.map +6 -0
  104. package/dist/jsx/gestureState.mjs +13 -0
  105. package/dist/jsx/gestureState.mjs.map +1 -0
  106. package/dist/jsx/gestureState.native.js +42 -0
  107. package/dist/jsx/gestureState.native.js.map +1 -0
  108. package/dist/jsx/setupGestureHandler.js +22 -0
  109. package/dist/jsx/setupGestureHandler.js.map +6 -0
  110. package/dist/jsx/setupGestureHandler.mjs +22 -0
  111. package/dist/jsx/setupGestureHandler.mjs.map +1 -0
  112. package/dist/jsx/setupGestureHandler.native.js +50 -0
  113. package/dist/jsx/setupGestureHandler.native.js.map +1 -0
  114. package/dist/jsx/useGestureHandlerPan.js +102 -0
  115. package/dist/jsx/useGestureHandlerPan.js.map +6 -0
  116. package/dist/jsx/useGestureHandlerPan.mjs +103 -0
  117. package/dist/jsx/useGestureHandlerPan.mjs.map +1 -0
  118. package/dist/jsx/useGestureHandlerPan.native.js +135 -0
  119. package/dist/jsx/useGestureHandlerPan.native.js.map +1 -0
  120. package/package.json +48 -21
  121. package/src/GestureDetectorWrapper.tsx +41 -0
  122. package/src/GestureSheetContext.tsx +62 -0
  123. package/src/SheetImplementationCustom.tsx +124 -57
  124. package/src/SheetScrollView.tsx +169 -20
  125. package/src/gestureState.ts +24 -0
  126. package/src/setupGestureHandler.ts +34 -0
  127. package/src/types.tsx +15 -0
  128. package/src/useGestureHandlerPan.tsx +312 -0
  129. package/types/GestureDetectorWrapper.d.ts +14 -0
  130. package/types/GestureDetectorWrapper.d.ts.map +1 -0
  131. package/types/GestureDetectorWrapper.native.d.ts +14 -0
  132. package/types/GestureSheetContext.d.ts +36 -0
  133. package/types/GestureSheetContext.d.ts.map +1 -0
  134. package/types/SheetImplementationCustom.d.ts.map +1 -1
  135. package/types/SheetScrollView.d.ts.map +1 -1
  136. package/types/gestureState.d.ts +11 -0
  137. package/types/gestureState.d.ts.map +1 -0
  138. package/types/gestureState.native.d.ts +12 -0
  139. package/types/setupGestureHandler.d.ts +11 -0
  140. package/types/setupGestureHandler.d.ts.map +1 -0
  141. package/types/setupGestureHandler.native.d.ts +41 -0
  142. package/types/types.d.ts +8 -0
  143. package/types/types.d.ts.map +1 -1
  144. package/types/useGestureHandlerPan.d.ts +43 -0
  145. package/types/useGestureHandlerPan.d.ts.map +1 -0
  146. package/types/useGestureHandlerPan.native.d.ts +33 -0
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: !0
11
+ });
12
+ },
13
+ __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
15
+ get: () => from[key],
16
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
+ });
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: !0
22
+ }), mod);
23
+ var setupGestureHandler_exports = {};
24
+ __export(setupGestureHandler_exports, {
25
+ isGestureHandlerEnabled: () => isGestureHandlerEnabled,
26
+ setupGestureHandler: () => setupGestureHandler
27
+ });
28
+ module.exports = __toCommonJS(setupGestureHandler_exports);
29
+ var import_native = require("@tamagui/native");
30
+ function isGestureHandlerEnabled() {
31
+ return (0, import_native.getGestureHandler)().isEnabled;
32
+ }
33
+ function setupGestureHandler(config) {
34
+ var g = globalThis;
35
+ if (!g.__tamagui_sheet_gesture_handler_setup) {
36
+ g.__tamagui_sheet_gesture_handler_setup = !0;
37
+ var {
38
+ Gesture,
39
+ GestureDetector,
40
+ ScrollView
41
+ } = config;
42
+ Gesture && GestureDetector && (0, import_native.getGestureHandler)().set({
43
+ enabled: !0,
44
+ Gesture,
45
+ GestureDetector,
46
+ ScrollView: ScrollView || null
47
+ });
48
+ }
49
+ }
50
+ //# sourceMappingURL=setupGestureHandler.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","setupGestureHandler_exports"],"sources":["../../src/setupGestureHandler.ts"],"sourcesContent":[null],"mappings":"AAIA,YAAS;;AAEF,IAAAA,SAAS,GAAAC,MAAA,CAAAC,cAAmC;AACjD,IAAAC,gBAAO,GAAAF,MAAoB,CAAAG,wBAAA;AAC7B,IAAAC,iBAAA,GAAAJ,MAAA,CAAAK,mBAAA;AAQO,IAAAC,YAAS,GAAAN,MAAA,CAAAO,SAAoB,CAAAC,cAAyC;AAC3E,IAAAC,QAAU,GAAAA,CAAAC,MAAA,EAAAC,GAAA;IACV,KAAI,IAAEC,IAAA,IAAAD,GAAA,EACJZ,SAAA,CAAAW,MAAA,EAAAE,IAAA;MAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;MAAAE,UAAA;IAAA;EAEF;EAAAC,WAAE,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,IAAA,KAAwC;IAE1C,IAAAF,IAAQ,WAASA,IAAA,YAAiB,WAAWA,IAAI,gBAE7C,SAAWG,GAAA,IAAAhB,iBACb,CAAAa,IAAA,GACE,CAAAX,YAAS,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,IAAAnB,SAAA,CAAAiB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;IAAA,OACTE,EAAA;EAAA;AACA,IACAM,YAAY,GAAAC,GAAA,IAAAR,WAAc,CAAAhB,SAAA;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AAAA,IAC3BE,2BAAA;AAELhB,QAAA,CAAAgB,2BAAA","ignoreList":[]}
@@ -0,0 +1,102 @@
1
+ import { useCallback, useMemo, useRef } from "react";
2
+ import { getGestureHandlerState, isGestureHandlerEnabled } from "./gestureState";
3
+ const AT_TOP_THRESHOLD = 5;
4
+ function useGestureHandlerPan(config) {
5
+ const {
6
+ positions,
7
+ frameSize,
8
+ setPosition,
9
+ animateTo,
10
+ stopSpring,
11
+ scrollBridge,
12
+ setIsDragging,
13
+ getCurrentPosition,
14
+ resisted,
15
+ disableDrag,
16
+ isShowingInnerSheet,
17
+ setAnimatedPosition,
18
+ scrollGestureRef
19
+ } = config, gestureHandlerEnabled = isGestureHandlerEnabled(), panGestureRef = useRef(null), gestureStateRef = useRef({
20
+ startY: 0,
21
+ // track last translation when pan was active (for position calculation after handoff)
22
+ lastPanTranslationY: 0,
23
+ // accumulated position offset from all pan movements
24
+ accumulatedOffset: 0,
25
+ // track previous translation for direction detection (like actions-sheet)
26
+ prevTranslationY: 0,
27
+ // track if scroll was engaged (scrollY > 0) at some point
28
+ scrollEngaged: !1
29
+ }), onStart = useCallback(() => {
30
+ stopSpring(), setIsDragging(!0);
31
+ }, [stopSpring, setIsDragging]), onEnd = useCallback(
32
+ (closestPoint) => {
33
+ setIsDragging(!1), scrollBridge.setParentDragging(!1), scrollBridge.setScrollEnabled?.(!0), setPosition(closestPoint), animateTo(closestPoint);
34
+ },
35
+ [setIsDragging, scrollBridge, setPosition, animateTo]
36
+ );
37
+ return {
38
+ panGesture: useMemo(() => {
39
+ if (!gestureHandlerEnabled || disableDrag || isShowingInnerSheet || !frameSize)
40
+ return null;
41
+ const { Gesture } = getGestureHandlerState();
42
+ if (!Gesture)
43
+ return null;
44
+ const minY = positions[0], gs = gestureStateRef.current, gesture = Gesture.Pan().withRef(panGestureRef).failOffsetX([-20, 20]).shouldCancelWhenOutside(!1).onBegin(() => {
45
+ const pos = getCurrentPosition(), atTop = pos <= minY + AT_TOP_THRESHOLD, currentScrollY = scrollBridge.y;
46
+ gs.startY = pos, gs.lastPanTranslationY = 0, gs.accumulatedOffset = 0, gs.prevTranslationY = 0, gs.scrollEngaged = currentScrollY > 0, atTop || scrollBridge.setScrollEnabled?.(!1, 0);
47
+ }).onStart(() => {
48
+ scrollBridge.initialPosition = gs.startY, onStart();
49
+ }).onChange((event) => {
50
+ const { translationY } = event, isSwipingDown = gs.prevTranslationY < translationY, deltaY = translationY - gs.prevTranslationY;
51
+ gs.prevTranslationY = translationY;
52
+ const scrollY = scrollBridge.y;
53
+ scrollY > 0 && (gs.scrollEngaged = !0);
54
+ const isCurrentlyAtTop = gs.startY + gs.accumulatedOffset <= minY + AT_TOP_THRESHOLD, nodeIsScrolling = scrollY > 0;
55
+ let panHandles = !1;
56
+ const hasScrollableContent = scrollBridge.hasScrollableContent !== !1;
57
+ if (isCurrentlyAtTop ? isSwipingDown ? nodeIsScrolling && hasScrollableContent ? panHandles = !1 : (gs.scrollEngaged, panHandles = !0) : hasScrollableContent ? panHandles = !1 : panHandles = !0 : isSwipingDown ? panHandles = !nodeIsScrolling || !hasScrollableContent : panHandles = !0, panHandles) {
58
+ const lockTo = isCurrentlyAtTop ? void 0 : 0;
59
+ scrollBridge.setScrollEnabled?.(!1, lockTo), gs.accumulatedOffset += deltaY;
60
+ const newPosition = resisted(gs.startY + gs.accumulatedOffset, minY);
61
+ scrollBridge.paneY = newPosition, setAnimatedPosition(newPosition), scrollBridge.setParentDragging(newPosition > minY);
62
+ } else
63
+ scrollBridge.setScrollEnabled?.(!0);
64
+ }).onEnd((event) => {
65
+ const { velocityY } = event, currentPos = gs.startY + gs.accumulatedOffset;
66
+ if (scrollBridge.scrollLockY = void 0, currentPos <= minY + AT_TOP_THRESHOLD && scrollBridge.y > 0) {
67
+ onEnd(0);
68
+ return;
69
+ }
70
+ const velocity = velocityY / 1e3, projectedEnd = currentPos + frameSize * velocity * 0.2;
71
+ let closestPoint = 0, minDist = Number.POSITIVE_INFINITY;
72
+ for (let i = 0; i < positions.length; i++) {
73
+ const pos = positions[i], dist = Math.abs(projectedEnd - pos);
74
+ dist < minDist && (minDist = dist, closestPoint = i);
75
+ }
76
+ onEnd(closestPoint);
77
+ }).onFinalize(() => {
78
+ scrollBridge.scrollLockY = void 0;
79
+ }).runOnJS(!0);
80
+ return scrollGestureRef?.current ? gesture.simultaneousWithExternalGesture(scrollGestureRef.current) : gesture;
81
+ }, [
82
+ gestureHandlerEnabled,
83
+ disableDrag,
84
+ isShowingInnerSheet,
85
+ frameSize,
86
+ positions,
87
+ scrollBridge,
88
+ getCurrentPosition,
89
+ resisted,
90
+ onStart,
91
+ onEnd,
92
+ setIsDragging,
93
+ setAnimatedPosition
94
+ ]),
95
+ panGestureRef,
96
+ gestureHandlerEnabled
97
+ };
98
+ }
99
+ export {
100
+ useGestureHandlerPan
101
+ };
102
+ //# sourceMappingURL=useGestureHandlerPan.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useGestureHandlerPan.tsx"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,103 @@
1
+ import { useCallback, useMemo, useRef } from "react";
2
+ import { getGestureHandlerState, isGestureHandlerEnabled } from "./gestureState.mjs";
3
+ const AT_TOP_THRESHOLD = 5;
4
+ function useGestureHandlerPan(config) {
5
+ const {
6
+ positions,
7
+ frameSize,
8
+ setPosition,
9
+ animateTo,
10
+ stopSpring,
11
+ scrollBridge,
12
+ setIsDragging,
13
+ getCurrentPosition,
14
+ resisted,
15
+ disableDrag,
16
+ isShowingInnerSheet,
17
+ setAnimatedPosition,
18
+ scrollGestureRef
19
+ } = config,
20
+ gestureHandlerEnabled = isGestureHandlerEnabled(),
21
+ panGestureRef = useRef(null),
22
+ gestureStateRef = useRef({
23
+ startY: 0,
24
+ // track last translation when pan was active (for position calculation after handoff)
25
+ lastPanTranslationY: 0,
26
+ // accumulated position offset from all pan movements
27
+ accumulatedOffset: 0,
28
+ // track previous translation for direction detection (like actions-sheet)
29
+ prevTranslationY: 0,
30
+ // track if scroll was engaged (scrollY > 0) at some point
31
+ scrollEngaged: !1
32
+ }),
33
+ onStart = useCallback(() => {
34
+ stopSpring(), setIsDragging(!0);
35
+ }, [stopSpring, setIsDragging]),
36
+ onEnd = useCallback(closestPoint => {
37
+ setIsDragging(!1), scrollBridge.setParentDragging(!1), scrollBridge.setScrollEnabled?.(!0), setPosition(closestPoint), animateTo(closestPoint);
38
+ }, [setIsDragging, scrollBridge, setPosition, animateTo]);
39
+ return {
40
+ panGesture: useMemo(() => {
41
+ if (!gestureHandlerEnabled || disableDrag || isShowingInnerSheet || !frameSize) return null;
42
+ const {
43
+ Gesture
44
+ } = getGestureHandlerState();
45
+ if (!Gesture) return null;
46
+ const minY = positions[0],
47
+ gs = gestureStateRef.current,
48
+ gesture = Gesture.Pan().withRef(panGestureRef).failOffsetX([-20, 20]).shouldCancelWhenOutside(!1).onBegin(() => {
49
+ const pos = getCurrentPosition(),
50
+ atTop = pos <= minY + AT_TOP_THRESHOLD,
51
+ currentScrollY = scrollBridge.y;
52
+ gs.startY = pos, gs.lastPanTranslationY = 0, gs.accumulatedOffset = 0, gs.prevTranslationY = 0, gs.scrollEngaged = currentScrollY > 0, atTop || scrollBridge.setScrollEnabled?.(!1, 0);
53
+ }).onStart(() => {
54
+ scrollBridge.initialPosition = gs.startY, onStart();
55
+ }).onChange(event => {
56
+ const {
57
+ translationY
58
+ } = event,
59
+ isSwipingDown = gs.prevTranslationY < translationY,
60
+ deltaY = translationY - gs.prevTranslationY;
61
+ gs.prevTranslationY = translationY;
62
+ const scrollY = scrollBridge.y;
63
+ scrollY > 0 && (gs.scrollEngaged = !0);
64
+ const isCurrentlyAtTop = gs.startY + gs.accumulatedOffset <= minY + AT_TOP_THRESHOLD,
65
+ nodeIsScrolling = scrollY > 0;
66
+ let panHandles = !1;
67
+ const hasScrollableContent = scrollBridge.hasScrollableContent !== !1;
68
+ if (isCurrentlyAtTop ? isSwipingDown ? nodeIsScrolling && hasScrollableContent ? panHandles = !1 : (gs.scrollEngaged, panHandles = !0) : hasScrollableContent ? panHandles = !1 : panHandles = !0 : isSwipingDown ? panHandles = !nodeIsScrolling || !hasScrollableContent : panHandles = !0, panHandles) {
69
+ const lockTo = isCurrentlyAtTop ? void 0 : 0;
70
+ scrollBridge.setScrollEnabled?.(!1, lockTo), gs.accumulatedOffset += deltaY;
71
+ const newPosition = resisted(gs.startY + gs.accumulatedOffset, minY);
72
+ scrollBridge.paneY = newPosition, setAnimatedPosition(newPosition), scrollBridge.setParentDragging(newPosition > minY);
73
+ } else scrollBridge.setScrollEnabled?.(!0);
74
+ }).onEnd(event => {
75
+ const {
76
+ velocityY
77
+ } = event,
78
+ currentPos = gs.startY + gs.accumulatedOffset;
79
+ if (scrollBridge.scrollLockY = void 0, currentPos <= minY + AT_TOP_THRESHOLD && scrollBridge.y > 0) {
80
+ onEnd(0);
81
+ return;
82
+ }
83
+ const velocity = velocityY / 1e3,
84
+ projectedEnd = currentPos + frameSize * velocity * 0.2;
85
+ let closestPoint = 0,
86
+ minDist = Number.POSITIVE_INFINITY;
87
+ for (let i = 0; i < positions.length; i++) {
88
+ const pos = positions[i],
89
+ dist = Math.abs(projectedEnd - pos);
90
+ dist < minDist && (minDist = dist, closestPoint = i);
91
+ }
92
+ onEnd(closestPoint);
93
+ }).onFinalize(() => {
94
+ scrollBridge.scrollLockY = void 0;
95
+ }).runOnJS(!0);
96
+ return scrollGestureRef?.current ? gesture.simultaneousWithExternalGesture(scrollGestureRef.current) : gesture;
97
+ }, [gestureHandlerEnabled, disableDrag, isShowingInnerSheet, frameSize, positions, scrollBridge, getCurrentPosition, resisted, onStart, onEnd, setIsDragging, setAnimatedPosition]),
98
+ panGestureRef,
99
+ gestureHandlerEnabled
100
+ };
101
+ }
102
+ export { useGestureHandlerPan };
103
+ //# sourceMappingURL=useGestureHandlerPan.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useMemo","useRef","getGestureHandlerState","isGestureHandlerEnabled","AT_TOP_THRESHOLD","useGestureHandlerPan","config","positions","frameSize","setPosition","animateTo","stopSpring","scrollBridge","setIsDragging","getCurrentPosition","resisted","disableDrag","isShowingInnerSheet","setAnimatedPosition","scrollGestureRef","gestureHandlerEnabled","panGestureRef","gestureStateRef","startY","lastPanTranslationY","accumulatedOffset","prevTranslationY","scrollEngaged","onStart","onEnd","closestPoint","setParentDragging","setScrollEnabled","panGesture","Gesture","minY","gs","current","gesture","Pan","withRef","failOffsetX","shouldCancelWhenOutside","onBegin","pos","atTop","currentScrollY","y","initialPosition","onChange","event","translationY","isSwipingDown","deltaY","scrollY","isCurrentlyAtTop","nodeIsScrolling","panHandles","hasScrollableContent","lockTo","newPosition","paneY","velocityY","currentPos","scrollLockY","velocity","projectedEnd","minDist","Number","POSITIVE_INFINITY","i","length","dist","Math","abs","onFinalize","runOnJS","simultaneousWithExternalGesture"],"sources":["../../src/useGestureHandlerPan.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: !0
11
+ });
12
+ },
13
+ __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
15
+ get: () => from[key],
16
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
+ });
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: !0
22
+ }), mod);
23
+ var useGestureHandlerPan_exports = {};
24
+ __export(useGestureHandlerPan_exports, {
25
+ useGestureHandlerPan: () => useGestureHandlerPan
26
+ });
27
+ module.exports = __toCommonJS(useGestureHandlerPan_exports);
28
+ var import_react = require("react"),
29
+ import_gestureState = require("./gestureState.native.js"),
30
+ AT_TOP_THRESHOLD = 5;
31
+ function useGestureHandlerPan(config) {
32
+ var {
33
+ positions,
34
+ frameSize,
35
+ setPosition,
36
+ animateTo,
37
+ stopSpring,
38
+ scrollBridge,
39
+ setIsDragging,
40
+ getCurrentPosition,
41
+ resisted,
42
+ disableDrag,
43
+ isShowingInnerSheet,
44
+ setAnimatedPosition,
45
+ scrollGestureRef
46
+ } = config,
47
+ gestureHandlerEnabled = (0, import_gestureState.isGestureHandlerEnabled)(),
48
+ panGestureRef = (0, import_react.useRef)(null),
49
+ gestureStateRef = (0, import_react.useRef)({
50
+ startY: 0,
51
+ // track last translation when pan was active (for position calculation after handoff)
52
+ lastPanTranslationY: 0,
53
+ // accumulated position offset from all pan movements
54
+ accumulatedOffset: 0,
55
+ // track previous translation for direction detection (like actions-sheet)
56
+ prevTranslationY: 0,
57
+ // track if scroll was engaged (scrollY > 0) at some point
58
+ scrollEngaged: !1
59
+ }),
60
+ onStart = (0, import_react.useCallback)(function () {
61
+ stopSpring(), setIsDragging(!0);
62
+ }, [stopSpring, setIsDragging]),
63
+ onEnd = (0, import_react.useCallback)(function (closestPoint) {
64
+ var _scrollBridge_setScrollEnabled;
65
+ setIsDragging(!1), scrollBridge.setParentDragging(!1), (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, !0), setPosition(closestPoint), animateTo(closestPoint);
66
+ }, [setIsDragging, scrollBridge, setPosition, animateTo]),
67
+ panGesture = (0, import_react.useMemo)(function () {
68
+ if (!gestureHandlerEnabled || disableDrag || isShowingInnerSheet || !frameSize) return null;
69
+ var {
70
+ Gesture
71
+ } = (0, import_gestureState.getGestureHandlerState)();
72
+ if (!Gesture) return null;
73
+ var minY = positions[0],
74
+ gs = gestureStateRef.current,
75
+ gesture = Gesture.Pan().withRef(panGestureRef).failOffsetX([-20, 20]).shouldCancelWhenOutside(!1).onBegin(function () {
76
+ var pos = getCurrentPosition(),
77
+ atTop = pos <= minY + AT_TOP_THRESHOLD,
78
+ currentScrollY = scrollBridge.y;
79
+ if (gs.startY = pos, gs.lastPanTranslationY = 0, gs.accumulatedOffset = 0, gs.prevTranslationY = 0, gs.scrollEngaged = currentScrollY > 0, !atTop) {
80
+ var _scrollBridge_setScrollEnabled;
81
+ (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, !1, 0);
82
+ }
83
+ }).onStart(function () {
84
+ scrollBridge.initialPosition = gs.startY, onStart();
85
+ }).onChange(function (event) {
86
+ var {
87
+ translationY
88
+ } = event,
89
+ isSwipingDown = gs.prevTranslationY < translationY,
90
+ deltaY = translationY - gs.prevTranslationY;
91
+ gs.prevTranslationY = translationY;
92
+ var scrollY = scrollBridge.y;
93
+ scrollY > 0 && (gs.scrollEngaged = !0);
94
+ var currentPos = gs.startY + gs.accumulatedOffset,
95
+ isCurrentlyAtTop = currentPos <= minY + AT_TOP_THRESHOLD,
96
+ nodeIsScrolling = scrollY > 0,
97
+ panHandles = !1,
98
+ hasScrollableContent = scrollBridge.hasScrollableContent !== !1;
99
+ if (isCurrentlyAtTop ? isSwipingDown ? nodeIsScrolling && hasScrollableContent ? panHandles = !1 : (gs.scrollEngaged, panHandles = !0) : hasScrollableContent ? panHandles = !1 : panHandles = !0 : isSwipingDown ? panHandles = !nodeIsScrolling || !hasScrollableContent : panHandles = !0, panHandles) {
100
+ var _scrollBridge_setScrollEnabled,
101
+ lockTo = isCurrentlyAtTop ? void 0 : 0;
102
+ (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, !1, lockTo), gs.accumulatedOffset += deltaY;
103
+ var newPosition = resisted(gs.startY + gs.accumulatedOffset, minY);
104
+ scrollBridge.paneY = newPosition, setAnimatedPosition(newPosition), scrollBridge.setParentDragging(newPosition > minY);
105
+ } else {
106
+ var _scrollBridge_setScrollEnabled1;
107
+ (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, !0);
108
+ }
109
+ }).onEnd(function (event) {
110
+ var {
111
+ velocityY
112
+ } = event,
113
+ currentPos = gs.startY + gs.accumulatedOffset;
114
+ if (scrollBridge.scrollLockY = void 0, currentPos <= minY + AT_TOP_THRESHOLD && scrollBridge.y > 0) {
115
+ onEnd(0);
116
+ return;
117
+ }
118
+ for (var velocity = velocityY / 1e3, projectedEnd = currentPos + frameSize * velocity * 0.2, closestPoint = 0, minDist = Number.POSITIVE_INFINITY, i = 0; i < positions.length; i++) {
119
+ var pos = positions[i],
120
+ dist = Math.abs(projectedEnd - pos);
121
+ dist < minDist && (minDist = dist, closestPoint = i);
122
+ }
123
+ onEnd(closestPoint);
124
+ }).onFinalize(function () {
125
+ scrollBridge.scrollLockY = void 0;
126
+ }).runOnJS(!0);
127
+ return scrollGestureRef?.current ? gesture.simultaneousWithExternalGesture(scrollGestureRef.current) : gesture;
128
+ }, [gestureHandlerEnabled, disableDrag, isShowingInnerSheet, frameSize, positions, scrollBridge, getCurrentPosition, resisted, onStart, onEnd, setIsDragging, setAnimatedPosition]);
129
+ return {
130
+ panGesture,
131
+ panGestureRef,
132
+ gestureHandlerEnabled
133
+ };
134
+ }
135
+ //# sourceMappingURL=useGestureHandlerPan.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","useGestureHandlerPan_exports","useGestureHandlerPan","module","exports","import_react","require","import_gestureState","AT_TOP_THRESHOLD","config","positions","frameSize","setPosition","animateTo","stopSpring","scrollBridge","setIsDragging","getCurrentPosition","resisted","disableDrag","isShowingInnerSheet","setAnimatedPosition","scrollGestureRef","gestureHandlerEnabled","isGestureHandlerEnabled","panGestureRef","useRef","gestureStateRef","startY","lastPanTranslationY","accumulatedOffset","prevTranslationY","scrollEngaged","onStart","useCallback","onEnd","closestPoint","_scrollBridge_setScrollEnabled","setParentDragging","setScrollEnabled","panGesture","useMemo","Gesture","getGestureHandlerState","minY","gs","current","gesture","Pan","withRef","failOffsetX","shouldCancelWhenOutside","onBegin","pos","atTop","currentScrollY","y","initialPosition","onChange","event","translationY","isSwipingDown","deltaY","scrollY","currentPos","isCurrentlyAtTop","nodeIsScrolling","panHandles","hasScrollableContent","lockTo","newPosition","paneY","_scrollBridge_setScrollEnabled1","velocityY","scrollLockY","velocity","projectedEnd","minDist","Number","POSITIVE_INFINITY","i","length","dist","Math","abs","onFinalize","runOnJS","simultaneousWithExternalGesture"],"sources":["../../src/useGestureHandlerPan.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/sheet",
3
- "version": "2.0.0-1769233344020",
3
+ "version": "2.0.0-1769288527117",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "*.css"
@@ -25,6 +25,13 @@
25
25
  "lint": "biome check src",
26
26
  "lint:fix": "biome check --write src"
27
27
  },
28
+ "typesVersions": {
29
+ "*": {
30
+ "setup-gesture-handler": [
31
+ "./types/setupGestureHandler.d.ts"
32
+ ]
33
+ }
34
+ },
28
35
  "exports": {
29
36
  "./package.json": "./package.json",
30
37
  ".": {
@@ -50,35 +57,55 @@
50
57
  "import": "./dist/esm/controller.mjs",
51
58
  "require": "./dist/cjs/controller.cjs",
52
59
  "default": "./dist/cjs/controller.native.js"
60
+ },
61
+ "./setup-gesture-handler": {
62
+ "react-native": {
63
+ "types": "./types/setupGestureHandler.d.ts",
64
+ "module": "./dist/esm/setupGestureHandler.native.js",
65
+ "import": "./dist/esm/setupGestureHandler.native.js",
66
+ "require": "./dist/cjs/setupGestureHandler.native.js"
67
+ },
68
+ "types": "./types/setupGestureHandler.d.ts",
69
+ "module": "./dist/esm/setupGestureHandler.mjs",
70
+ "import": "./dist/esm/setupGestureHandler.mjs",
71
+ "require": "./dist/cjs/setupGestureHandler.cjs"
53
72
  }
54
73
  },
55
74
  "dependencies": {
56
- "@tamagui/adapt": "2.0.0-1769233344020",
57
- "@tamagui/animate-presence": "2.0.0-1769233344020",
58
- "@tamagui/animations-react-native": "2.0.0-1769233344020",
59
- "@tamagui/compose-refs": "2.0.0-1769233344020",
60
- "@tamagui/constants": "2.0.0-1769233344020",
61
- "@tamagui/core": "2.0.0-1769233344020",
62
- "@tamagui/create-context": "2.0.0-1769233344020",
63
- "@tamagui/helpers": "2.0.0-1769233344020",
64
- "@tamagui/portal": "2.0.0-1769233344020",
65
- "@tamagui/remove-scroll": "2.0.0-1769233344020",
66
- "@tamagui/scroll-view": "2.0.0-1769233344020",
67
- "@tamagui/stacks": "2.0.0-1769233344020",
68
- "@tamagui/use-constant": "2.0.0-1769233344020",
69
- "@tamagui/use-controllable-state": "2.0.0-1769233344020",
70
- "@tamagui/use-did-finish-ssr": "2.0.0-1769233344020",
71
- "@tamagui/use-keyboard-visible": "2.0.0-1769233344020",
72
- "@tamagui/z-index-stack": "2.0.0-1769233344020"
75
+ "@tamagui/adapt": "2.0.0-1769288527117",
76
+ "@tamagui/animate-presence": "2.0.0-1769288527117",
77
+ "@tamagui/animations-react-native": "2.0.0-1769288527117",
78
+ "@tamagui/compose-refs": "2.0.0-1769288527117",
79
+ "@tamagui/constants": "2.0.0-1769288527117",
80
+ "@tamagui/core": "2.0.0-1769288527117",
81
+ "@tamagui/create-context": "2.0.0-1769288527117",
82
+ "@tamagui/helpers": "2.0.0-1769288527117",
83
+ "@tamagui/native": "2.0.0-1769288527117",
84
+ "@tamagui/portal": "2.0.0-1769288527117",
85
+ "@tamagui/remove-scroll": "2.0.0-1769288527117",
86
+ "@tamagui/scroll-view": "2.0.0-1769288527117",
87
+ "@tamagui/stacks": "2.0.0-1769288527117",
88
+ "@tamagui/use-constant": "2.0.0-1769288527117",
89
+ "@tamagui/use-controllable-state": "2.0.0-1769288527117",
90
+ "@tamagui/use-did-finish-ssr": "2.0.0-1769288527117",
91
+ "@tamagui/use-keyboard-visible": "2.0.0-1769288527117",
92
+ "@tamagui/z-index-stack": "2.0.0-1769288527117"
73
93
  },
74
94
  "peerDependencies": {
75
95
  "react": "*",
76
- "react-native": "*"
96
+ "react-native": "*",
97
+ "react-native-gesture-handler": ">=2.0.0"
98
+ },
99
+ "peerDependenciesMeta": {
100
+ "react-native-gesture-handler": {
101
+ "optional": true
102
+ }
77
103
  },
78
104
  "devDependencies": {
79
- "@tamagui/build": "2.0.0-1769233344020",
105
+ "@tamagui/build": "2.0.0-1769288527117",
80
106
  "react": "*",
81
- "react-native": "0.81.5"
107
+ "react-native": "0.81.5",
108
+ "react-native-gesture-handler": "~2.28.0"
82
109
  },
83
110
  "publishConfig": {
84
111
  "access": "public"
@@ -0,0 +1,41 @@
1
+ import type React from 'react'
2
+ import { View, type ViewStyle } from 'react-native'
3
+ import { getGestureHandlerState, isGestureHandlerEnabled } from './gestureState'
4
+
5
+ interface GestureDetectorWrapperProps {
6
+ gesture: any
7
+ children: React.ReactNode
8
+ style?: ViewStyle
9
+ }
10
+
11
+ /**
12
+ * Conditionally wraps children with GestureDetector when RNGH is available.
13
+ * Uses a plain View wrapper that GestureDetector can attach gesture handlers to.
14
+ */
15
+ export function GestureDetectorWrapper({
16
+ gesture,
17
+ children,
18
+ style,
19
+ }: GestureDetectorWrapperProps) {
20
+ const { GestureDetector } = getGestureHandlerState()
21
+ const enabled = isGestureHandlerEnabled()
22
+
23
+ // console.warn('[RNGH-Wrapper] enabled:', enabled, 'hasDetector:', !!GestureDetector, 'hasGesture:', !!gesture)
24
+
25
+ // only wrap if we have RNGH available AND a gesture to attach
26
+ if (enabled && GestureDetector && gesture) {
27
+ // GestureDetector needs a native View to attach handlers to
28
+ // the View wrapper ensures proper gesture propagation
29
+ // console.warn('[RNGH-Wrapper] WRAPPING')
30
+ return (
31
+ <GestureDetector gesture={gesture}>
32
+ <View style={style} collapsable={false}>
33
+ {children}
34
+ </View>
35
+ </GestureDetector>
36
+ )
37
+ }
38
+
39
+ // pass through children in a consistent View wrapper
40
+ return <View style={style}>{children}</View>
41
+ }
@@ -0,0 +1,62 @@
1
+ import type React from 'react'
2
+ import { createContext, useContext, type RefObject } from 'react'
3
+
4
+ export interface GestureSheetContextValue {
5
+ /**
6
+ * The sheet's pan gesture object, used for simultaneousHandlers
7
+ * in ScrollView to coordinate gestures
8
+ */
9
+ panGesture: any | null
10
+ /**
11
+ * Ref to the pan gesture for simultaneousHandlers prop
12
+ */
13
+ panGestureRef: RefObject<any> | null
14
+ /**
15
+ * Whether the sheet is currently being dragged by the user
16
+ */
17
+ isDragging: boolean
18
+ /**
19
+ * Set whether panning should be blocked (e.g., when scrolling)
20
+ */
21
+ setBlockPan: (blocked: boolean) => void
22
+ /**
23
+ * Whether pan gesture is currently blocked
24
+ */
25
+ blockPan: boolean
26
+ }
27
+
28
+ const GestureSheetContext = createContext<GestureSheetContextValue | null>(null)
29
+
30
+ export function useGestureSheetContext(): GestureSheetContextValue | null {
31
+ return useContext(GestureSheetContext)
32
+ }
33
+
34
+ export interface GestureSheetProviderProps {
35
+ children: React.ReactNode
36
+ isDragging: boolean
37
+ blockPan: boolean
38
+ setBlockPan: (blocked: boolean) => void
39
+ panGesture: any | null
40
+ panGestureRef: RefObject<any> | null
41
+ }
42
+
43
+ export function GestureSheetProvider({
44
+ children,
45
+ isDragging,
46
+ blockPan,
47
+ setBlockPan,
48
+ panGesture,
49
+ panGestureRef,
50
+ }: GestureSheetProviderProps) {
51
+ const value: GestureSheetContextValue = {
52
+ panGesture,
53
+ panGestureRef,
54
+ isDragging,
55
+ blockPan,
56
+ setBlockPan,
57
+ }
58
+
59
+ return (
60
+ <GestureSheetContext.Provider value={value}>{children}</GestureSheetContext.Provider>
61
+ )
62
+ }