@swmansion/react-native-bottom-sheet 0.5.0 → 0.5.5

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.
@@ -21,6 +21,7 @@ export const useBottomSheetPanGesture = ({
21
21
  }) => {
22
22
  const isDraggingSheet = useSharedValue(false);
23
23
  const isDraggingFromScrollable = useSharedValue(false);
24
+ const panStartX = useSharedValue(0);
24
25
  const panStartY = useSharedValue(0);
25
26
  const panActivated = useSharedValue(false);
26
27
  const dragStartTranslateY = useSharedValue(0);
@@ -35,6 +36,7 @@ export const useBottomSheetPanGesture = ({
35
36
  isTouchWithinScrollable.set(false);
36
37
  const touch = event.changedTouches[0] ?? event.allTouches[0];
37
38
  if (touch !== undefined) {
39
+ panStartX.set(touch.absoluteX);
38
40
  panStartY.set(touch.absoluteY);
39
41
  if (hasScrollable.value) {
40
42
  const layout = measure(scrollableRef);
@@ -51,11 +53,16 @@ export const useBottomSheetPanGesture = ({
51
53
  if (panActivated.value) return;
52
54
  const touch = event.changedTouches[0] ?? event.allTouches[0];
53
55
  if (!touch) return;
56
+ const deltaX = touch.absoluteX - panStartX.value;
54
57
  const deltaY = touch.absoluteY - panStartY.value;
55
- if (hasScrollable.value && scrollOffset.value > 0 && isTouchWithinScrollable.value) {
58
+ if (hasScrollable.value && scrollOffset.value > 0 && isTouchWithinScrollable.value && translateY.value <= 0) {
56
59
  return;
57
60
  }
58
- if (deltaY > 0 || translateY.value > 0) {
61
+ if (Math.abs(deltaX) > Math.abs(deltaY)) {
62
+ stateManager.fail();
63
+ return;
64
+ }
65
+ if (Math.abs(deltaY) > Math.abs(deltaX) && (deltaY > 0 || translateY.value > 0)) {
59
66
  panActivated.set(true);
60
67
  stateManager.activate();
61
68
  }
@@ -75,31 +82,41 @@ export const useBottomSheetPanGesture = ({
75
82
  }
76
83
  } else {
77
84
  const isDraggingDown = event.translationY > 0;
78
- const canStartDrag = !hasScrollable.value || scrollOffset.value <= 0 || !isTouchWithinScrollable.value;
85
+ const canStartDrag = !hasScrollable.value || scrollOffset.value <= 0 || translateY.value > 0 || !isTouchWithinScrollable.value;
79
86
  if (!canStartDrag || !isDraggingDown && translateY.value <= 0) {
80
87
  return;
81
88
  }
82
89
  const isScrollableActive = hasScrollable.value && isScrollableGestureActive.value;
83
90
  isDraggingSheet.set(true);
84
- isDraggingFromScrollable.set(isScrollableActive && isTouchWithinScrollable.value);
91
+ isDraggingFromScrollable.set(isScrollableActive && isTouchWithinScrollable.value && scrollOffset.value <= 0);
85
92
  dragStartTranslateY.set(translateY.value - event.translationY);
86
93
  isScrollableLocked.set(hasScrollable.value);
87
- if (isTouchWithinScrollable.value && hasScrollable.value) {
94
+ if (isTouchWithinScrollable.value && hasScrollable.value && scrollOffset.value <= 0) {
88
95
  scrollTo(scrollableRef, 0, 0, false);
89
96
  }
90
97
  }
91
98
  const rawTranslate = dragStartTranslateY.value + event.translationY;
92
- const nextTranslate = Math.min(Math.max(rawTranslate, 0), sheetHeight.value);
99
+ const resolvedDetents = detentsValue.value;
100
+ const draggable = isDraggableValue.value;
101
+ let maxDraggableTranslateY = sheetHeight.value;
102
+ let foundDraggable = false;
103
+ for (let i = 0; i < resolvedDetents.length; i++) {
104
+ if (!(draggable[i] ?? true)) continue;
105
+ const t = sheetHeight.value - (resolvedDetents[i] ?? 0);
106
+ if (!foundDraggable || t > maxDraggableTranslateY) {
107
+ maxDraggableTranslateY = t;
108
+ foundDraggable = true;
109
+ }
110
+ }
111
+ const nextTranslate = Math.min(Math.max(rawTranslate, 0), maxDraggableTranslateY);
93
112
  translateY.set(nextTranslate);
94
113
  if (isDraggingSheet.value && rawTranslate < 0 && isTouchWithinScrollable.value && hasScrollable.value) {
95
114
  isDraggingSheet.set(false);
96
115
  isScrollableLocked.set(false);
97
- const resolvedDetentValues = detentsValue.value;
98
- const draggable = isDraggableValue.value;
99
116
  let targetSnapIndex = -1;
100
117
  let targetSnapValue = -1;
101
- for (let i = resolvedDetentValues.length - 1; i >= 0; i--) {
102
- const detentValue = resolvedDetentValues[i];
118
+ for (let i = resolvedDetents.length - 1; i >= 0; i--) {
119
+ const detentValue = resolvedDetents[i];
103
120
  if (detentValue !== undefined && (draggable[i] ?? true) && detentValue > targetSnapValue) {
104
121
  targetSnapValue = detentValue;
105
122
  targetSnapIndex = i;
@@ -107,8 +124,8 @@ export const useBottomSheetPanGesture = ({
107
124
  }
108
125
  if (targetSnapIndex === -1) {
109
126
  const maxSnap = sheetHeight.value;
110
- for (let i = resolvedDetentValues.length - 1; i >= 0; i--) {
111
- if (resolvedDetentValues[i] === maxSnap) {
127
+ for (let i = resolvedDetents.length - 1; i >= 0; i--) {
128
+ if (resolvedDetents[i] === maxSnap) {
112
129
  targetSnapIndex = i;
113
130
  break;
114
131
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Gesture","scheduleOnRN","measure","scrollTo","useSharedValue","findSnapTarget","useBottomSheetPanGesture","animationTarget","translateY","sheetHeight","detentsValue","isDraggableValue","currentIndex","scrollOffset","hasScrollable","isScrollableGestureActive","isScrollableLocked","scrollableRef","handleIndexChange","animateToIndex","isDraggingSheet","isDraggingFromScrollable","panStartY","panActivated","dragStartTranslateY","isTouchWithinScrollable","Pan","manualActivation","onTouchesDown","event","set","touch","changedTouches","allTouches","undefined","absoluteY","value","layout","withinX","absoluteX","pageX","width","withinY","pageY","height","onTouchesMove","stateManager","deltaY","activate","onBegin","NaN","onUpdate","isDraggingDown","translationY","canStartDrag","isScrollableActive","rawTranslate","nextTranslate","Math","min","max","resolvedDetentValues","draggable","targetSnapIndex","targetSnapValue","i","length","detentValue","maxSnap","onEnd","wasDragging","allPositions","map","snapIndex","index","isDraggable","targetIndex","velocityY","hasIndexChanged","shouldApplyVelocity","Number","isFinite"],"sourceRoot":"../../src","sources":["useBottomSheetPanGesture.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Gesture","scheduleOnRN","measure","scrollTo","useSharedValue","findSnapTarget","useBottomSheetPanGesture","animationTarget","translateY","sheetHeight","detentsValue","isDraggableValue","currentIndex","scrollOffset","hasScrollable","isScrollableGestureActive","isScrollableLocked","scrollableRef","handleIndexChange","animateToIndex","isDraggingSheet","isDraggingFromScrollable","panStartX","panStartY","panActivated","dragStartTranslateY","isTouchWithinScrollable","Pan","manualActivation","onTouchesDown","event","set","touch","changedTouches","allTouches","undefined","absoluteX","absoluteY","value","layout","withinX","pageX","width","withinY","pageY","height","onTouchesMove","stateManager","deltaX","deltaY","Math","abs","fail","activate","onBegin","NaN","onUpdate","isDraggingDown","translationY","canStartDrag","isScrollableActive","rawTranslate","resolvedDetents","draggable","maxDraggableTranslateY","foundDraggable","i","length","t","nextTranslate","min","max","targetSnapIndex","targetSnapValue","detentValue","maxSnap","onEnd","wasDragging","allPositions","map","snapIndex","index","isDraggable","targetIndex","velocityY","hasIndexChanged","shouldApplyVelocity","Number","isFinite"],"sourceRoot":"../../src","sources":["useBottomSheetPanGesture.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useBottomSheetPanGesture.d.ts","sourceRoot":"","sources":["../../../src/useBottomSheetPanGesture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EAEjB,MAAM,yBAAyB,CAAC;AAIjC,UAAU,2BAA2B;IACnC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,gBAAgB,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,yBAAyB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAChD,kBAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED,eAAO,MAAM,wBAAwB,GAAI,2NActC,2BAA2B,KAAG,UAoKhC,CAAC"}
1
+ {"version":3,"file":"useBottomSheetPanGesture.d.ts","sourceRoot":"","sources":["../../../src/useBottomSheetPanGesture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EAEjB,MAAM,yBAAyB,CAAC;AAIjC,UAAU,2BAA2B;IACnC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,gBAAgB,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,yBAAyB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAChD,kBAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED,eAAO,MAAM,wBAAwB,GAAI,2NActC,2BAA2B,KAAG,UAgMhC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swmansion/react-native-bottom-sheet",
3
- "version": "0.5.0",
3
+ "version": "0.5.5",
4
4
  "description": "Provides bottom-sheet components for React Native.",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -44,6 +44,7 @@ export const useBottomSheetPanGesture = ({
44
44
  }: BottomSheetPanGestureParams): PanGesture => {
45
45
  const isDraggingSheet = useSharedValue(false);
46
46
  const isDraggingFromScrollable = useSharedValue(false);
47
+ const panStartX = useSharedValue(0);
47
48
  const panStartY = useSharedValue(0);
48
49
  const panActivated = useSharedValue(false);
49
50
  const dragStartTranslateY = useSharedValue(0);
@@ -60,6 +61,7 @@ export const useBottomSheetPanGesture = ({
60
61
  isTouchWithinScrollable.set(false);
61
62
  const touch = event.changedTouches[0] ?? event.allTouches[0];
62
63
  if (touch !== undefined) {
64
+ panStartX.set(touch.absoluteX);
63
65
  panStartY.set(touch.absoluteY);
64
66
  if (hasScrollable.value) {
65
67
  const layout = measure(scrollableRef);
@@ -80,15 +82,24 @@ export const useBottomSheetPanGesture = ({
80
82
  if (panActivated.value) return;
81
83
  const touch = event.changedTouches[0] ?? event.allTouches[0];
82
84
  if (!touch) return;
85
+ const deltaX = touch.absoluteX - panStartX.value;
83
86
  const deltaY = touch.absoluteY - panStartY.value;
84
87
  if (
85
88
  hasScrollable.value &&
86
89
  scrollOffset.value > 0 &&
87
- isTouchWithinScrollable.value
90
+ isTouchWithinScrollable.value &&
91
+ translateY.value <= 0
88
92
  ) {
89
93
  return;
90
94
  }
91
- if (deltaY > 0 || translateY.value > 0) {
95
+ if (Math.abs(deltaX) > Math.abs(deltaY)) {
96
+ stateManager.fail();
97
+ return;
98
+ }
99
+ if (
100
+ Math.abs(deltaY) > Math.abs(deltaX) &&
101
+ (deltaY > 0 || translateY.value > 0)
102
+ ) {
92
103
  panActivated.set(true);
93
104
  stateManager.activate();
94
105
  }
@@ -111,6 +122,7 @@ export const useBottomSheetPanGesture = ({
111
122
  const canStartDrag =
112
123
  !hasScrollable.value ||
113
124
  scrollOffset.value <= 0 ||
125
+ translateY.value > 0 ||
114
126
  !isTouchWithinScrollable.value;
115
127
  if (!canStartDrag || (!isDraggingDown && translateY.value <= 0)) {
116
128
  return;
@@ -119,18 +131,36 @@ export const useBottomSheetPanGesture = ({
119
131
  hasScrollable.value && isScrollableGestureActive.value;
120
132
  isDraggingSheet.set(true);
121
133
  isDraggingFromScrollable.set(
122
- isScrollableActive && isTouchWithinScrollable.value
134
+ isScrollableActive &&
135
+ isTouchWithinScrollable.value &&
136
+ scrollOffset.value <= 0
123
137
  );
124
138
  dragStartTranslateY.set(translateY.value - event.translationY);
125
139
  isScrollableLocked.set(hasScrollable.value);
126
- if (isTouchWithinScrollable.value && hasScrollable.value) {
140
+ if (
141
+ isTouchWithinScrollable.value &&
142
+ hasScrollable.value &&
143
+ scrollOffset.value <= 0
144
+ ) {
127
145
  scrollTo(scrollableRef, 0, 0, false);
128
146
  }
129
147
  }
130
148
  const rawTranslate = dragStartTranslateY.value + event.translationY;
149
+ const resolvedDetents = detentsValue.value;
150
+ const draggable = isDraggableValue.value;
151
+ let maxDraggableTranslateY = sheetHeight.value;
152
+ let foundDraggable = false;
153
+ for (let i = 0; i < resolvedDetents.length; i++) {
154
+ if (!(draggable[i] ?? true)) continue;
155
+ const t = sheetHeight.value - (resolvedDetents[i] ?? 0);
156
+ if (!foundDraggable || t > maxDraggableTranslateY) {
157
+ maxDraggableTranslateY = t;
158
+ foundDraggable = true;
159
+ }
160
+ }
131
161
  const nextTranslate = Math.min(
132
162
  Math.max(rawTranslate, 0),
133
- sheetHeight.value
163
+ maxDraggableTranslateY
134
164
  );
135
165
  translateY.set(nextTranslate);
136
166
  if (
@@ -141,12 +171,10 @@ export const useBottomSheetPanGesture = ({
141
171
  ) {
142
172
  isDraggingSheet.set(false);
143
173
  isScrollableLocked.set(false);
144
- const resolvedDetentValues = detentsValue.value;
145
- const draggable = isDraggableValue.value;
146
174
  let targetSnapIndex = -1;
147
175
  let targetSnapValue = -1;
148
- for (let i = resolvedDetentValues.length - 1; i >= 0; i--) {
149
- const detentValue = resolvedDetentValues[i];
176
+ for (let i = resolvedDetents.length - 1; i >= 0; i--) {
177
+ const detentValue = resolvedDetents[i];
150
178
  if (
151
179
  detentValue !== undefined &&
152
180
  (draggable[i] ?? true) &&
@@ -158,8 +186,8 @@ export const useBottomSheetPanGesture = ({
158
186
  }
159
187
  if (targetSnapIndex === -1) {
160
188
  const maxSnap = sheetHeight.value;
161
- for (let i = resolvedDetentValues.length - 1; i >= 0; i--) {
162
- if (resolvedDetentValues[i] === maxSnap) {
189
+ for (let i = resolvedDetents.length - 1; i >= 0; i--) {
190
+ if (resolvedDetents[i] === maxSnap) {
163
191
  targetSnapIndex = i;
164
192
  break;
165
193
  }