@lodev09/react-native-true-sheet 4.0.0-beta.0 → 4.0.0-beta.2

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 (388) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +42 -31
  3. package/RNTrueSheet.podspec +10 -2
  4. package/android/build.gradle +2 -1
  5. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +174 -49
  6. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerViewManager.kt +7 -0
  7. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentView.kt +371 -18
  8. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentViewManager.kt +14 -0
  9. package/android/src/main/java/com/lodev09/truesheet/TrueSheetFooterView.kt +156 -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/TrueSheetPackage.kt +5 -4
  15. package/android/src/main/java/com/lodev09/truesheet/TrueSheetPeekView.kt +72 -0
  16. package/android/src/main/java/com/lodev09/truesheet/TrueSheetPeekViewManager.kt +33 -0
  17. package/android/src/main/java/com/lodev09/truesheet/TrueSheetStateUpdater.kt +45 -0
  18. package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +526 -231
  19. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +1224 -603
  20. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +136 -29
  21. package/android/src/main/java/com/lodev09/truesheet/core/RNScreensEventObserver.kt +63 -0
  22. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetBottomSheetBehavior.kt +36 -0
  23. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetBottomSheetView.kt +255 -0
  24. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetCoordinatorLayout.kt +303 -0
  25. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDetentCalculator.kt +277 -0
  26. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDimView.kt +162 -0
  27. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetGrabberView.kt +180 -0
  28. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetKeyboardObserver.kt +207 -0
  29. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetStackManager.kt +220 -0
  30. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetDragEvents.kt +71 -0
  31. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetFocusEvents.kt +65 -0
  32. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetLifecycleEvents.kt +112 -0
  33. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetStateEvents.kt +56 -0
  34. package/android/src/main/java/com/lodev09/truesheet/utils/KeyboardUtils.kt +84 -0
  35. package/android/src/main/java/com/lodev09/truesheet/utils/ScreenUtils.kt +93 -67
  36. package/android/src/main/java/com/lodev09/truesheet/utils/TouchEventDeduper.kt +31 -0
  37. package/android/src/main/java/com/lodev09/truesheet/utils/ViewUtils.kt +30 -0
  38. package/android/src/main/jni/CMakeLists.txt +63 -0
  39. package/android/src/main/jni/TrueSheetSpec.h +19 -0
  40. package/android/src/main/jni/TrueSheetStateUpdater.cpp +96 -0
  41. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewComponentDescriptor.h +24 -0
  42. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.cpp +43 -0
  43. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.h +28 -0
  44. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.cpp +11 -0
  45. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.h +37 -0
  46. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewComponentDescriptor.h +24 -0
  47. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.cpp +56 -0
  48. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.h +28 -0
  49. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.cpp +11 -0
  50. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.h +41 -0
  51. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.cpp +18 -0
  52. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.h +16 -0
  53. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewComponentDescriptor.h +28 -0
  54. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.cpp +61 -0
  55. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.h +45 -0
  56. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.cpp +23 -0
  57. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.h +52 -0
  58. package/ios/TrueSheetContainerView.h +81 -6
  59. package/ios/TrueSheetContainerView.mm +275 -21
  60. package/ios/TrueSheetContentView.h +38 -1
  61. package/ios/TrueSheetContentView.mm +413 -43
  62. package/ios/TrueSheetFooterView.h +27 -2
  63. package/ios/TrueSheetFooterView.mm +141 -35
  64. package/ios/{events/OnDidDismissEvent.h → TrueSheetHeaderView.h} +10 -7
  65. package/ios/TrueSheetHeaderView.mm +64 -0
  66. package/ios/TrueSheetModule.mm +92 -5
  67. package/ios/TrueSheetPeekView.h +32 -0
  68. package/ios/TrueSheetPeekView.mm +99 -0
  69. package/ios/TrueSheetView.h +7 -15
  70. package/ios/TrueSheetView.mm +633 -215
  71. package/ios/TrueSheetViewController.h +84 -16
  72. package/ios/TrueSheetViewController.mm +1133 -333
  73. package/ios/core/RNScreensEventObserver.h +46 -0
  74. package/ios/core/RNScreensEventObserver.mm +280 -0
  75. package/ios/core/TrueSheetBlurView.h +27 -0
  76. package/ios/core/TrueSheetBlurView.mm +82 -0
  77. package/ios/core/TrueSheetDetentCalculator.h +107 -0
  78. package/ios/core/TrueSheetDetentCalculator.mm +197 -0
  79. package/ios/core/TrueSheetGrabberView.h +72 -0
  80. package/ios/core/TrueSheetGrabberView.mm +178 -0
  81. package/ios/core/TrueSheetKeyboardObserver.h +39 -0
  82. package/ios/core/TrueSheetKeyboardObserver.mm +112 -0
  83. package/ios/events/TrueSheetDragEvents.h +39 -0
  84. package/ios/events/TrueSheetDragEvents.mm +62 -0
  85. package/ios/events/{OnPositionChangeEvent.h → TrueSheetFocusEvents.h} +8 -5
  86. package/ios/events/TrueSheetFocusEvents.mm +49 -0
  87. package/ios/events/TrueSheetLifecycleEvents.h +40 -0
  88. package/ios/events/TrueSheetLifecycleEvents.mm +71 -0
  89. package/ios/events/TrueSheetStateEvents.h +35 -0
  90. package/ios/events/TrueSheetStateEvents.mm +49 -0
  91. package/ios/tvos/TrueSheetStubs.mm +154 -0
  92. package/ios/{events/OnMountEvent.h → utils/BlurUtil.h} +5 -7
  93. package/ios/utils/BlurUtil.mm +69 -0
  94. package/ios/utils/GestureUtil.h +7 -0
  95. package/ios/utils/GestureUtil.mm +12 -0
  96. package/ios/utils/PlatformUtil.h +15 -0
  97. package/ios/utils/UIView+FirstResponder.h +15 -0
  98. package/ios/utils/UIView+FirstResponder.mm +26 -0
  99. package/ios/{events/OnWillDismissEvent.h → utils/UIView+ScrollEdgeInteraction.h} +6 -7
  100. package/ios/utils/UIView+ScrollEdgeInteraction.mm +62 -0
  101. package/ios/utils/WindowUtil.mm +17 -1
  102. package/lib/module/TrueSheet.js +230 -64
  103. package/lib/module/TrueSheet.js.map +1 -1
  104. package/lib/module/TrueSheet.web.js +1203 -0
  105. package/lib/module/TrueSheet.web.js.map +1 -0
  106. package/lib/module/TrueSheetPeek.js +15 -0
  107. package/lib/module/TrueSheetPeek.js.map +1 -0
  108. package/lib/module/TrueSheetPeek.web.js +55 -0
  109. package/lib/module/TrueSheetPeek.web.js.map +1 -0
  110. package/lib/module/TrueSheetProvider.js +28 -0
  111. package/lib/module/TrueSheetProvider.js.map +1 -0
  112. package/lib/module/TrueSheetProvider.web.js +157 -0
  113. package/lib/module/TrueSheetProvider.web.js.map +1 -0
  114. package/lib/module/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
  115. package/lib/module/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
  116. package/lib/module/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
  117. package/lib/module/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
  118. package/lib/module/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
  119. package/lib/module/fabric/TrueSheetViewNativeComponent.ts +105 -18
  120. package/lib/module/index.js +3 -3
  121. package/lib/module/index.js.map +1 -1
  122. package/lib/module/mocks/index.js +93 -0
  123. package/lib/module/mocks/index.js.map +1 -0
  124. package/lib/module/mocks/navigation.js +95 -0
  125. package/lib/module/mocks/navigation.js.map +1 -0
  126. package/lib/module/mocks/navigationExpoRouter.js +21 -0
  127. package/lib/module/mocks/navigationExpoRouter.js.map +1 -0
  128. package/lib/module/mocks/reanimated.js +91 -0
  129. package/lib/module/mocks/reanimated.js.map +1 -0
  130. package/lib/module/navigation/TrueSheetNavigatorContent.js +73 -0
  131. package/lib/module/navigation/TrueSheetNavigatorContent.js.map +1 -0
  132. package/lib/module/navigation/actions.js +50 -0
  133. package/lib/module/navigation/actions.js.map +1 -0
  134. package/lib/module/navigation/createTrueSheetRouter.js +166 -0
  135. package/lib/module/navigation/createTrueSheetRouter.js.map +1 -0
  136. package/lib/module/navigation/expo-router/index.js +48 -0
  137. package/lib/module/navigation/expo-router/index.js.map +1 -0
  138. package/lib/module/navigation/index.js +47 -0
  139. package/lib/module/navigation/index.js.map +1 -0
  140. package/lib/module/navigation/navigator.js +10 -0
  141. package/lib/module/navigation/navigator.js.map +1 -0
  142. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +56 -0
  143. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -0
  144. package/lib/module/navigation/screen/TrueSheetScreen.js +49 -0
  145. package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -0
  146. package/lib/module/navigation/screen/index.js +5 -0
  147. package/lib/module/navigation/screen/index.js.map +1 -0
  148. package/lib/module/navigation/screen/types.js +4 -0
  149. package/lib/module/navigation/screen/types.js.map +1 -0
  150. package/lib/module/navigation/screen/useSheetScreenState.js +68 -0
  151. package/lib/module/navigation/screen/useSheetScreenState.js.map +1 -0
  152. package/lib/module/navigation/types.js +4 -0
  153. package/lib/module/navigation/types.js.map +1 -0
  154. package/lib/module/navigation/useTrueSheetNavigation.js +24 -0
  155. package/lib/module/navigation/useTrueSheetNavigation.js.map +1 -0
  156. package/lib/module/reanimated/ReanimatedTrueSheet.js +15 -9
  157. package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
  158. package/lib/module/reanimated/ReanimatedTrueSheet.web.js +81 -0
  159. package/lib/module/reanimated/ReanimatedTrueSheet.web.js.map +1 -0
  160. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +4 -2
  161. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
  162. package/lib/module/reanimated/index.js +2 -2
  163. package/lib/module/reanimated/index.js.map +1 -1
  164. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js +20 -0
  165. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js.map +1 -0
  166. package/lib/module/specs/NativeTrueSheetModule.js.map +1 -1
  167. package/lib/module/web/constants.js +16 -0
  168. package/lib/module/web/constants.js.map +1 -0
  169. package/lib/module/web/dom.js +10 -0
  170. package/lib/module/web/dom.js.map +1 -0
  171. package/lib/module/web/vaul/README.md +9 -0
  172. package/lib/module/web/vaul/browser.js +30 -0
  173. package/lib/module/web/vaul/browser.js.map +1 -0
  174. package/lib/module/web/vaul/constants.js +15 -0
  175. package/lib/module/web/vaul/constants.js.map +1 -0
  176. package/lib/module/web/vaul/context.js +59 -0
  177. package/lib/module/web/vaul/context.js.map +1 -0
  178. package/lib/module/web/vaul/helpers.js +99 -0
  179. package/lib/module/web/vaul/helpers.js.map +1 -0
  180. package/lib/module/web/vaul/index.js +1309 -0
  181. package/lib/module/web/vaul/index.js.map +1 -0
  182. package/lib/module/web/vaul/style.css +287 -0
  183. package/lib/module/web/vaul/style.css.d.js +2 -0
  184. package/lib/module/web/vaul/style.css.d.js.map +1 -0
  185. package/lib/module/web/vaul/types.js +2 -0
  186. package/lib/module/web/vaul/types.js.map +1 -0
  187. package/lib/module/web/vaul/use-composed-refs.js +34 -0
  188. package/lib/module/web/vaul/use-composed-refs.js.map +1 -0
  189. package/lib/module/web/vaul/use-controllable-state.js +54 -0
  190. package/lib/module/web/vaul/use-controllable-state.js.map +1 -0
  191. package/lib/module/web/vaul/use-position-fixed.js +123 -0
  192. package/lib/module/web/vaul/use-position-fixed.js.map +1 -0
  193. package/lib/module/web/vaul/use-prevent-scroll.js +258 -0
  194. package/lib/module/web/vaul/use-prevent-scroll.js.map +1 -0
  195. package/lib/module/web/vaul/use-scale-background.js +57 -0
  196. package/lib/module/web/vaul/use-scale-background.js.map +1 -0
  197. package/lib/module/web/vaul/use-snap-points.js +305 -0
  198. package/lib/module/web/vaul/use-snap-points.js.map +1 -0
  199. package/lib/typescript/src/TrueSheet.d.ts +51 -14
  200. package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
  201. package/lib/typescript/src/TrueSheet.types.d.ts +463 -54
  202. package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
  203. package/lib/typescript/src/TrueSheet.web.d.ts +5 -0
  204. package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -0
  205. package/lib/typescript/src/TrueSheetPeek.d.ts +9 -0
  206. package/lib/typescript/src/TrueSheetPeek.d.ts.map +1 -0
  207. package/lib/typescript/src/TrueSheetPeek.web.d.ts +28 -0
  208. package/lib/typescript/src/TrueSheetPeek.web.d.ts.map +1 -0
  209. package/lib/typescript/src/TrueSheetProvider.d.ts +18 -0
  210. package/lib/typescript/src/TrueSheetProvider.d.ts.map +1 -0
  211. package/lib/typescript/src/TrueSheetProvider.web.d.ts +27 -0
  212. package/lib/typescript/src/TrueSheetProvider.web.d.ts.map +1 -0
  213. package/lib/typescript/src/fabric/TrueSheetContainerViewNativeComponent.d.ts.map +1 -1
  214. package/lib/typescript/src/fabric/TrueSheetContentViewNativeComponent.d.ts.map +1 -1
  215. package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts +2 -0
  216. package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts.map +1 -1
  217. package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts +6 -0
  218. package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts.map +1 -0
  219. package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts +6 -0
  220. package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts.map +1 -0
  221. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +67 -16
  222. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
  223. package/lib/typescript/src/index.d.ts +2 -2
  224. package/lib/typescript/src/index.d.ts.map +1 -1
  225. package/lib/typescript/src/mocks/index.d.ts +43 -0
  226. package/lib/typescript/src/mocks/index.d.ts.map +1 -0
  227. package/lib/typescript/src/mocks/navigation.d.ts +70 -0
  228. package/lib/typescript/src/mocks/navigation.d.ts.map +1 -0
  229. package/lib/typescript/src/mocks/navigationExpoRouter.d.ts +22 -0
  230. package/lib/typescript/src/mocks/navigationExpoRouter.d.ts.map +1 -0
  231. package/lib/typescript/src/mocks/reanimated.d.ts +48 -0
  232. package/lib/typescript/src/mocks/reanimated.d.ts.map +1 -0
  233. package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts +5 -0
  234. package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts.map +1 -0
  235. package/lib/typescript/src/navigation/actions.d.ts +71 -0
  236. package/lib/typescript/src/navigation/actions.d.ts.map +1 -0
  237. package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts +14 -0
  238. package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts.map +1 -0
  239. package/lib/typescript/src/navigation/expo-router/index.d.ts +37 -0
  240. package/lib/typescript/src/navigation/expo-router/index.d.ts.map +1 -0
  241. package/lib/typescript/src/navigation/index.d.ts +46 -0
  242. package/lib/typescript/src/navigation/index.d.ts.map +1 -0
  243. package/lib/typescript/src/navigation/navigator.d.ts +7 -0
  244. package/lib/typescript/src/navigation/navigator.d.ts.map +1 -0
  245. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts +3 -0
  246. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts.map +1 -0
  247. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts +3 -0
  248. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts.map +1 -0
  249. package/lib/typescript/src/navigation/screen/index.d.ts +4 -0
  250. package/lib/typescript/src/navigation/screen/index.d.ts.map +1 -0
  251. package/lib/typescript/src/navigation/screen/types.d.ts +14 -0
  252. package/lib/typescript/src/navigation/screen/types.d.ts.map +1 -0
  253. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts +33 -0
  254. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -0
  255. package/lib/typescript/src/navigation/types.d.ts +177 -0
  256. package/lib/typescript/src/navigation/types.d.ts.map +1 -0
  257. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts +23 -0
  258. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts.map +1 -0
  259. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.d.ts.map +1 -1
  260. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts +41 -0
  261. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts.map +1 -0
  262. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts +8 -2
  263. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
  264. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts +15 -0
  265. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts.map +1 -0
  266. package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts +25 -3
  267. package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts.map +1 -1
  268. package/lib/typescript/src/web/constants.d.ts +14 -0
  269. package/lib/typescript/src/web/constants.d.ts.map +1 -0
  270. package/lib/typescript/src/web/dom.d.ts +7 -0
  271. package/lib/typescript/src/web/dom.d.ts.map +1 -0
  272. package/lib/typescript/src/web/vaul/browser.d.ts +8 -0
  273. package/lib/typescript/src/web/vaul/browser.d.ts.map +1 -0
  274. package/lib/typescript/src/web/vaul/constants.d.ts +13 -0
  275. package/lib/typescript/src/web/vaul/constants.d.ts.map +1 -0
  276. package/lib/typescript/src/web/vaul/context.d.ts +53 -0
  277. package/lib/typescript/src/web/vaul/context.d.ts.map +1 -0
  278. package/lib/typescript/src/web/vaul/helpers.d.ts +17 -0
  279. package/lib/typescript/src/web/vaul/helpers.d.ts.map +1 -0
  280. package/lib/typescript/src/web/vaul/index.d.ts +228 -0
  281. package/lib/typescript/src/web/vaul/index.d.ts.map +1 -0
  282. package/lib/typescript/src/web/vaul/types.d.ts +7 -0
  283. package/lib/typescript/src/web/vaul/types.d.ts.map +1 -0
  284. package/lib/typescript/src/web/vaul/use-composed-refs.d.ts +14 -0
  285. package/lib/typescript/src/web/vaul/use-composed-refs.d.ts.map +1 -0
  286. package/lib/typescript/src/web/vaul/use-controllable-state.d.ts +9 -0
  287. package/lib/typescript/src/web/vaul/use-controllable-state.d.ts.map +1 -0
  288. package/lib/typescript/src/web/vaul/use-position-fixed.d.ts +19 -0
  289. package/lib/typescript/src/web/vaul/use-position-fixed.d.ts.map +1 -0
  290. package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts +18 -0
  291. package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts.map +1 -0
  292. package/lib/typescript/src/web/vaul/use-scale-background.d.ts +2 -0
  293. package/lib/typescript/src/web/vaul/use-scale-background.d.ts.map +1 -0
  294. package/lib/typescript/src/web/vaul/use-snap-points.d.ts +38 -0
  295. package/lib/typescript/src/web/vaul/use-snap-points.d.ts.map +1 -0
  296. package/package.json +95 -36
  297. package/react-native.config.js +9 -2
  298. package/src/TrueSheet.tsx +281 -62
  299. package/src/TrueSheet.types.ts +525 -71
  300. package/src/TrueSheet.web.tsx +1362 -0
  301. package/src/TrueSheetPeek.tsx +11 -0
  302. package/src/TrueSheetPeek.web.tsx +64 -0
  303. package/src/TrueSheetProvider.tsx +33 -0
  304. package/src/TrueSheetProvider.web.tsx +220 -0
  305. package/src/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
  306. package/src/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
  307. package/src/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
  308. package/src/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
  309. package/src/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
  310. package/src/fabric/TrueSheetViewNativeComponent.ts +105 -18
  311. package/src/index.ts +2 -2
  312. package/src/mocks/index.ts +89 -0
  313. package/src/mocks/navigation.ts +79 -0
  314. package/src/mocks/navigationExpoRouter.ts +40 -0
  315. package/src/mocks/reanimated.ts +100 -0
  316. package/src/navigation/TrueSheetNavigatorContent.tsx +106 -0
  317. package/src/navigation/actions.ts +78 -0
  318. package/src/navigation/createTrueSheetRouter.ts +222 -0
  319. package/src/navigation/expo-router/index.ts +89 -0
  320. package/src/navigation/index.ts +81 -0
  321. package/src/navigation/navigator.ts +18 -0
  322. package/src/navigation/screen/ReanimatedTrueSheetScreen.tsx +61 -0
  323. package/src/navigation/screen/TrueSheetScreen.tsx +54 -0
  324. package/src/navigation/screen/index.ts +3 -0
  325. package/src/navigation/screen/types.ts +19 -0
  326. package/src/navigation/screen/useSheetScreenState.ts +100 -0
  327. package/src/navigation/types.ts +251 -0
  328. package/src/navigation/useTrueSheetNavigation.ts +26 -0
  329. package/src/reanimated/ReanimatedTrueSheet.tsx +12 -7
  330. package/src/reanimated/ReanimatedTrueSheet.web.tsx +75 -0
  331. package/src/reanimated/ReanimatedTrueSheetProvider.tsx +12 -8
  332. package/src/reanimated/useReanimatedPositionChangeHandler.web.ts +31 -0
  333. package/src/specs/NativeTrueSheetModule.ts +28 -3
  334. package/src/web/constants.ts +13 -0
  335. package/src/web/dom.ts +9 -0
  336. package/src/web/vaul/README.md +9 -0
  337. package/src/web/vaul/browser.ts +38 -0
  338. package/src/web/vaul/constants.ts +20 -0
  339. package/src/web/vaul/context.ts +101 -0
  340. package/src/web/vaul/helpers.ts +131 -0
  341. package/src/web/vaul/index.tsx +1740 -0
  342. package/src/web/vaul/style.css +287 -0
  343. package/src/web/vaul/style.css.d.ts +1 -0
  344. package/src/web/vaul/types.ts +7 -0
  345. package/src/web/vaul/use-composed-refs.ts +35 -0
  346. package/src/web/vaul/use-controllable-state.ts +66 -0
  347. package/src/web/vaul/use-position-fixed.ts +147 -0
  348. package/src/web/vaul/use-prevent-scroll.ts +309 -0
  349. package/src/web/vaul/use-scale-background.ts +64 -0
  350. package/src/web/vaul/use-snap-points.ts +455 -0
  351. package/android/src/main/java/com/lodev09/truesheet/events/DetentChangeEvent.kt +0 -26
  352. package/android/src/main/java/com/lodev09/truesheet/events/DidDismissEvent.kt +0 -20
  353. package/android/src/main/java/com/lodev09/truesheet/events/DidPresentEvent.kt +0 -26
  354. package/android/src/main/java/com/lodev09/truesheet/events/DragBeginEvent.kt +0 -26
  355. package/android/src/main/java/com/lodev09/truesheet/events/DragChangeEvent.kt +0 -26
  356. package/android/src/main/java/com/lodev09/truesheet/events/DragEndEvent.kt +0 -26
  357. package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -20
  358. package/android/src/main/java/com/lodev09/truesheet/events/PositionChangeEvent.kt +0 -32
  359. package/android/src/main/java/com/lodev09/truesheet/events/SizeChangeEvent.kt +0 -27
  360. package/android/src/main/java/com/lodev09/truesheet/events/WillDismissEvent.kt +0 -20
  361. package/android/src/main/java/com/lodev09/truesheet/events/WillPresentEvent.kt +0 -26
  362. package/android/src/main/res/values/styles.xml +0 -8
  363. package/ios/events/OnDetentChangeEvent.h +0 -28
  364. package/ios/events/OnDetentChangeEvent.mm +0 -30
  365. package/ios/events/OnDidDismissEvent.mm +0 -25
  366. package/ios/events/OnDidPresentEvent.h +0 -28
  367. package/ios/events/OnDidPresentEvent.mm +0 -30
  368. package/ios/events/OnDragBeginEvent.h +0 -28
  369. package/ios/events/OnDragBeginEvent.mm +0 -30
  370. package/ios/events/OnDragChangeEvent.h +0 -28
  371. package/ios/events/OnDragChangeEvent.mm +0 -30
  372. package/ios/events/OnDragEndEvent.h +0 -28
  373. package/ios/events/OnDragEndEvent.mm +0 -30
  374. package/ios/events/OnMountEvent.mm +0 -25
  375. package/ios/events/OnPositionChangeEvent.mm +0 -32
  376. package/ios/events/OnSizeChangeEvent.h +0 -28
  377. package/ios/events/OnSizeChangeEvent.mm +0 -30
  378. package/ios/events/OnWillDismissEvent.mm +0 -25
  379. package/ios/events/OnWillPresentEvent.h +0 -28
  380. package/ios/events/OnWillPresentEvent.mm +0 -30
  381. package/ios/utils/LayoutUtil.h +0 -44
  382. package/ios/utils/LayoutUtil.mm +0 -50
  383. package/lib/module/TrueSheetGrabber.js +0 -51
  384. package/lib/module/TrueSheetGrabber.js.map +0 -1
  385. package/lib/typescript/src/TrueSheetGrabber.d.ts +0 -39
  386. package/lib/typescript/src/TrueSheetGrabber.d.ts.map +0 -1
  387. package/src/TrueSheetGrabber.tsx +0 -82
  388. package/src/__mocks__/index.js +0 -67
@@ -0,0 +1,89 @@
1
+ import type { ParamListBase } from '@react-navigation/core';
2
+ import { StackRouter, unstable_integrateWithRouter, useNavigation } from 'expo-router';
3
+
4
+ import {
5
+ createTrueSheetRouter,
6
+ type StackRouterFactory,
7
+ type TrueSheetRouterOptions,
8
+ } from '../createTrueSheetRouter';
9
+ import { trueSheetNavigator } from '../navigator';
10
+ import type {
11
+ TrueSheetNavigationOptions,
12
+ TrueSheetNavigationProp,
13
+ TrueSheetNavigationState,
14
+ TrueSheetNavigatorContentExtraProps,
15
+ TrueSheetNavigatorProps,
16
+ TrueSheetStandardEventMap,
17
+ } from '../types';
18
+
19
+ const SheetNavigator = unstable_integrateWithRouter<
20
+ TrueSheetNavigationOptions,
21
+ TrueSheetNavigationState<ParamListBase>,
22
+ TrueSheetStandardEventMap,
23
+ TrueSheetNavigatorContentExtraProps,
24
+ TrueSheetRouterOptions
25
+ >(
26
+ trueSheetNavigator,
27
+ // expo-router's vendored StackRouter is structurally identical to @react-navigation's
28
+ createTrueSheetRouter(StackRouter as StackRouterFactory),
29
+ {
30
+ createProps: ({ state, dispatch }) => ({
31
+ routes: state.routes,
32
+ dispatch,
33
+ }),
34
+ }
35
+ );
36
+
37
+ // Public props: `routes`/`dispatch` are injected by `createProps` (optional here
38
+ // so the navigator type stays comparable), and expo-router intersects the event
39
+ // map with an index signature which breaks precisely typed `screenListeners`
40
+ // callbacks - replace it with the exact map
41
+ type SheetProps = Omit<
42
+ React.ComponentProps<typeof SheetNavigator>,
43
+ 'screenListeners' | 'routes' | 'dispatch'
44
+ > &
45
+ Partial<Pick<React.ComponentProps<typeof SheetNavigator>, 'routes' | 'dispatch'>> &
46
+ Pick<TrueSheetNavigatorProps, 'screenListeners'>;
47
+
48
+ /**
49
+ * TrueSheet navigator layout for Expo Router.
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * // app/sheet/_layout.tsx
54
+ * import { Sheet } from '@lodev09/react-native-true-sheet/navigation/expo-router';
55
+ *
56
+ * export default function SheetLayout() {
57
+ * return (
58
+ * <Sheet initialRouteName="(home)">
59
+ * <Sheet.Screen name="details" options={{ detents: [0.5, 1] }} />
60
+ * </Sheet>
61
+ * );
62
+ * }
63
+ * ```
64
+ */
65
+ export const Sheet = SheetNavigator as React.ComponentType<SheetProps> & {
66
+ Screen: typeof SheetNavigator.Screen;
67
+ Protected: typeof SheetNavigator.Protected;
68
+ };
69
+
70
+ /**
71
+ * Hook to access TrueSheet navigation with the resize helper.
72
+ * Built on expo-router's `useNavigation`.
73
+ */
74
+ export const useTrueSheetNavigation = <
75
+ T extends ParamListBase = ParamListBase,
76
+ >(): TrueSheetNavigationProp<T> => useNavigation<TrueSheetNavigationProp<T>>();
77
+
78
+ export { TrueSheetActions, type TrueSheetActionType } from '../actions';
79
+
80
+ export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../../TrueSheet.types';
81
+
82
+ export type {
83
+ TrueSheetNavigationEventMap,
84
+ TrueSheetNavigationHelpers,
85
+ TrueSheetNavigationOptions,
86
+ TrueSheetNavigationProp,
87
+ TrueSheetNavigationState,
88
+ TrueSheetScreenProps,
89
+ } from '../types';
@@ -0,0 +1,81 @@
1
+ import {
2
+ createStandardNavigationFactories,
3
+ StackRouter,
4
+ type StandardNavigationTypeBagBase,
5
+ } from '@react-navigation/native';
6
+
7
+ import { createTrueSheetRouter, type StackRouterFactory } from './createTrueSheetRouter';
8
+ import { trueSheetNavigator } from './navigator';
9
+ import type {
10
+ TrueSheetActionHelpers,
11
+ TrueSheetNavigationOptions,
12
+ TrueSheetNavigationEventMap,
13
+ TrueSheetNavigationState,
14
+ TrueSheetNavigatorContentExtraProps,
15
+ } from './types';
16
+ import type { TrueSheetRouterOptions } from './createTrueSheetRouter';
17
+
18
+ export interface TrueSheetNavigationTypeBag extends StandardNavigationTypeBagBase {
19
+ State: TrueSheetNavigationState<this['ParamList']>;
20
+ ActionHelpers: TrueSheetActionHelpers<this['ParamList']>;
21
+ ScreenOptions: TrueSheetNavigationOptions;
22
+ EventMap: TrueSheetNavigationEventMap;
23
+ RouterOptions: TrueSheetRouterOptions;
24
+ }
25
+
26
+ const { createNavigator, createScreen } = createStandardNavigationFactories<
27
+ TrueSheetNavigationTypeBag,
28
+ {},
29
+ TrueSheetNavigatorContentExtraProps
30
+ >(
31
+ trueSheetNavigator,
32
+ createTrueSheetRouter(StackRouter as StackRouterFactory),
33
+ ({ state, navigation }) => ({ routes: state.routes, dispatch: navigation.dispatch })
34
+ );
35
+
36
+ /**
37
+ * Creates a TrueSheet navigator.
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * const Sheet = createTrueSheetNavigator();
42
+ *
43
+ * function App() {
44
+ * return (
45
+ * <Sheet.Navigator>
46
+ * <Sheet.Screen name="Home" component={HomeScreen} />
47
+ * <Sheet.Screen
48
+ * name="Details"
49
+ * component={DetailsSheet}
50
+ * options={{ detents: [0.5, 1] }}
51
+ * />
52
+ * </Sheet.Navigator>
53
+ * );
54
+ * }
55
+ * ```
56
+ */
57
+ export const createTrueSheetNavigator = createNavigator;
58
+
59
+ /**
60
+ * Creates a screen configuration for the static API.
61
+ */
62
+ export const createTrueSheetScreen = createScreen;
63
+
64
+ export { TrueSheetActions, type TrueSheetActionType } from './actions';
65
+ export {
66
+ createTrueSheetRouter,
67
+ type StackRouterFactory,
68
+ type TrueSheetRouterOptions,
69
+ } from './createTrueSheetRouter';
70
+ export { useTrueSheetNavigation } from './useTrueSheetNavigation';
71
+
72
+ export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
73
+
74
+ export type {
75
+ TrueSheetNavigationEventMap,
76
+ TrueSheetNavigationHelpers,
77
+ TrueSheetNavigationOptions,
78
+ TrueSheetNavigationProp,
79
+ TrueSheetNavigationState,
80
+ TrueSheetScreenProps,
81
+ } from './types';
@@ -0,0 +1,18 @@
1
+ import { createStandardNavigator } from 'standard-navigation';
2
+
3
+ import { TrueSheetNavigatorContent } from './TrueSheetNavigatorContent';
4
+ import type {
5
+ TrueSheetNavigationOptions,
6
+ TrueSheetNavigatorContentExtraProps,
7
+ TrueSheetStandardEventMap,
8
+ } from './types';
9
+
10
+ /**
11
+ * Framework-agnostic TrueSheet navigator.
12
+ * Wired into React Navigation via `./index` and Expo Router via `./expo-router`.
13
+ */
14
+ export const trueSheetNavigator = createStandardNavigator<
15
+ TrueSheetNavigationOptions,
16
+ TrueSheetStandardEventMap,
17
+ TrueSheetNavigatorContentExtraProps
18
+ >(TrueSheetNavigatorContent);
@@ -0,0 +1,61 @@
1
+ import Animated from 'react-native-reanimated';
2
+ import { scheduleOnRN } from 'react-native-worklets';
3
+
4
+ import { useReanimatedPositionChangeHandler } from '../../reanimated';
5
+ import { TrueSheet } from '../../TrueSheet';
6
+ import type { PositionChangeEvent } from '../../TrueSheet.types';
7
+ import type { TrueSheetScreenProps } from './types';
8
+ import { useSheetScreenState } from './useSheetScreenState';
9
+
10
+ const AnimatedTrueSheet = Animated.createAnimatedComponent(TrueSheet);
11
+
12
+ export const ReanimatedTrueSheetScreen = ({
13
+ detentIndex,
14
+ resizeKey,
15
+ dispatch,
16
+ emit,
17
+ routeKey,
18
+ closing,
19
+ detents,
20
+ children,
21
+ positionChangeHandler,
22
+ ...sheetProps
23
+ }: TrueSheetScreenProps) => {
24
+ const {
25
+ ref,
26
+ initialDetentIndex,
27
+ eventHandlers: { onPositionChange, ...eventHandlers },
28
+ } = useSheetScreenState({
29
+ detentIndex,
30
+ resizeKey,
31
+ closing,
32
+ dispatch,
33
+ routeKey,
34
+ emit,
35
+ });
36
+
37
+ const reanimatedPositionChangeHandler = useReanimatedPositionChangeHandler(
38
+ (payload) => {
39
+ 'worklet';
40
+ positionChangeHandler?.(payload);
41
+ scheduleOnRN(onPositionChange, {
42
+ nativeEvent: payload,
43
+ } as PositionChangeEvent);
44
+ },
45
+ [onPositionChange, positionChangeHandler]
46
+ );
47
+
48
+ return (
49
+ <AnimatedTrueSheet
50
+ ref={ref}
51
+ name={`navigation-sheet-${routeKey}`}
52
+ initialDetentIndex={initialDetentIndex}
53
+ detents={detents}
54
+ onPositionChange={reanimatedPositionChangeHandler}
55
+ {...sheetProps}
56
+ {...eventHandlers}
57
+ >
58
+ {children}
59
+ </AnimatedTrueSheet>
60
+ );
61
+ };
@@ -0,0 +1,54 @@
1
+ import { useCallback } from 'react';
2
+
3
+ import { TrueSheet } from '../../TrueSheet';
4
+ import type { PositionChangeEvent } from '../../TrueSheet.types';
5
+ import type { TrueSheetScreenProps } from './types';
6
+ import { useSheetScreenState } from './useSheetScreenState';
7
+
8
+ export const TrueSheetScreen = ({
9
+ detentIndex,
10
+ resizeKey,
11
+ dispatch,
12
+ emit,
13
+ routeKey,
14
+ closing,
15
+ detents,
16
+ children,
17
+ positionChangeHandler,
18
+ ...sheetProps
19
+ }: TrueSheetScreenProps) => {
20
+ const {
21
+ ref,
22
+ initialDetentIndex,
23
+ eventHandlers: { onPositionChange, ...eventHandlers },
24
+ } = useSheetScreenState({
25
+ detentIndex,
26
+ resizeKey,
27
+ closing,
28
+ dispatch,
29
+ routeKey,
30
+ emit,
31
+ });
32
+
33
+ const handlePositionChange = useCallback(
34
+ (e: PositionChangeEvent) => {
35
+ onPositionChange(e);
36
+ positionChangeHandler?.(e.nativeEvent);
37
+ },
38
+ [onPositionChange, positionChangeHandler]
39
+ );
40
+
41
+ return (
42
+ <TrueSheet
43
+ ref={ref}
44
+ name={`navigation-sheet-${routeKey}`}
45
+ initialDetentIndex={initialDetentIndex}
46
+ detents={detents}
47
+ onPositionChange={handlePositionChange}
48
+ {...sheetProps}
49
+ {...eventHandlers}
50
+ >
51
+ {children}
52
+ </TrueSheet>
53
+ );
54
+ };
@@ -0,0 +1,3 @@
1
+ export { TrueSheetScreen } from './TrueSheetScreen';
2
+ export { useSheetScreenState } from './useSheetScreenState';
3
+ export type { TrueSheetScreenProps } from './types';
@@ -0,0 +1,19 @@
1
+ import type { TrueSheetProps } from '../../TrueSheet.types';
2
+ import type {
3
+ PositionChangeHandler,
4
+ TrueSheetDispatch,
5
+ TrueSheetEmitFn,
6
+ TrueSheetNavigationSheetProps,
7
+ } from '../types';
8
+
9
+ export interface TrueSheetScreenProps extends TrueSheetNavigationSheetProps {
10
+ detentIndex: number;
11
+ resizeKey?: number;
12
+ dispatch: TrueSheetDispatch;
13
+ emit: TrueSheetEmitFn;
14
+ routeKey: string;
15
+ closing?: boolean;
16
+ detents: TrueSheetProps['detents'];
17
+ children: React.ReactNode;
18
+ positionChangeHandler?: PositionChangeHandler;
19
+ }
@@ -0,0 +1,100 @@
1
+ import { useCallback, useEffect, useMemo, useRef } from 'react';
2
+
3
+ import { TrueSheet } from '../../TrueSheet';
4
+ import type {
5
+ DetentChangeEvent,
6
+ DetentInfoEventPayload,
7
+ DidBlurEvent,
8
+ DidFocusEvent,
9
+ DidPresentEvent,
10
+ DragBeginEvent,
11
+ DragChangeEvent,
12
+ DragEndEvent,
13
+ PositionChangeEvent,
14
+ PositionChangeEventPayload,
15
+ WillBlurEvent,
16
+ WillDismissEvent,
17
+ WillFocusEvent,
18
+ WillPresentEvent,
19
+ } from '../../TrueSheet.types';
20
+ import type { TrueSheetDispatch, TrueSheetEmitFn, TrueSheetNavigationEventMap } from '../types';
21
+ import { TrueSheetActions } from '../actions';
22
+
23
+ interface UseSheetScreenStateProps {
24
+ detentIndex: number;
25
+ resizeKey?: number;
26
+ closing?: boolean;
27
+ dispatch: TrueSheetDispatch;
28
+ routeKey: string;
29
+ emit: TrueSheetEmitFn;
30
+ }
31
+
32
+ export const useSheetScreenState = (props: UseSheetScreenStateProps) => {
33
+ const { detentIndex, resizeKey, closing, dispatch, routeKey, emit } = props;
34
+
35
+ const ref = useRef<TrueSheet>(null);
36
+ const isDismissedRef = useRef(false);
37
+ const isFirstRenderRef = useRef(true);
38
+ const initialDetentIndexRef = useRef(detentIndex);
39
+
40
+ useEffect(() => {
41
+ if (closing && !isDismissedRef.current) {
42
+ isDismissedRef.current = true;
43
+ ref.current?.dismiss();
44
+ }
45
+ }, [closing]);
46
+
47
+ useEffect(() => {
48
+ if (isFirstRenderRef.current) {
49
+ isFirstRenderRef.current = false;
50
+ return;
51
+ }
52
+ ref.current?.resize(detentIndex);
53
+ }, [detentIndex, resizeKey]);
54
+
55
+ const emitEvent = useCallback(
56
+ (
57
+ type: keyof TrueSheetNavigationEventMap,
58
+ data: DetentInfoEventPayload | PositionChangeEventPayload | undefined
59
+ ) => {
60
+ emit({
61
+ type,
62
+ target: routeKey,
63
+ data,
64
+ } as Parameters<TrueSheetEmitFn>[0]);
65
+ },
66
+ [emit, routeKey]
67
+ );
68
+
69
+ const onDidDismiss = useCallback(() => {
70
+ emitEvent('sheetDidDismiss', undefined);
71
+ isDismissedRef.current = true;
72
+ dispatch({ ...TrueSheetActions.remove(), source: routeKey });
73
+ }, [emitEvent, dispatch, routeKey]);
74
+
75
+ const eventHandlers = useMemo(
76
+ () => ({
77
+ onWillPresent: (e: WillPresentEvent) => emitEvent('sheetWillPresent', e.nativeEvent),
78
+ onDidPresent: (e: DidPresentEvent) => emitEvent('sheetDidPresent', e.nativeEvent),
79
+ onWillDismiss: (_e: WillDismissEvent) => emitEvent('sheetWillDismiss', undefined),
80
+ onDidDismiss,
81
+ onDetentChange: (e: DetentChangeEvent) => emitEvent('sheetDetentChange', e.nativeEvent),
82
+ onDragBegin: (e: DragBeginEvent) => emitEvent('sheetDragBegin', e.nativeEvent),
83
+ onDragChange: (e: DragChangeEvent) => emitEvent('sheetDragChange', e.nativeEvent),
84
+ onDragEnd: (e: DragEndEvent) => emitEvent('sheetDragEnd', e.nativeEvent),
85
+ onPositionChange: (e: PositionChangeEvent) => emitEvent('sheetPositionChange', e.nativeEvent),
86
+ onWillFocus: (_e: WillFocusEvent) => emitEvent('sheetWillFocus', undefined),
87
+ onDidFocus: (_e: DidFocusEvent) => emitEvent('sheetDidFocus', undefined),
88
+ onWillBlur: (_e: WillBlurEvent) => emitEvent('sheetWillBlur', undefined),
89
+ onDidBlur: (_e: DidBlurEvent) => emitEvent('sheetDidBlur', undefined),
90
+ }),
91
+ [emitEvent, onDidDismiss]
92
+ );
93
+
94
+ return {
95
+ ref,
96
+ initialDetentIndex: initialDetentIndexRef.current,
97
+ emitEvent,
98
+ eventHandlers,
99
+ };
100
+ };
@@ -0,0 +1,251 @@
1
+ import type {
2
+ DefaultNavigatorOptions,
3
+ Descriptor,
4
+ NavigationHelpers,
5
+ NavigationProp,
6
+ NavigationState,
7
+ ParamListBase,
8
+ RouteProp,
9
+ StackActionHelpers,
10
+ } from '@react-navigation/core';
11
+ import type { NavigatorArgs } from 'standard-navigation';
12
+
13
+ import type {
14
+ DetentInfoEventPayload,
15
+ PositionChangeEventPayload,
16
+ TrueSheetProps,
17
+ } from '../TrueSheet.types';
18
+ import type { TrueSheetActionType } from './actions';
19
+
20
+ export type PositionChangeHandler = (payload: PositionChangeEventPayload) => void;
21
+
22
+ export type TrueSheetNavigationEventMap = {
23
+ /**
24
+ * Event fired when the sheet is about to be presented.
25
+ */
26
+ sheetWillPresent: { data: DetentInfoEventPayload };
27
+ /**
28
+ * Event fired when the sheet has been presented.
29
+ */
30
+ sheetDidPresent: { data: DetentInfoEventPayload };
31
+ /**
32
+ * Event fired when the sheet is about to be dismissed.
33
+ */
34
+ sheetWillDismiss: { data: undefined };
35
+ /**
36
+ * Event fired when the sheet has been dismissed.
37
+ */
38
+ sheetDidDismiss: { data: undefined };
39
+ /**
40
+ * Event fired when the sheet's detent changes.
41
+ */
42
+ sheetDetentChange: { data: DetentInfoEventPayload };
43
+ /**
44
+ * Event fired when the user starts dragging the sheet.
45
+ */
46
+ sheetDragBegin: { data: DetentInfoEventPayload };
47
+ /**
48
+ * Event fired while the user is dragging the sheet.
49
+ */
50
+ sheetDragChange: { data: DetentInfoEventPayload };
51
+ /**
52
+ * Event fired when the user stops dragging the sheet.
53
+ */
54
+ sheetDragEnd: { data: DetentInfoEventPayload };
55
+ /**
56
+ * Event fired when the sheet's position changes.
57
+ */
58
+ sheetPositionChange: { data: PositionChangeEventPayload };
59
+ /**
60
+ * Event fired when the sheet is about to regain focus.
61
+ */
62
+ sheetWillFocus: { data: undefined };
63
+ /**
64
+ * Event fired when the sheet regains focus.
65
+ */
66
+ sheetDidFocus: { data: undefined };
67
+ /**
68
+ * Event fired when the sheet is about to lose focus.
69
+ */
70
+ sheetWillBlur: { data: undefined };
71
+ /**
72
+ * Event fired when the sheet loses focus.
73
+ */
74
+ sheetDidBlur: { data: undefined };
75
+ };
76
+
77
+ export type TrueSheetNavigationState<ParamList extends ParamListBase> = Omit<
78
+ NavigationState<ParamList>,
79
+ 'routes'
80
+ > & {
81
+ type: 'true-sheet';
82
+ routes: (NavigationState<ParamList>['routes'][number] & {
83
+ resizeIndex?: number;
84
+ resizeKey?: number;
85
+ closing?: boolean;
86
+ })[];
87
+ };
88
+
89
+ /**
90
+ * `TrueSheetNavigationEventMap` in the `standard-navigation` event-map shape.
91
+ */
92
+ export type TrueSheetStandardEventMap = {
93
+ [K in keyof TrueSheetNavigationEventMap]: {
94
+ data: TrueSheetNavigationEventMap[K]['data'];
95
+ canPreventDefault: false;
96
+ };
97
+ };
98
+
99
+ export type TrueSheetRoute = TrueSheetNavigationState<ParamListBase>['routes'][number];
100
+
101
+ export type TrueSheetDispatch = (action: TrueSheetActionType) => void;
102
+
103
+ export type TrueSheetEmitFn = NavigatorArgs<
104
+ TrueSheetNavigationOptions,
105
+ TrueSheetStandardEventMap
106
+ >['emitter']['emit'];
107
+
108
+ /**
109
+ * Props injected into the navigator content by each adapter
110
+ * (React Navigation's `mapper` / Expo Router's `createProps`).
111
+ * Raw routes carry the custom fields (`closing`, `resizeIndex`, `resizeKey`)
112
+ * that the standard state strips out.
113
+ */
114
+ export interface TrueSheetNavigatorContentExtraProps {
115
+ routes: TrueSheetRoute[];
116
+ dispatch: TrueSheetDispatch;
117
+ }
118
+
119
+ export type TrueSheetActionHelpers<ParamList extends ParamListBase> =
120
+ StackActionHelpers<ParamList> & {
121
+ /**
122
+ * Resize the sheet to a specific detent index.
123
+ */
124
+ resize(index?: number): void;
125
+ };
126
+
127
+ export type TrueSheetNavigationProp<
128
+ ParamList extends ParamListBase,
129
+ RouteName extends keyof ParamList = string,
130
+ NavigatorID extends string | undefined = undefined,
131
+ > = NavigationProp<
132
+ ParamList,
133
+ RouteName,
134
+ NavigatorID,
135
+ TrueSheetNavigationState<ParamList>,
136
+ TrueSheetNavigationOptions,
137
+ TrueSheetNavigationEventMap
138
+ > &
139
+ TrueSheetActionHelpers<ParamList>;
140
+
141
+ export type TrueSheetScreenProps<
142
+ ParamList extends ParamListBase,
143
+ RouteName extends keyof ParamList = string,
144
+ NavigatorID extends string | undefined = undefined,
145
+ > = {
146
+ navigation: TrueSheetNavigationProp<ParamList, RouteName, NavigatorID>;
147
+ route: RouteProp<ParamList, RouteName>;
148
+ };
149
+
150
+ export type TrueSheetNavigationHelpers = NavigationHelpers<
151
+ ParamListBase,
152
+ TrueSheetNavigationEventMap
153
+ >;
154
+
155
+ export type TrueSheetNavigationSheetProps = Pick<
156
+ TrueSheetProps,
157
+ | 'detents'
158
+ | 'backgroundColor'
159
+ | 'cornerRadius'
160
+ | 'dismissible'
161
+ | 'draggable'
162
+ | 'grabber'
163
+ | 'grabberOptions'
164
+ | 'accessibilityOptions'
165
+ | 'dimmed'
166
+ | 'dimmedDetentIndex'
167
+ | 'backgroundBlur'
168
+ | 'blurOptions'
169
+ | 'maxContentHeight'
170
+ | 'maxContentWidth'
171
+ | 'presentation'
172
+ | 'style'
173
+ | 'header'
174
+ | 'headerStyle'
175
+ | 'headerOptions'
176
+ | 'footer'
177
+ | 'footerStyle'
178
+ | 'footerOptions'
179
+ | 'scrollableOptions'
180
+ | 'insetAdjustment'
181
+ | 'anchor'
182
+ | 'anchorOffset'
183
+ | 'elevation'
184
+ | 'detached'
185
+ | 'detachedOffset'
186
+ >;
187
+
188
+ /**
189
+ * Screen options for TrueSheet navigator screens.
190
+ */
191
+ export type TrueSheetNavigationOptions = TrueSheetNavigationSheetProps & {
192
+ /**
193
+ * The detent index to present at.
194
+ * @default 0
195
+ */
196
+ detentIndex?: number;
197
+
198
+ /**
199
+ * Use ReanimatedTrueSheet for this screen.
200
+ * Enables worklet-based `onPositionChange` events.
201
+ *
202
+ * @default false
203
+ */
204
+ reanimated?: boolean;
205
+
206
+ /**
207
+ * A callback that receives position change events.
208
+ * When `reanimated` is enabled, this must be a worklet function.
209
+ *
210
+ * @example
211
+ * ```tsx
212
+ * <Navigator.Screen
213
+ * name="Sheet"
214
+ * options={{
215
+ * reanimated: true,
216
+ * positionChangeHandler: (payload) => {
217
+ * 'worklet';
218
+ * animatedValue.value = payload.position;
219
+ * },
220
+ * }}
221
+ * />
222
+ * ```
223
+ */
224
+ positionChangeHandler?: PositionChangeHandler;
225
+ };
226
+
227
+ export type TrueSheetNavigatorProps = DefaultNavigatorOptions<
228
+ ParamListBase,
229
+ string | undefined,
230
+ TrueSheetNavigationState<ParamListBase>,
231
+ TrueSheetNavigationOptions,
232
+ TrueSheetNavigationEventMap,
233
+ unknown
234
+ > & {
235
+ /**
236
+ * The name of the route to use as the base screen.
237
+ * This screen will be rendered as a regular screen, while other screens are presented as sheets.
238
+ * Defaults to the first screen defined in the navigator.
239
+ */
240
+ initialRouteName?: string;
241
+ };
242
+
243
+ export type TrueSheetDescriptor = Descriptor<
244
+ TrueSheetNavigationOptions,
245
+ TrueSheetNavigationProp<ParamListBase>,
246
+ RouteProp<ParamListBase>
247
+ >;
248
+
249
+ export type TrueSheetDescriptorMap = {
250
+ [key: string]: TrueSheetDescriptor;
251
+ };