@lodev09/react-native-true-sheet 4.0.0-beta.0 → 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 (430) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +62 -30
  3. package/RNTrueSheet.podspec +10 -2
  4. package/android/build.gradle +24 -2
  5. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +189 -47
  6. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerViewManager.kt +7 -0
  7. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentView.kt +401 -19
  8. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentViewManager.kt +18 -0
  9. package/android/src/main/java/com/lodev09/truesheet/TrueSheetFooterView.kt +145 -21
  10. package/android/src/main/java/com/lodev09/truesheet/TrueSheetFooterViewManager.kt +14 -0
  11. package/android/src/main/java/com/lodev09/truesheet/TrueSheetHeaderView.kt +38 -0
  12. package/android/src/main/java/com/lodev09/truesheet/TrueSheetHeaderViewManager.kt +28 -0
  13. package/android/src/main/java/com/lodev09/truesheet/TrueSheetModule.kt +84 -24
  14. package/android/src/main/java/com/lodev09/truesheet/TrueSheetOverlayView.kt +106 -0
  15. package/android/src/main/java/com/lodev09/truesheet/TrueSheetOverlayViewManager.kt +45 -0
  16. package/android/src/main/java/com/lodev09/truesheet/TrueSheetPackage.kt +6 -4
  17. package/android/src/main/java/com/lodev09/truesheet/TrueSheetPeekView.kt +72 -0
  18. package/android/src/main/java/com/lodev09/truesheet/TrueSheetPeekViewManager.kt +33 -0
  19. package/android/src/main/java/com/lodev09/truesheet/TrueSheetStateUpdater.kt +63 -0
  20. package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +564 -226
  21. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +1399 -598
  22. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +161 -29
  23. package/android/src/main/java/com/lodev09/truesheet/core/RNScreensEventObserver.kt +63 -0
  24. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetBottomSheetBehavior.kt +36 -0
  25. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetBottomSheetView.kt +255 -0
  26. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetCoordinatorLayout.kt +375 -0
  27. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDetentCalculator.kt +299 -0
  28. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDimView.kt +162 -0
  29. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetGrabberView.kt +180 -0
  30. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetKeyboardObserver.kt +207 -0
  31. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetOverlayRootView.kt +137 -0
  32. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetStackManager.kt +220 -0
  33. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetDragEvents.kt +71 -0
  34. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetFocusEvents.kt +65 -0
  35. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetLifecycleEvents.kt +127 -0
  36. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetStateEvents.kt +56 -0
  37. package/android/src/main/java/com/lodev09/truesheet/utils/KeyboardUtils.kt +84 -0
  38. package/android/src/main/java/com/lodev09/truesheet/utils/ScreenUtils.kt +93 -67
  39. package/android/src/main/java/com/lodev09/truesheet/utils/TouchEventDeduper.kt +31 -0
  40. package/android/src/main/java/com/lodev09/truesheet/utils/ViewUtils.kt +42 -0
  41. package/android/src/main/jni/CMakeLists.txt +63 -0
  42. package/android/src/main/jni/TrueSheetSpec.h +20 -0
  43. package/android/src/main/jni/TrueSheetStateUpdater.cpp +96 -0
  44. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewComponentDescriptor.h +16 -0
  45. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.cpp +68 -0
  46. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.h +33 -0
  47. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.cpp +11 -0
  48. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.h +39 -0
  49. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewComponentDescriptor.h +24 -0
  50. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.cpp +63 -0
  51. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.h +28 -0
  52. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.cpp +11 -0
  53. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.h +41 -0
  54. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.cpp +18 -0
  55. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.h +16 -0
  56. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetLayoutUtils.h +46 -0
  57. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewComponentDescriptor.h +21 -0
  58. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewShadowNode.cpp +17 -0
  59. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewShadowNode.h +36 -0
  60. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewComponentDescriptor.h +28 -0
  61. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.cpp +30 -0
  62. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.h +45 -0
  63. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.cpp +23 -0
  64. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.h +52 -0
  65. package/ios/TrueSheetContainerView.h +88 -6
  66. package/ios/TrueSheetContainerView.mm +278 -21
  67. package/ios/TrueSheetContentView.h +54 -1
  68. package/ios/TrueSheetContentView.mm +371 -47
  69. package/ios/TrueSheetFooterView.h +33 -2
  70. package/ios/TrueSheetFooterView.mm +187 -35
  71. package/ios/{events/OnWillDismissEvent.h → TrueSheetHeaderView.h} +10 -7
  72. package/ios/TrueSheetHeaderView.mm +64 -0
  73. package/ios/TrueSheetModule.h +2 -7
  74. package/ios/TrueSheetModule.mm +98 -20
  75. package/ios/TrueSheetOverlayView.h +32 -0
  76. package/ios/TrueSheetOverlayView.mm +161 -0
  77. package/ios/TrueSheetPeekView.h +32 -0
  78. package/ios/TrueSheetPeekView.mm +99 -0
  79. package/ios/TrueSheetView.h +7 -15
  80. package/ios/TrueSheetView.mm +775 -215
  81. package/ios/TrueSheetViewController.h +94 -16
  82. package/ios/TrueSheetViewController.mm +1316 -331
  83. package/ios/core/RNScreensEventObserver.h +46 -0
  84. package/ios/core/RNScreensEventObserver.mm +280 -0
  85. package/ios/core/TrueSheetBlurView.h +27 -0
  86. package/ios/core/TrueSheetBlurView.mm +82 -0
  87. package/ios/core/TrueSheetDetentCalculator.h +107 -0
  88. package/ios/core/TrueSheetDetentCalculator.mm +197 -0
  89. package/ios/core/TrueSheetGrabberView.h +72 -0
  90. package/ios/core/TrueSheetGrabberView.mm +188 -0
  91. package/ios/core/TrueSheetKeyboardObserver.h +39 -0
  92. package/ios/core/TrueSheetKeyboardObserver.mm +112 -0
  93. package/ios/core/TrueSheetOverlayContainerView.h +31 -0
  94. package/ios/core/TrueSheetOverlayContainerView.mm +35 -0
  95. package/ios/events/TrueSheetDragEvents.h +39 -0
  96. package/ios/events/TrueSheetDragEvents.mm +62 -0
  97. package/ios/events/{OnPositionChangeEvent.h → TrueSheetFocusEvents.h} +8 -5
  98. package/ios/events/TrueSheetFocusEvents.mm +49 -0
  99. package/ios/events/TrueSheetLifecycleEvents.h +42 -0
  100. package/ios/events/TrueSheetLifecycleEvents.mm +79 -0
  101. package/ios/events/TrueSheetStateEvents.h +35 -0
  102. package/ios/events/TrueSheetStateEvents.mm +49 -0
  103. package/ios/tvos/TrueSheetStubs.mm +166 -0
  104. package/ios/{events/OnMountEvent.h → utils/BlurUtil.h} +5 -7
  105. package/ios/utils/BlurUtil.mm +69 -0
  106. package/ios/utils/GestureUtil.h +7 -0
  107. package/ios/utils/GestureUtil.mm +12 -0
  108. package/ios/utils/PlatformUtil.h +15 -0
  109. package/ios/utils/UIView+FirstResponder.h +15 -0
  110. package/ios/utils/UIView+FirstResponder.mm +26 -0
  111. package/ios/utils/UIView+ScrollEdgeInteraction.h +26 -0
  112. package/ios/utils/UIView+ScrollEdgeInteraction.mm +84 -0
  113. package/ios/utils/WindowUtil.mm +17 -1
  114. package/lib/module/TrueSheet.js +349 -74
  115. package/lib/module/TrueSheet.js.map +1 -1
  116. package/lib/module/TrueSheet.web.js +1270 -0
  117. package/lib/module/TrueSheet.web.js.map +1 -0
  118. package/lib/module/TrueSheetOverlay.js +30 -0
  119. package/lib/module/TrueSheetOverlay.js.map +1 -0
  120. package/lib/module/TrueSheetOverlay.web.js +35 -0
  121. package/lib/module/TrueSheetOverlay.web.js.map +1 -0
  122. package/lib/module/TrueSheetPeek.js +15 -0
  123. package/lib/module/TrueSheetPeek.js.map +1 -0
  124. package/lib/module/TrueSheetPeek.web.js +55 -0
  125. package/lib/module/TrueSheetPeek.web.js.map +1 -0
  126. package/lib/module/TrueSheetProvider.js +28 -0
  127. package/lib/module/TrueSheetProvider.js.map +1 -0
  128. package/lib/module/TrueSheetProvider.web.js +157 -0
  129. package/lib/module/TrueSheetProvider.web.js.map +1 -0
  130. package/lib/module/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
  131. package/lib/module/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
  132. package/lib/module/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
  133. package/lib/module/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
  134. package/lib/module/fabric/TrueSheetOverlayViewNativeComponent.ts +12 -0
  135. package/lib/module/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
  136. package/lib/module/fabric/TrueSheetViewNativeComponent.ts +110 -18
  137. package/lib/module/index.js +4 -3
  138. package/lib/module/index.js.map +1 -1
  139. package/lib/module/mocks/index.js +103 -0
  140. package/lib/module/mocks/index.js.map +1 -0
  141. package/lib/module/mocks/navigation.js +95 -0
  142. package/lib/module/mocks/navigation.js.map +1 -0
  143. package/lib/module/mocks/navigationExpoRouter.js +21 -0
  144. package/lib/module/mocks/navigationExpoRouter.js.map +1 -0
  145. package/lib/module/mocks/reanimated.js +91 -0
  146. package/lib/module/mocks/reanimated.js.map +1 -0
  147. package/lib/module/navigation/TrueSheetNavigatorContent.js +73 -0
  148. package/lib/module/navigation/TrueSheetNavigatorContent.js.map +1 -0
  149. package/lib/module/navigation/actions.js +50 -0
  150. package/lib/module/navigation/actions.js.map +1 -0
  151. package/lib/module/navigation/base-types.js +2 -0
  152. package/lib/module/navigation/base-types.js.map +1 -0
  153. package/lib/module/navigation/createTrueSheetRouter.js +157 -0
  154. package/lib/module/navigation/createTrueSheetRouter.js.map +1 -0
  155. package/lib/module/navigation/expo-router/base-types.js +2 -0
  156. package/lib/module/navigation/expo-router/base-types.js.map +1 -0
  157. package/lib/module/navigation/expo-router/index.js +50 -0
  158. package/lib/module/navigation/expo-router/index.js.map +1 -0
  159. package/lib/module/navigation/expo-router/types.js +4 -0
  160. package/lib/module/navigation/expo-router/types.js.map +1 -0
  161. package/lib/module/navigation/index.js +47 -0
  162. package/lib/module/navigation/index.js.map +1 -0
  163. package/lib/module/navigation/navigator.js +10 -0
  164. package/lib/module/navigation/navigator.js.map +1 -0
  165. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +56 -0
  166. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -0
  167. package/lib/module/navigation/screen/TrueSheetScreen.js +49 -0
  168. package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -0
  169. package/lib/module/navigation/screen/index.js +5 -0
  170. package/lib/module/navigation/screen/index.js.map +1 -0
  171. package/lib/module/navigation/screen/types.js +4 -0
  172. package/lib/module/navigation/screen/types.js.map +1 -0
  173. package/lib/module/navigation/screen/useSheetScreenState.js +69 -0
  174. package/lib/module/navigation/screen/useSheetScreenState.js.map +1 -0
  175. package/lib/module/navigation/types.js +4 -0
  176. package/lib/module/navigation/types.js.map +1 -0
  177. package/lib/module/navigation/useTrueSheetNavigation.js +24 -0
  178. package/lib/module/navigation/useTrueSheetNavigation.js.map +1 -0
  179. package/lib/module/reanimated/ReanimatedTrueSheet.js +15 -9
  180. package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
  181. package/lib/module/reanimated/ReanimatedTrueSheet.web.js +81 -0
  182. package/lib/module/reanimated/ReanimatedTrueSheet.web.js.map +1 -0
  183. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +4 -2
  184. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
  185. package/lib/module/reanimated/index.js +2 -2
  186. package/lib/module/reanimated/index.js.map +1 -1
  187. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js +20 -0
  188. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js.map +1 -0
  189. package/lib/module/specs/NativeTrueSheetModule.js.map +1 -1
  190. package/lib/module/web/constants.js +16 -0
  191. package/lib/module/web/constants.js.map +1 -0
  192. package/lib/module/web/dom.js +10 -0
  193. package/lib/module/web/dom.js.map +1 -0
  194. package/lib/module/web/vaul/README.md +9 -0
  195. package/lib/module/web/vaul/browser.js +30 -0
  196. package/lib/module/web/vaul/browser.js.map +1 -0
  197. package/lib/module/web/vaul/constants.js +19 -0
  198. package/lib/module/web/vaul/constants.js.map +1 -0
  199. package/lib/module/web/vaul/context.js +59 -0
  200. package/lib/module/web/vaul/context.js.map +1 -0
  201. package/lib/module/web/vaul/helpers.js +99 -0
  202. package/lib/module/web/vaul/helpers.js.map +1 -0
  203. package/lib/module/web/vaul/index.js +1342 -0
  204. package/lib/module/web/vaul/index.js.map +1 -0
  205. package/lib/module/web/vaul/style.css +287 -0
  206. package/lib/module/web/vaul/style.css.d.js +2 -0
  207. package/lib/module/web/vaul/style.css.d.js.map +1 -0
  208. package/lib/module/web/vaul/types.js +2 -0
  209. package/lib/module/web/vaul/types.js.map +1 -0
  210. package/lib/module/web/vaul/use-composed-refs.js +34 -0
  211. package/lib/module/web/vaul/use-composed-refs.js.map +1 -0
  212. package/lib/module/web/vaul/use-controllable-state.js +54 -0
  213. package/lib/module/web/vaul/use-controllable-state.js.map +1 -0
  214. package/lib/module/web/vaul/use-position-fixed.js +123 -0
  215. package/lib/module/web/vaul/use-position-fixed.js.map +1 -0
  216. package/lib/module/web/vaul/use-prevent-scroll.js +258 -0
  217. package/lib/module/web/vaul/use-prevent-scroll.js.map +1 -0
  218. package/lib/module/web/vaul/use-scale-background.js +57 -0
  219. package/lib/module/web/vaul/use-scale-background.js.map +1 -0
  220. package/lib/module/web/vaul/use-snap-points.js +305 -0
  221. package/lib/module/web/vaul/use-snap-points.js.map +1 -0
  222. package/lib/typescript/src/TrueSheet.d.ts +57 -14
  223. package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
  224. package/lib/typescript/src/TrueSheet.types.d.ts +535 -55
  225. package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
  226. package/lib/typescript/src/TrueSheet.web.d.ts +5 -0
  227. package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -0
  228. package/lib/typescript/src/TrueSheetOverlay.d.ts +8 -0
  229. package/lib/typescript/src/TrueSheetOverlay.d.ts.map +1 -0
  230. package/lib/typescript/src/TrueSheetOverlay.web.d.ts +8 -0
  231. package/lib/typescript/src/TrueSheetOverlay.web.d.ts.map +1 -0
  232. package/lib/typescript/src/TrueSheetPeek.d.ts +9 -0
  233. package/lib/typescript/src/TrueSheetPeek.d.ts.map +1 -0
  234. package/lib/typescript/src/TrueSheetPeek.web.d.ts +28 -0
  235. package/lib/typescript/src/TrueSheetPeek.web.d.ts.map +1 -0
  236. package/lib/typescript/src/TrueSheetProvider.d.ts +18 -0
  237. package/lib/typescript/src/TrueSheetProvider.d.ts.map +1 -0
  238. package/lib/typescript/src/TrueSheetProvider.web.d.ts +27 -0
  239. package/lib/typescript/src/TrueSheetProvider.web.d.ts.map +1 -0
  240. package/lib/typescript/src/fabric/TrueSheetContainerViewNativeComponent.d.ts.map +1 -1
  241. package/lib/typescript/src/fabric/TrueSheetContentViewNativeComponent.d.ts.map +1 -1
  242. package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts +2 -0
  243. package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts.map +1 -1
  244. package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts +6 -0
  245. package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts.map +1 -0
  246. package/lib/typescript/src/fabric/TrueSheetOverlayViewNativeComponent.d.ts +6 -0
  247. package/lib/typescript/src/fabric/TrueSheetOverlayViewNativeComponent.d.ts.map +1 -0
  248. package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts +6 -0
  249. package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts.map +1 -0
  250. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +71 -16
  251. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
  252. package/lib/typescript/src/index.d.ts +3 -2
  253. package/lib/typescript/src/index.d.ts.map +1 -1
  254. package/lib/typescript/src/mocks/index.d.ts +47 -0
  255. package/lib/typescript/src/mocks/index.d.ts.map +1 -0
  256. package/lib/typescript/src/mocks/navigation.d.ts +70 -0
  257. package/lib/typescript/src/mocks/navigation.d.ts.map +1 -0
  258. package/lib/typescript/src/mocks/navigationExpoRouter.d.ts +22 -0
  259. package/lib/typescript/src/mocks/navigationExpoRouter.d.ts.map +1 -0
  260. package/lib/typescript/src/mocks/reanimated.d.ts +48 -0
  261. package/lib/typescript/src/mocks/reanimated.d.ts.map +1 -0
  262. package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts +5 -0
  263. package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts.map +1 -0
  264. package/lib/typescript/src/navigation/actions.d.ts +71 -0
  265. package/lib/typescript/src/navigation/actions.d.ts.map +1 -0
  266. package/lib/typescript/src/navigation/base-types.d.ts +9 -0
  267. package/lib/typescript/src/navigation/base-types.d.ts.map +1 -0
  268. package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts +3 -0
  269. package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts.map +1 -0
  270. package/lib/typescript/src/navigation/expo-router/base-types.d.ts +8 -0
  271. package/lib/typescript/src/navigation/expo-router/base-types.d.ts.map +1 -0
  272. package/lib/typescript/src/navigation/expo-router/index.d.ts +37 -0
  273. package/lib/typescript/src/navigation/expo-router/index.d.ts.map +1 -0
  274. package/lib/typescript/src/navigation/expo-router/types.d.ts +44 -0
  275. package/lib/typescript/src/navigation/expo-router/types.d.ts.map +1 -0
  276. package/lib/typescript/src/navigation/index.d.ts +45 -0
  277. package/lib/typescript/src/navigation/index.d.ts.map +1 -0
  278. package/lib/typescript/src/navigation/navigator.d.ts +7 -0
  279. package/lib/typescript/src/navigation/navigator.d.ts.map +1 -0
  280. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts +3 -0
  281. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts.map +1 -0
  282. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts +3 -0
  283. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts.map +1 -0
  284. package/lib/typescript/src/navigation/screen/index.d.ts +4 -0
  285. package/lib/typescript/src/navigation/screen/index.d.ts.map +1 -0
  286. package/lib/typescript/src/navigation/screen/types.d.ts +14 -0
  287. package/lib/typescript/src/navigation/screen/types.d.ts.map +1 -0
  288. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts +34 -0
  289. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -0
  290. package/lib/typescript/src/navigation/types.d.ts +213 -0
  291. package/lib/typescript/src/navigation/types.d.ts.map +1 -0
  292. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts +23 -0
  293. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts.map +1 -0
  294. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.d.ts.map +1 -1
  295. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts +41 -0
  296. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts.map +1 -0
  297. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts +8 -2
  298. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
  299. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts +15 -0
  300. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts.map +1 -0
  301. package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts +25 -3
  302. package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts.map +1 -1
  303. package/lib/typescript/src/web/constants.d.ts +14 -0
  304. package/lib/typescript/src/web/constants.d.ts.map +1 -0
  305. package/lib/typescript/src/web/dom.d.ts +7 -0
  306. package/lib/typescript/src/web/dom.d.ts.map +1 -0
  307. package/lib/typescript/src/web/vaul/browser.d.ts +8 -0
  308. package/lib/typescript/src/web/vaul/browser.d.ts.map +1 -0
  309. package/lib/typescript/src/web/vaul/constants.d.ts +14 -0
  310. package/lib/typescript/src/web/vaul/constants.d.ts.map +1 -0
  311. package/lib/typescript/src/web/vaul/context.d.ts +54 -0
  312. package/lib/typescript/src/web/vaul/context.d.ts.map +1 -0
  313. package/lib/typescript/src/web/vaul/helpers.d.ts +17 -0
  314. package/lib/typescript/src/web/vaul/helpers.d.ts.map +1 -0
  315. package/lib/typescript/src/web/vaul/index.d.ts +234 -0
  316. package/lib/typescript/src/web/vaul/index.d.ts.map +1 -0
  317. package/lib/typescript/src/web/vaul/types.d.ts +7 -0
  318. package/lib/typescript/src/web/vaul/types.d.ts.map +1 -0
  319. package/lib/typescript/src/web/vaul/use-composed-refs.d.ts +14 -0
  320. package/lib/typescript/src/web/vaul/use-composed-refs.d.ts.map +1 -0
  321. package/lib/typescript/src/web/vaul/use-controllable-state.d.ts +9 -0
  322. package/lib/typescript/src/web/vaul/use-controllable-state.d.ts.map +1 -0
  323. package/lib/typescript/src/web/vaul/use-position-fixed.d.ts +19 -0
  324. package/lib/typescript/src/web/vaul/use-position-fixed.d.ts.map +1 -0
  325. package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts +18 -0
  326. package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts.map +1 -0
  327. package/lib/typescript/src/web/vaul/use-scale-background.d.ts +2 -0
  328. package/lib/typescript/src/web/vaul/use-scale-background.d.ts.map +1 -0
  329. package/lib/typescript/src/web/vaul/use-snap-points.d.ts +38 -0
  330. package/lib/typescript/src/web/vaul/use-snap-points.d.ts.map +1 -0
  331. package/package.json +104 -37
  332. package/react-native.config.js +10 -2
  333. package/src/TrueSheet.tsx +424 -70
  334. package/src/TrueSheet.types.ts +602 -72
  335. package/src/TrueSheet.web.tsx +1437 -0
  336. package/src/TrueSheetOverlay.tsx +24 -0
  337. package/src/TrueSheetOverlay.web.tsx +33 -0
  338. package/src/TrueSheetPeek.tsx +11 -0
  339. package/src/TrueSheetPeek.web.tsx +64 -0
  340. package/src/TrueSheetProvider.tsx +33 -0
  341. package/src/TrueSheetProvider.web.tsx +220 -0
  342. package/src/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
  343. package/src/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
  344. package/src/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
  345. package/src/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
  346. package/src/fabric/TrueSheetOverlayViewNativeComponent.ts +12 -0
  347. package/src/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
  348. package/src/fabric/TrueSheetViewNativeComponent.ts +110 -18
  349. package/src/index.ts +3 -2
  350. package/src/mocks/index.ts +96 -0
  351. package/src/mocks/navigation.ts +79 -0
  352. package/src/mocks/navigationExpoRouter.ts +41 -0
  353. package/src/mocks/reanimated.ts +100 -0
  354. package/src/navigation/TrueSheetNavigatorContent.tsx +106 -0
  355. package/src/navigation/actions.ts +78 -0
  356. package/src/navigation/base-types.ts +20 -0
  357. package/src/navigation/createTrueSheetRouter.ts +194 -0
  358. package/src/navigation/expo-router/base-types.ts +18 -0
  359. package/src/navigation/expo-router/index.ts +90 -0
  360. package/src/navigation/expo-router/types.ts +116 -0
  361. package/src/navigation/index.ts +80 -0
  362. package/src/navigation/navigator.ts +18 -0
  363. package/src/navigation/screen/ReanimatedTrueSheetScreen.tsx +61 -0
  364. package/src/navigation/screen/TrueSheetScreen.tsx +54 -0
  365. package/src/navigation/screen/index.ts +3 -0
  366. package/src/navigation/screen/types.ts +19 -0
  367. package/src/navigation/screen/useSheetScreenState.ts +102 -0
  368. package/src/navigation/types.ts +302 -0
  369. package/src/navigation/useTrueSheetNavigation.ts +26 -0
  370. package/src/reanimated/ReanimatedTrueSheet.tsx +12 -7
  371. package/src/reanimated/ReanimatedTrueSheet.web.tsx +75 -0
  372. package/src/reanimated/ReanimatedTrueSheetProvider.tsx +12 -8
  373. package/src/reanimated/useReanimatedPositionChangeHandler.web.ts +31 -0
  374. package/src/specs/NativeTrueSheetModule.ts +28 -3
  375. package/src/web/constants.ts +13 -0
  376. package/src/web/dom.ts +9 -0
  377. package/src/web/vaul/README.md +9 -0
  378. package/src/web/vaul/browser.ts +38 -0
  379. package/src/web/vaul/constants.ts +24 -0
  380. package/src/web/vaul/context.ts +102 -0
  381. package/src/web/vaul/helpers.ts +131 -0
  382. package/src/web/vaul/index.tsx +1785 -0
  383. package/src/web/vaul/style.css +287 -0
  384. package/src/web/vaul/style.css.d.ts +1 -0
  385. package/src/web/vaul/types.ts +7 -0
  386. package/src/web/vaul/use-composed-refs.ts +35 -0
  387. package/src/web/vaul/use-controllable-state.ts +66 -0
  388. package/src/web/vaul/use-position-fixed.ts +147 -0
  389. package/src/web/vaul/use-prevent-scroll.ts +309 -0
  390. package/src/web/vaul/use-scale-background.ts +64 -0
  391. package/src/web/vaul/use-snap-points.ts +455 -0
  392. package/android/src/main/java/com/lodev09/truesheet/events/DetentChangeEvent.kt +0 -26
  393. package/android/src/main/java/com/lodev09/truesheet/events/DidDismissEvent.kt +0 -20
  394. package/android/src/main/java/com/lodev09/truesheet/events/DidPresentEvent.kt +0 -26
  395. package/android/src/main/java/com/lodev09/truesheet/events/DragBeginEvent.kt +0 -26
  396. package/android/src/main/java/com/lodev09/truesheet/events/DragChangeEvent.kt +0 -26
  397. package/android/src/main/java/com/lodev09/truesheet/events/DragEndEvent.kt +0 -26
  398. package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -20
  399. package/android/src/main/java/com/lodev09/truesheet/events/PositionChangeEvent.kt +0 -32
  400. package/android/src/main/java/com/lodev09/truesheet/events/SizeChangeEvent.kt +0 -27
  401. package/android/src/main/java/com/lodev09/truesheet/events/WillDismissEvent.kt +0 -20
  402. package/android/src/main/java/com/lodev09/truesheet/events/WillPresentEvent.kt +0 -26
  403. package/android/src/main/res/values/styles.xml +0 -8
  404. package/ios/events/OnDetentChangeEvent.h +0 -28
  405. package/ios/events/OnDetentChangeEvent.mm +0 -30
  406. package/ios/events/OnDidDismissEvent.h +0 -26
  407. package/ios/events/OnDidDismissEvent.mm +0 -25
  408. package/ios/events/OnDidPresentEvent.h +0 -28
  409. package/ios/events/OnDidPresentEvent.mm +0 -30
  410. package/ios/events/OnDragBeginEvent.h +0 -28
  411. package/ios/events/OnDragBeginEvent.mm +0 -30
  412. package/ios/events/OnDragChangeEvent.h +0 -28
  413. package/ios/events/OnDragChangeEvent.mm +0 -30
  414. package/ios/events/OnDragEndEvent.h +0 -28
  415. package/ios/events/OnDragEndEvent.mm +0 -30
  416. package/ios/events/OnMountEvent.mm +0 -25
  417. package/ios/events/OnPositionChangeEvent.mm +0 -32
  418. package/ios/events/OnSizeChangeEvent.h +0 -28
  419. package/ios/events/OnSizeChangeEvent.mm +0 -30
  420. package/ios/events/OnWillDismissEvent.mm +0 -25
  421. package/ios/events/OnWillPresentEvent.h +0 -28
  422. package/ios/events/OnWillPresentEvent.mm +0 -30
  423. package/ios/utils/LayoutUtil.h +0 -44
  424. package/ios/utils/LayoutUtil.mm +0 -50
  425. package/lib/module/TrueSheetGrabber.js +0 -51
  426. package/lib/module/TrueSheetGrabber.js.map +0 -1
  427. package/lib/typescript/src/TrueSheetGrabber.d.ts +0 -39
  428. package/lib/typescript/src/TrueSheetGrabber.d.ts.map +0 -1
  429. package/src/TrueSheetGrabber.tsx +0 -82
  430. package/src/__mocks__/index.js +0 -67
@@ -0,0 +1,96 @@
1
+ import React, { createElement, isValidElement, type ReactNode } from 'react';
2
+ import { View, type ViewProps } from 'react-native';
3
+
4
+ import type { TrueSheetProps, TrueSheetStaticMethods } from '../TrueSheet.types';
5
+
6
+ interface TrueSheetState {
7
+ shouldRenderNativeView: boolean;
8
+ }
9
+
10
+ /**
11
+ * Mock TrueSheet component for testing.
12
+ * Import from '@lodev09/react-native-true-sheet/mock' in your test setup.
13
+ */
14
+ export class TrueSheet extends React.Component<TrueSheetProps, TrueSheetState> {
15
+ static instances: Record<string, TrueSheet> = {};
16
+
17
+ static dismiss = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
18
+ static dismissStack = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
19
+ static present = jest.fn((_name: string, _index?: number, _animated?: boolean) =>
20
+ Promise.resolve()
21
+ );
22
+ static resize = jest.fn((_name: string, _index: number) => Promise.resolve());
23
+ static dismissAll = jest.fn((_animated?: boolean) => Promise.resolve());
24
+
25
+ dismiss = jest.fn((_animated?: boolean) => Promise.resolve());
26
+ dismissStack = jest.fn((_animated?: boolean) => Promise.resolve());
27
+ present = jest.fn((_index?: number, _animated?: boolean) => Promise.resolve());
28
+ resize = jest.fn((_index: number) => Promise.resolve());
29
+
30
+ componentDidMount() {
31
+ const { name } = this.props;
32
+ if (name) {
33
+ TrueSheet.instances[name] = this;
34
+ }
35
+ }
36
+
37
+ componentWillUnmount() {
38
+ const { name } = this.props;
39
+ if (name) {
40
+ delete TrueSheet.instances[name];
41
+ }
42
+ }
43
+
44
+ private renderHeader(): ReactNode {
45
+ const { header } = this.props;
46
+ if (!header) return null;
47
+ return isValidElement(header) ? header : createElement(header);
48
+ }
49
+
50
+ private renderFooter(): ReactNode {
51
+ const { footer } = this.props;
52
+ if (!footer) return null;
53
+ return isValidElement(footer) ? footer : createElement(footer);
54
+ }
55
+
56
+ render() {
57
+ const { children, style } = this.props;
58
+ return React.createElement(View, { style }, this.renderHeader(), children, this.renderFooter());
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Mock TrueSheetPeek component for testing.
64
+ */
65
+ export function TrueSheetPeek({ children, ...rest }: ViewProps) {
66
+ return React.createElement(View, rest, children);
67
+ }
68
+
69
+ /**
70
+ * Mock TrueSheetOverlay component for testing.
71
+ */
72
+ export function TrueSheetOverlay({ children, ...rest }: ViewProps) {
73
+ return React.createElement(View, rest, children);
74
+ }
75
+
76
+ /**
77
+ * Mock TrueSheetProvider for testing.
78
+ */
79
+ export function TrueSheetProvider({ children }: { children: React.ReactNode }) {
80
+ return children;
81
+ }
82
+
83
+ /**
84
+ * Mock useTrueSheet hook for testing.
85
+ */
86
+ export function useTrueSheet(): TrueSheetStaticMethods {
87
+ return {
88
+ present: TrueSheet.present,
89
+ dismiss: TrueSheet.dismiss,
90
+ dismissStack: TrueSheet.dismissStack,
91
+ resize: TrueSheet.resize,
92
+ dismissAll: TrueSheet.dismissAll,
93
+ };
94
+ }
95
+
96
+ export * from '../TrueSheet.types';
@@ -0,0 +1,79 @@
1
+ import type { ParamListBase } from '@react-navigation/native';
2
+
3
+ import type { TrueSheetNavigationProp } from '../navigation/types';
4
+
5
+ /**
6
+ * Mock createTrueSheetNavigator for testing.
7
+ * Import from '@lodev09/react-native-true-sheet/navigation/mock' in your test setup.
8
+ */
9
+ export const createTrueSheetNavigator = jest.fn(() => ({
10
+ Navigator: jest.fn(({ children }: { children: React.ReactNode }) => children),
11
+ Screen: jest.fn(() => null),
12
+ Group: jest.fn(() => null),
13
+ }));
14
+
15
+ /**
16
+ * Mock createTrueSheetScreen for testing the static API.
17
+ */
18
+ export const createTrueSheetScreen = jest.fn((config: object) => config);
19
+
20
+ /**
21
+ * Mock TrueSheetActions for testing.
22
+ */
23
+ export const TrueSheetActions = {
24
+ push: jest.fn((name: string, params?: object) => ({ type: 'PUSH', payload: { name, params } })),
25
+ pop: jest.fn((count?: number) => ({ type: 'POP', payload: { count } })),
26
+ popTo: jest.fn((name: string, params?: object) => ({
27
+ type: 'POP_TO',
28
+ payload: { name, params },
29
+ })),
30
+ popToTop: jest.fn(() => ({ type: 'POP_TO_TOP' })),
31
+ replace: jest.fn((name: string, params?: object) => ({
32
+ type: 'REPLACE',
33
+ payload: { name, params },
34
+ })),
35
+ resize: jest.fn((index: number) => ({ type: 'RESIZE', index })),
36
+ dismiss: jest.fn(() => ({ type: 'DISMISS' })),
37
+ remove: jest.fn(() => ({ type: 'REMOVE' })),
38
+ };
39
+
40
+ /**
41
+ * Mock useTrueSheetNavigation hook for testing.
42
+ */
43
+ export const useTrueSheetNavigation = jest.fn(<T extends ParamListBase = ParamListBase>() => {
44
+ // Partial drops react-navigation's private-brand member (PrivateValueStore),
45
+ // which no mock can implement — the members themselves stay type-checked.
46
+ const navigation: Partial<TrueSheetNavigationProp<T>> = {
47
+ navigate: jest.fn(),
48
+ goBack: jest.fn(),
49
+ reset: jest.fn(),
50
+ setParams: jest.fn(),
51
+ dispatch: jest.fn(),
52
+ isFocused: jest.fn(() => true),
53
+ canGoBack: jest.fn(() => true),
54
+ getId: jest.fn(),
55
+ getParent: jest.fn(),
56
+ getState: jest.fn(),
57
+ addListener: jest.fn(() => jest.fn()),
58
+ removeListener: jest.fn(),
59
+ setOptions: jest.fn(),
60
+ push: jest.fn(),
61
+ pop: jest.fn(),
62
+ popTo: jest.fn(),
63
+ popToTop: jest.fn(),
64
+ replace: jest.fn(),
65
+ resize: jest.fn(),
66
+ };
67
+ return navigation as TrueSheetNavigationProp<T>;
68
+ });
69
+
70
+ export type { TrueSheetActionType } from '../navigation/actions';
71
+ export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
72
+ export type {
73
+ TrueSheetNavigationEventMap,
74
+ TrueSheetNavigationHelpers,
75
+ TrueSheetNavigationOptions,
76
+ TrueSheetNavigationProp,
77
+ TrueSheetNavigationState,
78
+ TrueSheetScreenProps,
79
+ } from '../navigation/types';
@@ -0,0 +1,41 @@
1
+ import type { ParamListBase } from '../navigation/expo-router/base-types';
2
+ import type { TrueSheetNavigationProp } from '../navigation/expo-router/types';
3
+ import {
4
+ TrueSheetActions,
5
+ useTrueSheetNavigation as useTrueSheetNavigationMock,
6
+ } from './navigation';
7
+
8
+ /**
9
+ * Mock Sheet layout for testing.
10
+ * Import from '@lodev09/react-native-true-sheet/navigation/expo-router/mock' in your test setup.
11
+ */
12
+ export const Sheet = Object.assign(
13
+ jest.fn(({ children }: { children: React.ReactNode }) => children),
14
+ {
15
+ Screen: jest.fn(() => null),
16
+ Protected: jest.fn(() => null),
17
+ }
18
+ );
19
+
20
+ /**
21
+ * Mock useTrueSheetNavigation hook for testing.
22
+ */
23
+ export const useTrueSheetNavigation = jest.fn(
24
+ // Double cast: the shared mock is typed against React Navigation, this entry
25
+ // against Expo Router's vendored copy — identical shapes, unrelated declarations
26
+ <T extends ParamListBase = ParamListBase>(): TrueSheetNavigationProp<T> =>
27
+ useTrueSheetNavigationMock() as unknown as TrueSheetNavigationProp<T>
28
+ );
29
+
30
+ export { TrueSheetActions };
31
+
32
+ export type { TrueSheetActionType } from '../navigation/actions';
33
+ export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
34
+ export type {
35
+ TrueSheetNavigationEventMap,
36
+ TrueSheetNavigationHelpers,
37
+ TrueSheetNavigationOptions,
38
+ TrueSheetNavigationProp,
39
+ TrueSheetNavigationState,
40
+ TrueSheetScreenProps,
41
+ } from '../navigation/expo-router/types';
@@ -0,0 +1,100 @@
1
+ import React, { createElement, isValidElement, type ReactNode } from 'react';
2
+ import { View } from 'react-native';
3
+ import type { SharedValue } from 'react-native-reanimated';
4
+
5
+ import type { TrueSheetProps, PositionChangeEventPayload } from '../TrueSheet.types';
6
+
7
+ interface TrueSheetState {
8
+ shouldRenderNativeView: boolean;
9
+ }
10
+
11
+ interface MockReanimatedTrueSheetContextValue {
12
+ animatedPosition: SharedValue<number>;
13
+ animatedIndex: SharedValue<number>;
14
+ animatedDetent: SharedValue<number>;
15
+ }
16
+
17
+ const createMockSharedValue = <T>(initialValue: T): SharedValue<T> => ({
18
+ value: initialValue,
19
+ get: () => initialValue,
20
+ set: () => {},
21
+ addListener: () => {},
22
+ removeListener: () => {},
23
+ modify: () => {},
24
+ });
25
+
26
+ /**
27
+ * Mock ReanimatedTrueSheet component for testing.
28
+ * Import from '@lodev09/react-native-true-sheet/reanimated/mock' in your test setup.
29
+ */
30
+ export class ReanimatedTrueSheet extends React.Component<TrueSheetProps, TrueSheetState> {
31
+ static instances: Record<string, ReanimatedTrueSheet> = {};
32
+
33
+ static dismiss = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
34
+ static dismissStack = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
35
+ static present = jest.fn((_name: string, _index?: number, _animated?: boolean) =>
36
+ Promise.resolve()
37
+ );
38
+ static resize = jest.fn((_name: string, _index: number) => Promise.resolve());
39
+
40
+ dismiss = jest.fn((_animated?: boolean) => Promise.resolve());
41
+ dismissStack = jest.fn((_animated?: boolean) => Promise.resolve());
42
+ present = jest.fn((_index?: number, _animated?: boolean) => Promise.resolve());
43
+ resize = jest.fn((_index: number) => Promise.resolve());
44
+
45
+ componentDidMount() {
46
+ const { name } = this.props;
47
+ if (name) {
48
+ ReanimatedTrueSheet.instances[name] = this;
49
+ }
50
+ }
51
+
52
+ componentWillUnmount() {
53
+ const { name } = this.props;
54
+ if (name) {
55
+ delete ReanimatedTrueSheet.instances[name];
56
+ }
57
+ }
58
+
59
+ private renderHeader(): ReactNode {
60
+ const { header } = this.props;
61
+ if (!header) return null;
62
+ return isValidElement(header) ? header : createElement(header);
63
+ }
64
+
65
+ private renderFooter(): ReactNode {
66
+ const { footer } = this.props;
67
+ if (!footer) return null;
68
+ return isValidElement(footer) ? footer : createElement(footer);
69
+ }
70
+
71
+ render() {
72
+ const { children, style } = this.props;
73
+ return React.createElement(View, { style }, this.renderHeader(), children, this.renderFooter());
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Mock ReanimatedTrueSheetProvider for testing.
79
+ */
80
+ export function ReanimatedTrueSheetProvider({ children }: { children: React.ReactNode }) {
81
+ return children;
82
+ }
83
+
84
+ /**
85
+ * Mock useReanimatedTrueSheet hook for testing.
86
+ */
87
+ export const useReanimatedTrueSheet = jest.fn(
88
+ (): MockReanimatedTrueSheetContextValue => ({
89
+ animatedPosition: createMockSharedValue(0),
90
+ animatedIndex: createMockSharedValue(-1),
91
+ animatedDetent: createMockSharedValue(0),
92
+ })
93
+ );
94
+
95
+ /**
96
+ * Mock useReanimatedPositionChangeHandler hook for testing.
97
+ */
98
+ export const useReanimatedPositionChangeHandler = jest.fn(
99
+ (_handler: (payload: PositionChangeEventPayload) => void, _dependencies?: unknown[]) => jest.fn()
100
+ );
@@ -0,0 +1,106 @@
1
+ import type { NavigatorArgs } from 'standard-navigation';
2
+
3
+ import type {
4
+ TrueSheetNavigationOptions,
5
+ TrueSheetNavigatorContentExtraProps,
6
+ TrueSheetStandardEventMap,
7
+ } from './types';
8
+ import { TrueSheetScreen, type TrueSheetScreenProps } from './screen';
9
+
10
+ let ReanimatedTrueSheetScreen: React.ComponentType<TrueSheetScreenProps> | null = null;
11
+
12
+ const getReanimatedScreen = (): React.ComponentType<TrueSheetScreenProps> => {
13
+ if (!ReanimatedTrueSheetScreen) {
14
+ ReanimatedTrueSheetScreen =
15
+ require('./screen/ReanimatedTrueSheetScreen').ReanimatedTrueSheetScreen;
16
+ }
17
+ return ReanimatedTrueSheetScreen!;
18
+ };
19
+
20
+ const DEFAULT_DETENTS: ('auto' | number)[] = ['auto'];
21
+
22
+ const clampDetentIndex = (index: number, detentsLength: number): number =>
23
+ Math.min(index, Math.max(detentsLength - 1, 0));
24
+
25
+ export type TrueSheetNavigatorContentProps = NavigatorArgs<
26
+ TrueSheetNavigationOptions,
27
+ TrueSheetStandardEventMap
28
+ > &
29
+ TrueSheetNavigatorContentExtraProps;
30
+
31
+ export const TrueSheetNavigatorContent = ({
32
+ routes,
33
+ dispatch,
34
+ descriptors,
35
+ emitter,
36
+ }: TrueSheetNavigatorContentProps) => {
37
+ // First route is the base screen, rest are sheets.
38
+ // Rendered from the raw routes (not the standard state) so custom fields are
39
+ // available and preloaded routes never present as sheets.
40
+ const [baseRoute, ...sheetRoutes] = routes;
41
+
42
+ const baseDescriptor = baseRoute ? descriptors[baseRoute.key] : null;
43
+
44
+ return (
45
+ <>
46
+ {/* Render base screen */}
47
+ {baseDescriptor?.render()}
48
+
49
+ {/* Render sheet screens */}
50
+ {sheetRoutes.map((route) => {
51
+ const descriptor = descriptors[route.key];
52
+
53
+ if (!descriptor) {
54
+ return null;
55
+ }
56
+
57
+ const { options, render } = descriptor;
58
+ const {
59
+ detentIndex = 0,
60
+ detents = DEFAULT_DETENTS,
61
+ reanimated,
62
+ positionChangeHandler,
63
+ ...sheetProps
64
+ } = options;
65
+ const resolvedIndex = clampDetentIndex(route.resizeIndex ?? detentIndex, detents.length);
66
+
67
+ if (reanimated) {
68
+ const ReanimatedScreen = getReanimatedScreen();
69
+ return (
70
+ <ReanimatedScreen
71
+ key={route.key}
72
+ routeKey={route.key}
73
+ closing={route.closing}
74
+ detentIndex={resolvedIndex}
75
+ resizeKey={route.resizeKey}
76
+ detents={detents}
77
+ dispatch={dispatch}
78
+ emit={emitter.emit}
79
+ positionChangeHandler={positionChangeHandler}
80
+ {...sheetProps}
81
+ >
82
+ {render()}
83
+ </ReanimatedScreen>
84
+ );
85
+ }
86
+
87
+ return (
88
+ <TrueSheetScreen
89
+ key={route.key}
90
+ routeKey={route.key}
91
+ closing={route.closing}
92
+ detentIndex={resolvedIndex}
93
+ resizeKey={route.resizeKey}
94
+ detents={detents}
95
+ dispatch={dispatch}
96
+ emit={emitter.emit}
97
+ positionChangeHandler={positionChangeHandler}
98
+ {...sheetProps}
99
+ >
100
+ {render()}
101
+ </TrueSheetScreen>
102
+ );
103
+ })}
104
+ </>
105
+ );
106
+ };
@@ -0,0 +1,78 @@
1
+ export type TrueSheetActionType =
2
+ | {
3
+ type: 'PUSH';
4
+ payload: { name: string; params?: object };
5
+ source?: string;
6
+ target?: string;
7
+ }
8
+ | {
9
+ type: 'POP';
10
+ payload: { count: number };
11
+ source?: string;
12
+ target?: string;
13
+ }
14
+ | {
15
+ type: 'POP_TO';
16
+ payload: { name: string; params?: object; merge?: boolean };
17
+ source?: string;
18
+ target?: string;
19
+ }
20
+ | {
21
+ type: 'POP_TO_TOP';
22
+ source?: string;
23
+ target?: string;
24
+ }
25
+ | {
26
+ type: 'REPLACE';
27
+ payload: { name: string; params?: object };
28
+ source?: string;
29
+ target?: string;
30
+ }
31
+ | {
32
+ type: 'GO_BACK';
33
+ source?: string;
34
+ target?: string;
35
+ }
36
+ | {
37
+ type: 'RESIZE';
38
+ index: number;
39
+ source?: string;
40
+ target?: string;
41
+ }
42
+ | {
43
+ type: 'DISMISS';
44
+ source?: string;
45
+ target?: string;
46
+ }
47
+ | {
48
+ type: 'REMOVE';
49
+ source?: string;
50
+ target?: string;
51
+ };
52
+
53
+ /**
54
+ * Action creators for the TrueSheet navigator.
55
+ * Plain objects matching `StackActions` shapes, plus sheet-specific actions.
56
+ */
57
+ export const TrueSheetActions = {
58
+ push: (name: string, params?: object): TrueSheetActionType => ({
59
+ type: 'PUSH',
60
+ payload: { name, params },
61
+ }),
62
+ pop: (count: number = 1): TrueSheetActionType => ({
63
+ type: 'POP',
64
+ payload: { count },
65
+ }),
66
+ popTo: (name: string, params?: object, options?: { merge?: boolean }): TrueSheetActionType => ({
67
+ type: 'POP_TO',
68
+ payload: { name, params, merge: options?.merge },
69
+ }),
70
+ popToTop: (): TrueSheetActionType => ({ type: 'POP_TO_TOP' }),
71
+ replace: (name: string, params?: object): TrueSheetActionType => ({
72
+ type: 'REPLACE',
73
+ payload: { name, params },
74
+ }),
75
+ resize: (index: number): TrueSheetActionType => ({ type: 'RESIZE', index }),
76
+ dismiss: (): TrueSheetActionType => ({ type: 'DISMISS' }),
77
+ remove: (): TrueSheetActionType => ({ type: 'REMOVE' }),
78
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Base navigation types for the React Navigation entry point.
3
+ *
4
+ * The Expo Router entry has its own copy sourced from `expo-router/react-navigation`
5
+ * (see `./expo-router/base-types`) because Expo Router apps never install
6
+ * `@react-navigation/*` — importing it there would silently resolve to `any`.
7
+ */
8
+ export type {
9
+ DefaultNavigatorOptions,
10
+ Descriptor,
11
+ NavigationAction,
12
+ NavigationHelpers,
13
+ NavigationProp,
14
+ NavigationState,
15
+ ParamListBase,
16
+ RouteProp,
17
+ Router,
18
+ StackActionHelpers,
19
+ StackRouterOptions,
20
+ } from '@react-navigation/core';