@swmansion/react-native-bottom-sheet 0.7.0-next.1 → 0.7.0-next.3

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 (58) hide show
  1. package/android/src/main/java/com/swmansion/reactnativebottomsheet/BottomSheetView.kt +4 -1
  2. package/ios/BottomSheetContentView.mm +6 -0
  3. package/ios/RNSBottomSheetHostingView.swift +13 -0
  4. package/lib/module/BottomSheet.js +101 -28
  5. package/lib/module/BottomSheet.js.map +1 -1
  6. package/lib/module/ModalBottomSheet.js +3 -7
  7. package/lib/module/ModalBottomSheet.js.map +1 -1
  8. package/lib/module/bottomSheetUtils.js +0 -2
  9. package/lib/module/bottomSheetUtils.js.map +1 -1
  10. package/lib/module/index.js +0 -3
  11. package/lib/module/index.js.map +1 -1
  12. package/lib/typescript/src/BottomSheet.d.ts +4 -3
  13. package/lib/typescript/src/BottomSheet.d.ts.map +1 -1
  14. package/lib/typescript/src/ModalBottomSheet.d.ts +3 -6
  15. package/lib/typescript/src/ModalBottomSheet.d.ts.map +1 -1
  16. package/lib/typescript/src/bottomSheetUtils.d.ts.map +1 -1
  17. package/lib/typescript/src/index.d.ts +0 -5
  18. package/lib/typescript/src/index.d.ts.map +1 -1
  19. package/package.json +2 -8
  20. package/src/BottomSheet.tsx +144 -28
  21. package/src/ModalBottomSheet.tsx +5 -13
  22. package/src/bottomSheetUtils.ts +0 -1
  23. package/src/index.tsx +0 -5
  24. package/lib/module/BottomSheetBase.js +0 -207
  25. package/lib/module/BottomSheetBase.js.map +0 -1
  26. package/lib/module/BottomSheetContext.js +0 -13
  27. package/lib/module/BottomSheetContext.js.map +0 -1
  28. package/lib/module/BottomSheetFlatList.js +0 -6
  29. package/lib/module/BottomSheetFlatList.js.map +0 -1
  30. package/lib/module/BottomSheetScrollView.js +0 -6
  31. package/lib/module/BottomSheetScrollView.js.map +0 -1
  32. package/lib/module/bottomSheetScrollable.js +0 -35
  33. package/lib/module/bottomSheetScrollable.js.map +0 -1
  34. package/lib/module/useBottomSheetPanGesture.js +0 -202
  35. package/lib/module/useBottomSheetPanGesture.js.map +0 -1
  36. package/lib/module/useBottomSheetScrollable.js +0 -61
  37. package/lib/module/useBottomSheetScrollable.js.map +0 -1
  38. package/lib/typescript/src/BottomSheetBase.d.ts +0 -20
  39. package/lib/typescript/src/BottomSheetBase.d.ts.map +0 -1
  40. package/lib/typescript/src/BottomSheetContext.d.ts +0 -19
  41. package/lib/typescript/src/BottomSheetContext.d.ts.map +0 -1
  42. package/lib/typescript/src/BottomSheetFlatList.d.ts +0 -10
  43. package/lib/typescript/src/BottomSheetFlatList.d.ts.map +0 -1
  44. package/lib/typescript/src/BottomSheetScrollView.d.ts +0 -10
  45. package/lib/typescript/src/BottomSheetScrollView.d.ts.map +0 -1
  46. package/lib/typescript/src/bottomSheetScrollable.d.ts +0 -9
  47. package/lib/typescript/src/bottomSheetScrollable.d.ts.map +0 -1
  48. package/lib/typescript/src/useBottomSheetPanGesture.d.ts +0 -18
  49. package/lib/typescript/src/useBottomSheetPanGesture.d.ts.map +0 -1
  50. package/lib/typescript/src/useBottomSheetScrollable.d.ts +0 -13
  51. package/lib/typescript/src/useBottomSheetScrollable.d.ts.map +0 -1
  52. package/src/BottomSheetBase.tsx +0 -276
  53. package/src/BottomSheetContext.tsx +0 -33
  54. package/src/BottomSheetFlatList.tsx +0 -21
  55. package/src/BottomSheetScrollView.tsx +0 -22
  56. package/src/bottomSheetScrollable.tsx +0 -42
  57. package/src/useBottomSheetPanGesture.ts +0 -253
  58. package/src/useBottomSheetScrollable.ts +0 -68
@@ -1,16 +1,8 @@
1
- import type { ReactNode } from 'react';
2
- import type { SharedValue } from 'react-native-reanimated';
1
+ import { BottomSheet, type BottomSheetProps } from './BottomSheet';
3
2
 
4
- import type { BottomSheetCommonProps } from './BottomSheetBase';
5
- import { BottomSheetBase } from './BottomSheetBase';
3
+ export interface ModalBottomSheetProps
4
+ extends Omit<BottomSheetProps, 'modal'> {}
6
5
 
7
- export interface ModalBottomSheetProps extends BottomSheetCommonProps {
8
- scrim?: (progress: SharedValue<number>) => ReactNode;
9
- }
10
-
11
- export const ModalBottomSheet = ({
12
- scrim,
13
- ...props
14
- }: ModalBottomSheetProps) => (
15
- <BottomSheetBase {...props} modal renderScrim={scrim} />
6
+ export const ModalBottomSheet = (props: ModalBottomSheetProps) => (
7
+ <BottomSheet {...props} modal />
16
8
  );
@@ -29,7 +29,6 @@ export const findSnapTarget = (
29
29
  currentIndex: number,
30
30
  allPositions: { index: number; translateY: number; isDraggable: boolean }[]
31
31
  ) => {
32
- 'worklet';
33
32
  const draggablePositions = allPositions.filter(
34
33
  (position) => position.isDraggable
35
34
  );
package/src/index.tsx CHANGED
@@ -3,10 +3,5 @@ export type { BottomSheetProps } from './BottomSheet';
3
3
  export { ModalBottomSheet } from './ModalBottomSheet';
4
4
  export type { ModalBottomSheetProps } from './ModalBottomSheet';
5
5
  export { BottomSheetProvider } from './BottomSheetProvider';
6
- export { BottomSheetFlatList } from './BottomSheetFlatList';
7
- export type { BottomSheetFlatListProps } from './BottomSheetFlatList';
8
- export { BottomSheetScrollView } from './BottomSheetScrollView';
9
- export type { BottomSheetScrollViewProps } from './BottomSheetScrollView';
10
6
  export type { Detent, DetentValue } from './bottomSheetUtils';
11
7
  export { programmatic } from './bottomSheetUtils';
12
- export { bottomSheetScrollable } from './bottomSheetScrollable';
@@ -1,207 +0,0 @@
1
- "use strict";
2
-
3
- import { useCallback, useEffect, useState } from 'react';
4
- import { Pressable, StyleSheet, View, useWindowDimensions } from 'react-native';
5
- import Animated, { useAnimatedReaction, useAnimatedStyle, useDerivedValue, useSharedValue, withSpring } from 'react-native-reanimated';
6
- import { scheduleOnUI } from 'react-native-worklets';
7
- import { GestureDetector } from 'react-native-gesture-handler';
8
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
9
- import { Portal } from "./BottomSheetProvider.js";
10
- import { BottomSheetContextProvider } from "./BottomSheetContext.js";
11
- import { clampIndex, isDetentProgrammatic, resolveDetent } from "./bottomSheetUtils.js";
12
- import { useBottomSheetPanGesture } from "./useBottomSheetPanGesture.js";
13
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- export { programmatic } from "./bottomSheetUtils.js";
15
- const DEFAULT_OPEN_ANIMATION_CONFIG = {
16
- dampingRatio: 1,
17
- duration: 300,
18
- overshootClamping: true
19
- };
20
- const DEFAULT_CLOSE_ANIMATION_CONFIG = {
21
- dampingRatio: 1,
22
- duration: 250,
23
- overshootClamping: true
24
- };
25
- const DefaultScrim = ({
26
- progress
27
- }) => {
28
- const style = useAnimatedStyle(() => ({
29
- opacity: progress.value
30
- }));
31
- return /*#__PURE__*/_jsx(Animated.View, {
32
- style: [StyleSheet.absoluteFill, {
33
- flex: 1,
34
- backgroundColor: 'rgba(0, 0, 0, 0.5)'
35
- }, style]
36
- });
37
- };
38
- export const BottomSheetBase = ({
39
- children,
40
- detents = [0, 'max'],
41
- index,
42
- onIndexChange,
43
- position: externalPosition,
44
- openAnimationConfig = DEFAULT_OPEN_ANIMATION_CONFIG,
45
- closeAnimationConfig = DEFAULT_CLOSE_ANIMATION_CONFIG,
46
- modal = false,
47
- renderScrim
48
- }) => {
49
- const {
50
- height: screenHeight
51
- } = useWindowDimensions();
52
- const insets = useSafeAreaInsets();
53
- const maxHeight = screenHeight - insets.top;
54
- const resolvedIndex = clampIndex(index, detents.length);
55
- const [contentHeight, setContentHeight] = useState(0);
56
- if (detents.length === 0) {
57
- throw new Error('detents must include at least one value.');
58
- }
59
- const normalizedDetents = detents.map(detent => {
60
- const resolved = resolveDetent(detent, contentHeight, maxHeight);
61
- return Math.max(0, Math.min(resolved, maxHeight));
62
- });
63
- const isDraggable = detents.map(detent => !isDetentProgrammatic(detent));
64
- const initialMaxSnap = Math.max(0, ...normalizedDetents);
65
- const translateY = useSharedValue(initialMaxSnap);
66
- const animationTarget = useSharedValue(NaN);
67
- const sheetHeight = useSharedValue(initialMaxSnap);
68
- const [scrollableEntries, setScrollableEntries] = useState([]);
69
- const isScrollableLocked = useSharedValue(false);
70
- const registerScrollable = useCallback(entry => {
71
- setScrollableEntries(prev => [...prev, entry]);
72
- return () => {
73
- setScrollableEntries(prev => prev.filter(e => e !== entry));
74
- };
75
- }, []);
76
- const detentsValue = useSharedValue(normalizedDetents);
77
- const isDraggableValue = useSharedValue(isDraggable);
78
- const firstNonzeroDetent = useSharedValue(normalizedDetents.find(detent => detent > 0) ?? 0);
79
- const currentIndex = useSharedValue(resolvedIndex);
80
- const internalPosition = useDerivedValue(() => Math.max(0, sheetHeight.value - translateY.value));
81
- useAnimatedReaction(() => internalPosition.value, value => {
82
- if (externalPosition !== undefined) externalPosition.set(value);
83
- });
84
- const scrimProgress = useDerivedValue(() => {
85
- const target = firstNonzeroDetent.value;
86
- if (target <= 0) return 0;
87
- const progress = internalPosition.value / target;
88
- return Math.min(1, Math.max(0, progress));
89
- });
90
- const handleIndexChange = nextIndex => {
91
- onIndexChange?.(nextIndex);
92
- };
93
- useEffect(() => {
94
- const maxSnap = Math.max(0, ...normalizedDetents);
95
- detentsValue.set(normalizedDetents);
96
- isDraggableValue.set(isDraggable);
97
- sheetHeight.set(maxSnap);
98
- firstNonzeroDetent.set(normalizedDetents.find(detent => detent > 0) ?? 0);
99
- }, [normalizedDetents, isDraggable, sheetHeight, detentsValue, isDraggableValue, firstNonzeroDetent]);
100
- const animateToIndex = useCallback((targetIndex, velocity) => {
101
- 'worklet';
102
-
103
- const maxSnap = sheetHeight.value;
104
- const targetTranslate = maxSnap - (detentsValue.value[targetIndex] ?? 0);
105
- if (animationTarget.value === targetTranslate && velocity === undefined) {
106
- currentIndex.set(targetIndex);
107
- return;
108
- }
109
- animationTarget.set(targetTranslate);
110
- const isOpening = targetTranslate < translateY.value;
111
- const baseConfig = isOpening ? openAnimationConfig : closeAnimationConfig;
112
- const springConfig = velocity === undefined ? baseConfig : {
113
- ...baseConfig,
114
- velocity
115
- };
116
- translateY.set(withSpring(targetTranslate, springConfig));
117
- currentIndex.set(targetIndex);
118
- }, [animationTarget, closeAnimationConfig, currentIndex, detentsValue, openAnimationConfig, sheetHeight, translateY]);
119
- useEffect(() => {
120
- scheduleOnUI(animateToIndex, resolvedIndex);
121
- }, [animateToIndex, resolvedIndex, normalizedDetents]);
122
- const panGesture = useBottomSheetPanGesture({
123
- animationTarget,
124
- translateY,
125
- sheetHeight,
126
- detentsValue,
127
- isDraggableValue,
128
- currentIndex,
129
- scrollableEntries,
130
- isScrollableLocked,
131
- handleIndexChange,
132
- animateToIndex
133
- });
134
- const handleSentinelLayout = event => {
135
- setContentHeight(event.nativeEvent.layout.y);
136
- };
137
- const closedIndex = normalizedDetents.indexOf(0);
138
- const handleScrimPress = () => {
139
- if (closedIndex === -1 || resolvedIndex === closedIndex) return;
140
- handleIndexChange(closedIndex);
141
- scheduleOnUI(animateToIndex, closedIndex);
142
- };
143
- const wrapperStyle = useAnimatedStyle(() => ({
144
- transform: [{
145
- translateY: translateY.value
146
- }],
147
- height: sheetHeight.value,
148
- opacity: translateY.value >= sheetHeight.value ? 0 : 1
149
- }));
150
- const isCollapsed = normalizedDetents[resolvedIndex] === 0;
151
- const pointerEvents = modal ? isCollapsed ? 'none' : 'auto' : 'box-none';
152
- let scrimElement = null;
153
- if (renderScrim !== undefined) {
154
- scrimElement = renderScrim(scrimProgress);
155
- } else if (modal) {
156
- scrimElement = /*#__PURE__*/_jsx(DefaultScrim, {
157
- progress: scrimProgress
158
- });
159
- }
160
- const sheetContent = /*#__PURE__*/_jsx(BottomSheetContextProvider, {
161
- value: {
162
- translateY,
163
- position: internalPosition,
164
- index: currentIndex,
165
- sheetHeight,
166
- isScrollableLocked,
167
- registerScrollable,
168
- panGesture
169
- },
170
- children: /*#__PURE__*/_jsx(Animated.View, {
171
- style: [{
172
- position: 'absolute',
173
- bottom: 0,
174
- left: 0,
175
- right: 0
176
- }, wrapperStyle],
177
- pointerEvents: "box-none",
178
- children: /*#__PURE__*/_jsx(GestureDetector, {
179
- gesture: panGesture,
180
- children: /*#__PURE__*/_jsxs(View, {
181
- style: {
182
- flex: 1
183
- },
184
- pointerEvents: "box-none",
185
- children: [children, /*#__PURE__*/_jsx(View, {
186
- onLayout: handleSentinelLayout,
187
- pointerEvents: "none"
188
- })]
189
- })
190
- })
191
- })
192
- });
193
- const sheetContainer = /*#__PURE__*/_jsxs(Animated.View, {
194
- style: StyleSheet.absoluteFill,
195
- pointerEvents: pointerEvents,
196
- children: [modal && scrimElement !== null ? /*#__PURE__*/_jsx(Pressable, {
197
- style: StyleSheet.absoluteFill,
198
- onPress: handleScrimPress,
199
- children: scrimElement
200
- }) : null, sheetContent]
201
- });
202
- if (modal) return /*#__PURE__*/_jsx(Portal, {
203
- children: sheetContainer
204
- });
205
- return sheetContainer;
206
- };
207
- //# sourceMappingURL=BottomSheetBase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useState","Pressable","StyleSheet","View","useWindowDimensions","Animated","useAnimatedReaction","useAnimatedStyle","useDerivedValue","useSharedValue","withSpring","scheduleOnUI","GestureDetector","useSafeAreaInsets","Portal","BottomSheetContextProvider","clampIndex","isDetentProgrammatic","resolveDetent","useBottomSheetPanGesture","jsx","_jsx","jsxs","_jsxs","programmatic","DEFAULT_OPEN_ANIMATION_CONFIG","dampingRatio","duration","overshootClamping","DEFAULT_CLOSE_ANIMATION_CONFIG","DefaultScrim","progress","style","opacity","value","absoluteFill","flex","backgroundColor","BottomSheetBase","children","detents","index","onIndexChange","position","externalPosition","openAnimationConfig","closeAnimationConfig","modal","renderScrim","height","screenHeight","insets","maxHeight","top","resolvedIndex","length","contentHeight","setContentHeight","Error","normalizedDetents","map","detent","resolved","Math","max","min","isDraggable","initialMaxSnap","translateY","animationTarget","NaN","sheetHeight","scrollableEntries","setScrollableEntries","isScrollableLocked","registerScrollable","entry","prev","filter","e","detentsValue","isDraggableValue","firstNonzeroDetent","find","currentIndex","internalPosition","undefined","set","scrimProgress","target","handleIndexChange","nextIndex","maxSnap","animateToIndex","targetIndex","velocity","targetTranslate","isOpening","baseConfig","springConfig","panGesture","handleSentinelLayout","event","nativeEvent","layout","y","closedIndex","indexOf","handleScrimPress","wrapperStyle","transform","isCollapsed","pointerEvents","scrimElement","sheetContent","bottom","left","right","gesture","onLayout","sheetContainer","onPress"],"sourceRoot":"../../src","sources":["BottomSheetBase.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- import { createContext, useContext } from 'react';
4
- const BottomSheetContext = /*#__PURE__*/createContext(null);
5
- export const BottomSheetContextProvider = BottomSheetContext.Provider;
6
- export const useBottomSheetContext = () => {
7
- const context = useContext(BottomSheetContext);
8
- if (context === null) {
9
- throw new Error('`useBottomSheetContext` must be used within `BottomSheet`.');
10
- }
11
- return context;
12
- };
13
- //# sourceMappingURL=BottomSheetContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createContext","useContext","BottomSheetContext","BottomSheetContextProvider","Provider","useBottomSheetContext","context","Error"],"sourceRoot":"../../src","sources":["BottomSheetContext.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAoBjD,MAAMC,kBAAkB,gBAAGF,aAAa,CAAgC,IAAI,CAAC;AAE7E,OAAO,MAAMG,0BAA0B,GAAGD,kBAAkB,CAACE,QAAQ;AAErE,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzC,MAAMC,OAAO,GAAGL,UAAU,CAACC,kBAAkB,CAAC;EAC9C,IAAII,OAAO,KAAK,IAAI,EAAE;IACpB,MAAM,IAAIC,KAAK,CACb,4DACF,CAAC;EACH;EACA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
@@ -1,6 +0,0 @@
1
- "use strict";
2
-
3
- import { FlatList } from 'react-native';
4
- import { bottomSheetScrollable } from "./bottomSheetScrollable.js";
5
- export const BottomSheetFlatList = bottomSheetScrollable(FlatList);
6
- //# sourceMappingURL=BottomSheetFlatList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["FlatList","bottomSheetScrollable","BottomSheetFlatList"],"sourceRoot":"../../src","sources":["BottomSheetFlatList.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAgC,cAAc;AAO/D,SAASC,qBAAqB,QAAQ,4BAAyB;AAW/D,OAAO,MAAMC,mBAAmB,GAAGD,qBAAqB,CAACD,QAAQ,CAEhD","ignoreList":[]}
@@ -1,6 +0,0 @@
1
- "use strict";
2
-
3
- import { ScrollView } from 'react-native';
4
- import { bottomSheetScrollable } from "./bottomSheetScrollable.js";
5
- export const BottomSheetScrollView = bottomSheetScrollable(ScrollView);
6
- //# sourceMappingURL=BottomSheetScrollView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["ScrollView","bottomSheetScrollable","BottomSheetScrollView"],"sourceRoot":"../../src","sources":["BottomSheetScrollView.tsx"],"mappings":";;AACA,SACEA,UAAU,QAGL,cAAc;AAGrB,SAASC,qBAAqB,QAAQ,4BAAyB;AAW/D,OAAO,MAAMC,qBAAqB,GAAGD,qBAAqB,CAACD,UAAU,CAEpD","ignoreList":[]}
@@ -1,35 +0,0 @@
1
- "use strict";
2
-
3
- import { useImperativeHandle } from 'react';
4
- import { GestureDetector } from 'react-native-gesture-handler';
5
- import Animated from 'react-native-reanimated';
6
- import { useBottomSheetScrollable } from "./useBottomSheetScrollable.js";
7
- import { jsx as _jsx } from "react/jsx-runtime";
8
- export function bottomSheetScrollable(ScrollableComponent) {
9
- const AnimatedComponent = Animated.createAnimatedComponent(ScrollableComponent);
10
- return ({
11
- scrollEnabled,
12
- onScroll,
13
- ref,
14
- ...rest
15
- }) => {
16
- const {
17
- scrollHandler,
18
- scrollableRef,
19
- nativeGesture,
20
- animatedProps
21
- } = useBottomSheetScrollable(scrollEnabled, onScroll);
22
- useImperativeHandle(ref, () => scrollableRef.current, [scrollableRef]);
23
- return /*#__PURE__*/_jsx(GestureDetector, {
24
- gesture: nativeGesture,
25
- children: /*#__PURE__*/_jsx(AnimatedComponent, {
26
- ...rest,
27
- animatedProps: animatedProps,
28
- ref: scrollableRef,
29
- onScroll: scrollHandler,
30
- scrollEventThrottle: 16
31
- })
32
- });
33
- };
34
- }
35
- //# sourceMappingURL=bottomSheetScrollable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useImperativeHandle","GestureDetector","Animated","useBottomSheetScrollable","jsx","_jsx","bottomSheetScrollable","ScrollableComponent","AnimatedComponent","createAnimatedComponent","scrollEnabled","onScroll","ref","rest","scrollHandler","scrollableRef","nativeGesture","animatedProps","current","gesture","children","scrollEventThrottle"],"sourceRoot":"../../src","sources":["bottomSheetScrollable.tsx"],"mappings":";;AAAA,SAAuCA,mBAAmB,QAAQ,OAAO;AAEzE,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,OAAOC,QAAQ,MAA4B,yBAAyB;AAEpE,SAASC,wBAAwB,QAAQ,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEtE,OAAO,SAASC,qBAAqBA,CAGnCC,mBAAqC,EAAE;EACvC,MAAMC,iBAAiB,GACrBN,QAAQ,CAACO,uBAAuB,CAACF,mBAAmB,CAAC;EAEvD,OAAO,CAAC;IACNG,aAAa;IACbC,QAAQ;IACRC,GAAG;IACH,GAAGC;EAKL,CAAC,KAAK;IACJ,MAAM;MAAEC,aAAa;MAAEC,aAAa;MAAEC,aAAa;MAAEC;IAAc,CAAC,GAClEd,wBAAwB,CAACO,aAAa,EAAEC,QAAQ,CAAC;IAEnDX,mBAAmB,CAACY,GAAG,EAAE,MAAMG,aAAa,CAACG,OAAY,EAAE,CAACH,aAAa,CAAC,CAAC;IAE3E,oBACEV,IAAA,CAACJ,eAAe;MAACkB,OAAO,EAAEH,aAAc;MAAAI,QAAA,eACtCf,IAAA,CAACG,iBAAiB;QAAA,GACXK,IAAI;QACTI,aAAa,EAAEA,aAAc;QAC7BL,GAAG,EAAEG,aAAc;QACnBJ,QAAQ,EAAEG,aAAc;QACxBO,mBAAmB,EAAE;MAAG,CACzB;IAAC,CACa,CAAC;EAEtB,CAAC;AACH","ignoreList":[]}
@@ -1,202 +0,0 @@
1
- "use strict";
2
-
3
- import { Gesture } from 'react-native-gesture-handler';
4
- import { scheduleOnRN } from 'react-native-worklets';
5
- import { measure, scrollTo, useSharedValue } from 'react-native-reanimated';
6
- import { findSnapTarget } from "./bottomSheetUtils.js";
7
- export const useBottomSheetPanGesture = ({
8
- animationTarget,
9
- translateY,
10
- sheetHeight,
11
- detentsValue,
12
- isDraggableValue,
13
- currentIndex,
14
- scrollableEntries,
15
- isScrollableLocked,
16
- handleIndexChange,
17
- animateToIndex
18
- }) => {
19
- const isDraggingSheet = useSharedValue(false);
20
- const isDraggingFromScrollable = useSharedValue(false);
21
- const panStartX = useSharedValue(0);
22
- const panStartY = useSharedValue(0);
23
- const panActivated = useSharedValue(false);
24
- const dragStartTranslateY = useSharedValue(0);
25
- const activeScrollableIndex = useSharedValue(-1);
26
- return Gesture.Pan().manualActivation(true).onTouchesDown(event => {
27
- 'worklet';
28
-
29
- panActivated.set(false);
30
- isDraggingSheet.set(false);
31
- isDraggingFromScrollable.set(false);
32
- isScrollableLocked.set(false);
33
- activeScrollableIndex.set(-1);
34
- const touch = event.changedTouches[0] ?? event.allTouches[0];
35
- if (touch !== undefined) {
36
- panStartX.set(touch.absoluteX);
37
- panStartY.set(touch.absoluteY);
38
- const entries = scrollableEntries;
39
- for (let i = 0; i < entries.length; i++) {
40
- const entry = entries[i];
41
- if (entry === undefined) continue;
42
- const layout = measure(entry.ref);
43
- if (layout === null) continue;
44
- const withinX = touch.absoluteX >= layout.pageX && touch.absoluteX <= layout.pageX + layout.width;
45
- const withinY = touch.absoluteY >= layout.pageY && touch.absoluteY <= layout.pageY + layout.height;
46
- if (withinX && withinY) {
47
- activeScrollableIndex.set(i);
48
- break;
49
- }
50
- }
51
- }
52
- }).onTouchesMove((event, stateManager) => {
53
- 'worklet';
54
-
55
- if (panActivated.value) return;
56
- const touch = event.changedTouches[0] ?? event.allTouches[0];
57
- if (!touch) return;
58
- const deltaX = touch.absoluteX - panStartX.value;
59
- const deltaY = touch.absoluteY - panStartY.value;
60
- // When multiple scrollables overlap (e.g. stacked views), the hit-test
61
- // in onTouchesDown may pick the wrong one. Prefer the scrollable whose
62
- // native gesture is already active — that is definitively the one
63
- // receiving touches (respects pointerEvents, z-order, etc.).
64
- // If multiple scrollables are registered but none has confirmed via
65
- // isGestureActive yet, defer the decision to avoid acting on a
66
- // potentially incorrect hit-test result.
67
- const entries = scrollableEntries;
68
- let gestureActiveIdx = -1;
69
- for (let i = 0; i < entries.length; i++) {
70
- const entry = entries[i];
71
- if (entry !== undefined && entry.isGestureActive.value) {
72
- gestureActiveIdx = i;
73
- break;
74
- }
75
- }
76
- if (gestureActiveIdx !== -1) {
77
- activeScrollableIndex.set(gestureActiveIdx);
78
- } else if (entries.length > 1 && activeScrollableIndex.value !== -1) {
79
- return;
80
- }
81
- const activeIdx = activeScrollableIndex.value;
82
- if (activeIdx !== -1) {
83
- const active = scrollableEntries[activeIdx];
84
- if (active !== undefined && active.scrollOffset.value > 0 && translateY.value <= 0) {
85
- return;
86
- }
87
- }
88
- if (Math.abs(deltaX) > Math.abs(deltaY)) {
89
- stateManager.fail();
90
- return;
91
- }
92
- if (Math.abs(deltaY) > Math.abs(deltaX) && (deltaY > 0 || translateY.value > 0)) {
93
- panActivated.set(true);
94
- stateManager.activate();
95
- }
96
- }).onBegin(() => {
97
- 'worklet';
98
-
99
- animationTarget.set(NaN);
100
- isDraggingSheet.set(false);
101
- isDraggingFromScrollable.set(false);
102
- dragStartTranslateY.set(translateY.value);
103
- }).onUpdate(event => {
104
- 'worklet';
105
-
106
- const activeIdx = activeScrollableIndex.value;
107
- const hasActive = activeIdx !== -1;
108
- const active = hasActive ? scrollableEntries[activeIdx] : undefined;
109
- const activeOffset = active !== undefined ? active.scrollOffset.value : 0;
110
- if (isDraggingSheet.value) {
111
- if (isDraggingFromScrollable.value && active !== undefined) {
112
- scrollTo(active.ref, 0, 0, false);
113
- }
114
- } else {
115
- const isDraggingDown = event.translationY > 0;
116
- const canStartDrag = !hasActive || activeOffset <= 0 || translateY.value > 0;
117
- if (!canStartDrag || !isDraggingDown && translateY.value <= 0) {
118
- return;
119
- }
120
- const isScrollableActive = hasActive && active !== undefined && active.isGestureActive.value;
121
- isDraggingSheet.set(true);
122
- isDraggingFromScrollable.set(isScrollableActive && activeOffset <= 0);
123
- dragStartTranslateY.set(translateY.value - event.translationY);
124
- isScrollableLocked.set(hasActive);
125
- if (hasActive && active !== undefined && activeOffset <= 0) {
126
- scrollTo(active.ref, 0, 0, false);
127
- }
128
- }
129
- const rawTranslate = dragStartTranslateY.value + event.translationY;
130
- const resolvedDetents = detentsValue.value;
131
- const draggable = isDraggableValue.value;
132
- let maxDraggableTranslateY = sheetHeight.value;
133
- let minDraggableTranslateY = 0;
134
- let foundDraggable = false;
135
- for (let i = 0; i < resolvedDetents.length; i++) {
136
- if (!(draggable[i] ?? true)) continue;
137
- const t = sheetHeight.value - (resolvedDetents[i] ?? 0);
138
- if (!foundDraggable) {
139
- maxDraggableTranslateY = t;
140
- minDraggableTranslateY = t;
141
- foundDraggable = true;
142
- } else {
143
- if (t > maxDraggableTranslateY) maxDraggableTranslateY = t;
144
- if (t < minDraggableTranslateY) minDraggableTranslateY = t;
145
- }
146
- }
147
- const nextTranslate = Math.min(Math.max(rawTranslate, minDraggableTranslateY), maxDraggableTranslateY);
148
- translateY.set(nextTranslate);
149
- if (isDraggingSheet.value && rawTranslate < 0 && hasActive) {
150
- isDraggingSheet.set(false);
151
- isScrollableLocked.set(false);
152
- let targetSnapIndex = -1;
153
- let targetSnapValue = -1;
154
- for (let i = resolvedDetents.length - 1; i >= 0; i--) {
155
- const detentValue = resolvedDetents[i];
156
- if (detentValue !== undefined && (draggable[i] ?? true) && detentValue > targetSnapValue) {
157
- targetSnapValue = detentValue;
158
- targetSnapIndex = i;
159
- }
160
- }
161
- if (targetSnapIndex === -1) {
162
- const maxSnap = sheetHeight.value;
163
- for (let i = resolvedDetents.length - 1; i >= 0; i--) {
164
- if (resolvedDetents[i] === maxSnap) {
165
- targetSnapIndex = i;
166
- break;
167
- }
168
- }
169
- }
170
- if (targetSnapIndex !== -1) {
171
- if (targetSnapIndex !== currentIndex.value) {
172
- scheduleOnRN(handleIndexChange, targetSnapIndex);
173
- }
174
- animateToIndex(targetSnapIndex);
175
- }
176
- }
177
- }).onEnd(event => {
178
- 'worklet';
179
-
180
- const wasDragging = isDraggingSheet.value;
181
- isScrollableLocked.set(false);
182
- isDraggingSheet.set(false);
183
- animationTarget.set(NaN);
184
- if (!wasDragging) {
185
- animateToIndex(currentIndex.value);
186
- return;
187
- }
188
- const maxSnap = sheetHeight.value;
189
- const draggable = isDraggableValue.value;
190
- const allPositions = detentsValue.value.map((detentValue, snapIndex) => ({
191
- index: snapIndex,
192
- translateY: maxSnap - detentValue,
193
- isDraggable: draggable[snapIndex] ?? true
194
- }));
195
- const targetIndex = findSnapTarget(translateY.value, event.velocityY, currentIndex.value, allPositions);
196
- const hasIndexChanged = targetIndex !== currentIndex.value;
197
- if (hasIndexChanged) scheduleOnRN(handleIndexChange, targetIndex);
198
- const shouldApplyVelocity = hasIndexChanged && Number.isFinite(event.velocityY);
199
- animateToIndex(targetIndex, shouldApplyVelocity ? event.velocityY : undefined);
200
- });
201
- };
202
- //# sourceMappingURL=useBottomSheetPanGesture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Gesture","scheduleOnRN","measure","scrollTo","useSharedValue","findSnapTarget","useBottomSheetPanGesture","animationTarget","translateY","sheetHeight","detentsValue","isDraggableValue","currentIndex","scrollableEntries","isScrollableLocked","handleIndexChange","animateToIndex","isDraggingSheet","isDraggingFromScrollable","panStartX","panStartY","panActivated","dragStartTranslateY","activeScrollableIndex","Pan","manualActivation","onTouchesDown","event","set","touch","changedTouches","allTouches","undefined","absoluteX","absoluteY","entries","i","length","entry","layout","ref","withinX","pageX","width","withinY","pageY","height","onTouchesMove","stateManager","value","deltaX","deltaY","gestureActiveIdx","isGestureActive","activeIdx","active","scrollOffset","Math","abs","fail","activate","onBegin","NaN","onUpdate","hasActive","activeOffset","isDraggingDown","translationY","canStartDrag","isScrollableActive","rawTranslate","resolvedDetents","draggable","maxDraggableTranslateY","minDraggableTranslateY","foundDraggable","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,61 +0,0 @@
1
- "use strict";
2
-
3
- import { useEffect } from 'react';
4
- import { Gesture } from 'react-native-gesture-handler';
5
- import { isWorkletFunction, scheduleOnRN } from 'react-native-worklets';
6
- import { useAnimatedProps, useAnimatedRef, useAnimatedScrollHandler, useSharedValue } from 'react-native-reanimated';
7
- import { useBottomSheetContext } from "./BottomSheetContext.js";
8
- export const useBottomSheetScrollable = (baseScrollEnabled = true, onScroll) => {
9
- const {
10
- isScrollableLocked,
11
- registerScrollable,
12
- panGesture
13
- } = useBottomSheetContext();
14
- const scrollableRef = useAnimatedRef();
15
- const scrollOffset = useSharedValue(0);
16
- const isGestureActive = useSharedValue(false);
17
- const isWorkletScrollHandler = onScroll !== undefined ? isWorkletFunction(onScroll) : false;
18
- const scrollHandler = useAnimatedScrollHandler({
19
- onScroll: event => {
20
- 'worklet';
21
-
22
- scrollOffset.set(Math.max(0, event.contentOffset.y));
23
- if (onScroll === undefined) return;
24
- if (isWorkletScrollHandler) {
25
- onScroll(event);
26
- return;
27
- }
28
- scheduleOnRN(onScroll, event);
29
- }
30
- });
31
- const nativeGesture = Gesture.Native().simultaneousWithExternalGesture(panGesture).onStart(() => {
32
- 'worklet';
33
-
34
- isGestureActive.set(true);
35
- }).onFinalize(() => {
36
- 'worklet';
37
-
38
- isGestureActive.set(false);
39
- });
40
- const animatedProps = useAnimatedProps(() => {
41
- const resolvedScrollEnabled = (typeof baseScrollEnabled === 'object' && baseScrollEnabled !== null ? baseScrollEnabled.value : baseScrollEnabled) ?? true;
42
- return {
43
- scrollEnabled: resolvedScrollEnabled && !isScrollableLocked.value
44
- };
45
- });
46
- useEffect(() => {
47
- const unregister = registerScrollable({
48
- ref: scrollableRef,
49
- scrollOffset,
50
- isGestureActive
51
- });
52
- return unregister;
53
- }, [registerScrollable, scrollableRef, scrollOffset, isGestureActive]);
54
- return {
55
- scrollHandler,
56
- scrollableRef,
57
- nativeGesture,
58
- animatedProps
59
- };
60
- };
61
- //# sourceMappingURL=useBottomSheetScrollable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useEffect","Gesture","isWorkletFunction","scheduleOnRN","useAnimatedProps","useAnimatedRef","useAnimatedScrollHandler","useSharedValue","useBottomSheetContext","useBottomSheetScrollable","baseScrollEnabled","onScroll","isScrollableLocked","registerScrollable","panGesture","scrollableRef","scrollOffset","isGestureActive","isWorkletScrollHandler","undefined","scrollHandler","event","set","Math","max","contentOffset","y","nativeGesture","Native","simultaneousWithExternalGesture","onStart","onFinalize","animatedProps","resolvedScrollEnabled","value","scrollEnabled","unregister","ref"],"sourceRoot":"../../src","sources":["useBottomSheetScrollable.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,OAAO,QAAQ,8BAA8B;AAEtD,SAASC,iBAAiB,EAAEC,YAAY,QAAQ,uBAAuB;AACvE,SAEEC,gBAAgB,EAChBC,cAAc,EACdC,wBAAwB,EACxBC,cAAc,QACT,yBAAyB;AAEhC,SAASC,qBAAqB,QAAQ,yBAAsB;AAI5D,OAAO,MAAMC,wBAAwB,GAAGA,CACtCC,iBAA6D,GAAG,IAAI,EACpEC,QAAwB,KACrB;EACH,MAAM;IAAEC,kBAAkB;IAAEC,kBAAkB;IAAEC;EAAW,CAAC,GAC1DN,qBAAqB,CAAC,CAAC;EACzB,MAAMO,aAAa,GAAGV,cAAc,CAAC,CAAC;EACtC,MAAMW,YAAY,GAAGT,cAAc,CAAC,CAAC,CAAC;EACtC,MAAMU,eAAe,GAAGV,cAAc,CAAC,KAAK,CAAC;EAC7C,MAAMW,sBAAsB,GAC1BP,QAAQ,KAAKQ,SAAS,GAAGjB,iBAAiB,CAACS,QAAQ,CAAC,GAAG,KAAK;EAC9D,MAAMS,aAAa,GAAGd,wBAAwB,CAAC;IAC7CK,QAAQ,EAAGU,KAAK,IAAK;MACnB,SAAS;;MACTL,YAAY,CAACM,GAAG,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,KAAK,CAACI,aAAa,CAACC,CAAC,CAAC,CAAC;MACpD,IAAIf,QAAQ,KAAKQ,SAAS,EAAE;MAC5B,IAAID,sBAAsB,EAAE;QAC1BP,QAAQ,CAACU,KAAK,CAAC;QACf;MACF;MACAlB,YAAY,CAACQ,QAAQ,EAAEU,KAAK,CAAC;IAC/B;EACF,CAAC,CAAC;EACF,MAAMM,aAAa,GAAG1B,OAAO,CAAC2B,MAAM,CAAC,CAAC,CACnCC,+BAA+B,CAACf,UAAU,CAAC,CAC3CgB,OAAO,CAAC,MAAM;IACb,SAAS;;IACTb,eAAe,CAACK,GAAG,CAAC,IAAI,CAAC;EAC3B,CAAC,CAAC,CACDS,UAAU,CAAC,MAAM;IAChB,SAAS;;IACTd,eAAe,CAACK,GAAG,CAAC,KAAK,CAAC;EAC5B,CAAC,CAAC;EACJ,MAAMU,aAAa,GAAG5B,gBAAgB,CAAC,MAAM;IAC3C,MAAM6B,qBAAqB,GACzB,CAAC,OAAOvB,iBAAiB,KAAK,QAAQ,IAAIA,iBAAiB,KAAK,IAAI,GAChEA,iBAAiB,CAACwB,KAAK,GACvBxB,iBAAiB,KAAK,IAAI;IAChC,OAAO;MACLyB,aAAa,EAAEF,qBAAqB,IAAI,CAACrB,kBAAkB,CAACsB;IAC9D,CAAC;EACH,CAAC,CAAC;EACFlC,SAAS,CAAC,MAAM;IACd,MAAMoC,UAAU,GAAGvB,kBAAkB,CAAC;MACpCwB,GAAG,EAAEtB,aAAa;MAClBC,YAAY;MACZC;IACF,CAAC,CAAC;IACF,OAAOmB,UAAU;EACnB,CAAC,EAAE,CAACvB,kBAAkB,EAAEE,aAAa,EAAEC,YAAY,EAAEC,eAAe,CAAC,CAAC;EACtE,OAAO;IAAEG,aAAa;IAAEL,aAAa;IAAEY,aAAa;IAAEK;EAAc,CAAC;AACvE,CAAC","ignoreList":[]}