@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.
Files changed (49) hide show
  1. package/lib/module/TrueSheet.js.map +1 -1
  2. package/lib/module/TrueSheet.web.js +348 -0
  3. package/lib/module/TrueSheet.web.js.map +1 -0
  4. package/lib/module/TrueSheetProvider.js +26 -0
  5. package/lib/module/TrueSheetProvider.js.map +1 -0
  6. package/lib/module/TrueSheetProvider.web.js +74 -0
  7. package/lib/module/TrueSheetProvider.web.js.map +1 -0
  8. package/lib/module/index.js +2 -1
  9. package/lib/module/index.js.map +1 -1
  10. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +1 -1
  11. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -1
  12. package/lib/module/navigation/screen/TrueSheetScreen.js +1 -1
  13. package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -1
  14. package/lib/module/reanimated/ReanimatedTrueSheet.js +2 -2
  15. package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
  16. package/lib/module/reanimated/ReanimatedTrueSheet.web.js +81 -0
  17. package/lib/module/reanimated/ReanimatedTrueSheet.web.js.map +1 -0
  18. package/lib/module/reanimated/index.js +2 -2
  19. package/lib/module/reanimated/index.js.map +1 -1
  20. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js +21 -0
  21. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js.map +1 -0
  22. package/lib/typescript/src/TrueSheet.d.ts +2 -2
  23. package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
  24. package/lib/typescript/src/TrueSheet.types.d.ts +72 -0
  25. package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
  26. package/lib/typescript/src/TrueSheet.web.d.ts +3 -0
  27. package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -0
  28. package/lib/typescript/src/TrueSheetProvider.d.ts +17 -0
  29. package/lib/typescript/src/TrueSheetProvider.d.ts.map +1 -0
  30. package/lib/typescript/src/TrueSheetProvider.web.d.ts +22 -0
  31. package/lib/typescript/src/TrueSheetProvider.web.d.ts.map +1 -0
  32. package/lib/typescript/src/index.d.ts +1 -0
  33. package/lib/typescript/src/index.d.ts.map +1 -1
  34. package/lib/typescript/src/navigation/types.d.ts +1 -1
  35. package/lib/typescript/src/navigation/types.d.ts.map +1 -1
  36. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts +41 -0
  37. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts.map +1 -0
  38. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts +16 -0
  39. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts.map +1 -0
  40. package/package.json +26 -13
  41. package/src/TrueSheet.tsx +5 -1
  42. package/src/TrueSheet.types.ts +76 -0
  43. package/src/TrueSheet.web.tsx +423 -0
  44. package/src/TrueSheetProvider.tsx +29 -0
  45. package/src/TrueSheetProvider.web.tsx +81 -0
  46. package/src/index.ts +1 -0
  47. package/src/navigation/types.ts +2 -0
  48. package/src/reanimated/ReanimatedTrueSheet.web.tsx +78 -0
  49. 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
+ };