@lodev09/react-native-true-sheet 4.0.0-beta.1 → 4.0.0-beta.10

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 (221) hide show
  1. package/README.md +25 -4
  2. package/android/build.gradle +22 -1
  3. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +24 -7
  4. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentView.kt +211 -182
  5. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentViewManager.kt +5 -1
  6. package/android/src/main/java/com/lodev09/truesheet/TrueSheetFooterView.kt +14 -19
  7. package/android/src/main/java/com/lodev09/truesheet/TrueSheetOverlayView.kt +106 -0
  8. package/android/src/main/java/com/lodev09/truesheet/TrueSheetOverlayViewManager.kt +45 -0
  9. package/android/src/main/java/com/lodev09/truesheet/TrueSheetPackage.kt +2 -1
  10. package/android/src/main/java/com/lodev09/truesheet/TrueSheetStateUpdater.kt +18 -0
  11. package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +82 -39
  12. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +275 -88
  13. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +26 -1
  14. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetCoordinatorLayout.kt +75 -3
  15. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDetentCalculator.kt +56 -34
  16. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetOverlayRootView.kt +137 -0
  17. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetLifecycleEvents.kt +15 -0
  18. package/android/src/main/java/com/lodev09/truesheet/utils/KeyboardUtils.kt +1 -1
  19. package/android/src/main/java/com/lodev09/truesheet/utils/TouchEventDeduper.kt +31 -0
  20. package/android/src/main/java/com/lodev09/truesheet/utils/ViewUtils.kt +19 -7
  21. package/android/src/main/jni/TrueSheetSpec.h +1 -0
  22. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewComponentDescriptor.h +0 -8
  23. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.cpp +54 -29
  24. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.h +6 -1
  25. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.cpp +1 -1
  26. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.h +6 -4
  27. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.cpp +7 -0
  28. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetLayoutUtils.h +46 -0
  29. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewComponentDescriptor.h +21 -0
  30. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewShadowNode.cpp +17 -0
  31. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewShadowNode.h +36 -0
  32. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.cpp +4 -35
  33. package/ios/TrueSheetContainerView.h +14 -7
  34. package/ios/TrueSheetContainerView.mm +10 -7
  35. package/ios/TrueSheetContentView.h +31 -15
  36. package/ios/TrueSheetContentView.mm +133 -179
  37. package/ios/TrueSheetFooterView.h +6 -0
  38. package/ios/TrueSheetFooterView.mm +48 -2
  39. package/ios/TrueSheetModule.h +2 -7
  40. package/ios/TrueSheetModule.mm +7 -16
  41. package/ios/TrueSheetOverlayView.h +32 -0
  42. package/ios/TrueSheetOverlayView.mm +161 -0
  43. package/ios/TrueSheetView.mm +171 -29
  44. package/ios/TrueSheetViewController.h +10 -0
  45. package/ios/TrueSheetViewController.mm +256 -74
  46. package/ios/core/TrueSheetGrabberView.mm +13 -3
  47. package/ios/core/TrueSheetOverlayContainerView.h +31 -0
  48. package/ios/core/TrueSheetOverlayContainerView.mm +35 -0
  49. package/ios/events/TrueSheetLifecycleEvents.h +2 -0
  50. package/ios/events/TrueSheetLifecycleEvents.mm +8 -0
  51. package/ios/tvos/TrueSheetStubs.mm +12 -0
  52. package/ios/utils/UIView+ScrollEdgeInteraction.h +1 -0
  53. package/ios/utils/UIView+ScrollEdgeInteraction.mm +24 -2
  54. package/lib/module/TrueSheet.js +149 -34
  55. package/lib/module/TrueSheet.js.map +1 -1
  56. package/lib/module/TrueSheet.web.js +122 -53
  57. package/lib/module/TrueSheet.web.js.map +1 -1
  58. package/lib/module/TrueSheetOverlay.js +30 -0
  59. package/lib/module/TrueSheetOverlay.js.map +1 -0
  60. package/lib/module/TrueSheetOverlay.web.js +35 -0
  61. package/lib/module/TrueSheetOverlay.web.js.map +1 -0
  62. package/lib/module/TrueSheetPeek.web.js +3 -3
  63. package/lib/module/TrueSheetPeek.web.js.map +1 -1
  64. package/lib/module/fabric/TrueSheetContentViewNativeComponent.ts +1 -1
  65. package/lib/module/fabric/TrueSheetOverlayViewNativeComponent.ts +12 -0
  66. package/lib/module/fabric/TrueSheetViewNativeComponent.ts +5 -0
  67. package/lib/module/index.js +1 -0
  68. package/lib/module/index.js.map +1 -1
  69. package/lib/module/mocks/index.js +10 -0
  70. package/lib/module/mocks/index.js.map +1 -1
  71. package/lib/module/mocks/navigation.js +31 -21
  72. package/lib/module/mocks/navigation.js.map +1 -1
  73. package/lib/module/mocks/navigationExpoRouter.js +21 -0
  74. package/lib/module/mocks/navigationExpoRouter.js.map +1 -0
  75. package/lib/module/mocks/reanimated.js +1 -1
  76. package/lib/module/mocks/reanimated.js.map +1 -1
  77. package/lib/module/navigation/{TrueSheetView.js → TrueSheetNavigatorContent.js} +14 -12
  78. package/lib/module/navigation/TrueSheetNavigatorContent.js.map +1 -0
  79. package/lib/module/navigation/actions.js +50 -0
  80. package/lib/module/navigation/actions.js.map +1 -0
  81. package/lib/module/navigation/base-types.js +2 -0
  82. package/lib/module/navigation/base-types.js.map +1 -0
  83. package/lib/module/navigation/{TrueSheetRouter.js → createTrueSheetRouter.js} +11 -24
  84. package/lib/module/navigation/createTrueSheetRouter.js.map +1 -0
  85. package/lib/module/navigation/expo-router/base-types.js +2 -0
  86. package/lib/module/navigation/expo-router/base-types.js.map +1 -0
  87. package/lib/module/navigation/expo-router/index.js +50 -0
  88. package/lib/module/navigation/expo-router/index.js.map +1 -0
  89. package/lib/module/navigation/expo-router/types.js +4 -0
  90. package/lib/module/navigation/expo-router/types.js.map +1 -0
  91. package/lib/module/navigation/index.js +43 -2
  92. package/lib/module/navigation/index.js.map +1 -1
  93. package/lib/module/navigation/navigator.js +10 -0
  94. package/lib/module/navigation/navigator.js.map +1 -0
  95. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +2 -2
  96. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -1
  97. package/lib/module/navigation/screen/TrueSheetScreen.js +2 -2
  98. package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -1
  99. package/lib/module/navigation/screen/useSheetScreenState.js +5 -4
  100. package/lib/module/navigation/screen/useSheetScreenState.js.map +1 -1
  101. package/lib/module/navigation/useTrueSheetNavigation.js +1 -1
  102. package/lib/module/navigation/useTrueSheetNavigation.js.map +1 -1
  103. package/lib/module/web/dom.js +10 -0
  104. package/lib/module/web/dom.js.map +1 -0
  105. package/lib/module/web/vaul/constants.js +4 -0
  106. package/lib/module/web/vaul/constants.js.map +1 -1
  107. package/lib/module/web/vaul/context.js.map +1 -1
  108. package/lib/module/web/vaul/helpers.js +10 -4
  109. package/lib/module/web/vaul/helpers.js.map +1 -1
  110. package/lib/module/web/vaul/index.js +35 -2
  111. package/lib/module/web/vaul/index.js.map +1 -1
  112. package/lib/typescript/src/TrueSheet.d.ts +6 -0
  113. package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
  114. package/lib/typescript/src/TrueSheet.types.d.ts +72 -1
  115. package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
  116. package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -1
  117. package/lib/typescript/src/TrueSheetOverlay.d.ts +8 -0
  118. package/lib/typescript/src/TrueSheetOverlay.d.ts.map +1 -0
  119. package/lib/typescript/src/TrueSheetOverlay.web.d.ts +8 -0
  120. package/lib/typescript/src/TrueSheetOverlay.web.d.ts.map +1 -0
  121. package/lib/typescript/src/TrueSheetPeek.web.d.ts.map +1 -1
  122. package/lib/typescript/src/fabric/TrueSheetOverlayViewNativeComponent.d.ts +6 -0
  123. package/lib/typescript/src/fabric/TrueSheetOverlayViewNativeComponent.d.ts.map +1 -0
  124. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +4 -0
  125. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
  126. package/lib/typescript/src/index.d.ts +1 -0
  127. package/lib/typescript/src/index.d.ts.map +1 -1
  128. package/lib/typescript/src/mocks/index.d.ts +4 -0
  129. package/lib/typescript/src/mocks/index.d.ts.map +1 -1
  130. package/lib/typescript/src/mocks/navigation.d.ts +5 -1
  131. package/lib/typescript/src/mocks/navigation.d.ts.map +1 -1
  132. package/lib/typescript/src/mocks/navigationExpoRouter.d.ts +22 -0
  133. package/lib/typescript/src/mocks/navigationExpoRouter.d.ts.map +1 -0
  134. package/lib/typescript/src/mocks/reanimated.d.ts.map +1 -1
  135. package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts +5 -0
  136. package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts.map +1 -0
  137. package/lib/typescript/src/navigation/actions.d.ts +71 -0
  138. package/lib/typescript/src/navigation/actions.d.ts.map +1 -0
  139. package/lib/typescript/src/navigation/base-types.d.ts +9 -0
  140. package/lib/typescript/src/navigation/base-types.d.ts.map +1 -0
  141. package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts +3 -0
  142. package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts.map +1 -0
  143. package/lib/typescript/src/navigation/expo-router/base-types.d.ts +8 -0
  144. package/lib/typescript/src/navigation/expo-router/base-types.d.ts.map +1 -0
  145. package/lib/typescript/src/navigation/expo-router/index.d.ts +37 -0
  146. package/lib/typescript/src/navigation/expo-router/index.d.ts.map +1 -0
  147. package/lib/typescript/src/navigation/expo-router/types.d.ts +44 -0
  148. package/lib/typescript/src/navigation/expo-router/types.d.ts.map +1 -0
  149. package/lib/typescript/src/navigation/index.d.ts +42 -3
  150. package/lib/typescript/src/navigation/index.d.ts.map +1 -1
  151. package/lib/typescript/src/navigation/navigator.d.ts +7 -0
  152. package/lib/typescript/src/navigation/navigator.d.ts.map +1 -0
  153. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts +1 -1
  154. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts.map +1 -1
  155. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts +1 -1
  156. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts.map +1 -1
  157. package/lib/typescript/src/navigation/screen/types.d.ts +3 -4
  158. package/lib/typescript/src/navigation/screen/types.d.ts.map +1 -1
  159. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts +5 -6
  160. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -1
  161. package/lib/typescript/src/navigation/types.d.ts +65 -5
  162. package/lib/typescript/src/navigation/types.d.ts.map +1 -1
  163. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts +1 -1
  164. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts.map +1 -1
  165. package/lib/typescript/src/web/dom.d.ts +7 -0
  166. package/lib/typescript/src/web/dom.d.ts.map +1 -0
  167. package/lib/typescript/src/web/vaul/constants.d.ts +1 -0
  168. package/lib/typescript/src/web/vaul/constants.d.ts.map +1 -1
  169. package/lib/typescript/src/web/vaul/context.d.ts +1 -0
  170. package/lib/typescript/src/web/vaul/context.d.ts.map +1 -1
  171. package/lib/typescript/src/web/vaul/helpers.d.ts.map +1 -1
  172. package/lib/typescript/src/web/vaul/index.d.ts +7 -1
  173. package/lib/typescript/src/web/vaul/index.d.ts.map +1 -1
  174. package/package.json +32 -9
  175. package/react-native.config.js +1 -0
  176. package/src/TrueSheet.tsx +184 -46
  177. package/src/TrueSheet.types.ts +77 -1
  178. package/src/TrueSheet.web.tsx +135 -64
  179. package/src/TrueSheetOverlay.tsx +24 -0
  180. package/src/TrueSheetOverlay.web.tsx +33 -0
  181. package/src/TrueSheetPeek.web.tsx +4 -3
  182. package/src/fabric/TrueSheetContentViewNativeComponent.ts +1 -1
  183. package/src/fabric/TrueSheetOverlayViewNativeComponent.ts +12 -0
  184. package/src/fabric/TrueSheetViewNativeComponent.ts +5 -0
  185. package/src/index.ts +1 -0
  186. package/src/mocks/index.ts +7 -0
  187. package/src/mocks/navigation.ts +32 -25
  188. package/src/mocks/navigationExpoRouter.ts +41 -0
  189. package/src/mocks/reanimated.ts +8 -9
  190. package/src/navigation/{TrueSheetView.tsx → TrueSheetNavigatorContent.tsx} +24 -17
  191. package/src/navigation/actions.ts +78 -0
  192. package/src/navigation/base-types.ts +20 -0
  193. package/src/navigation/createTrueSheetRouter.ts +194 -0
  194. package/src/navigation/expo-router/base-types.ts +18 -0
  195. package/src/navigation/expo-router/index.ts +90 -0
  196. package/src/navigation/expo-router/types.ts +116 -0
  197. package/src/navigation/index.ts +68 -2
  198. package/src/navigation/navigator.ts +18 -0
  199. package/src/navigation/screen/ReanimatedTrueSheetScreen.tsx +2 -2
  200. package/src/navigation/screen/TrueSheetScreen.tsx +2 -2
  201. package/src/navigation/screen/types.ts +4 -6
  202. package/src/navigation/screen/useSheetScreenState.ts +10 -15
  203. package/src/navigation/types.ts +99 -16
  204. package/src/navigation/useTrueSheetNavigation.ts +1 -1
  205. package/src/web/dom.ts +9 -0
  206. package/src/web/vaul/constants.ts +4 -0
  207. package/src/web/vaul/context.ts +1 -0
  208. package/src/web/vaul/helpers.ts +13 -6
  209. package/src/web/vaul/index.tsx +46 -1
  210. package/lib/module/navigation/TrueSheetRouter.js.map +0 -1
  211. package/lib/module/navigation/TrueSheetView.js.map +0 -1
  212. package/lib/module/navigation/createTrueSheetNavigator.js +0 -63
  213. package/lib/module/navigation/createTrueSheetNavigator.js.map +0 -1
  214. package/lib/typescript/src/navigation/TrueSheetRouter.d.ts +0 -57
  215. package/lib/typescript/src/navigation/TrueSheetRouter.d.ts.map +0 -1
  216. package/lib/typescript/src/navigation/TrueSheetView.d.ts +0 -10
  217. package/lib/typescript/src/navigation/TrueSheetView.d.ts.map +0 -1
  218. package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts +0 -35
  219. package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts.map +0 -1
  220. package/src/navigation/TrueSheetRouter.ts +0 -234
  221. package/src/navigation/createTrueSheetNavigator.tsx +0 -93
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../../src/web/vaul/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../../src/web/vaul/context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/web/vaul/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE5D,UAAU,KAAK;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAID,wBAAgB,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAYjD;AAED,wBAAgB,GAAG,CACjB,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,EAC5C,MAAM,EAAE,KAAK,EACb,WAAW,UAAQ,QAkBpB;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,QAepE;AAED,eAAO,MAAM,UAAU,GAAI,WAAW,eAAe,YAWpD,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAgB5F;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACvC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,cAUpC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,IAC1B,GAAG,MAAM,CAAC,SAAS,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,UAQ/D"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/web/vaul/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE5D,UAAU,KAAK;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AASD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAYjD;AAED,wBAAgB,GAAG,CACjB,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,EAC5C,MAAM,EAAE,KAAK,EACb,WAAW,UAAQ,QAmBpB;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,QAgBpE;AAED,eAAO,MAAM,UAAU,GAAI,WAAW,eAAe,YAWpD,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAgB5F;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACvC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,cAUpC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,IAC1B,GAAG,MAAM,CAAC,SAAS,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,UAQ/D"}
@@ -64,6 +64,12 @@ export type DialogProps = {
64
64
  * @default true
65
65
  */
66
66
  dismissible?: boolean;
67
+ /**
68
+ * Called when the user tries to close a non-dismissible drawer — dragging down
69
+ * at the first snap point, pressing escape, or tapping the handle of a
70
+ * single-snap-point drawer. Overlay clicks don't count, mirroring iOS.
71
+ */
72
+ onDismissAttempt?: () => void;
67
73
  /**
68
74
  * When `false` the drawer can't be dragged by the user. Programmatic snap-point
69
75
  * changes still animate. Defaults to `true`.
@@ -176,7 +182,7 @@ export type DialogProps = {
176
182
  */
177
183
  contentHeight?: number;
178
184
  } & (WithFadeFromProps | WithoutFadeFromProps);
179
- export declare function Root({ open: openProp, onOpenChange, children, onDrag: onDragProp, onRelease: onReleaseProp, snapPoints, shouldScaleBackground, setBackgroundColorOnScale, closeThreshold, scrollLockTimeout, dismissible, draggable, handleOnly, fadeFromIndex, activeSnapPoint: activeSnapPointProp, setActiveSnapPoint: setActiveSnapPointProp, fixed, modal, onClose, nested, noBodyStyles, direction, defaultOpen, disablePreventScroll, snapToSequentialPoint, preventScrollRestoration, repositionInputs, onAnimationEnd, onPositionChange, container, autoFocus, detached, detachedOffset, detachedRadius, detachedWrapperStyle, maxContentHeight, peekHeight, initialAnimated, onContentHeightChange, contentHeight: contentHeightProp, }: DialogProps): import("react/jsx-runtime").JSX.Element;
185
+ export declare function Root({ open: openProp, onOpenChange, children, onDrag: onDragProp, onRelease: onReleaseProp, snapPoints, shouldScaleBackground, setBackgroundColorOnScale, closeThreshold, scrollLockTimeout, dismissible, onDismissAttempt, draggable, handleOnly, fadeFromIndex, activeSnapPoint: activeSnapPointProp, setActiveSnapPoint: setActiveSnapPointProp, fixed, modal, onClose, nested, noBodyStyles, direction, defaultOpen, disablePreventScroll, snapToSequentialPoint, preventScrollRestoration, repositionInputs, onAnimationEnd, onPositionChange, container, autoFocus, detached, detachedOffset, detachedRadius, detachedWrapperStyle, maxContentHeight, peekHeight, initialAnimated, onContentHeightChange, contentHeight: contentHeightProp, }: DialogProps): import("react/jsx-runtime").JSX.Element;
180
186
  export declare const Overlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
181
187
  export type ContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {
182
188
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/web/vaul/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/web/vaul/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodev09/react-native-true-sheet",
3
- "version": "4.0.0-beta.1",
3
+ "version": "4.0.0-beta.10",
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",
@@ -13,6 +13,7 @@
13
13
  },
14
14
  "./mock": "./lib/module/mocks/index.js",
15
15
  "./navigation/mock": "./lib/module/mocks/navigation.js",
16
+ "./navigation/expo-router/mock": "./lib/module/mocks/navigationExpoRouter.js",
16
17
  "./reanimated/mock": "./lib/module/mocks/reanimated.js",
17
18
  "./reanimated": {
18
19
  "source": "./src/reanimated/index.ts",
@@ -24,6 +25,11 @@
24
25
  "types": "./lib/typescript/src/navigation/index.d.ts",
25
26
  "default": "./lib/module/navigation/index.js"
26
27
  },
28
+ "./navigation/expo-router": {
29
+ "source": "./src/navigation/expo-router/index.ts",
30
+ "types": "./lib/typescript/src/navigation/expo-router/index.d.ts",
31
+ "default": "./lib/module/navigation/expo-router/index.js"
32
+ },
27
33
  "./package.json": "./package.json"
28
34
  },
29
35
  "files": [
@@ -93,20 +99,21 @@
93
99
  "@react-native/babel-preset": "^0.86.0",
94
100
  "@react-native/eslint-config": "^0.86.0",
95
101
  "@react-native/jest-preset": "^0.86.0",
96
- "@react-navigation/core": "^7.13.7",
97
- "@react-navigation/native": "^7.1.6",
102
+ "@react-navigation/core": "^7.21.12",
103
+ "@react-navigation/native": "^7.3.16",
98
104
  "@release-it/conventional-changelog": "^11.0.0",
99
105
  "@testing-library/react-native": "^13.3.3",
100
106
  "@types/babel__core": "^7",
101
107
  "@types/jest": "^29.5.14",
102
108
  "@types/react": "~19.2.14",
109
+ "@types/react-dom": "~19.2.0",
103
110
  "commitlint": "^19.8.1",
104
111
  "del-cli": "^6.0.0",
105
112
  "eslint": "^9.35.0",
106
113
  "eslint-config-prettier": "^10.1.8",
107
114
  "eslint-plugin-prettier": "^5.5.4",
115
+ "expo-router": "~57.0.7",
108
116
  "jest": "^29.7.0",
109
- "nanoid": "^5.1.5",
110
117
  "prettier": "^3.0.3",
111
118
  "react": "19.2.3",
112
119
  "react-native": "0.86.0",
@@ -115,6 +122,7 @@
115
122
  "react-native-worklets": "0.10.0",
116
123
  "react-test-renderer": "19.2.3",
117
124
  "release-it": "^20.0.1",
125
+ "standard-navigation": "^0.0.9",
118
126
  "turbo": "^2.5.6",
119
127
  "typescript": "~6.0.3"
120
128
  },
@@ -126,11 +134,14 @@
126
134
  "peerDependencies": {
127
135
  "@radix-ui/react-dialog": ">=1",
128
136
  "@radix-ui/react-presence": ">=1",
129
- "@react-navigation/core": ">=7",
137
+ "@react-navigation/native": ">=7.3.0",
138
+ "expo-router": ">=57.0.0",
130
139
  "react": "*",
140
+ "react-dom": "*",
131
141
  "react-native": ">=0.82.0",
132
142
  "react-native-reanimated": ">=4",
133
- "react-native-worklets": "*"
143
+ "react-native-worklets": "*",
144
+ "standard-navigation": ">=0.0.9"
134
145
  },
135
146
  "peerDependenciesMeta": {
136
147
  "@radix-ui/react-dialog": {
@@ -139,7 +150,13 @@
139
150
  "@radix-ui/react-presence": {
140
151
  "optional": true
141
152
  },
142
- "@react-navigation/core": {
153
+ "@react-navigation/native": {
154
+ "optional": true
155
+ },
156
+ "expo-router": {
157
+ "optional": true
158
+ },
159
+ "react-dom": {
143
160
  "optional": true
144
161
  },
145
162
  "react-native-reanimated": {
@@ -147,6 +164,9 @@
147
164
  },
148
165
  "react-native-worklets": {
149
166
  "optional": true
167
+ },
168
+ "standard-navigation": {
169
+ "optional": true
150
170
  }
151
171
  },
152
172
  "workspaces": [
@@ -162,7 +182,7 @@
162
182
  "<rootDir>/jest.setup.js"
163
183
  ],
164
184
  "transformIgnorePatterns": [
165
- "node_modules/(?!(react-native|@react-native|react-native-reanimated|react-native-worklets|react-native-worklets-core)/)"
185
+ "node_modules/(?!(react-native|@react-native|@react-navigation|react-native-reanimated|react-native-worklets|react-native-worklets-core|standard-navigation)/)"
166
186
  ],
167
187
  "modulePathIgnorePatterns": [
168
188
  "<rootDir>/example/bare/node_modules",
@@ -170,7 +190,7 @@
170
190
  "<rootDir>/example/shared/node_modules",
171
191
  "<rootDir>/lib/",
172
192
  "<rootDir>/docs/node_modules",
173
- "<rootDir>/docs/build"
193
+ "<rootDir>/docs/.next"
174
194
  ],
175
195
  "testPathIgnorePatterns": [
176
196
  "/node_modules/",
@@ -268,6 +288,9 @@
268
288
  },
269
289
  "TrueSheetPeekView": {
270
290
  "className": "TrueSheetPeekView"
291
+ },
292
+ "TrueSheetOverlayView": {
293
+ "className": "TrueSheetOverlayView"
271
294
  }
272
295
  }
273
296
  }
@@ -7,6 +7,7 @@ module.exports = {
7
7
  'TrueSheetViewComponentDescriptor',
8
8
  'TrueSheetContentViewComponentDescriptor',
9
9
  'TrueSheetFooterViewComponentDescriptor',
10
+ 'TrueSheetOverlayViewComponentDescriptor',
10
11
  ],
11
12
  cmakeListsPath: '../android/src/main/jni/CMakeLists.txt',
12
13
  },
package/src/TrueSheet.tsx CHANGED
@@ -4,8 +4,10 @@ import {
4
4
  createRef,
5
5
  type ReactNode,
6
6
  type ComponentRef,
7
+ type ComponentType,
7
8
  isValidElement,
8
9
  createElement,
10
+ useEffect,
9
11
  } from 'react';
10
12
 
11
13
  import type {
@@ -21,6 +23,7 @@ import type {
21
23
  PositionChangeEvent,
22
24
  DidDismissEvent,
23
25
  WillDismissEvent,
26
+ DismissAttemptEvent,
24
27
  MountEvent,
25
28
  WillFocusEvent,
26
29
  DidFocusEvent,
@@ -39,12 +42,31 @@ import {
39
42
  Platform,
40
43
  StyleSheet,
41
44
  BackHandler,
45
+ RootTagContext,
42
46
  findNodeHandle,
43
47
  processColor,
44
48
  type NativeEventSubscription,
45
49
  type GestureResponderEvent,
50
+ type RootTag,
51
+ type StyleProp,
52
+ type ViewStyle,
46
53
  } from 'react-native';
47
54
 
55
+ interface AppContainerProps {
56
+ rootTag: RootTag;
57
+ rootViewStyle?: StyleProp<ViewStyle>;
58
+ internal_excludeLogBox?: boolean;
59
+ children?: ReactNode;
60
+ }
61
+
62
+ // RN has no public API for hosting the element inspector inside a presented view;
63
+ // this is the internal RN's Modal uses. Dev-only so prod bundles never resolve it.
64
+ // The template literal keeps the RN babel preset's deep-import warning off while
65
+ // Metro still resolves the module statically.
66
+ const AppContainer: ComponentType<AppContainerProps> | null = __DEV__
67
+ ? require(`react-native/Libraries/ReactNative/AppContainer`).default
68
+ : null;
69
+
48
70
  const LINKING_ERROR =
49
71
  `The package '@lodev09/react-native-true-sheet' doesn't seem to be linked. Make sure: \n\n` +
50
72
  Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
@@ -58,23 +80,49 @@ if (!TrueSheetModule) {
58
80
 
59
81
  type NativeRef = ComponentRef<typeof TrueSheetViewNativeComponent>;
60
82
 
61
- // Claim touches that no descendant claimed so the responder negotiation
62
- // doesn't bubble up to touchables outside the sheet
63
- const absorbUnclaimedTouches = () => true;
64
-
65
83
  // Stop raw touch events from bubbling past the sheet to outside ancestors
66
84
  const stopTouchPropagation = (event: GestureResponderEvent) => event.stopPropagation();
67
85
 
86
+ // Stop the responder negotiation at the sheet boundary without claiming the
87
+ // responder. Views inside the sheet are asked before this one, so in-sheet
88
+ // touchables work normally; views outside are asked after, so stopping here
89
+ // keeps unclaimed touches from leaking to touchables behind the sheet.
90
+ // Claiming instead (returning true) would steal the responder from a pressed
91
+ // touchable whenever the negotiation re-runs mid-gesture — e.g. a second
92
+ // finger, or the duplicate touch stream from a nested react-native-screens
93
+ // screen that attaches its own touch handler inside the sheet.
94
+ const stopResponderNegotiation = (event: GestureResponderEvent) => {
95
+ event.stopPropagation();
96
+ return false;
97
+ };
98
+
68
99
  interface TrueSheetState {
69
100
  shouldRenderNativeView: boolean;
101
+ initialPresentReady: boolean;
102
+ scrollableHandle: number | null;
70
103
  }
71
104
 
105
+ // Gates auto-present (initialDetentIndex) by one commit. Rendered last in the
106
+ // sheet subtree so its mount effect runs after the content's mount effects —
107
+ // updates they schedule (e.g. a navigation footer via setOptions) batch with
108
+ // onReady's, so native receives initialDetentIndex together with the settled
109
+ // tree and presents at the final height instead of resizing mid-flight.
110
+ const InitialPresentGate = ({ onReady }: { onReady: () => void }) => {
111
+ useEffect(() => {
112
+ onReady();
113
+ }, [onReady]);
114
+
115
+ return null;
116
+ };
117
+
72
118
  export class TrueSheet
73
119
  extends PureComponent<TrueSheetProps, TrueSheetState>
74
120
  implements TrueSheetMethods
75
121
  {
76
122
  displayName = 'TrueSheet';
77
123
 
124
+ static contextType = RootTagContext;
125
+
78
126
  private readonly nativeRef: RefObject<NativeRef | null>;
79
127
 
80
128
  private cachedGrabberOptions: TrueSheetProps['grabberOptions'] | undefined;
@@ -105,17 +153,21 @@ export class TrueSheet
105
153
 
106
154
  this.validateDetents();
107
155
 
108
- // Lazy load by default, except when initialDetentIndex is set (for auto-presentation)
156
+ // Lazy load by default, except when auto-presenting or when lazy is disabled
109
157
  const shouldRenderImmediately =
110
- props.initialDetentIndex !== undefined && props.initialDetentIndex >= 0;
158
+ (props.initialDetentIndex !== undefined && props.initialDetentIndex >= 0) ||
159
+ props.lazy === false;
111
160
 
112
161
  this.state = {
113
162
  shouldRenderNativeView: shouldRenderImmediately,
163
+ initialPresentReady: false,
164
+ scrollableHandle: null,
114
165
  };
115
166
 
116
167
  this.onMount = this.onMount.bind(this);
117
168
  this.onWillDismiss = this.onWillDismiss.bind(this);
118
169
  this.onDidDismiss = this.onDidDismiss.bind(this);
170
+ this.onDismissAttempt = this.onDismissAttempt.bind(this);
119
171
  this.onWillPresent = this.onWillPresent.bind(this);
120
172
  this.onDidPresent = this.onDidPresent.bind(this);
121
173
  this.onDetentChange = this.onDetentChange.bind(this);
@@ -129,6 +181,22 @@ export class TrueSheet
129
181
  this.onDidBlur = this.onDidBlur.bind(this);
130
182
  this.handleBackPress = this.handleBackPress.bind(this);
131
183
  this.onVisibilityChange = this.onVisibilityChange.bind(this);
184
+ this.onInitialPresentReady = this.onInitialPresentReady.bind(this);
185
+ }
186
+
187
+ private onInitialPresentReady(): void {
188
+ this.setState({ initialPresentReady: true });
189
+ }
190
+
191
+ // Resolves after commit (didMount/didUpdate) — the scrollable mounts with the
192
+ // sheet content, so its ref is only populated once the native tree renders.
193
+ private updateScrollableHandle(): void {
194
+ const { scrollableRef } = this.props;
195
+ const scrollableHandle = scrollableRef?.current ? findNodeHandle(scrollableRef.current) : null;
196
+
197
+ if (scrollableHandle !== this.state.scrollableHandle) {
198
+ this.setState({ scrollableHandle });
199
+ }
132
200
  }
133
201
 
134
202
  private validateDetents(): void {
@@ -301,15 +369,18 @@ export class TrueSheet
301
369
  this.props.onWillDismiss?.(event);
302
370
  }
303
371
 
372
+ private onDismissAttempt(event: DismissAttemptEvent): void {
373
+ this.props.onDismissAttempt?.(event);
374
+ }
375
+
304
376
  private onDidDismiss(event: DidDismissEvent): void {
305
377
  this.isPresented = false;
306
378
  this.isSheetVisible = true;
307
379
  this.backHandlerSubscription?.remove();
308
380
  this.backHandlerSubscription = null;
309
381
 
310
- // Clean up native view after dismiss for lazy loading.
311
- // Skip unmount if a present is in progress to avoid race condition.
312
- if (!this.isPresenting) {
382
+ // Non-lazy content stays mounted; otherwise clean it up unless another presentation is active.
383
+ if (!this.isPresenting && this.props.lazy !== false) {
313
384
  this.setState({ shouldRenderNativeView: false });
314
385
  }
315
386
 
@@ -371,9 +442,12 @@ export class TrueSheet
371
442
  const nodeHandle = findNodeHandle(this.nativeRef.current);
372
443
  if (nodeHandle == null || nodeHandle === -1) return false;
373
444
 
374
- // When not dismissible, let back propagate (e.g. navigation goes back to the previous screen)
445
+ // When not dismissible, report the attempt. An attempt handler consumes the back
446
+ // press; otherwise let it propagate (e.g. navigation goes back to the previous screen)
375
447
  if (this.props.dismissible === false) {
376
- return this.props.onBackPress?.() ?? false;
448
+ const { onDismissAttempt, onBackPress } = this.props;
449
+ onDismissAttempt?.({ nativeEvent: null } as DismissAttemptEvent);
450
+ return onBackPress?.() ?? onDismissAttempt != null;
377
451
  }
378
452
 
379
453
  TrueSheetModule?.handleBackPress(nodeHandle);
@@ -434,15 +508,38 @@ export class TrueSheet
434
508
 
435
509
  componentDidMount(): void {
436
510
  this.registerInstance();
511
+ this.updateScrollableHandle();
437
512
  }
438
513
 
439
514
  componentDidUpdate(prevProps: TrueSheetProps): void {
440
515
  this.registerInstance();
516
+ this.updateScrollableHandle();
517
+
518
+ if (
519
+ prevProps.lazy !== false &&
520
+ this.props.lazy === false &&
521
+ !this.state.shouldRenderNativeView
522
+ ) {
523
+ this.setState({ shouldRenderNativeView: true });
524
+ }
441
525
 
442
526
  // Validate when detents prop changes
443
527
  if (prevProps.detents !== this.props.detents) {
444
528
  this.validateDetents();
445
529
  }
530
+
531
+ // initialDetentIndex set at runtime on a lazily-mounted sheet: render the
532
+ // native tree so InitialPresentGate can deliver the index (constructor
533
+ // only computes this for the initial prop).
534
+ const prevInitialDetentIndex = prevProps.initialDetentIndex ?? -1;
535
+ const initialDetentIndex = this.props.initialDetentIndex ?? -1;
536
+ if (
537
+ prevInitialDetentIndex < 0 &&
538
+ initialDetentIndex >= 0 &&
539
+ !this.state.shouldRenderNativeView
540
+ ) {
541
+ this.setState({ shouldRenderNativeView: true });
542
+ }
446
543
  }
447
544
 
448
545
  componentWillUnmount(): void {
@@ -485,6 +582,7 @@ export class TrueSheet
485
582
  insetAdjustment = 'automatic',
486
583
  ...rest
487
584
  } = this.props;
585
+ delete rest.lazy;
488
586
 
489
587
  // Trim to max 3 detents and clamp fractions
490
588
  const resolvedDetents: number[] = detents.slice(0, 3).map((detent) => {
@@ -498,6 +596,12 @@ export class TrueSheet
498
596
  return Math.min(1, detent);
499
597
  });
500
598
 
599
+ // Hold initialDetentIndex back from native until the gate's effect flushes
600
+ // (see InitialPresentGate) — native presents when the prop lands.
601
+ const autoPresent = initialDetentIndex >= 0;
602
+ const gatedInitialDetentIndex =
603
+ autoPresent && !this.state.initialPresentReady ? -1 : initialDetentIndex;
604
+
501
605
  // Cache grabberOptions to avoid creating a new object every render
502
606
  if (grabberOptions !== this.cachedGrabberOptions) {
503
607
  this.cachedGrabberOptions = grabberOptions;
@@ -507,6 +611,42 @@ export class TrueSheet
507
611
  };
508
612
  }
509
613
 
614
+ const sheetContent = (
615
+ <>
616
+ {header && (
617
+ <TrueSheetHeaderViewNativeComponent
618
+ style={[
619
+ styles.header,
620
+ headerOptions?.position === 'absolute' && styles.absoluteHeader,
621
+ headerStyle,
622
+ ]}
623
+ >
624
+ {isValidElement(header) ? header : createElement(header)}
625
+ </TrueSheetHeaderViewNativeComponent>
626
+ )}
627
+ <TrueSheetContentViewNativeComponent style={style}>
628
+ {children}
629
+ </TrueSheetContentViewNativeComponent>
630
+ {footer && (
631
+ <TrueSheetFooterViewNativeComponent
632
+ autoBottomInset={insetAdjustment === 'automatic'}
633
+ style={[
634
+ styles.footer,
635
+ footerOptions?.position === 'absolute'
636
+ ? styles.absoluteFooter
637
+ : styles.relativeFooter,
638
+ footerStyle,
639
+ ]}
640
+ >
641
+ {isValidElement(footer) ? footer : createElement(footer)}
642
+ </TrueSheetFooterViewNativeComponent>
643
+ )}
644
+ {autoPresent && !this.state.initialPresentReady && (
645
+ <InitialPresentGate onReady={this.onInitialPresentReady} />
646
+ )}
647
+ </>
648
+ );
649
+
510
650
  return (
511
651
  <TrueSheetViewNativeComponent
512
652
  {...rest}
@@ -522,7 +662,7 @@ export class TrueSheet
522
662
  accessibilityOptions={accessibilityOptions}
523
663
  dimmed={dimmed}
524
664
  dimmedDetentIndex={dimmedDetentIndex}
525
- initialDetentIndex={initialDetentIndex}
665
+ initialDetentIndex={gatedInitialDetentIndex}
526
666
  initialDetentAnimated={initialDetentAnimated}
527
667
  dismissible={dismissible}
528
668
  draggable={draggable}
@@ -530,6 +670,7 @@ export class TrueSheet
530
670
  maxContentWidth={maxContentWidth}
531
671
  anchor={anchor}
532
672
  anchorOffset={anchorOffset}
673
+ scrollableHandle={this.state.scrollableHandle ?? -1}
533
674
  scrollableOptions={scrollableOptions}
534
675
  headerOptions={headerOptions}
535
676
  footerOptions={{
@@ -543,6 +684,7 @@ export class TrueSheet
543
684
  onDidPresent={this.onDidPresent}
544
685
  onWillDismiss={this.onWillDismiss}
545
686
  onDidDismiss={this.onDidDismiss}
687
+ onDismissAttempt={this.onDismissAttempt}
546
688
  onDetentChange={this.onDetentChange}
547
689
  onDragBegin={this.onDragBegin}
548
690
  onDragChange={this.onDragChange}
@@ -553,43 +695,36 @@ export class TrueSheet
553
695
  onWillBlur={this.onWillBlur}
554
696
  onDidBlur={this.onDidBlur}
555
697
  onVisibilityChange={this.onVisibilityChange}
698
+ // These must stay on this host view, not on the container. The container is
699
+ // reparented into the native sheet, so this view is never a native ancestor of
700
+ // the sheet content — this is the React-tree boundary between the sheet and
701
+ // the presenting screen, where both the responder negotiation and raw touch
702
+ // bubbling must stop.
703
+ onStartShouldSetResponder={stopResponderNegotiation}
704
+ onMoveShouldSetResponder={stopResponderNegotiation}
705
+ onTouchStart={stopTouchPropagation}
706
+ onTouchMove={stopTouchPropagation}
707
+ onTouchEnd={stopTouchPropagation}
708
+ onTouchCancel={stopTouchPropagation}
556
709
  >
557
710
  {this.state.shouldRenderNativeView && (
558
- <TrueSheetContainerViewNativeComponent
559
- style={styles.container}
560
- onStartShouldSetResponder={absorbUnclaimedTouches}
561
- onTouchStart={stopTouchPropagation}
562
- onTouchMove={stopTouchPropagation}
563
- onTouchEnd={stopTouchPropagation}
564
- onTouchCancel={stopTouchPropagation}
565
- >
566
- {header && (
567
- <TrueSheetHeaderViewNativeComponent
568
- style={[
569
- styles.header,
570
- headerOptions?.position === 'absolute' && styles.absoluteHeader,
571
- headerStyle,
572
- ]}
711
+ <TrueSheetContainerViewNativeComponent style={styles.container}>
712
+ {AppContainer ? (
713
+ // Hosts the element inspector inside the sheet, like RN's Modal does —
714
+ // the app-level one sits behind the presented sheet.
715
+ // `display: contents` keeps AppContainer's wrapper views out of both
716
+ // Yoga layout and the native tree, so header/content/footer remain the
717
+ // container's direct native children, while the inspector overlay
718
+ // anchors to the container and lines up with measured frames.
719
+ <AppContainer
720
+ rootTag={this.context as RootTag}
721
+ rootViewStyle={styles.inspectorHost}
722
+ internal_excludeLogBox
573
723
  >
574
- {isValidElement(header) ? header : createElement(header)}
575
- </TrueSheetHeaderViewNativeComponent>
576
- )}
577
- <TrueSheetContentViewNativeComponent style={style}>
578
- {children}
579
- </TrueSheetContentViewNativeComponent>
580
- {footer && (
581
- <TrueSheetFooterViewNativeComponent
582
- autoBottomInset={insetAdjustment === 'automatic'}
583
- style={[
584
- styles.footer,
585
- footerOptions?.position === 'absolute'
586
- ? styles.absoluteFooter
587
- : styles.relativeFooter,
588
- footerStyle,
589
- ]}
590
- >
591
- {isValidElement(footer) ? footer : createElement(footer)}
592
- </TrueSheetFooterViewNativeComponent>
724
+ {sheetContent}
725
+ </AppContainer>
726
+ ) : (
727
+ sheetContent
593
728
  )}
594
729
  </TrueSheetContainerViewNativeComponent>
595
730
  )}
@@ -611,6 +746,9 @@ const styles = StyleSheet.create({
611
746
  container: {
612
747
  ...StyleSheet.absoluteFill,
613
748
  },
749
+ inspectorHost: {
750
+ display: 'contents',
751
+ },
614
752
  header: {
615
753
  pointerEvents: 'box-none',
616
754
  },