@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 (
|
|
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
|
|
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 =
|
|
102
|
-
const detentValue =
|
|
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 =
|
|
111
|
-
if (
|
|
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","
|
|
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,
|
|
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
|
@@ -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 (
|
|
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 &&
|
|
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 (
|
|
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
|
-
|
|
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 =
|
|
149
|
-
const detentValue =
|
|
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 =
|
|
162
|
-
if (
|
|
189
|
+
for (let i = resolvedDetents.length - 1; i >= 0; i--) {
|
|
190
|
+
if (resolvedDetents[i] === maxSnap) {
|
|
163
191
|
targetSnapIndex = i;
|
|
164
192
|
break;
|
|
165
193
|
}
|