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

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 (367) 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 +150 -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 +1217 -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/ViewUtils.kt +30 -0
  37. package/android/src/main/jni/CMakeLists.txt +63 -0
  38. package/android/src/main/jni/TrueSheetSpec.h +19 -0
  39. package/android/src/main/jni/TrueSheetStateUpdater.cpp +96 -0
  40. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewComponentDescriptor.h +24 -0
  41. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.cpp +43 -0
  42. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.h +28 -0
  43. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.cpp +11 -0
  44. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.h +37 -0
  45. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewComponentDescriptor.h +24 -0
  46. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.cpp +56 -0
  47. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.h +28 -0
  48. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.cpp +11 -0
  49. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.h +41 -0
  50. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.cpp +18 -0
  51. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.h +16 -0
  52. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewComponentDescriptor.h +28 -0
  53. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.cpp +61 -0
  54. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.h +45 -0
  55. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.cpp +23 -0
  56. package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.h +52 -0
  57. package/ios/TrueSheetContainerView.h +81 -6
  58. package/ios/TrueSheetContainerView.mm +275 -21
  59. package/ios/TrueSheetContentView.h +38 -1
  60. package/ios/TrueSheetContentView.mm +413 -43
  61. package/ios/TrueSheetFooterView.h +27 -2
  62. package/ios/TrueSheetFooterView.mm +141 -35
  63. package/ios/{events/OnDidDismissEvent.h → TrueSheetHeaderView.h} +10 -7
  64. package/ios/TrueSheetHeaderView.mm +64 -0
  65. package/ios/TrueSheetModule.mm +92 -5
  66. package/ios/TrueSheetPeekView.h +32 -0
  67. package/ios/TrueSheetPeekView.mm +99 -0
  68. package/ios/TrueSheetView.h +7 -15
  69. package/ios/TrueSheetView.mm +633 -215
  70. package/ios/TrueSheetViewController.h +84 -16
  71. package/ios/TrueSheetViewController.mm +1136 -333
  72. package/ios/core/RNScreensEventObserver.h +46 -0
  73. package/ios/core/RNScreensEventObserver.mm +280 -0
  74. package/ios/core/TrueSheetBlurView.h +27 -0
  75. package/ios/core/TrueSheetBlurView.mm +82 -0
  76. package/ios/core/TrueSheetDetentCalculator.h +107 -0
  77. package/ios/core/TrueSheetDetentCalculator.mm +197 -0
  78. package/ios/core/TrueSheetGrabberView.h +72 -0
  79. package/ios/core/TrueSheetGrabberView.mm +178 -0
  80. package/ios/core/TrueSheetKeyboardObserver.h +39 -0
  81. package/ios/core/TrueSheetKeyboardObserver.mm +112 -0
  82. package/ios/events/TrueSheetDragEvents.h +39 -0
  83. package/ios/events/TrueSheetDragEvents.mm +62 -0
  84. package/ios/events/{OnPositionChangeEvent.h → TrueSheetFocusEvents.h} +8 -5
  85. package/ios/events/TrueSheetFocusEvents.mm +49 -0
  86. package/ios/events/TrueSheetLifecycleEvents.h +40 -0
  87. package/ios/events/TrueSheetLifecycleEvents.mm +71 -0
  88. package/ios/events/TrueSheetStateEvents.h +35 -0
  89. package/ios/events/TrueSheetStateEvents.mm +49 -0
  90. package/ios/tvos/TrueSheetStubs.mm +154 -0
  91. package/ios/{events/OnMountEvent.h → utils/BlurUtil.h} +5 -7
  92. package/ios/utils/BlurUtil.mm +69 -0
  93. package/ios/utils/GestureUtil.h +7 -0
  94. package/ios/utils/GestureUtil.mm +12 -0
  95. package/ios/utils/PlatformUtil.h +15 -0
  96. package/ios/utils/UIView+FirstResponder.h +15 -0
  97. package/ios/utils/UIView+FirstResponder.mm +26 -0
  98. package/ios/{events/OnWillDismissEvent.h → utils/UIView+ScrollEdgeInteraction.h} +6 -7
  99. package/ios/utils/UIView+ScrollEdgeInteraction.mm +62 -0
  100. package/ios/utils/WindowUtil.mm +17 -1
  101. package/lib/module/TrueSheet.js +224 -64
  102. package/lib/module/TrueSheet.js.map +1 -1
  103. package/lib/module/TrueSheet.web.js +1201 -0
  104. package/lib/module/TrueSheet.web.js.map +1 -0
  105. package/lib/module/TrueSheetPeek.js +15 -0
  106. package/lib/module/TrueSheetPeek.js.map +1 -0
  107. package/lib/module/TrueSheetPeek.web.js +55 -0
  108. package/lib/module/TrueSheetPeek.web.js.map +1 -0
  109. package/lib/module/TrueSheetProvider.js +28 -0
  110. package/lib/module/TrueSheetProvider.js.map +1 -0
  111. package/lib/module/TrueSheetProvider.web.js +157 -0
  112. package/lib/module/TrueSheetProvider.web.js.map +1 -0
  113. package/lib/module/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
  114. package/lib/module/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
  115. package/lib/module/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
  116. package/lib/module/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
  117. package/lib/module/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
  118. package/lib/module/fabric/TrueSheetViewNativeComponent.ts +105 -18
  119. package/lib/module/index.js +3 -3
  120. package/lib/module/index.js.map +1 -1
  121. package/lib/module/mocks/index.js +93 -0
  122. package/lib/module/mocks/index.js.map +1 -0
  123. package/lib/module/mocks/navigation.js +85 -0
  124. package/lib/module/mocks/navigation.js.map +1 -0
  125. package/lib/module/mocks/reanimated.js +91 -0
  126. package/lib/module/mocks/reanimated.js.map +1 -0
  127. package/lib/module/navigation/TrueSheetRouter.js +170 -0
  128. package/lib/module/navigation/TrueSheetRouter.js.map +1 -0
  129. package/lib/module/navigation/TrueSheetView.js +71 -0
  130. package/lib/module/navigation/TrueSheetView.js.map +1 -0
  131. package/lib/module/navigation/createTrueSheetNavigator.js +63 -0
  132. package/lib/module/navigation/createTrueSheetNavigator.js.map +1 -0
  133. package/lib/module/navigation/index.js +6 -0
  134. package/lib/module/navigation/index.js.map +1 -0
  135. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +56 -0
  136. package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -0
  137. package/lib/module/navigation/screen/TrueSheetScreen.js +49 -0
  138. package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -0
  139. package/lib/module/navigation/screen/index.js +5 -0
  140. package/lib/module/navigation/screen/index.js.map +1 -0
  141. package/lib/module/navigation/screen/types.js +4 -0
  142. package/lib/module/navigation/screen/types.js.map +1 -0
  143. package/lib/module/navigation/screen/useSheetScreenState.js +68 -0
  144. package/lib/module/navigation/screen/useSheetScreenState.js.map +1 -0
  145. package/lib/module/navigation/types.js +4 -0
  146. package/lib/module/navigation/types.js.map +1 -0
  147. package/lib/module/navigation/useTrueSheetNavigation.js +24 -0
  148. package/lib/module/navigation/useTrueSheetNavigation.js.map +1 -0
  149. package/lib/module/reanimated/ReanimatedTrueSheet.js +15 -9
  150. package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
  151. package/lib/module/reanimated/ReanimatedTrueSheet.web.js +81 -0
  152. package/lib/module/reanimated/ReanimatedTrueSheet.web.js.map +1 -0
  153. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +4 -2
  154. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
  155. package/lib/module/reanimated/index.js +2 -2
  156. package/lib/module/reanimated/index.js.map +1 -1
  157. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js +20 -0
  158. package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js.map +1 -0
  159. package/lib/module/specs/NativeTrueSheetModule.js.map +1 -1
  160. package/lib/module/web/constants.js +16 -0
  161. package/lib/module/web/constants.js.map +1 -0
  162. package/lib/module/web/vaul/README.md +9 -0
  163. package/lib/module/web/vaul/browser.js +30 -0
  164. package/lib/module/web/vaul/browser.js.map +1 -0
  165. package/lib/module/web/vaul/constants.js +15 -0
  166. package/lib/module/web/vaul/constants.js.map +1 -0
  167. package/lib/module/web/vaul/context.js +59 -0
  168. package/lib/module/web/vaul/context.js.map +1 -0
  169. package/lib/module/web/vaul/helpers.js +93 -0
  170. package/lib/module/web/vaul/helpers.js.map +1 -0
  171. package/lib/module/web/vaul/index.js +1309 -0
  172. package/lib/module/web/vaul/index.js.map +1 -0
  173. package/lib/module/web/vaul/style.css +287 -0
  174. package/lib/module/web/vaul/style.css.d.js +2 -0
  175. package/lib/module/web/vaul/style.css.d.js.map +1 -0
  176. package/lib/module/web/vaul/types.js +2 -0
  177. package/lib/module/web/vaul/types.js.map +1 -0
  178. package/lib/module/web/vaul/use-composed-refs.js +34 -0
  179. package/lib/module/web/vaul/use-composed-refs.js.map +1 -0
  180. package/lib/module/web/vaul/use-controllable-state.js +54 -0
  181. package/lib/module/web/vaul/use-controllable-state.js.map +1 -0
  182. package/lib/module/web/vaul/use-position-fixed.js +123 -0
  183. package/lib/module/web/vaul/use-position-fixed.js.map +1 -0
  184. package/lib/module/web/vaul/use-prevent-scroll.js +258 -0
  185. package/lib/module/web/vaul/use-prevent-scroll.js.map +1 -0
  186. package/lib/module/web/vaul/use-scale-background.js +57 -0
  187. package/lib/module/web/vaul/use-scale-background.js.map +1 -0
  188. package/lib/module/web/vaul/use-snap-points.js +305 -0
  189. package/lib/module/web/vaul/use-snap-points.js.map +1 -0
  190. package/lib/typescript/src/TrueSheet.d.ts +51 -14
  191. package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
  192. package/lib/typescript/src/TrueSheet.types.d.ts +463 -54
  193. package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
  194. package/lib/typescript/src/TrueSheet.web.d.ts +5 -0
  195. package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -0
  196. package/lib/typescript/src/TrueSheetPeek.d.ts +9 -0
  197. package/lib/typescript/src/TrueSheetPeek.d.ts.map +1 -0
  198. package/lib/typescript/src/TrueSheetPeek.web.d.ts +28 -0
  199. package/lib/typescript/src/TrueSheetPeek.web.d.ts.map +1 -0
  200. package/lib/typescript/src/TrueSheetProvider.d.ts +18 -0
  201. package/lib/typescript/src/TrueSheetProvider.d.ts.map +1 -0
  202. package/lib/typescript/src/TrueSheetProvider.web.d.ts +27 -0
  203. package/lib/typescript/src/TrueSheetProvider.web.d.ts.map +1 -0
  204. package/lib/typescript/src/fabric/TrueSheetContainerViewNativeComponent.d.ts.map +1 -1
  205. package/lib/typescript/src/fabric/TrueSheetContentViewNativeComponent.d.ts.map +1 -1
  206. package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts +2 -0
  207. package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts.map +1 -1
  208. package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts +6 -0
  209. package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts.map +1 -0
  210. package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts +6 -0
  211. package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts.map +1 -0
  212. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +67 -16
  213. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
  214. package/lib/typescript/src/index.d.ts +2 -2
  215. package/lib/typescript/src/index.d.ts.map +1 -1
  216. package/lib/typescript/src/mocks/index.d.ts +43 -0
  217. package/lib/typescript/src/mocks/index.d.ts.map +1 -0
  218. package/lib/typescript/src/mocks/navigation.d.ts +66 -0
  219. package/lib/typescript/src/mocks/navigation.d.ts.map +1 -0
  220. package/lib/typescript/src/mocks/reanimated.d.ts +48 -0
  221. package/lib/typescript/src/mocks/reanimated.d.ts.map +1 -0
  222. package/lib/typescript/src/navigation/TrueSheetRouter.d.ts +57 -0
  223. package/lib/typescript/src/navigation/TrueSheetRouter.d.ts.map +1 -0
  224. package/lib/typescript/src/navigation/TrueSheetView.d.ts +10 -0
  225. package/lib/typescript/src/navigation/TrueSheetView.d.ts.map +1 -0
  226. package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts +35 -0
  227. package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts.map +1 -0
  228. package/lib/typescript/src/navigation/index.d.ts +6 -0
  229. package/lib/typescript/src/navigation/index.d.ts.map +1 -0
  230. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts +3 -0
  231. package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts.map +1 -0
  232. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts +3 -0
  233. package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts.map +1 -0
  234. package/lib/typescript/src/navigation/screen/index.d.ts +4 -0
  235. package/lib/typescript/src/navigation/screen/index.d.ts.map +1 -0
  236. package/lib/typescript/src/navigation/screen/types.d.ts +15 -0
  237. package/lib/typescript/src/navigation/screen/types.d.ts.map +1 -0
  238. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts +35 -0
  239. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -0
  240. package/lib/typescript/src/navigation/types.d.ts +153 -0
  241. package/lib/typescript/src/navigation/types.d.ts.map +1 -0
  242. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts +23 -0
  243. package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts.map +1 -0
  244. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.d.ts.map +1 -1
  245. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts +41 -0
  246. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts.map +1 -0
  247. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts +8 -2
  248. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
  249. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts +15 -0
  250. package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts.map +1 -0
  251. package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts +25 -3
  252. package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts.map +1 -1
  253. package/lib/typescript/src/web/constants.d.ts +14 -0
  254. package/lib/typescript/src/web/constants.d.ts.map +1 -0
  255. package/lib/typescript/src/web/vaul/browser.d.ts +8 -0
  256. package/lib/typescript/src/web/vaul/browser.d.ts.map +1 -0
  257. package/lib/typescript/src/web/vaul/constants.d.ts +13 -0
  258. package/lib/typescript/src/web/vaul/constants.d.ts.map +1 -0
  259. package/lib/typescript/src/web/vaul/context.d.ts +53 -0
  260. package/lib/typescript/src/web/vaul/context.d.ts.map +1 -0
  261. package/lib/typescript/src/web/vaul/helpers.d.ts +17 -0
  262. package/lib/typescript/src/web/vaul/helpers.d.ts.map +1 -0
  263. package/lib/typescript/src/web/vaul/index.d.ts +228 -0
  264. package/lib/typescript/src/web/vaul/index.d.ts.map +1 -0
  265. package/lib/typescript/src/web/vaul/types.d.ts +7 -0
  266. package/lib/typescript/src/web/vaul/types.d.ts.map +1 -0
  267. package/lib/typescript/src/web/vaul/use-composed-refs.d.ts +14 -0
  268. package/lib/typescript/src/web/vaul/use-composed-refs.d.ts.map +1 -0
  269. package/lib/typescript/src/web/vaul/use-controllable-state.d.ts +9 -0
  270. package/lib/typescript/src/web/vaul/use-controllable-state.d.ts.map +1 -0
  271. package/lib/typescript/src/web/vaul/use-position-fixed.d.ts +19 -0
  272. package/lib/typescript/src/web/vaul/use-position-fixed.d.ts.map +1 -0
  273. package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts +18 -0
  274. package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts.map +1 -0
  275. package/lib/typescript/src/web/vaul/use-scale-background.d.ts +2 -0
  276. package/lib/typescript/src/web/vaul/use-scale-background.d.ts.map +1 -0
  277. package/lib/typescript/src/web/vaul/use-snap-points.d.ts +38 -0
  278. package/lib/typescript/src/web/vaul/use-snap-points.d.ts.map +1 -0
  279. package/package.json +78 -34
  280. package/react-native.config.js +9 -2
  281. package/src/TrueSheet.tsx +276 -60
  282. package/src/TrueSheet.types.ts +525 -71
  283. package/src/TrueSheet.web.tsx +1366 -0
  284. package/src/TrueSheetPeek.tsx +11 -0
  285. package/src/TrueSheetPeek.web.tsx +63 -0
  286. package/src/TrueSheetProvider.tsx +33 -0
  287. package/src/TrueSheetProvider.web.tsx +220 -0
  288. package/src/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
  289. package/src/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
  290. package/src/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
  291. package/src/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
  292. package/src/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
  293. package/src/fabric/TrueSheetViewNativeComponent.ts +105 -18
  294. package/src/index.ts +2 -2
  295. package/src/mocks/index.ts +89 -0
  296. package/src/mocks/navigation.ts +72 -0
  297. package/src/mocks/reanimated.ts +101 -0
  298. package/src/navigation/TrueSheetRouter.ts +234 -0
  299. package/src/navigation/TrueSheetView.tsx +99 -0
  300. package/src/navigation/createTrueSheetNavigator.tsx +93 -0
  301. package/src/navigation/index.ts +14 -0
  302. package/src/navigation/screen/ReanimatedTrueSheetScreen.tsx +61 -0
  303. package/src/navigation/screen/TrueSheetScreen.tsx +54 -0
  304. package/src/navigation/screen/index.ts +3 -0
  305. package/src/navigation/screen/types.ts +21 -0
  306. package/src/navigation/screen/useSheetScreenState.ts +107 -0
  307. package/src/navigation/types.ts +219 -0
  308. package/src/navigation/useTrueSheetNavigation.ts +26 -0
  309. package/src/reanimated/ReanimatedTrueSheet.tsx +12 -7
  310. package/src/reanimated/ReanimatedTrueSheet.web.tsx +75 -0
  311. package/src/reanimated/ReanimatedTrueSheetProvider.tsx +12 -8
  312. package/src/reanimated/useReanimatedPositionChangeHandler.web.ts +31 -0
  313. package/src/specs/NativeTrueSheetModule.ts +28 -3
  314. package/src/web/constants.ts +13 -0
  315. package/src/web/vaul/README.md +9 -0
  316. package/src/web/vaul/browser.ts +38 -0
  317. package/src/web/vaul/constants.ts +20 -0
  318. package/src/web/vaul/context.ts +101 -0
  319. package/src/web/vaul/helpers.ts +124 -0
  320. package/src/web/vaul/index.tsx +1740 -0
  321. package/src/web/vaul/style.css +287 -0
  322. package/src/web/vaul/style.css.d.ts +1 -0
  323. package/src/web/vaul/types.ts +7 -0
  324. package/src/web/vaul/use-composed-refs.ts +35 -0
  325. package/src/web/vaul/use-controllable-state.ts +66 -0
  326. package/src/web/vaul/use-position-fixed.ts +147 -0
  327. package/src/web/vaul/use-prevent-scroll.ts +309 -0
  328. package/src/web/vaul/use-scale-background.ts +64 -0
  329. package/src/web/vaul/use-snap-points.ts +455 -0
  330. package/android/src/main/java/com/lodev09/truesheet/events/DetentChangeEvent.kt +0 -26
  331. package/android/src/main/java/com/lodev09/truesheet/events/DidDismissEvent.kt +0 -20
  332. package/android/src/main/java/com/lodev09/truesheet/events/DidPresentEvent.kt +0 -26
  333. package/android/src/main/java/com/lodev09/truesheet/events/DragBeginEvent.kt +0 -26
  334. package/android/src/main/java/com/lodev09/truesheet/events/DragChangeEvent.kt +0 -26
  335. package/android/src/main/java/com/lodev09/truesheet/events/DragEndEvent.kt +0 -26
  336. package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -20
  337. package/android/src/main/java/com/lodev09/truesheet/events/PositionChangeEvent.kt +0 -32
  338. package/android/src/main/java/com/lodev09/truesheet/events/SizeChangeEvent.kt +0 -27
  339. package/android/src/main/java/com/lodev09/truesheet/events/WillDismissEvent.kt +0 -20
  340. package/android/src/main/java/com/lodev09/truesheet/events/WillPresentEvent.kt +0 -26
  341. package/android/src/main/res/values/styles.xml +0 -8
  342. package/ios/events/OnDetentChangeEvent.h +0 -28
  343. package/ios/events/OnDetentChangeEvent.mm +0 -30
  344. package/ios/events/OnDidDismissEvent.mm +0 -25
  345. package/ios/events/OnDidPresentEvent.h +0 -28
  346. package/ios/events/OnDidPresentEvent.mm +0 -30
  347. package/ios/events/OnDragBeginEvent.h +0 -28
  348. package/ios/events/OnDragBeginEvent.mm +0 -30
  349. package/ios/events/OnDragChangeEvent.h +0 -28
  350. package/ios/events/OnDragChangeEvent.mm +0 -30
  351. package/ios/events/OnDragEndEvent.h +0 -28
  352. package/ios/events/OnDragEndEvent.mm +0 -30
  353. package/ios/events/OnMountEvent.mm +0 -25
  354. package/ios/events/OnPositionChangeEvent.mm +0 -32
  355. package/ios/events/OnSizeChangeEvent.h +0 -28
  356. package/ios/events/OnSizeChangeEvent.mm +0 -30
  357. package/ios/events/OnWillDismissEvent.mm +0 -25
  358. package/ios/events/OnWillPresentEvent.h +0 -28
  359. package/ios/events/OnWillPresentEvent.mm +0 -30
  360. package/ios/utils/LayoutUtil.h +0 -44
  361. package/ios/utils/LayoutUtil.mm +0 -50
  362. package/lib/module/TrueSheetGrabber.js +0 -51
  363. package/lib/module/TrueSheetGrabber.js.map +0 -1
  364. package/lib/typescript/src/TrueSheetGrabber.d.ts +0 -39
  365. package/lib/typescript/src/TrueSheetGrabber.d.ts.map +0 -1
  366. package/src/TrueSheetGrabber.tsx +0 -82
  367. package/src/__mocks__/index.js +0 -67
@@ -0,0 +1,38 @@
1
+ package com.lodev09.truesheet
2
+
3
+ import android.annotation.SuppressLint
4
+ import com.facebook.react.uimanager.ThemedReactContext
5
+ import com.facebook.react.views.view.ReactViewGroup
6
+
7
+ /**
8
+ * Delegate interface for header view size changes
9
+ */
10
+ interface TrueSheetHeaderViewDelegate {
11
+ fun headerViewDidChangeSize(width: Int, height: Int)
12
+ }
13
+
14
+ /**
15
+ * Header view that holds the header content
16
+ * Positioned at the top of the sheet content area
17
+ */
18
+ @SuppressLint("ViewConstructor")
19
+ class TrueSheetHeaderView(context: ThemedReactContext) : ReactViewGroup(context) {
20
+ var delegate: TrueSheetHeaderViewDelegate? = null
21
+
22
+ private var lastWidth = 0
23
+ private var lastHeight = 0
24
+
25
+ override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
26
+ super.onSizeChanged(w, h, oldw, oldh)
27
+
28
+ if (w != lastWidth || h != lastHeight) {
29
+ lastWidth = w
30
+ lastHeight = h
31
+ delegate?.headerViewDidChangeSize(w, h)
32
+ }
33
+ }
34
+
35
+ companion object {
36
+ const val TAG_NAME = "TrueSheet"
37
+ }
38
+ }
@@ -0,0 +1,28 @@
1
+ package com.lodev09.truesheet
2
+
3
+ import com.facebook.react.module.annotations.ReactModule
4
+ import com.facebook.react.uimanager.PointerEvents
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.ViewGroupManager
7
+ import com.facebook.react.uimanager.annotations.ReactProp
8
+
9
+ /**
10
+ * ViewManager for TrueSheetHeaderView
11
+ * Manages the header area of the sheet
12
+ */
13
+ @ReactModule(name = TrueSheetHeaderViewManager.REACT_CLASS)
14
+ class TrueSheetHeaderViewManager : ViewGroupManager<TrueSheetHeaderView>() {
15
+
16
+ override fun getName(): String = REACT_CLASS
17
+
18
+ override fun createViewInstance(reactContext: ThemedReactContext): TrueSheetHeaderView = TrueSheetHeaderView(reactContext)
19
+
20
+ @ReactProp(name = "pointerEvents")
21
+ fun setPointerEvents(view: TrueSheetHeaderView, pointerEventsStr: String?) {
22
+ view.pointerEvents = PointerEvents.parsePointerEvents(pointerEventsStr)
23
+ }
24
+
25
+ companion object {
26
+ const val REACT_CLASS = "TrueSheetHeaderView"
27
+ }
28
+ }
@@ -8,6 +8,7 @@ import com.facebook.react.bridge.ReactMethod
8
8
  import com.facebook.react.module.annotations.ReactModule
9
9
  import com.facebook.react.turbomodule.core.interfaces.TurboModule
10
10
  import com.facebook.react.uimanager.UIManagerHelper
11
+ import com.lodev09.truesheet.core.TrueSheetStackManager
11
12
  import java.util.concurrent.ConcurrentHashMap
12
13
 
13
14
  /**
@@ -21,16 +22,13 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
21
22
 
22
23
  override fun getName(): String = NAME
23
24
 
24
- override fun initialize() {
25
- super.initialize()
26
- }
27
-
28
25
  override fun invalidate() {
29
26
  super.invalidate()
30
- // Clear all registered views on module invalidation
27
+ // Clear all registered views and observer on module invalidation
31
28
  synchronized(viewRegistry) {
32
29
  viewRegistry.clear()
33
30
  }
31
+ TrueSheetStackManager.clear()
34
32
  }
35
33
 
36
34
  /**
@@ -44,19 +42,19 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
44
42
  * @throws OPERATION_FAILED if the operation fails for any other reason
45
43
  */
46
44
  @ReactMethod
47
- fun presentByRef(viewTag: Double, index: Double, promise: Promise) {
45
+ fun presentByRef(viewTag: Double, index: Double, animated: Boolean, promise: Promise) {
48
46
  val tag = viewTag.toInt()
49
47
  val detentIndex = index.toInt()
50
48
 
51
49
  withTrueSheetView(tag, promise) { view ->
52
- view.present(detentIndex) {
50
+ view.present(detentIndex, animated) {
53
51
  promise.resolve(null)
54
52
  }
55
53
  }
56
54
  }
57
55
 
58
56
  /**
59
- * Dismiss a sheet by reference
57
+ * Dismiss a sheet and all sheets presented on top of it
60
58
  *
61
59
  * @param viewTag Native view tag of the sheet component
62
60
  * @param promise Promise that resolves when sheet is fully dismissed
@@ -65,11 +63,31 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
65
63
  * @throws OPERATION_FAILED if the operation fails for any other reason
66
64
  */
67
65
  @ReactMethod
68
- fun dismissByRef(viewTag: Double, promise: Promise) {
66
+ fun dismissByRef(viewTag: Double, animated: Boolean, promise: Promise) {
69
67
  val tag = viewTag.toInt()
70
68
 
71
69
  withTrueSheetView(tag, promise) { view ->
72
- view.dismiss {
70
+ view.dismiss(animated) {
71
+ promise.resolve(null)
72
+ }
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Dismiss only the sheets presented on top of this sheet, keeping this sheet presented
78
+ *
79
+ * @param viewTag Native view tag of the sheet component
80
+ * @param promise Promise that resolves when all child sheets are fully dismissed
81
+ * @throws VIEW_NOT_FOUND if the view with the given tag is not found
82
+ * @throws INVALID_VIEW_TYPE if the view is not a TrueSheetView
83
+ * @throws OPERATION_FAILED if the operation fails for any other reason
84
+ */
85
+ @ReactMethod
86
+ fun dismissStackByRef(viewTag: Double, animated: Boolean, promise: Promise) {
87
+ val tag = viewTag.toInt()
88
+
89
+ withTrueSheetView(tag, promise) { view ->
90
+ view.dismissStack(animated) {
73
91
  promise.resolve(null)
74
92
  }
75
93
  }
@@ -87,8 +105,49 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
87
105
  */
88
106
  @ReactMethod
89
107
  fun resizeByRef(viewTag: Double, index: Double, promise: Promise) {
90
- // Resize is just an alias for present
91
- presentByRef(viewTag, index, promise)
108
+ val tag = viewTag.toInt()
109
+ val detentIndex = index.toInt()
110
+
111
+ withTrueSheetView(tag, promise) { view ->
112
+ view.resize(detentIndex) {
113
+ promise.resolve(null)
114
+ }
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Dismiss all presented sheets by dismissing from the bottom of the stack
120
+ *
121
+ * @param animated Whether to animate the dismissals
122
+ * @param promise Promise that resolves when all sheets are dismissed
123
+ */
124
+ @ReactMethod
125
+ fun dismissAll(animated: Boolean, promise: Promise) {
126
+ Handler(Looper.getMainLooper()).post {
127
+ try {
128
+ val rootSheet = TrueSheetStackManager.getRootSheet()
129
+ if (rootSheet == null) {
130
+ promise.resolve(null)
131
+ return@post
132
+ }
133
+
134
+ rootSheet.dismiss(animated) {
135
+ promise.resolve(null)
136
+ }
137
+ } catch (e: Exception) {
138
+ promise.reject("OPERATION_FAILED", "Failed to dismiss all sheets: ${e.message}", e)
139
+ }
140
+ }
141
+ }
142
+
143
+ @ReactMethod
144
+ fun handleBackPress(viewTag: Double, promise: Promise) {
145
+ val tag = viewTag.toInt()
146
+
147
+ withTrueSheetView(tag, promise) { view ->
148
+ view.handleBackPress()
149
+ promise.resolve(null)
150
+ }
92
151
  }
93
152
 
94
153
  /**
@@ -98,29 +157,30 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
98
157
  Handler(Looper.getMainLooper()).post {
99
158
  try {
100
159
  // First try to get from registry (faster)
101
- val view = getSheetByTag(tag)
160
+ var view = getSheetByTag(tag)
102
161
 
103
- if (view != null) {
104
- closure(view)
105
- } else {
106
- // Fallback to UIManager resolution
162
+ // Fallback to UIManager resolution
163
+ if (view == null) {
107
164
  val manager = UIManagerHelper.getUIManagerForReactTag(reactApplicationContext, tag)
108
165
  val resolvedView = manager?.resolveView(tag)
109
166
 
110
- if (resolvedView == null) {
111
- promise.reject("VIEW_NOT_FOUND", "TrueSheetView with tag $tag not found")
112
- return@post
113
- }
114
-
115
167
  if (resolvedView is TrueSheetView) {
116
- closure(resolvedView)
117
- } else {
168
+ view = resolvedView
169
+ } else if (resolvedView != null) {
118
170
  promise.reject(
119
171
  "INVALID_VIEW_TYPE",
120
172
  "View with tag $tag is not a TrueSheetView (got ${resolvedView::class.simpleName})"
121
173
  )
174
+ return@post
122
175
  }
123
176
  }
177
+
178
+ if (view == null) {
179
+ promise.reject("VIEW_NOT_FOUND", "TrueSheetView with tag $tag not found")
180
+ return@post
181
+ }
182
+
183
+ closure(view)
124
184
  } catch (e: Exception) {
125
185
  promise.reject("OPERATION_FAILED", "Failed to execute operation: ${e.message}", e)
126
186
  }
@@ -1,6 +1,6 @@
1
1
  package com.lodev09.truesheet
2
2
 
3
- import com.facebook.react.TurboReactPackage
3
+ import com.facebook.react.BaseReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.module.model.ReactModuleInfo
@@ -11,7 +11,7 @@ import com.facebook.react.uimanager.ViewManager
11
11
  * TrueSheet package for Fabric architecture
12
12
  * Registers all view managers and the TurboModule
13
13
  */
14
- class TrueSheetPackage : TurboReactPackage() {
14
+ class TrueSheetPackage : BaseReactPackage() {
15
15
 
16
16
  override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? =
17
17
  when (name) {
@@ -27,7 +27,6 @@ class TrueSheetPackage : TurboReactPackage() {
27
27
  TrueSheetModule::class.java.name,
28
28
  false, // canOverrideExistingModule
29
29
  false, // needsEagerInit
30
- true, // hasConstants
31
30
  false, // isCxxModule
32
31
  true // isTurboModule
33
32
  )
@@ -39,6 +38,8 @@ class TrueSheetPackage : TurboReactPackage() {
39
38
  TrueSheetViewManager(),
40
39
  TrueSheetContainerViewManager(),
41
40
  TrueSheetContentViewManager(),
42
- TrueSheetFooterViewManager()
41
+ TrueSheetHeaderViewManager(),
42
+ TrueSheetFooterViewManager(),
43
+ TrueSheetPeekViewManager()
43
44
  )
44
45
  }
@@ -0,0 +1,72 @@
1
+ package com.lodev09.truesheet
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.view.ViewParent
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.views.view.ReactViewGroup
7
+
8
+ /**
9
+ * Delegate interface for peek view size changes
10
+ */
11
+ interface TrueSheetPeekViewDelegate {
12
+ fun peekViewDidChangeSize(width: Int, height: Int)
13
+ }
14
+
15
+ /**
16
+ * Peek view that marks part of the content as the sheet's peek content.
17
+ * The peek detent covers the content through this view's bottom edge.
18
+ */
19
+ @SuppressLint("ViewConstructor")
20
+ class TrueSheetPeekView(context: ThemedReactContext) : ReactViewGroup(context) {
21
+ var delegate: TrueSheetPeekViewDelegate? = null
22
+
23
+ override fun onLayout(
24
+ changed: Boolean,
25
+ left: Int,
26
+ top: Int,
27
+ right: Int,
28
+ bottom: Int
29
+ ) {
30
+ super.onLayout(changed, left, top, right, bottom)
31
+
32
+ attachToContainerView()
33
+
34
+ // Position changes matter too — the peek's offset within the content
35
+ // affects the peek detent.
36
+ if (changed) {
37
+ delegate?.peekViewDidChangeSize(width, height)
38
+ }
39
+ }
40
+
41
+ override fun onAttachedToWindow() {
42
+ super.onAttachedToWindow()
43
+ attachToContainerView()
44
+ }
45
+
46
+ /**
47
+ * Peek can be nested anywhere within the content, so it attaches itself to the
48
+ * nearest container instead of being mounted by it. The container also searches
49
+ * for it when the content is added to cover the initial (bottom-up) mount order.
50
+ */
51
+ private fun attachToContainerView() {
52
+ if (delegate != null) return
53
+
54
+ var parent: ViewParent? = parent
55
+ while (parent != null && parent !is TrueSheetContainerView) {
56
+ parent = parent.parent
57
+ }
58
+
59
+ (parent as? TrueSheetContainerView)?.attachPeekView(this)
60
+ }
61
+
62
+ /**
63
+ * Called by the ViewManager when the view is dropped (Fabric unmount)
64
+ */
65
+ fun detachFromContainerView() {
66
+ (delegate as? TrueSheetContainerView)?.detachPeekView(this)
67
+ }
68
+
69
+ companion object {
70
+ const val TAG_NAME = "TrueSheet"
71
+ }
72
+ }
@@ -0,0 +1,33 @@
1
+ package com.lodev09.truesheet
2
+
3
+ import com.facebook.react.module.annotations.ReactModule
4
+ import com.facebook.react.uimanager.PointerEvents
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.ViewGroupManager
7
+ import com.facebook.react.uimanager.annotations.ReactProp
8
+
9
+ /**
10
+ * ViewManager for TrueSheetPeekView
11
+ * Marks part of the content as the sheet's peek content
12
+ */
13
+ @ReactModule(name = TrueSheetPeekViewManager.REACT_CLASS)
14
+ class TrueSheetPeekViewManager : ViewGroupManager<TrueSheetPeekView>() {
15
+
16
+ override fun getName(): String = REACT_CLASS
17
+
18
+ override fun createViewInstance(reactContext: ThemedReactContext): TrueSheetPeekView = TrueSheetPeekView(reactContext)
19
+
20
+ override fun onDropViewInstance(view: TrueSheetPeekView) {
21
+ super.onDropViewInstance(view)
22
+ view.detachFromContainerView()
23
+ }
24
+
25
+ @ReactProp(name = "pointerEvents")
26
+ fun setPointerEvents(view: TrueSheetPeekView, pointerEventsStr: String?) {
27
+ view.pointerEvents = PointerEvents.parsePointerEvents(pointerEventsStr)
28
+ }
29
+
30
+ companion object {
31
+ const val REACT_CLASS = "TrueSheetPeekView"
32
+ }
33
+ }
@@ -0,0 +1,45 @@
1
+ package com.lodev09.truesheet
2
+
3
+ import com.facebook.react.uimanager.StateWrapper
4
+
5
+ /**
6
+ * Synchronous Fabric state updates via JNI (see TrueSheetStateUpdater.cpp).
7
+ *
8
+ * StateWrapper.updateState commits asynchronously, so the container's Yoga
9
+ * layout lags the sheet by a frame or two during drags. The native bridge
10
+ * commits with `unstable_Immediate`, which mounts synchronously when called
11
+ * from the UI thread — same-frame layout, like iOS.
12
+ */
13
+ object TrueSheetStateUpdater {
14
+ private val isAvailable: Boolean = try {
15
+ System.loadLibrary("react_codegen_TrueSheetSpec")
16
+ true
17
+ } catch (e: UnsatisfiedLinkError) {
18
+ false
19
+ }
20
+
21
+ /** Returns false when unavailable — caller should fall back to async updateState. */
22
+ fun updateState(stateWrapper: StateWrapper, widthDp: Float, heightDp: Float): Boolean =
23
+ isAvailable && nativeUpdateState(stateWrapper, widthDp, heightDp)
24
+
25
+ /** Returns false when unavailable — caller should fall back to async updateState. */
26
+ fun updateFooterState(stateWrapper: StateWrapper, bottomInsetDp: Float): Boolean =
27
+ isAvailable && nativeUpdateFooterState(stateWrapper, bottomInsetDp)
28
+
29
+ /**
30
+ * Publishes the precalculated bottom safe-area inset so a late-mounted
31
+ * footer's first layout is already padded (see TrueSheetFooterViewShadowNode).
32
+ */
33
+ fun setBottomSafeArea(insetDp: Float) {
34
+ if (isAvailable) nativeSetBottomSafeArea(insetDp)
35
+ }
36
+
37
+ @JvmStatic
38
+ private external fun nativeUpdateState(stateWrapper: Any, width: Float, height: Float): Boolean
39
+
40
+ @JvmStatic
41
+ private external fun nativeUpdateFooterState(stateWrapper: Any, bottomInset: Float): Boolean
42
+
43
+ @JvmStatic
44
+ private external fun nativeSetBottomSafeArea(insetDp: Float)
45
+ }