@lodev09/react-native-true-sheet 3.3.1 → 3.3.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.
package/README.md CHANGED
@@ -8,16 +8,18 @@
8
8
 
9
9
  The true native bottom sheet experience for your React Native Apps. 💩
10
10
 
11
- <img alt="React Native True Sheet - IOS" src="docs/static/img/preview-ios.gif" width="300" height="600" /><img alt="React Native True Sheet - Android" src="docs/static/img/preview-android.gif" width="300" height="600" />
11
+ <img alt="React Native True Sheet - IOS" src="docs/static/img/preview-ios.gif" height="500" /><img alt="React Native True Sheet - Android" src="docs/static/img/preview-android.gif" height="500" /><img alt="React Native True Sheet - Web" src="docs/static/img/preview-web.gif" height="500" />
12
12
 
13
13
  ## Features
14
14
 
15
15
  * ⚡ **Powered by Fabric** - Built on React Native's new architecture for maximum performance
16
- * 🚀 **Native** - Implemented in the native realm
17
- * 🎯 **Type-safe** - Full TypeScript support with Codegen-generated native interfaces
16
+ * 🚀 **Fully Native** - Implemented in the native realm, zero JS hacks
18
17
  * ♿ **Accessible** - Native accessibility and screen reader support out of the box
19
- * 🔄 **Flexible API** - Use [imperative methods](https://sheet.lodev09.com/reference/methods#ref-methods) or [lifecycle events](https://sheet.lodev09.com/reference/props#events)
20
- * 🪟 **Liquid Glass** - iOS 26+ Liquid Glass support out of the box. Featured in [Expo Blog](https://expo.dev/blog/how-to-create-apple-maps-style-liquid-glass-sheets)
18
+ * 🔄 **Flexible API** - Use [imperative methods](https://sheet.lodev09.com/reference/methods#ref-methods) or [lifecycle events](https://sheet.lodev09.com/reference/events)
19
+ * 🪟 **Liquid Glass** - [iOS 26+ Liquid Glass](https://sheet.lodev09.com/guides/liquid-glass) support out of the box, featured in [Expo Blog](https://expo.dev/blog/how-to-create-apple-maps-style-liquid-glass-sheets)
20
+ * 🐎 **Reanimated** - First-class support for [react-native-reanimated](https://sheet.lodev09.com/guides/reanimated)
21
+ * 🧭 **React Navigation** - Built-in [sheet navigator](https://sheet.lodev09.com/guides/navigation) for seamless navigation integration
22
+ * 🌐 **Web Support** - Full [web support](https://sheet.lodev09.com/guides/web) out of the box
21
23
 
22
24
  ## Installation
23
25
 
@@ -46,11 +48,12 @@ cd ios && pod install
46
48
  ## Documentation
47
49
 
48
50
  - [Example](example)
49
- - [Guides](https://sheet.lodev09.com/category/guides)
50
- - [Reference](https://sheet.lodev09.com/category/reference)
51
- - [Migrating to v3](https://sheet.lodev09.com/migration)
51
+ - [Configuration](https://sheet.lodev09.com/reference/configuration)
52
+ - [Lifecycle Events](https://sheet.lodev09.com/reference/events)
53
+ - [React Navigation](https://sheet.lodev09.com/guides/navigation)
52
54
  - [Troubleshooting](https://sheet.lodev09.com/troubleshooting)
53
55
  - [Testing with Jest](https://sheet.lodev09.com/guides/jest)
56
+ - [Migrating to v3](https://sheet.lodev09.com/migration)
54
57
 
55
58
  ## Usage
56
59
 
@@ -328,6 +328,18 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
328
328
 
329
329
  @UiThread
330
330
  fun dismiss(animated: Boolean = true, promiseCallback: () -> Unit) {
331
+ // iOS-like behavior: calling dismiss on a presenting controller dismisses
332
+ // its presented controller (and everything above it), but NOT itself.
333
+ // See: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss
334
+ val sheetsAbove = TrueSheetDialogObserver.getSheetsAbove(this)
335
+ if (sheetsAbove.isNotEmpty()) {
336
+ for (sheet in sheetsAbove) {
337
+ sheet.viewController.dismiss(animated)
338
+ }
339
+ promiseCallback()
340
+ return
341
+ }
342
+
331
343
  viewController.dismissPromise = promiseCallback
332
344
  viewController.dismiss(animated)
333
345
  }
@@ -514,9 +514,10 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
514
514
 
515
515
  if (!animated) {
516
516
  dialog?.window?.setWindowAnimations(0)
517
+ post { dialog?.dismiss() }
518
+ } else {
519
+ dialog?.dismiss()
517
520
  }
518
-
519
- dialog?.dismiss()
520
521
  }
521
522
 
522
523
  // ====================================================================
@@ -54,6 +54,19 @@ object TrueSheetDialogObserver {
54
54
  }
55
55
  }
56
56
 
57
+ /**
58
+ * Returns all sheets presented on top of the given sheet (children/descendants).
59
+ * Returns them in reverse order (top-most first) for proper dismissal.
60
+ */
61
+ @JvmStatic
62
+ fun getSheetsAbove(sheetView: TrueSheetView): List<TrueSheetView> {
63
+ synchronized(presentedSheetStack) {
64
+ val index = presentedSheetStack.indexOf(sheetView)
65
+ if (index < 0 || index >= presentedSheetStack.size - 1) return emptyList()
66
+ return presentedSheetStack.subList(index + 1, presentedSheetStack.size).reversed()
67
+ }
68
+ }
69
+
57
70
  @JvmStatic
58
71
  fun removeSheet(sheetView: TrueSheetView) {
59
72
  synchronized(presentedSheetStack) {
@@ -55,18 +55,6 @@ using namespace facebook::react;
55
55
 
56
56
  #pragma mark - Layout
57
57
 
58
- - (void)layoutSubviews {
59
- [super layoutSubviews];
60
-
61
- // Override Yoga layout to fill parent (controller's view)
62
- if (self.superview) {
63
- CGRect parentBounds = self.superview.bounds;
64
- if (!CGRectEqualToRect(self.frame, parentBounds)) {
65
- self.frame = parentBounds;
66
- }
67
- }
68
- }
69
-
70
58
  - (CGFloat)contentHeight {
71
59
  return _contentView ? _contentView.frame.size.height : 0;
72
60
  }
@@ -15,10 +15,13 @@
15
15
  + (nullable UIWindow *)keyWindow {
16
16
  NSSet<UIScene *> *connectedScenes = [UIApplication sharedApplication].connectedScenes;
17
17
 
18
+ UIWindow *fallbackWindow = nil;
19
+
18
20
  for (UIScene *scene in connectedScenes) {
19
21
  if ([scene isKindOfClass:[UIWindowScene class]]) {
20
22
  UIWindowScene *windowScene = (UIWindowScene *)scene;
21
23
 
24
+ // Check for foreground active first (preferred)
22
25
  if (windowScene.activationState == UISceneActivationStateForegroundActive) {
23
26
  for (UIWindow *window in windowScene.windows) {
24
27
  if (window.isKeyWindow) {
@@ -31,10 +34,23 @@
31
34
  return windowScene.windows.firstObject;
32
35
  }
33
36
  }
37
+
38
+ // Store a fallback window for transitional states (e.g., deep link handling from background or cold start)
39
+ if (fallbackWindow == nil && windowScene.windows.count > 0) {
40
+ for (UIWindow *window in windowScene.windows) {
41
+ if (window.isKeyWindow) {
42
+ fallbackWindow = window;
43
+ break;
44
+ }
45
+ }
46
+ if (fallbackWindow == nil) {
47
+ fallbackWindow = windowScene.windows.firstObject;
48
+ }
49
+ }
34
50
  }
35
51
  }
36
52
 
37
- return nil;
53
+ return fallbackWindow;
38
54
  }
39
55
 
40
56
  @end
@@ -142,6 +142,9 @@ export const TrueSheet = /*#__PURE__*/forwardRef((props, ref) => {
142
142
  }
143
143
  }, [detents, animatedPosition]);
144
144
  const handleDismiss = useCallback(() => {
145
+ // Remove from stack when dismissed
146
+ bottomSheetContext?.removeFromStack(sheetName);
147
+
145
148
  // Resolve dismiss promise
146
149
  if (dismissResolver.current) {
147
150
  dismissResolver.current();
@@ -155,7 +158,7 @@ export const TrueSheet = /*#__PURE__*/forwardRef((props, ref) => {
155
158
  isMinimized.current = false;
156
159
  isDismissing.current = false;
157
160
  isDragging.current = false;
158
- }, []);
161
+ }, [sheetName]);
159
162
  const handleAnimate = useCallback((_fromIndex, toIndex) => {
160
163
  // Detect drag begin (when not presenting or dismissing)
161
164
  if (!isPresenting.current && !isDismissing.current && !isDragging.current && toIndex >= 0) {
@@ -251,22 +254,38 @@ export const TrueSheet = /*#__PURE__*/forwardRef((props, ref) => {
251
254
 
252
255
  // For scrollable, we render the child directly
253
256
  const ContainerComponent = scrollable ? Fragment : BottomSheetView;
257
+ const dismissInternal = useCallback(() => {
258
+ return new Promise(resolve => {
259
+ dismissResolver.current = resolve;
260
+ isDismissing.current = true;
261
+ modalRef.current?.dismiss();
262
+ });
263
+ }, []);
254
264
  const sheetMethodsRef = useRef({
255
265
  present: (index = 0) => {
256
266
  return new Promise(resolve => {
257
267
  presentResolver.current = resolve;
258
268
  setSnapIndex(index);
259
269
  isPresenting.current = true;
270
+ bottomSheetContext?.pushToStack(sheetName);
260
271
  modalRef.current?.present();
261
272
  });
262
273
  },
263
274
  dismiss: () => {
264
275
  return new Promise(resolve => {
265
- dismissResolver.current = resolve;
266
- isDismissing.current = true;
267
- modalRef.current?.dismiss();
276
+ // iOS-like behavior: dismiss sheets above, but not itself.
277
+ // See: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss
278
+ const sheetsAbove = bottomSheetContext?.getSheetsAbove(sheetName) ?? [];
279
+ const immediateChild = sheetsAbove[sheetsAbove.length - 1];
280
+ if (immediateChild) {
281
+ // Dismiss the immediate child - gorhom will dismiss all sheets above it
282
+ bottomSheetContext?.dismissDirect(immediateChild).then(resolve);
283
+ return;
284
+ }
285
+ dismissInternal().then(resolve);
268
286
  });
269
287
  },
288
+ dismissDirect: () => dismissInternal(),
270
289
  resize: async index => {
271
290
  modalRef.current?.snapToIndex(index);
272
291
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createElement","Fragment","forwardRef","isValidElement","useCallback","useContext","useEffect","useId","useImperativeHandle","useMemo","useRef","useState","View","StyleSheet","useWindowDimensions","BottomSheetBackdrop","BottomSheetFooter","BottomSheetHandle","BottomSheetModal","BottomSheetView","useDerivedValue","useSharedValue","BottomSheetContext","jsx","_jsx","jsxs","_jsxs","DEFAULT_CORNER_RADIUS","DEFAULT_GRABBER_COLOR","DEFAULT_GRABBER_WIDTH","DEFAULT_GRABBER_HEIGHT","renderSlot","slot","TrueSheet","props","ref","name","detents","dismissible","draggable","dimmed","dimmedDetentIndex","children","scrollable","initialDetentIndex","backgroundColor","cornerRadius","grabber","grabberOptions","maxHeight","header","footer","onMount","onWillPresent","onDidPresent","onWillDismiss","onDidDismiss","onDetentChange","onPositionChange","onDragBegin","onDragChange","onDragEnd","onWillFocus","onDidFocus","onWillBlur","onDidBlur","stackBehavior","style","height","windowHeight","defaultName","sheetName","bottomSheetContext","modalRef","initialDetentIndexRef","currentIndexRef","isPresenting","isDismissing","isMinimized","isDragging","presentResolver","dismissResolver","animatedPosition","animatedIndex","snapIndex","setSnapIndex","isMounted","setIsMounted","nativeEvent","position","value","index","detent","realtime","hasAutoDetent","includes","containerHeight","snapPoints","filter","map","Math","min","max","handleChange","_position","_type","previousIndex","current","handleDismiss","handleAnimate","_fromIndex","toIndex","backdropComponent","backdropProps","opacity","appearsOnIndex","disappearsOnIndex","pressBehavior","handleComponent","handleProps","borderRadius","styles","handle","paddingTop","topMargin","indicatorStyle","width","color","footerComponent","footerProps","undefined","ContainerComponent","sheetMethodsRef","present","Promise","resolve","dismiss","resize","snapToIndex","register","unregister","root","borderTopLeftRadius","borderTopRightRadius","animateOnMount","enablePanDownToClose","enableContentPanningGesture","enableHandlePanningGesture","onChange","onAnimate","enableDynamicSizing","maxDynamicContentSize","length","onDismiss","backgroundComponent","create","overflow","top","left","right","zIndex","paddingVertical","pointerEvents"],"sourceRoot":"../../src","sources":["TrueSheet.web.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createElement","Fragment","forwardRef","isValidElement","useCallback","useContext","useEffect","useId","useImperativeHandle","useMemo","useRef","useState","View","StyleSheet","useWindowDimensions","BottomSheetBackdrop","BottomSheetFooter","BottomSheetHandle","BottomSheetModal","BottomSheetView","useDerivedValue","useSharedValue","BottomSheetContext","jsx","_jsx","jsxs","_jsxs","DEFAULT_CORNER_RADIUS","DEFAULT_GRABBER_COLOR","DEFAULT_GRABBER_WIDTH","DEFAULT_GRABBER_HEIGHT","renderSlot","slot","TrueSheet","props","ref","name","detents","dismissible","draggable","dimmed","dimmedDetentIndex","children","scrollable","initialDetentIndex","backgroundColor","cornerRadius","grabber","grabberOptions","maxHeight","header","footer","onMount","onWillPresent","onDidPresent","onWillDismiss","onDidDismiss","onDetentChange","onPositionChange","onDragBegin","onDragChange","onDragEnd","onWillFocus","onDidFocus","onWillBlur","onDidBlur","stackBehavior","style","height","windowHeight","defaultName","sheetName","bottomSheetContext","modalRef","initialDetentIndexRef","currentIndexRef","isPresenting","isDismissing","isMinimized","isDragging","presentResolver","dismissResolver","animatedPosition","animatedIndex","snapIndex","setSnapIndex","isMounted","setIsMounted","nativeEvent","position","value","index","detent","realtime","hasAutoDetent","includes","containerHeight","snapPoints","filter","map","Math","min","max","handleChange","_position","_type","previousIndex","current","handleDismiss","removeFromStack","handleAnimate","_fromIndex","toIndex","backdropComponent","backdropProps","opacity","appearsOnIndex","disappearsOnIndex","pressBehavior","handleComponent","handleProps","borderRadius","styles","handle","paddingTop","topMargin","indicatorStyle","width","color","footerComponent","footerProps","undefined","ContainerComponent","dismissInternal","Promise","resolve","dismiss","sheetMethodsRef","present","pushToStack","sheetsAbove","getSheetsAbove","immediateChild","length","dismissDirect","then","resize","snapToIndex","register","unregister","root","borderTopLeftRadius","borderTopRightRadius","animateOnMount","enablePanDownToClose","enableContentPanningGesture","enableHandlePanningGesture","onChange","onAnimate","enableDynamicSizing","maxDynamicContentSize","onDismiss","backgroundComponent","create","overflow","top","left","right","zIndex","paddingVertical","pointerEvents"],"sourceRoot":"../../src","sources":["TrueSheet.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -12,12 +12,36 @@ export function TrueSheetProvider({
12
12
  children
13
13
  }) {
14
14
  const sheetsRef = useRef(new Map());
15
+ const presentedStackRef = useRef([]);
15
16
  const register = (name, methods) => {
16
17
  sheetsRef.current.set(name, methods);
17
18
  };
18
19
  const unregister = name => {
19
20
  sheetsRef.current.delete(name);
20
21
  };
22
+ const pushToStack = name => {
23
+ const index = presentedStackRef.current.indexOf(name);
24
+ if (index >= 0) {
25
+ presentedStackRef.current.splice(index, 1);
26
+ }
27
+ presentedStackRef.current.push(name);
28
+ };
29
+ const removeFromStack = name => {
30
+ const index = presentedStackRef.current.indexOf(name);
31
+ if (index >= 0) {
32
+ presentedStackRef.current.splice(index, 1);
33
+ }
34
+ };
35
+
36
+ /**
37
+ * Returns all sheets presented on top of the given sheet.
38
+ * Returns them in reverse order (top-most first) for proper dismissal.
39
+ */
40
+ const getSheetsAbove = name => {
41
+ const index = presentedStackRef.current.indexOf(name);
42
+ if (index < 0 || index >= presentedStackRef.current.length - 1) return [];
43
+ return presentedStackRef.current.slice(index + 1).reverse();
44
+ };
21
45
  const present = async (name, index = 0) => {
22
46
  const sheet = sheetsRef.current.get(name);
23
47
  if (!sheet?.current) {
@@ -34,6 +58,19 @@ export function TrueSheetProvider({
34
58
  }
35
59
  return sheet.current.dismiss();
36
60
  };
61
+
62
+ /**
63
+ * Dismisses a sheet directly without checking for sheets above.
64
+ * Used internally when batch-dismissing stacked sheets.
65
+ */
66
+ const dismissDirect = async name => {
67
+ const sheet = sheetsRef.current.get(name);
68
+ if (!sheet?.current) {
69
+ console.warn(`TrueSheet: Could not find sheet with name "${name}"`);
70
+ return;
71
+ }
72
+ return sheet.current.dismissDirect?.();
73
+ };
37
74
  const resize = async (name, index) => {
38
75
  const sheet = sheetsRef.current.get(name);
39
76
  if (!sheet?.current) {
@@ -46,6 +83,10 @@ export function TrueSheetProvider({
46
83
  value: {
47
84
  register,
48
85
  unregister,
86
+ pushToStack,
87
+ removeFromStack,
88
+ getSheetsAbove,
89
+ dismissDirect,
49
90
  present,
50
91
  dismiss,
51
92
  resize
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","useRef","BottomSheetModalProvider","jsx","_jsx","BottomSheetContext","TrueSheetProvider","children","sheetsRef","Map","register","name","methods","current","set","unregister","delete","present","index","sheet","get","console","warn","dismiss","resize","Provider","value","useTrueSheet","context","Error"],"sourceRoot":"../../src","sources":["TrueSheetProvider.web.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,EAAEC,MAAM,QAAwC,OAAO;AACzF,SAASC,wBAAwB,QAAQ,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQhE,OAAO,MAAMC,kBAAkB,gBAAGN,aAAa,CAAiC,IAAI,CAAC;AAMrF;AACA;AACA;AACA;AACA,OAAO,SAASO,iBAAiBA,CAAC;EAAEC;AAAiC,CAAC,EAAE;EACtE,MAAMC,SAAS,GAAGP,MAAM,CAAuC,IAAIQ,GAAG,CAAC,CAAC,CAAC;EAEzE,MAAMC,QAAQ,GAAGA,CAACC,IAAY,EAAEC,OAAgC,KAAK;IACnEJ,SAAS,CAACK,OAAO,CAACC,GAAG,CAACH,IAAI,EAAEC,OAAO,CAAC;EACtC,CAAC;EAED,MAAMG,UAAU,GAAIJ,IAAY,IAAK;IACnCH,SAAS,CAACK,OAAO,CAACG,MAAM,CAACL,IAAI,CAAC;EAChC,CAAC;EAED,MAAMM,OAAO,GAAG,MAAAA,CAAON,IAAY,EAAEO,KAAa,GAAG,CAAC,KAAK;IACzD,MAAMC,KAAK,GAAGX,SAAS,CAACK,OAAO,CAACO,GAAG,CAACT,IAAI,CAAC;IACzC,IAAI,CAACQ,KAAK,EAAEN,OAAO,EAAE;MACnBQ,OAAO,CAACC,IAAI,CAAC,8CAA8CX,IAAI,GAAG,CAAC;MACnE;IACF;IACA,OAAOQ,KAAK,CAACN,OAAO,CAACI,OAAO,CAACC,KAAK,CAAC;EACrC,CAAC;EAED,MAAMK,OAAO,GAAG,MAAOZ,IAAY,IAAK;IACtC,MAAMQ,KAAK,GAAGX,SAAS,CAACK,OAAO,CAACO,GAAG,CAACT,IAAI,CAAC;IACzC,IAAI,CAACQ,KAAK,EAAEN,OAAO,EAAE;MACnBQ,OAAO,CAACC,IAAI,CAAC,8CAA8CX,IAAI,GAAG,CAAC;MACnE;IACF;IACA,OAAOQ,KAAK,CAACN,OAAO,CAACU,OAAO,CAAC,CAAC;EAChC,CAAC;EAED,MAAMC,MAAM,GAAG,MAAAA,CAAOb,IAAY,EAAEO,KAAa,KAAK;IACpD,MAAMC,KAAK,GAAGX,SAAS,CAACK,OAAO,CAACO,GAAG,CAACT,IAAI,CAAC;IACzC,IAAI,CAACQ,KAAK,EAAEN,OAAO,EAAE;MACnBQ,OAAO,CAACC,IAAI,CAAC,8CAA8CX,IAAI,GAAG,CAAC;MACnE;IACF;IACA,OAAOQ,KAAK,CAACN,OAAO,CAACW,MAAM,CAACN,KAAK,CAAC;EACpC,CAAC;EAED,oBACEd,IAAA,CAACC,kBAAkB,CAACoB,QAAQ;IAACC,KAAK,EAAE;MAAEhB,QAAQ;MAAEK,UAAU;MAAEE,OAAO;MAAEM,OAAO;MAAEC;IAAO,CAAE;IAAAjB,QAAA,eACrFH,IAAA,CAACF,wBAAwB;MAAAK,QAAA,EAAEA;IAAQ,CAA2B;EAAC,CACpC,CAAC;AAElC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASoB,YAAYA,CAAA,EAA4B;EACtD,MAAMC,OAAO,GAAG5B,UAAU,CAACK,kBAAkB,CAAC;EAE9C,IAAI,CAACuB,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,sDAAsD,CAAC;EACzE;EAEA,OAAO;IACLZ,OAAO,EAAEW,OAAO,CAACX,OAAO;IACxBM,OAAO,EAAEK,OAAO,CAACL,OAAO;IACxBC,MAAM,EAAEI,OAAO,CAACJ;EAClB,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","useRef","BottomSheetModalProvider","jsx","_jsx","BottomSheetContext","TrueSheetProvider","children","sheetsRef","Map","presentedStackRef","register","name","methods","current","set","unregister","delete","pushToStack","index","indexOf","splice","push","removeFromStack","getSheetsAbove","length","slice","reverse","present","sheet","get","console","warn","dismiss","dismissDirect","resize","Provider","value","useTrueSheet","context","Error"],"sourceRoot":"../../src","sources":["TrueSheetProvider.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -15,6 +15,25 @@ export const TrueSheetActions = {
15
15
  type: 'REMOVE'
16
16
  })
17
17
  };
18
+ const ensureBaseRoute = (state, baseRouteName, routeParamList) => {
19
+ if (!baseRouteName) {
20
+ return state;
21
+ }
22
+ const hasBaseRoute = state.routes.some(r => r.name === baseRouteName);
23
+ if (!hasBaseRoute) {
24
+ const baseRoute = {
25
+ key: `${baseRouteName}-${nanoid()}`,
26
+ name: baseRouteName,
27
+ params: routeParamList?.[baseRouteName]
28
+ };
29
+ return {
30
+ ...state,
31
+ index: state.routes.length,
32
+ routes: [baseRoute, ...state.routes]
33
+ };
34
+ }
35
+ return state;
36
+ };
18
37
  export const TrueSheetRouter = routerOptions => {
19
38
  const baseRouter = StackRouter(routerOptions);
20
39
  return {
@@ -22,8 +41,10 @@ export const TrueSheetRouter = routerOptions => {
22
41
  type: 'true-sheet',
23
42
  getInitialState(options) {
24
43
  const state = baseRouter.getInitialState(options);
44
+ const baseRouteName = routerOptions.initialRouteName ?? options.routeNames[0];
45
+ const stateWithBaseRoute = ensureBaseRoute(state, baseRouteName, options.routeParamList);
25
46
  return {
26
- ...state,
47
+ ...stateWithBaseRoute,
27
48
  stale: false,
28
49
  type: 'true-sheet',
29
50
  key: `true-sheet-${nanoid()}`
@@ -101,8 +122,10 @@ export const TrueSheetRouter = routerOptions => {
101
122
  routeParamList,
102
123
  routeGetIdList
103
124
  });
125
+ const baseRouteName = routerOptions.initialRouteName ?? routeNames[0];
126
+ const stateWithBaseRoute = ensureBaseRoute(state, baseRouteName, routeParamList);
104
127
  return {
105
- ...state,
128
+ ...stateWithBaseRoute,
106
129
  type: 'true-sheet',
107
130
  key: `true-sheet-${nanoid()}`
108
131
  };
@@ -1 +1 @@
1
- {"version":3,"names":["nanoid","StackRouter","StackActions","TrueSheetActions","resize","index","type","dismiss","remove","TrueSheetRouter","routerOptions","baseRouter","getInitialState","options","state","stale","key","getStateForAction","action","routeIndex","target","source","routes","findIndex","r","map","route","i","resizeIndex","resizeKey","length","closing","routeKey","filter","_","Math","min","getRehydratedState","partialState","routeNames","routeParamList","routeGetIdList","actionCreators"],"sourceRoot":"../../../src","sources":["navigation/TrueSheetRouter.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["nanoid","StackRouter","StackActions","TrueSheetActions","resize","index","type","dismiss","remove","ensureBaseRoute","state","baseRouteName","routeParamList","hasBaseRoute","routes","some","r","name","baseRoute","key","params","length","TrueSheetRouter","routerOptions","baseRouter","getInitialState","options","initialRouteName","routeNames","stateWithBaseRoute","stale","getStateForAction","action","routeIndex","target","source","findIndex","map","route","i","resizeIndex","resizeKey","closing","routeKey","filter","_","Math","min","getRehydratedState","partialState","routeGetIdList","actionCreators"],"sourceRoot":"../../../src","sources":["navigation/TrueSheetRouter.ts"],"mappings":"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","ignoreList":[]}
@@ -47,7 +47,7 @@ export interface TrueSheetRef {
47
47
  */
48
48
  present: (index?: number, animated?: boolean) => Promise<void>;
49
49
  /**
50
- * Dismiss the sheet.
50
+ * Dismiss the sheet. If other sheets are presented on top, dismisses them instead.
51
51
  * @param animated - Whether to animate the dismissal (default: true)
52
52
  */
53
53
  dismiss: (animated?: boolean) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"TrueSheet.web.d.ts","sourceRoot":"","sources":["../../../src/TrueSheet.web.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EAeb,MAAM,mBAAmB,CAAC;AAc3B,eAAO,MAAM,SAAS,yGA0VpB,CAAC"}
1
+ {"version":3,"file":"TrueSheet.web.d.ts","sourceRoot":"","sources":["../../../src/TrueSheet.web.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EAeb,MAAM,mBAAmB,CAAC;AAc3B,eAAO,MAAM,SAAS,yGA+WpB,CAAC"}
@@ -3,6 +3,10 @@ import type { TrueSheetContextMethods, TrueSheetRef } from './TrueSheet.types';
3
3
  interface BottomSheetContextValue extends TrueSheetContextMethods {
4
4
  register: (name: string, methods: RefObject<TrueSheetRef>) => void;
5
5
  unregister: (name: string) => void;
6
+ pushToStack: (name: string) => void;
7
+ removeFromStack: (name: string) => void;
8
+ getSheetsAbove: (name: string) => string[];
9
+ dismissDirect: (name: string) => Promise<void>;
6
10
  }
7
11
  export declare const BottomSheetContext: import("react").Context<BottomSheetContextValue | null>;
8
12
  export interface TrueSheetProviderProps {
@@ -1 +1 @@
1
- {"version":3,"file":"TrueSheetProvider.web.d.ts","sourceRoot":"","sources":["../../../src/TrueSheetProvider.web.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1F,OAAO,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE/E,UAAU,uBAAwB,SAAQ,uBAAuB;IAC/D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACnE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,eAAO,MAAM,kBAAkB,yDAAsD,CAAC;AAEtF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA2CrE;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,uBAAuB,CAYtD"}
1
+ {"version":3,"file":"TrueSheetProvider.web.d.ts","sourceRoot":"","sources":["../../../src/TrueSheetProvider.web.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1F,OAAO,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE/E,UAAU,uBAAwB,SAAQ,uBAAuB;IAC/D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACnE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC3C,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,kBAAkB,yDAAsD,CAAC;AAEtF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA8FrE;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,uBAAuB,CAYtD"}
@@ -1 +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;oBAEX,MAAM,KAAG,mBAAmB;mBAC/B,mBAAmB;kBACpB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;aAsGoB,CAAC;;;;;;;;;CArGrD,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,eAAe,kBAAkB,KAChC,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAyHrE,CAAC"}
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;oBAEX,MAAM,KAAG,mBAAmB;mBAC/B,mBAAmB;kBACpB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;aA+FvB,CAAJ;;;;;;;;;CA9FL,CAAC;AA8BF,eAAO,MAAM,eAAe,GAC1B,eAAe,kBAAkB,KAChC,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CA8HrE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodev09/react-native-true-sheet",
3
- "version": "3.3.1",
3
+ "version": "3.3.3",
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",
@@ -51,7 +51,7 @@ export interface TrueSheetRef {
51
51
  */
52
52
  present: (index?: number, animated?: boolean) => Promise<void>;
53
53
  /**
54
- * Dismiss the sheet.
54
+ * Dismiss the sheet. If other sheets are presented on top, dismisses them instead.
55
55
  * @param animated - Whether to animate the dismissal (default: true)
56
56
  */
57
57
  dismiss: (animated?: boolean) => Promise<void>;
@@ -200,6 +200,9 @@ export const TrueSheet = forwardRef<TrueSheetRef, TrueSheetProps>((props, ref) =
200
200
  );
201
201
 
202
202
  const handleDismiss = useCallback(() => {
203
+ // Remove from stack when dismissed
204
+ bottomSheetContext?.removeFromStack(sheetName);
205
+
203
206
  // Resolve dismiss promise
204
207
  if (dismissResolver.current) {
205
208
  dismissResolver.current();
@@ -212,7 +215,7 @@ export const TrueSheet = forwardRef<TrueSheetRef, TrueSheetProps>((props, ref) =
212
215
  isMinimized.current = false;
213
216
  isDismissing.current = false;
214
217
  isDragging.current = false;
215
- }, []);
218
+ }, [sheetName]);
216
219
 
217
220
  const handleAnimate = useCallback(
218
221
  (_fromIndex: number, toIndex: number) => {
@@ -326,22 +329,40 @@ export const TrueSheet = forwardRef<TrueSheetRef, TrueSheetProps>((props, ref) =
326
329
  // For scrollable, we render the child directly
327
330
  const ContainerComponent = scrollable ? Fragment : BottomSheetView;
328
331
 
329
- const sheetMethodsRef = useRef<TrueSheetRef>({
332
+ const dismissInternal = useCallback(() => {
333
+ return new Promise<void>((resolve) => {
334
+ dismissResolver.current = resolve;
335
+ isDismissing.current = true;
336
+ modalRef.current?.dismiss();
337
+ });
338
+ }, []);
339
+
340
+ const sheetMethodsRef = useRef<TrueSheetRef & { dismissDirect?: () => Promise<void> }>({
330
341
  present: (index = 0) => {
331
342
  return new Promise<void>((resolve) => {
332
343
  presentResolver.current = resolve;
333
344
  setSnapIndex(index);
334
345
  isPresenting.current = true;
346
+ bottomSheetContext?.pushToStack(sheetName);
335
347
  modalRef.current?.present();
336
348
  });
337
349
  },
338
350
  dismiss: () => {
339
351
  return new Promise<void>((resolve) => {
340
- dismissResolver.current = resolve;
341
- isDismissing.current = true;
342
- modalRef.current?.dismiss();
352
+ // iOS-like behavior: dismiss sheets above, but not itself.
353
+ // See: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss
354
+ const sheetsAbove = bottomSheetContext?.getSheetsAbove(sheetName) ?? [];
355
+ const immediateChild = sheetsAbove[sheetsAbove.length - 1];
356
+ if (immediateChild) {
357
+ // Dismiss the immediate child - gorhom will dismiss all sheets above it
358
+ bottomSheetContext?.dismissDirect(immediateChild).then(resolve);
359
+ return;
360
+ }
361
+
362
+ dismissInternal().then(resolve);
343
363
  });
344
364
  },
365
+ dismissDirect: () => dismissInternal(),
345
366
  resize: async (index: number) => {
346
367
  modalRef.current?.snapToIndex(index);
347
368
  },
@@ -5,6 +5,10 @@ import type { TrueSheetContextMethods, TrueSheetRef } from './TrueSheet.types';
5
5
  interface BottomSheetContextValue extends TrueSheetContextMethods {
6
6
  register: (name: string, methods: RefObject<TrueSheetRef>) => void;
7
7
  unregister: (name: string) => void;
8
+ pushToStack: (name: string) => void;
9
+ removeFromStack: (name: string) => void;
10
+ getSheetsAbove: (name: string) => string[];
11
+ dismissDirect: (name: string) => Promise<void>;
8
12
  }
9
13
 
10
14
  export const BottomSheetContext = createContext<BottomSheetContextValue | null>(null);
@@ -19,6 +23,7 @@ export interface TrueSheetProviderProps {
19
23
  */
20
24
  export function TrueSheetProvider({ children }: TrueSheetProviderProps) {
21
25
  const sheetsRef = useRef<Map<string, RefObject<TrueSheetRef>>>(new Map());
26
+ const presentedStackRef = useRef<string[]>([]);
22
27
 
23
28
  const register = (name: string, methods: RefObject<TrueSheetRef>) => {
24
29
  sheetsRef.current.set(name, methods);
@@ -28,6 +33,31 @@ export function TrueSheetProvider({ children }: TrueSheetProviderProps) {
28
33
  sheetsRef.current.delete(name);
29
34
  };
30
35
 
36
+ const pushToStack = (name: string) => {
37
+ const index = presentedStackRef.current.indexOf(name);
38
+ if (index >= 0) {
39
+ presentedStackRef.current.splice(index, 1);
40
+ }
41
+ presentedStackRef.current.push(name);
42
+ };
43
+
44
+ const removeFromStack = (name: string) => {
45
+ const index = presentedStackRef.current.indexOf(name);
46
+ if (index >= 0) {
47
+ presentedStackRef.current.splice(index, 1);
48
+ }
49
+ };
50
+
51
+ /**
52
+ * Returns all sheets presented on top of the given sheet.
53
+ * Returns them in reverse order (top-most first) for proper dismissal.
54
+ */
55
+ const getSheetsAbove = (name: string): string[] => {
56
+ const index = presentedStackRef.current.indexOf(name);
57
+ if (index < 0 || index >= presentedStackRef.current.length - 1) return [];
58
+ return presentedStackRef.current.slice(index + 1).reverse();
59
+ };
60
+
31
61
  const present = async (name: string, index: number = 0) => {
32
62
  const sheet = sheetsRef.current.get(name);
33
63
  if (!sheet?.current) {
@@ -46,6 +76,19 @@ export function TrueSheetProvider({ children }: TrueSheetProviderProps) {
46
76
  return sheet.current.dismiss();
47
77
  };
48
78
 
79
+ /**
80
+ * Dismisses a sheet directly without checking for sheets above.
81
+ * Used internally when batch-dismissing stacked sheets.
82
+ */
83
+ const dismissDirect = async (name: string) => {
84
+ const sheet = sheetsRef.current.get(name);
85
+ if (!sheet?.current) {
86
+ console.warn(`TrueSheet: Could not find sheet with name "${name}"`);
87
+ return;
88
+ }
89
+ return (sheet.current as any).dismissDirect?.();
90
+ };
91
+
49
92
  const resize = async (name: string, index: number) => {
50
93
  const sheet = sheetsRef.current.get(name);
51
94
  if (!sheet?.current) {
@@ -56,7 +99,19 @@ export function TrueSheetProvider({ children }: TrueSheetProviderProps) {
56
99
  };
57
100
 
58
101
  return (
59
- <BottomSheetContext.Provider value={{ register, unregister, present, dismiss, resize }}>
102
+ <BottomSheetContext.Provider
103
+ value={{
104
+ register,
105
+ unregister,
106
+ pushToStack,
107
+ removeFromStack,
108
+ getSheetsAbove,
109
+ dismissDirect,
110
+ present,
111
+ dismiss,
112
+ resize,
113
+ }}
114
+ >
60
115
  <BottomSheetModalProvider>{children}</BottomSheetModalProvider>
61
116
  </BottomSheetContext.Provider>
62
117
  );
@@ -40,6 +40,34 @@ export const TrueSheetActions = {
40
40
  remove: (): TrueSheetActionType => ({ type: 'REMOVE' }),
41
41
  };
42
42
 
43
+ const ensureBaseRoute = <T extends { routes: { name: string }[] }>(
44
+ state: T,
45
+ baseRouteName: string | undefined,
46
+ routeParamList: Record<string, object | undefined> | undefined
47
+ ): T & { index: number; routes: T['routes'] } => {
48
+ if (!baseRouteName) {
49
+ return state as T & { index: number; routes: T['routes'] };
50
+ }
51
+
52
+ const hasBaseRoute = state.routes.some((r) => r.name === baseRouteName);
53
+
54
+ if (!hasBaseRoute) {
55
+ const baseRoute = {
56
+ key: `${baseRouteName}-${nanoid()}`,
57
+ name: baseRouteName,
58
+ params: routeParamList?.[baseRouteName],
59
+ };
60
+
61
+ return {
62
+ ...state,
63
+ index: state.routes.length,
64
+ routes: [baseRoute, ...state.routes],
65
+ } as T & { index: number; routes: T['routes'] };
66
+ }
67
+
68
+ return state as T & { index: number; routes: T['routes'] };
69
+ };
70
+
43
71
  export const TrueSheetRouter = (
44
72
  routerOptions: StackRouterOptions
45
73
  ): Router<TrueSheetNavigationState<ParamListBase>, TrueSheetActionType> => {
@@ -54,9 +82,11 @@ export const TrueSheetRouter = (
54
82
 
55
83
  getInitialState(options) {
56
84
  const state = baseRouter.getInitialState(options);
85
+ const baseRouteName = routerOptions.initialRouteName ?? options.routeNames[0];
86
+ const stateWithBaseRoute = ensureBaseRoute(state, baseRouteName, options.routeParamList);
57
87
 
58
88
  return {
59
- ...state,
89
+ ...stateWithBaseRoute,
60
90
  stale: false,
61
91
  type: 'true-sheet',
62
92
  key: `true-sheet-${nanoid()}`,
@@ -154,8 +184,11 @@ export const TrueSheetRouter = (
154
184
  routeGetIdList,
155
185
  });
156
186
 
187
+ const baseRouteName = routerOptions.initialRouteName ?? routeNames[0];
188
+ const stateWithBaseRoute = ensureBaseRoute(state, baseRouteName, routeParamList);
189
+
157
190
  return {
158
- ...state,
191
+ ...stateWithBaseRoute,
159
192
  type: 'true-sheet',
160
193
  key: `true-sheet-${nanoid()}`,
161
194
  };