@lodev09/react-native-true-sheet 3.1.0-beta.8 → 3.1.0

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 (41) hide show
  1. package/android/src/main/java/com/lodev09/truesheet/TrueSheetModule.kt +8 -2
  2. package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +13 -1
  3. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +1 -3
  4. package/android/src/main/jni/CMakeLists.txt +6 -30
  5. package/android/src/main/res/anim/true_sheet_slide_in.xml +4 -4
  6. package/android/src/main/res/anim/true_sheet_slide_out.xml +4 -3
  7. package/ios/TrueSheetModule.mm +17 -2
  8. package/ios/TrueSheetView.h +2 -0
  9. package/ios/TrueSheetView.mm +12 -0
  10. package/ios/TrueSheetViewController.mm +9 -0
  11. package/lib/module/navigation/TrueSheetRouter.js +119 -0
  12. package/lib/module/navigation/TrueSheetRouter.js.map +1 -0
  13. package/lib/module/navigation/TrueSheetView.js +169 -0
  14. package/lib/module/navigation/TrueSheetView.js.map +1 -0
  15. package/lib/module/navigation/createTrueSheetNavigator.js +59 -0
  16. package/lib/module/navigation/createTrueSheetNavigator.js.map +1 -0
  17. package/lib/module/navigation/index.js +6 -0
  18. package/lib/module/navigation/index.js.map +1 -0
  19. package/lib/module/navigation/types.js +4 -0
  20. package/lib/module/navigation/types.js.map +1 -0
  21. package/lib/module/navigation/useTrueSheetNavigation.js +26 -0
  22. package/lib/module/navigation/useTrueSheetNavigation.js.map +1 -0
  23. package/lib/typescript/src/navigation/TrueSheetRouter.d.ts +57 -0
  24. package/lib/typescript/src/navigation/TrueSheetRouter.d.ts.map +1 -0
  25. package/lib/typescript/src/navigation/TrueSheetView.d.ts +10 -0
  26. package/lib/typescript/src/navigation/TrueSheetView.d.ts.map +1 -0
  27. package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts +35 -0
  28. package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts.map +1 -0
  29. package/lib/typescript/src/navigation/index.d.ts +6 -0
  30. package/lib/typescript/src/navigation/index.d.ts.map +1 -0
  31. package/lib/typescript/src/navigation/types.d.ts +125 -0
  32. package/lib/typescript/src/navigation/types.d.ts.map +1 -0
  33. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts +23 -0
  34. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts.map +1 -0
  35. package/package.json +12 -1
  36. package/src/navigation/TrueSheetRouter.ts +172 -0
  37. package/src/navigation/TrueSheetView.tsx +271 -0
  38. package/src/navigation/createTrueSheetNavigator.tsx +89 -0
  39. package/src/navigation/index.ts +14 -0
  40. package/src/navigation/types.ts +176 -0
  41. package/src/navigation/useTrueSheetNavigation.ts +28 -0
@@ -0,0 +1,57 @@
1
+ import { type CommonActions, type ParamListBase, type Router, type StackActionType, type StackRouterOptions } from '@react-navigation/native';
2
+ import type { TrueSheetNavigationState } from './types';
3
+ export type TrueSheetRouterOptions = StackRouterOptions;
4
+ export type TrueSheetActionType = StackActionType | ReturnType<typeof CommonActions.goBack> | {
5
+ type: 'RESIZE';
6
+ index: number;
7
+ source?: string;
8
+ target?: string;
9
+ } | {
10
+ type: 'DISMISS';
11
+ source?: string;
12
+ target?: string;
13
+ } | {
14
+ type: 'REMOVE';
15
+ source?: string;
16
+ target?: string;
17
+ };
18
+ export declare const TrueSheetActions: {
19
+ resize(index: number): TrueSheetActionType;
20
+ dismiss(): TrueSheetActionType;
21
+ remove(): TrueSheetActionType;
22
+ replace(name: string, params?: object): {
23
+ readonly type: "REPLACE";
24
+ readonly payload: {
25
+ readonly name: string;
26
+ readonly params: object | undefined;
27
+ };
28
+ };
29
+ push(name: string, params?: object): {
30
+ readonly type: "PUSH";
31
+ readonly payload: {
32
+ readonly name: string;
33
+ readonly params: object | undefined;
34
+ };
35
+ };
36
+ pop(count?: number): {
37
+ readonly type: "POP";
38
+ readonly payload: {
39
+ readonly count: number;
40
+ };
41
+ };
42
+ popToTop(): {
43
+ readonly type: "POP_TO_TOP";
44
+ };
45
+ popTo(name: string, params?: object, options?: {
46
+ merge?: boolean;
47
+ }): {
48
+ readonly type: "POP_TO";
49
+ readonly payload: {
50
+ readonly name: string;
51
+ readonly params: object | undefined;
52
+ readonly merge: boolean | undefined;
53
+ };
54
+ };
55
+ };
56
+ export declare function TrueSheetRouter(routerOptions: StackRouterOptions): Router<TrueSheetNavigationState<ParamListBase>, TrueSheetActionType>;
57
+ //# sourceMappingURL=TrueSheetRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrueSheetRouter.d.ts","sourceRoot":"","sources":["../../../../src/navigation/TrueSheetRouter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,MAAM,EAEX,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,UAAU,CAAC,OAAO,aAAa,CAAC,MAAM,CAAC,GACvC;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,eAAO,MAAM,gBAAgB;kBAEb,MAAM,GAAG,mBAAmB;eAG/B,mBAAmB;cAGpB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;aAwGR,CAAC;;;;;;;;;CArGvB,CAAC;AAEF,wBAAgB,eAAe,CAC7B,aAAa,EAAE,kBAAkB,GAChC,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC,CAyHtE"}
@@ -0,0 +1,10 @@
1
+ import type { ParamListBase } from '@react-navigation/native';
2
+ import type { TrueSheetDescriptorMap, TrueSheetNavigationHelpers, TrueSheetNavigationState } from './types';
3
+ interface TrueSheetViewProps {
4
+ state: TrueSheetNavigationState<ParamListBase>;
5
+ navigation: TrueSheetNavigationHelpers;
6
+ descriptors: TrueSheetDescriptorMap;
7
+ }
8
+ export declare function TrueSheetView({ state, navigation, descriptors }: TrueSheetViewProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=TrueSheetView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrueSheetView.d.ts","sourceRoot":"","sources":["../../../../src/navigation/TrueSheetView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAoB9D,OAAO,KAAK,EACV,sBAAsB,EAEtB,0BAA0B,EAG1B,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAoMjB,UAAU,kBAAkB;IAC1B,KAAK,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAC/C,UAAU,EAAE,0BAA0B,CAAC;IACvC,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,kBAAkB,2CAyCnF"}
@@ -0,0 +1,35 @@
1
+ import { type NavigatorTypeBagBase, type ParamListBase, type StaticConfig, type TypedNavigator } from '@react-navigation/native';
2
+ import type { TrueSheetNavigationEventMap, TrueSheetNavigationOptions, TrueSheetNavigationProp, TrueSheetNavigationState, TrueSheetNavigatorProps } from './types';
3
+ declare function TrueSheetNavigator({ id, initialRouteName, children, screenListeners, screenOptions, }: TrueSheetNavigatorProps): import("react/jsx-runtime").JSX.Element;
4
+ /**
5
+ * Creates a TrueSheet navigator.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const Sheet = createTrueSheetNavigator();
10
+ *
11
+ * function App() {
12
+ * return (
13
+ * <Sheet.Navigator>
14
+ * <Sheet.Screen name="Home" component={HomeScreen} />
15
+ * <Sheet.Screen
16
+ * name="Details"
17
+ * component={DetailsSheet}
18
+ * options={{ detents: [0.5, 1] }}
19
+ * />
20
+ * </Sheet.Navigator>
21
+ * );
22
+ * }
23
+ * ```
24
+ */
25
+ export declare const createTrueSheetNavigator: <const ParamList extends ParamListBase, const NavigatorID extends string | undefined = undefined, const TypeBag extends NavigatorTypeBagBase = {
26
+ ParamList: ParamList;
27
+ NavigatorID: NavigatorID;
28
+ State: TrueSheetNavigationState<ParamList>;
29
+ ScreenOptions: TrueSheetNavigationOptions;
30
+ EventMap: TrueSheetNavigationEventMap;
31
+ NavigationList: { [RouteName in keyof ParamList]: TrueSheetNavigationProp<ParamList, RouteName, NavigatorID>; };
32
+ Navigator: typeof TrueSheetNavigator;
33
+ }, const Config extends StaticConfig<TypeBag> = StaticConfig<TypeBag>>(config?: Config) => TypedNavigator<TypeBag, Config>;
34
+ export {};
35
+ //# sourceMappingURL=createTrueSheetNavigator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTrueSheetNavigator.d.ts","sourceRoot":"","sources":["../../../../src/navigation/createTrueSheetNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAEV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB,iBAAS,kBAAkB,CAAC,EAC1B,EAAE,EACF,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,aAAa,GACd,EAAE,uBAAuB,2CAoBzB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,wBAAwB,GACnC,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EACxD,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC3C,aAAa,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,EAAE,2BAA2B,CAAC;IACtC,cAAc,EAAE,GACb,SAAS,IAAI,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,GAC3F,CAAC;IACF,SAAS,EAAE,OAAO,kBAAkB,CAAC;CACtC,EACD,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAElE,SAAS,MAAM,KACd,cAAc,CAAC,OAAO,EAAE,MAAM,CAEhC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { createTrueSheetNavigator } from './createTrueSheetNavigator';
2
+ export { TrueSheetActions, type TrueSheetActionType } from './TrueSheetRouter';
3
+ export { useTrueSheetNavigation } from './useTrueSheetNavigation';
4
+ export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
5
+ export type { TrueSheetNavigationEventMap, TrueSheetNavigationHelpers, TrueSheetNavigationOptions, TrueSheetNavigationProp, TrueSheetNavigationState, TrueSheetScreenProps, } from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,YAAY,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAE7F,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,125 @@
1
+ import type { DefaultNavigatorOptions, Descriptor, NavigationHelpers, NavigationProp, NavigationState, ParamListBase, RouteProp, StackActionHelpers } from '@react-navigation/native';
2
+ import type { DetentInfoEventPayload, PositionChangeEventPayload, TrueSheetProps } from '../TrueSheet.types';
3
+ export type TrueSheetNavigationEventMap = {
4
+ /**
5
+ * Event fired when the sheet is about to be presented.
6
+ */
7
+ sheetWillPresent: {
8
+ data: DetentInfoEventPayload;
9
+ };
10
+ /**
11
+ * Event fired when the sheet has been presented.
12
+ */
13
+ sheetDidPresent: {
14
+ data: DetentInfoEventPayload;
15
+ };
16
+ /**
17
+ * Event fired when the sheet is about to be dismissed.
18
+ */
19
+ sheetWillDismiss: {
20
+ data: undefined;
21
+ };
22
+ /**
23
+ * Event fired when the sheet has been dismissed.
24
+ */
25
+ sheetDidDismiss: {
26
+ data: undefined;
27
+ };
28
+ /**
29
+ * Event fired when the sheet's detent changes.
30
+ */
31
+ sheetDetentChange: {
32
+ data: DetentInfoEventPayload;
33
+ };
34
+ /**
35
+ * Event fired when the user starts dragging the sheet.
36
+ */
37
+ sheetDragBegin: {
38
+ data: DetentInfoEventPayload;
39
+ };
40
+ /**
41
+ * Event fired while the user is dragging the sheet.
42
+ */
43
+ sheetDragChange: {
44
+ data: DetentInfoEventPayload;
45
+ };
46
+ /**
47
+ * Event fired when the user stops dragging the sheet.
48
+ */
49
+ sheetDragEnd: {
50
+ data: DetentInfoEventPayload;
51
+ };
52
+ /**
53
+ * Event fired when the sheet's position changes.
54
+ */
55
+ sheetPositionChange: {
56
+ data: PositionChangeEventPayload;
57
+ };
58
+ /**
59
+ * Event fired when the sheet is about to regain focus.
60
+ */
61
+ sheetWillFocus: {
62
+ data: undefined;
63
+ };
64
+ /**
65
+ * Event fired when the sheet regains focus.
66
+ */
67
+ sheetDidFocus: {
68
+ data: undefined;
69
+ };
70
+ /**
71
+ * Event fired when the sheet is about to lose focus.
72
+ */
73
+ sheetWillBlur: {
74
+ data: undefined;
75
+ };
76
+ /**
77
+ * Event fired when the sheet loses focus.
78
+ */
79
+ sheetDidBlur: {
80
+ data: undefined;
81
+ };
82
+ };
83
+ export type TrueSheetNavigationState<ParamList extends ParamListBase> = Omit<NavigationState<ParamList>, 'routes'> & {
84
+ type: 'true-sheet';
85
+ routes: (NavigationState<ParamList>['routes'][number] & {
86
+ resizeIndex?: number;
87
+ resizeKey?: number;
88
+ closing?: boolean;
89
+ })[];
90
+ };
91
+ export type TrueSheetActionHelpers<ParamList extends ParamListBase> = StackActionHelpers<ParamList> & {
92
+ /**
93
+ * Resize the sheet to a specific detent index.
94
+ */
95
+ resize(index?: number): void;
96
+ };
97
+ export type TrueSheetNavigationProp<ParamList extends ParamListBase, RouteName extends keyof ParamList = string, NavigatorID extends string | undefined = undefined> = NavigationProp<ParamList, RouteName, NavigatorID, TrueSheetNavigationState<ParamList>, TrueSheetNavigationOptions, TrueSheetNavigationEventMap> & TrueSheetActionHelpers<ParamList>;
98
+ export type TrueSheetScreenProps<ParamList extends ParamListBase, RouteName extends keyof ParamList = string, NavigatorID extends string | undefined = undefined> = {
99
+ navigation: TrueSheetNavigationProp<ParamList, RouteName, NavigatorID>;
100
+ route: RouteProp<ParamList, RouteName>;
101
+ };
102
+ export type TrueSheetNavigationHelpers = NavigationHelpers<ParamListBase, TrueSheetNavigationEventMap>;
103
+ /**
104
+ * Screen options for TrueSheet navigator screens.
105
+ */
106
+ export type TrueSheetNavigationOptions = Pick<TrueSheetProps, 'detents' | 'backgroundColor' | 'cornerRadius' | 'dismissible' | 'draggable' | 'grabber' | 'grabberOptions' | 'dimmed' | 'dimmedDetentIndex' | 'blurTint' | 'blurOptions' | 'maxHeight' | 'edgeToEdgeFullScreen' | 'scrollable' | 'keyboardMode' | 'pageSizing' | 'header' | 'footer'> & {
107
+ /**
108
+ * The detent index to present at.
109
+ * @default 0
110
+ */
111
+ detentIndex?: number;
112
+ };
113
+ export type TrueSheetNavigatorProps = DefaultNavigatorOptions<ParamListBase, string | undefined, TrueSheetNavigationState<ParamListBase>, TrueSheetNavigationOptions, TrueSheetNavigationEventMap, unknown> & {
114
+ /**
115
+ * The name of the route to use as the base screen.
116
+ * This screen will be rendered as a regular screen, while other screens are presented as sheets.
117
+ * Defaults to the first screen defined in the navigator.
118
+ */
119
+ initialRouteName?: string;
120
+ };
121
+ export type TrueSheetDescriptor = Descriptor<TrueSheetNavigationOptions, TrueSheetNavigationProp<ParamListBase>, RouteProp<ParamListBase>>;
122
+ export type TrueSheetDescriptorMap = {
123
+ [key: string]: TrueSheetDescriptor;
124
+ };
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/navigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,aAAa,EACb,SAAS,EACT,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,gBAAgB,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IACnD;;OAEG;IACH,eAAe,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAClD;;OAEG;IACH,gBAAgB,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACtC;;OAEG;IACH,eAAe,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACrC;;OAEG;IACH,iBAAiB,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IACpD;;OAEG;IACH,cAAc,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IACjD;;OAEG;IACH,eAAe,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAClD;;OAEG;IACH,YAAY,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAC/C;;OAEG;IACH,mBAAmB,EAAE;QAAE,IAAI,EAAE,0BAA0B,CAAA;KAAE,CAAC;IAC1D;;OAEG;IACH,cAAc,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACpC;;OAEG;IACH,aAAa,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACnC;;OAEG;IACH,aAAa,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACnC;;OAEG;IACH,YAAY,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,SAAS,SAAS,aAAa,IAAI,IAAI,CAC1E,eAAe,CAAC,SAAS,CAAC,EAC1B,QAAQ,CACT,GAAG;IACF,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG;QACtD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,EAAE,CAAC;CACN,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,SAAS,SAAS,aAAa,IAChE,kBAAkB,CAAC,SAAS,CAAC,GAAG;IAC9B;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEJ,MAAM,MAAM,uBAAuB,CACjC,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,EAC1C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAChD,cAAc,CAChB,SAAS,EACT,SAAS,EACT,WAAW,EACX,wBAAwB,CAAC,SAAS,CAAC,EACnC,0BAA0B,EAC1B,2BAA2B,CAC5B,GACC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAEpC,MAAM,MAAM,oBAAoB,CAC9B,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,EAC1C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAChD;IACF,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACvE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,CACxD,aAAa,EACb,2BAA2B,CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,cAAc,EACZ,SAAS,GACT,iBAAiB,GACjB,cAAc,GACd,aAAa,GACb,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,QAAQ,GACR,mBAAmB,GACnB,UAAU,GACV,aAAa,GACb,WAAW,GACX,sBAAsB,GACtB,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,QAAQ,GACR,QAAQ,CACX,GAAG;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,CAC3D,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,wBAAwB,CAAC,aAAa,CAAC,EACvC,0BAA0B,EAC1B,2BAA2B,EAC3B,OAAO,CACR,GAAG;IACF;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAC1C,0BAA0B,EAC1B,uBAAuB,CAAC,aAAa,CAAC,EACtC,SAAS,CAAC,aAAa,CAAC,CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACpC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type ParamListBase } from '@react-navigation/native';
2
+ import type { TrueSheetNavigationProp } from './types';
3
+ /**
4
+ * Hook to access TrueSheet navigation with the resize helper.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * function MySheet() {
9
+ * const navigation = useTrueSheetNavigation();
10
+ *
11
+ * // Resize to a specific detent
12
+ * const handleExpand = () => {
13
+ * navigation.resize(1); // Resize to second detent
14
+ * };
15
+ *
16
+ * return (
17
+ * <Button title="Expand" onPress={handleExpand} />
18
+ * );
19
+ * }
20
+ * ```
21
+ */
22
+ export declare function useTrueSheetNavigation<T extends ParamListBase = ParamListBase>(): TrueSheetNavigationProp<T>;
23
+ //# sourceMappingURL=useTrueSheetNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTrueSheetNavigation.d.ts","sourceRoot":"","sources":["../../../../src/navigation/useTrueSheetNavigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CACpC,CAAC,SAAS,aAAa,GAAG,aAAa,KACpC,uBAAuB,CAAC,CAAC,CAAC,CAE9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodev09/react-native-true-sheet",
3
- "version": "3.1.0-beta.8",
3
+ "version": "3.1.0",
4
4
  "description": "The true native bottom sheet experience for your React Native Apps.",
5
5
  "source": "./src/index.ts",
6
6
  "main": "./lib/module/index.js",
@@ -16,6 +16,11 @@
16
16
  "types": "./lib/typescript/src/reanimated/index.d.ts",
17
17
  "default": "./lib/module/reanimated/index.js"
18
18
  },
19
+ "./navigation": {
20
+ "source": "./src/navigation/index.ts",
21
+ "types": "./lib/typescript/src/navigation/index.d.ts",
22
+ "default": "./lib/module/navigation/index.js"
23
+ },
19
24
  "./package.json": "./package.json"
20
25
  },
21
26
  "files": [
@@ -81,6 +86,7 @@
81
86
  "@evilmartians/lefthook": "^2.0.4",
82
87
  "@react-native/babel-preset": "^0.82.1",
83
88
  "@react-native/eslint-config": "^0.82.1",
89
+ "@react-navigation/native": "^7.1.6",
84
90
  "@release-it/conventional-changelog": "^10.0.1",
85
91
  "@testing-library/react-native": "^13.3.3",
86
92
  "@types/babel__core": "^7",
@@ -92,6 +98,7 @@
92
98
  "eslint-config-prettier": "^10.1.8",
93
99
  "eslint-plugin-prettier": "^5.5.4",
94
100
  "jest": "^29.7.0",
101
+ "nanoid": "^5.1.5",
95
102
  "prettier": "^3.0.3",
96
103
  "react": "19.1.1",
97
104
  "react-native": "0.82.1",
@@ -107,12 +114,16 @@
107
114
  "@types/react": "19.1.1"
108
115
  },
109
116
  "peerDependencies": {
117
+ "@react-navigation/native": ">=6.0.0",
110
118
  "react": "*",
111
119
  "react-native": "*",
112
120
  "react-native-reanimated": ">=4.0.0",
113
121
  "react-native-worklets": "*"
114
122
  },
115
123
  "peerDependenciesMeta": {
124
+ "@react-navigation/native": {
125
+ "optional": true
126
+ },
116
127
  "react-native-reanimated": {
117
128
  "optional": true
118
129
  },
@@ -0,0 +1,172 @@
1
+ import { nanoid } from 'nanoid/non-secure';
2
+ import {
3
+ type CommonActions,
4
+ type ParamListBase,
5
+ type Router,
6
+ StackRouter,
7
+ type StackActionType,
8
+ StackActions,
9
+ type StackRouterOptions,
10
+ } from '@react-navigation/native';
11
+
12
+ import type { TrueSheetNavigationState } from './types';
13
+
14
+ export type TrueSheetRouterOptions = StackRouterOptions;
15
+
16
+ export type TrueSheetActionType =
17
+ | StackActionType
18
+ | ReturnType<typeof CommonActions.goBack>
19
+ | {
20
+ type: 'RESIZE';
21
+ index: number;
22
+ source?: string;
23
+ target?: string;
24
+ }
25
+ | {
26
+ type: 'DISMISS';
27
+ source?: string;
28
+ target?: string;
29
+ }
30
+ | {
31
+ type: 'REMOVE';
32
+ source?: string;
33
+ target?: string;
34
+ };
35
+
36
+ export const TrueSheetActions = {
37
+ ...StackActions,
38
+ resize(index: number): TrueSheetActionType {
39
+ return { type: 'RESIZE', index };
40
+ },
41
+ dismiss(): TrueSheetActionType {
42
+ return { type: 'DISMISS' };
43
+ },
44
+ remove(): TrueSheetActionType {
45
+ return { type: 'REMOVE' };
46
+ },
47
+ };
48
+
49
+ export function TrueSheetRouter(
50
+ routerOptions: StackRouterOptions
51
+ ): Router<TrueSheetNavigationState<ParamListBase>, TrueSheetActionType> {
52
+ const baseRouter = StackRouter(routerOptions) as unknown as Router<
53
+ TrueSheetNavigationState<ParamListBase>,
54
+ TrueSheetActionType
55
+ >;
56
+
57
+ return {
58
+ ...baseRouter,
59
+ type: 'true-sheet',
60
+
61
+ getInitialState(options) {
62
+ const state = baseRouter.getInitialState(options);
63
+
64
+ return {
65
+ ...state,
66
+ stale: false,
67
+ type: 'true-sheet',
68
+ key: `true-sheet-${nanoid()}`,
69
+ };
70
+ },
71
+
72
+ getStateForAction(state, action, options) {
73
+ switch (action.type) {
74
+ case 'RESIZE': {
75
+ const routeIndex =
76
+ action.target === state.key && action.source
77
+ ? state.routes.findIndex((r) => r.key === action.source)
78
+ : state.index;
79
+
80
+ return {
81
+ ...state,
82
+ routes: state.routes.map((route, i) =>
83
+ i === routeIndex
84
+ ? {
85
+ ...route,
86
+ resizeIndex: action.index,
87
+ resizeKey: (route.resizeKey ?? 0) + 1,
88
+ }
89
+ : route
90
+ ),
91
+ };
92
+ }
93
+
94
+ case 'GO_BACK':
95
+ case 'POP':
96
+ case 'DISMISS': {
97
+ // Only base screen remains - let parent navigator handle it
98
+ if (state.routes.length <= 1) {
99
+ return null;
100
+ }
101
+
102
+ // Find the route to dismiss
103
+ const routeIndex =
104
+ action.target === state.key && 'source' in action && action.source
105
+ ? state.routes.findIndex((r) => r.key === action.source)
106
+ : state.index;
107
+
108
+ // Base screen - let parent navigator handle it
109
+ if (routeIndex === 0) {
110
+ return null;
111
+ }
112
+
113
+ // Mark the route as closing instead of removing it
114
+ return {
115
+ ...state,
116
+ routes: state.routes.map((route, i) =>
117
+ i === routeIndex
118
+ ? {
119
+ ...route,
120
+ closing: true,
121
+ }
122
+ : route
123
+ ),
124
+ };
125
+ }
126
+
127
+ case 'REMOVE': {
128
+ // Actually remove the closing route
129
+ const routeKey = action.source;
130
+ const routeIndex = routeKey
131
+ ? state.routes.findIndex((r) => r.key === routeKey)
132
+ : state.routes.findIndex((r) => r.closing);
133
+
134
+ if (routeIndex === -1) {
135
+ return state;
136
+ }
137
+
138
+ const routes = state.routes.filter((_, i) => i !== routeIndex);
139
+
140
+ return {
141
+ ...state,
142
+ index: Math.min(state.index, routes.length - 1),
143
+ routes,
144
+ };
145
+ }
146
+
147
+ default:
148
+ return baseRouter.getStateForAction(state, action, options);
149
+ }
150
+ },
151
+
152
+ getRehydratedState(partialState, { routeNames, routeParamList, routeGetIdList }) {
153
+ if (partialState.stale === false) {
154
+ return partialState;
155
+ }
156
+
157
+ const state = baseRouter.getRehydratedState(partialState, {
158
+ routeNames,
159
+ routeParamList,
160
+ routeGetIdList,
161
+ });
162
+
163
+ return {
164
+ ...state,
165
+ type: 'true-sheet',
166
+ key: `true-sheet-${nanoid()}`,
167
+ };
168
+ },
169
+
170
+ actionCreators: TrueSheetActions,
171
+ };
172
+ }