@lodev09/react-native-true-sheet 3.2.2 → 3.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/module/TrueSheet.web.js +348 -0
- package/lib/module/TrueSheet.web.js.map +1 -0
- package/lib/module/TrueSheetProvider.js +26 -0
- package/lib/module/TrueSheetProvider.js.map +1 -0
- package/lib/module/TrueSheetProvider.web.js +74 -0
- package/lib/module/TrueSheetProvider.web.js.map +1 -0
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +1 -1
- package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -1
- package/lib/module/navigation/screen/TrueSheetScreen.js +1 -1
- package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheet.js +2 -2
- package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheet.web.js +81 -0
- package/lib/module/reanimated/ReanimatedTrueSheet.web.js.map +1 -0
- package/lib/module/reanimated/index.js +2 -2
- package/lib/module/reanimated/index.js.map +1 -1
- package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js +21 -0
- package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js.map +1 -0
- package/lib/typescript/src/TrueSheet.d.ts +2 -2
- package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.types.d.ts +72 -0
- package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.web.d.ts +3 -0
- package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -0
- package/lib/typescript/src/TrueSheetProvider.d.ts +17 -0
- package/lib/typescript/src/TrueSheetProvider.d.ts.map +1 -0
- package/lib/typescript/src/TrueSheetProvider.web.d.ts +22 -0
- package/lib/typescript/src/TrueSheetProvider.web.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/navigation/types.d.ts +1 -1
- package/lib/typescript/src/navigation/types.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts +41 -0
- package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts.map +1 -0
- package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts +16 -0
- package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts.map +1 -0
- package/package.json +26 -13
- package/src/TrueSheet.tsx +5 -1
- package/src/TrueSheet.types.ts +76 -0
- package/src/TrueSheet.web.tsx +423 -0
- package/src/TrueSheetProvider.tsx +29 -0
- package/src/TrueSheetProvider.web.tsx +81 -0
- package/src/index.ts +1 -0
- package/src/navigation/types.ts +2 -0
- package/src/reanimated/ReanimatedTrueSheet.web.tsx +78 -0
- package/src/reanimated/useReanimatedPositionChangeHandler.web.ts +32 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { forwardRef, useEffect } from 'react';
|
|
2
|
+
import { useWindowDimensions } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { TrueSheet } from '../TrueSheet.web';
|
|
5
|
+
import type { TrueSheetProps, TrueSheetRef, PositionChangeEvent } from '../TrueSheet.types';
|
|
6
|
+
import { useReanimatedTrueSheet } from './ReanimatedTrueSheetProvider';
|
|
7
|
+
|
|
8
|
+
interface ReanimatedTrueSheetProps extends TrueSheetProps {
|
|
9
|
+
/**
|
|
10
|
+
* Callback for position changes.
|
|
11
|
+
* On web, this is called with the position data from @gorhom/bottom-sheet.
|
|
12
|
+
*
|
|
13
|
+
* @see {@link TrueSheetProps.onPositionChange}
|
|
14
|
+
*/
|
|
15
|
+
onPositionChange?: TrueSheetProps['onPositionChange'];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Reanimated-enabled version of TrueSheet for web that automatically syncs
|
|
20
|
+
* position with the provider's shared value.
|
|
21
|
+
* Must be used within a ReanimatedTrueSheetProvider.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* import { ReanimatedTrueSheet, ReanimatedTrueSheetProvider } from '@lodev09/react-native-true-sheet/reanimated'
|
|
26
|
+
*
|
|
27
|
+
* function MyScreen() {
|
|
28
|
+
* const sheetRef = useRef<TrueSheetRef>(null)
|
|
29
|
+
*
|
|
30
|
+
* return (
|
|
31
|
+
* <ReanimatedTrueSheetProvider>
|
|
32
|
+
* <View>
|
|
33
|
+
* <ReanimatedTrueSheet
|
|
34
|
+
* ref={sheetRef}
|
|
35
|
+
* detents={[0.25, 0.5, 1]}
|
|
36
|
+
* initialDetentIndex={1}
|
|
37
|
+
* >
|
|
38
|
+
* <Text>Sheet Content</Text>
|
|
39
|
+
* </ReanimatedTrueSheet>
|
|
40
|
+
* </View>
|
|
41
|
+
* </ReanimatedTrueSheetProvider>
|
|
42
|
+
* )
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export const ReanimatedTrueSheet = forwardRef<TrueSheetRef, ReanimatedTrueSheetProps>(
|
|
47
|
+
(props, ref) => {
|
|
48
|
+
const { onPositionChange, detents = [0.5, 1], ...rest } = props;
|
|
49
|
+
const { height: windowHeight } = useWindowDimensions();
|
|
50
|
+
|
|
51
|
+
const { animatedPosition, animatedIndex, animatedDetent } = useReanimatedTrueSheet();
|
|
52
|
+
|
|
53
|
+
// Reset animated values when component unmounts
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
return () => {
|
|
56
|
+
animatedPosition.value = windowHeight;
|
|
57
|
+
animatedIndex.value = -1;
|
|
58
|
+
animatedDetent.value = 0;
|
|
59
|
+
};
|
|
60
|
+
}, [windowHeight]);
|
|
61
|
+
|
|
62
|
+
const handlePositionChange = (event: PositionChangeEvent) => {
|
|
63
|
+
const { position, index, detent } = event.nativeEvent;
|
|
64
|
+
|
|
65
|
+
// Sync with provider's shared values
|
|
66
|
+
animatedPosition.value = position;
|
|
67
|
+
animatedIndex.value = index;
|
|
68
|
+
animatedDetent.value = detent;
|
|
69
|
+
|
|
70
|
+
// Call user's callback
|
|
71
|
+
onPositionChange?.(event);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<TrueSheet ref={ref} detents={detents} onPositionChange={handlePositionChange} {...rest} />
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import type { PositionChangeEvent, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
3
|
+
|
|
4
|
+
type PositionChangeHandler = (
|
|
5
|
+
payload: PositionChangeEventPayload,
|
|
6
|
+
context: Record<string, unknown>
|
|
7
|
+
) => void;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Web implementation of useReanimatedPositionChangeHandler.
|
|
11
|
+
*
|
|
12
|
+
* On web, this returns a simple callback wrapper since @gorhom/bottom-sheet
|
|
13
|
+
* already provides animated position values. The worklet directive is ignored
|
|
14
|
+
* on web as there's no native UI thread.
|
|
15
|
+
*
|
|
16
|
+
* @param handler - The position change handler function
|
|
17
|
+
* @param _dependencies - Unused on web, kept for API compatibility
|
|
18
|
+
* @returns An event handler compatible with onPositionChange prop
|
|
19
|
+
*/
|
|
20
|
+
export const useReanimatedPositionChangeHandler = (
|
|
21
|
+
handler: PositionChangeHandler,
|
|
22
|
+
_dependencies: unknown[] = []
|
|
23
|
+
) => {
|
|
24
|
+
const context: Record<string, unknown> = {};
|
|
25
|
+
|
|
26
|
+
return useCallback(
|
|
27
|
+
(event: PositionChangeEvent) => {
|
|
28
|
+
handler(event.nativeEvent, context);
|
|
29
|
+
},
|
|
30
|
+
[handler]
|
|
31
|
+
);
|
|
32
|
+
};
|