@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.
- package/LICENSE +1 -1
- package/README.md +42 -31
- package/RNTrueSheet.podspec +10 -2
- package/android/build.gradle +2 -1
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +174 -49
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerViewManager.kt +7 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentView.kt +371 -18
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentViewManager.kt +14 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetFooterView.kt +156 -21
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetFooterViewManager.kt +14 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetHeaderView.kt +38 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetHeaderViewManager.kt +28 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetModule.kt +84 -24
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetPackage.kt +5 -4
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetPeekView.kt +72 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetPeekViewManager.kt +33 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetStateUpdater.kt +45 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +526 -231
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +1224 -603
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +136 -29
- package/android/src/main/java/com/lodev09/truesheet/core/RNScreensEventObserver.kt +63 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetBottomSheetBehavior.kt +36 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetBottomSheetView.kt +255 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetCoordinatorLayout.kt +303 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDetentCalculator.kt +277 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDimView.kt +162 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetGrabberView.kt +180 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetKeyboardObserver.kt +207 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetStackManager.kt +220 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetDragEvents.kt +71 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetFocusEvents.kt +65 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetLifecycleEvents.kt +112 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetStateEvents.kt +56 -0
- package/android/src/main/java/com/lodev09/truesheet/utils/KeyboardUtils.kt +84 -0
- package/android/src/main/java/com/lodev09/truesheet/utils/ScreenUtils.kt +93 -67
- package/android/src/main/java/com/lodev09/truesheet/utils/TouchEventDeduper.kt +31 -0
- package/android/src/main/java/com/lodev09/truesheet/utils/ViewUtils.kt +30 -0
- package/android/src/main/jni/CMakeLists.txt +63 -0
- package/android/src/main/jni/TrueSheetSpec.h +19 -0
- package/android/src/main/jni/TrueSheetStateUpdater.cpp +96 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewComponentDescriptor.h +24 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.cpp +43 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.h +28 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.cpp +11 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.h +37 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewComponentDescriptor.h +24 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.cpp +56 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.h +28 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.cpp +11 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewState.h +41 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.cpp +18 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetInsets.h +16 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewComponentDescriptor.h +28 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.cpp +61 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.h +45 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.cpp +23 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewState.h +52 -0
- package/ios/TrueSheetContainerView.h +81 -6
- package/ios/TrueSheetContainerView.mm +275 -21
- package/ios/TrueSheetContentView.h +38 -1
- package/ios/TrueSheetContentView.mm +413 -43
- package/ios/TrueSheetFooterView.h +27 -2
- package/ios/TrueSheetFooterView.mm +141 -35
- package/ios/{events/OnDidDismissEvent.h → TrueSheetHeaderView.h} +10 -7
- package/ios/TrueSheetHeaderView.mm +64 -0
- package/ios/TrueSheetModule.mm +92 -5
- package/ios/TrueSheetPeekView.h +32 -0
- package/ios/TrueSheetPeekView.mm +99 -0
- package/ios/TrueSheetView.h +7 -15
- package/ios/TrueSheetView.mm +633 -215
- package/ios/TrueSheetViewController.h +84 -16
- package/ios/TrueSheetViewController.mm +1133 -333
- package/ios/core/RNScreensEventObserver.h +46 -0
- package/ios/core/RNScreensEventObserver.mm +280 -0
- package/ios/core/TrueSheetBlurView.h +27 -0
- package/ios/core/TrueSheetBlurView.mm +82 -0
- package/ios/core/TrueSheetDetentCalculator.h +107 -0
- package/ios/core/TrueSheetDetentCalculator.mm +197 -0
- package/ios/core/TrueSheetGrabberView.h +72 -0
- package/ios/core/TrueSheetGrabberView.mm +178 -0
- package/ios/core/TrueSheetKeyboardObserver.h +39 -0
- package/ios/core/TrueSheetKeyboardObserver.mm +112 -0
- package/ios/events/TrueSheetDragEvents.h +39 -0
- package/ios/events/TrueSheetDragEvents.mm +62 -0
- package/ios/events/{OnPositionChangeEvent.h → TrueSheetFocusEvents.h} +8 -5
- package/ios/events/TrueSheetFocusEvents.mm +49 -0
- package/ios/events/TrueSheetLifecycleEvents.h +40 -0
- package/ios/events/TrueSheetLifecycleEvents.mm +71 -0
- package/ios/events/TrueSheetStateEvents.h +35 -0
- package/ios/events/TrueSheetStateEvents.mm +49 -0
- package/ios/tvos/TrueSheetStubs.mm +154 -0
- package/ios/{events/OnMountEvent.h → utils/BlurUtil.h} +5 -7
- package/ios/utils/BlurUtil.mm +69 -0
- package/ios/utils/GestureUtil.h +7 -0
- package/ios/utils/GestureUtil.mm +12 -0
- package/ios/utils/PlatformUtil.h +15 -0
- package/ios/utils/UIView+FirstResponder.h +15 -0
- package/ios/utils/UIView+FirstResponder.mm +26 -0
- package/ios/{events/OnWillDismissEvent.h → utils/UIView+ScrollEdgeInteraction.h} +6 -7
- package/ios/utils/UIView+ScrollEdgeInteraction.mm +62 -0
- package/ios/utils/WindowUtil.mm +17 -1
- package/lib/module/TrueSheet.js +230 -64
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/module/TrueSheet.web.js +1203 -0
- package/lib/module/TrueSheet.web.js.map +1 -0
- package/lib/module/TrueSheetPeek.js +15 -0
- package/lib/module/TrueSheetPeek.js.map +1 -0
- package/lib/module/TrueSheetPeek.web.js +55 -0
- package/lib/module/TrueSheetPeek.web.js.map +1 -0
- package/lib/module/TrueSheetProvider.js +28 -0
- package/lib/module/TrueSheetProvider.js.map +1 -0
- package/lib/module/TrueSheetProvider.web.js +157 -0
- package/lib/module/TrueSheetProvider.web.js.map +1 -0
- package/lib/module/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
- package/lib/module/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
- package/lib/module/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
- package/lib/module/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
- package/lib/module/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
- package/lib/module/fabric/TrueSheetViewNativeComponent.ts +105 -18
- package/lib/module/index.js +3 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/mocks/index.js +93 -0
- package/lib/module/mocks/index.js.map +1 -0
- package/lib/module/mocks/navigation.js +95 -0
- package/lib/module/mocks/navigation.js.map +1 -0
- package/lib/module/mocks/navigationExpoRouter.js +21 -0
- package/lib/module/mocks/navigationExpoRouter.js.map +1 -0
- package/lib/module/mocks/reanimated.js +91 -0
- package/lib/module/mocks/reanimated.js.map +1 -0
- package/lib/module/navigation/TrueSheetNavigatorContent.js +73 -0
- package/lib/module/navigation/TrueSheetNavigatorContent.js.map +1 -0
- package/lib/module/navigation/actions.js +50 -0
- package/lib/module/navigation/actions.js.map +1 -0
- package/lib/module/navigation/createTrueSheetRouter.js +166 -0
- package/lib/module/navigation/createTrueSheetRouter.js.map +1 -0
- package/lib/module/navigation/expo-router/index.js +48 -0
- package/lib/module/navigation/expo-router/index.js.map +1 -0
- package/lib/module/navigation/index.js +47 -0
- package/lib/module/navigation/index.js.map +1 -0
- package/lib/module/navigation/navigator.js +10 -0
- package/lib/module/navigation/navigator.js.map +1 -0
- package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js +56 -0
- package/lib/module/navigation/screen/ReanimatedTrueSheetScreen.js.map +1 -0
- package/lib/module/navigation/screen/TrueSheetScreen.js +49 -0
- package/lib/module/navigation/screen/TrueSheetScreen.js.map +1 -0
- package/lib/module/navigation/screen/index.js +5 -0
- package/lib/module/navigation/screen/index.js.map +1 -0
- package/lib/module/navigation/screen/types.js +4 -0
- package/lib/module/navigation/screen/types.js.map +1 -0
- package/lib/module/navigation/screen/useSheetScreenState.js +68 -0
- package/lib/module/navigation/screen/useSheetScreenState.js.map +1 -0
- package/lib/module/navigation/types.js +4 -0
- package/lib/module/navigation/types.js.map +1 -0
- package/lib/module/navigation/useTrueSheetNavigation.js +24 -0
- package/lib/module/navigation/useTrueSheetNavigation.js.map +1 -0
- package/lib/module/reanimated/ReanimatedTrueSheet.js +15 -9
- package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheet.web.js +81 -0
- package/lib/module/reanimated/ReanimatedTrueSheet.web.js.map +1 -0
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +4 -2
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
- package/lib/module/reanimated/index.js +2 -2
- package/lib/module/reanimated/index.js.map +1 -1
- package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js +20 -0
- package/lib/module/reanimated/useReanimatedPositionChangeHandler.web.js.map +1 -0
- package/lib/module/specs/NativeTrueSheetModule.js.map +1 -1
- package/lib/module/web/constants.js +16 -0
- package/lib/module/web/constants.js.map +1 -0
- package/lib/module/web/dom.js +10 -0
- package/lib/module/web/dom.js.map +1 -0
- package/lib/module/web/vaul/README.md +9 -0
- package/lib/module/web/vaul/browser.js +30 -0
- package/lib/module/web/vaul/browser.js.map +1 -0
- package/lib/module/web/vaul/constants.js +15 -0
- package/lib/module/web/vaul/constants.js.map +1 -0
- package/lib/module/web/vaul/context.js +59 -0
- package/lib/module/web/vaul/context.js.map +1 -0
- package/lib/module/web/vaul/helpers.js +99 -0
- package/lib/module/web/vaul/helpers.js.map +1 -0
- package/lib/module/web/vaul/index.js +1309 -0
- package/lib/module/web/vaul/index.js.map +1 -0
- package/lib/module/web/vaul/style.css +287 -0
- package/lib/module/web/vaul/style.css.d.js +2 -0
- package/lib/module/web/vaul/style.css.d.js.map +1 -0
- package/lib/module/web/vaul/types.js +2 -0
- package/lib/module/web/vaul/types.js.map +1 -0
- package/lib/module/web/vaul/use-composed-refs.js +34 -0
- package/lib/module/web/vaul/use-composed-refs.js.map +1 -0
- package/lib/module/web/vaul/use-controllable-state.js +54 -0
- package/lib/module/web/vaul/use-controllable-state.js.map +1 -0
- package/lib/module/web/vaul/use-position-fixed.js +123 -0
- package/lib/module/web/vaul/use-position-fixed.js.map +1 -0
- package/lib/module/web/vaul/use-prevent-scroll.js +258 -0
- package/lib/module/web/vaul/use-prevent-scroll.js.map +1 -0
- package/lib/module/web/vaul/use-scale-background.js +57 -0
- package/lib/module/web/vaul/use-scale-background.js.map +1 -0
- package/lib/module/web/vaul/use-snap-points.js +305 -0
- package/lib/module/web/vaul/use-snap-points.js.map +1 -0
- package/lib/typescript/src/TrueSheet.d.ts +51 -14
- package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.types.d.ts +463 -54
- package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.web.d.ts +5 -0
- package/lib/typescript/src/TrueSheet.web.d.ts.map +1 -0
- package/lib/typescript/src/TrueSheetPeek.d.ts +9 -0
- package/lib/typescript/src/TrueSheetPeek.d.ts.map +1 -0
- package/lib/typescript/src/TrueSheetPeek.web.d.ts +28 -0
- package/lib/typescript/src/TrueSheetPeek.web.d.ts.map +1 -0
- package/lib/typescript/src/TrueSheetProvider.d.ts +18 -0
- package/lib/typescript/src/TrueSheetProvider.d.ts.map +1 -0
- package/lib/typescript/src/TrueSheetProvider.web.d.ts +27 -0
- package/lib/typescript/src/TrueSheetProvider.web.d.ts.map +1 -0
- package/lib/typescript/src/fabric/TrueSheetContainerViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/fabric/TrueSheetContentViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts +2 -0
- package/lib/typescript/src/fabric/TrueSheetFooterViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts +6 -0
- package/lib/typescript/src/fabric/TrueSheetHeaderViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts +6 -0
- package/lib/typescript/src/fabric/TrueSheetPeekViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +67 -16
- package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/mocks/index.d.ts +43 -0
- package/lib/typescript/src/mocks/index.d.ts.map +1 -0
- package/lib/typescript/src/mocks/navigation.d.ts +70 -0
- package/lib/typescript/src/mocks/navigation.d.ts.map +1 -0
- package/lib/typescript/src/mocks/navigationExpoRouter.d.ts +22 -0
- package/lib/typescript/src/mocks/navigationExpoRouter.d.ts.map +1 -0
- package/lib/typescript/src/mocks/reanimated.d.ts +48 -0
- package/lib/typescript/src/mocks/reanimated.d.ts.map +1 -0
- package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts +5 -0
- package/lib/typescript/src/navigation/TrueSheetNavigatorContent.d.ts.map +1 -0
- package/lib/typescript/src/navigation/actions.d.ts +71 -0
- package/lib/typescript/src/navigation/actions.d.ts.map +1 -0
- package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts +14 -0
- package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts.map +1 -0
- package/lib/typescript/src/navigation/expo-router/index.d.ts +37 -0
- package/lib/typescript/src/navigation/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/src/navigation/index.d.ts +46 -0
- package/lib/typescript/src/navigation/index.d.ts.map +1 -0
- package/lib/typescript/src/navigation/navigator.d.ts +7 -0
- package/lib/typescript/src/navigation/navigator.d.ts.map +1 -0
- package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts +3 -0
- package/lib/typescript/src/navigation/screen/ReanimatedTrueSheetScreen.d.ts.map +1 -0
- package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts +3 -0
- package/lib/typescript/src/navigation/screen/TrueSheetScreen.d.ts.map +1 -0
- package/lib/typescript/src/navigation/screen/index.d.ts +4 -0
- package/lib/typescript/src/navigation/screen/index.d.ts.map +1 -0
- package/lib/typescript/src/navigation/screen/types.d.ts +14 -0
- package/lib/typescript/src/navigation/screen/types.d.ts.map +1 -0
- package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts +33 -0
- package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -0
- package/lib/typescript/src/navigation/types.d.ts +177 -0
- package/lib/typescript/src/navigation/types.d.ts.map +1 -0
- package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts +23 -0
- package/lib/typescript/src/navigation/useTrueSheetNavigation.d.ts.map +1 -0
- package/lib/typescript/src/reanimated/ReanimatedTrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts +41 -0
- package/lib/typescript/src/reanimated/ReanimatedTrueSheet.web.d.ts.map +1 -0
- package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts +8 -2
- package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts +15 -0
- package/lib/typescript/src/reanimated/useReanimatedPositionChangeHandler.web.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts +25 -3
- package/lib/typescript/src/specs/NativeTrueSheetModule.d.ts.map +1 -1
- package/lib/typescript/src/web/constants.d.ts +14 -0
- package/lib/typescript/src/web/constants.d.ts.map +1 -0
- package/lib/typescript/src/web/dom.d.ts +7 -0
- package/lib/typescript/src/web/dom.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/browser.d.ts +8 -0
- package/lib/typescript/src/web/vaul/browser.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/constants.d.ts +13 -0
- package/lib/typescript/src/web/vaul/constants.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/context.d.ts +53 -0
- package/lib/typescript/src/web/vaul/context.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/helpers.d.ts +17 -0
- package/lib/typescript/src/web/vaul/helpers.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/index.d.ts +228 -0
- package/lib/typescript/src/web/vaul/index.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/types.d.ts +7 -0
- package/lib/typescript/src/web/vaul/types.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/use-composed-refs.d.ts +14 -0
- package/lib/typescript/src/web/vaul/use-composed-refs.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/use-controllable-state.d.ts +9 -0
- package/lib/typescript/src/web/vaul/use-controllable-state.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/use-position-fixed.d.ts +19 -0
- package/lib/typescript/src/web/vaul/use-position-fixed.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts +18 -0
- package/lib/typescript/src/web/vaul/use-prevent-scroll.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/use-scale-background.d.ts +2 -0
- package/lib/typescript/src/web/vaul/use-scale-background.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/use-snap-points.d.ts +38 -0
- package/lib/typescript/src/web/vaul/use-snap-points.d.ts.map +1 -0
- package/package.json +95 -36
- package/react-native.config.js +9 -2
- package/src/TrueSheet.tsx +281 -62
- package/src/TrueSheet.types.ts +525 -71
- package/src/TrueSheet.web.tsx +1362 -0
- package/src/TrueSheetPeek.tsx +11 -0
- package/src/TrueSheetPeek.web.tsx +64 -0
- package/src/TrueSheetProvider.tsx +33 -0
- package/src/TrueSheetProvider.web.tsx +220 -0
- package/src/fabric/TrueSheetContainerViewNativeComponent.ts +1 -1
- package/src/fabric/TrueSheetContentViewNativeComponent.ts +5 -1
- package/src/fabric/TrueSheetFooterViewNativeComponent.ts +10 -2
- package/src/fabric/TrueSheetHeaderViewNativeComponent.ts +8 -0
- package/src/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
- package/src/fabric/TrueSheetViewNativeComponent.ts +105 -18
- package/src/index.ts +2 -2
- package/src/mocks/index.ts +89 -0
- package/src/mocks/navigation.ts +79 -0
- package/src/mocks/navigationExpoRouter.ts +40 -0
- package/src/mocks/reanimated.ts +100 -0
- package/src/navigation/TrueSheetNavigatorContent.tsx +106 -0
- package/src/navigation/actions.ts +78 -0
- package/src/navigation/createTrueSheetRouter.ts +222 -0
- package/src/navigation/expo-router/index.ts +89 -0
- package/src/navigation/index.ts +81 -0
- package/src/navigation/navigator.ts +18 -0
- package/src/navigation/screen/ReanimatedTrueSheetScreen.tsx +61 -0
- package/src/navigation/screen/TrueSheetScreen.tsx +54 -0
- package/src/navigation/screen/index.ts +3 -0
- package/src/navigation/screen/types.ts +19 -0
- package/src/navigation/screen/useSheetScreenState.ts +100 -0
- package/src/navigation/types.ts +251 -0
- package/src/navigation/useTrueSheetNavigation.ts +26 -0
- package/src/reanimated/ReanimatedTrueSheet.tsx +12 -7
- package/src/reanimated/ReanimatedTrueSheet.web.tsx +75 -0
- package/src/reanimated/ReanimatedTrueSheetProvider.tsx +12 -8
- package/src/reanimated/useReanimatedPositionChangeHandler.web.ts +31 -0
- package/src/specs/NativeTrueSheetModule.ts +28 -3
- package/src/web/constants.ts +13 -0
- package/src/web/dom.ts +9 -0
- package/src/web/vaul/README.md +9 -0
- package/src/web/vaul/browser.ts +38 -0
- package/src/web/vaul/constants.ts +20 -0
- package/src/web/vaul/context.ts +101 -0
- package/src/web/vaul/helpers.ts +131 -0
- package/src/web/vaul/index.tsx +1740 -0
- package/src/web/vaul/style.css +287 -0
- package/src/web/vaul/style.css.d.ts +1 -0
- package/src/web/vaul/types.ts +7 -0
- package/src/web/vaul/use-composed-refs.ts +35 -0
- package/src/web/vaul/use-controllable-state.ts +66 -0
- package/src/web/vaul/use-position-fixed.ts +147 -0
- package/src/web/vaul/use-prevent-scroll.ts +309 -0
- package/src/web/vaul/use-scale-background.ts +64 -0
- package/src/web/vaul/use-snap-points.ts +455 -0
- package/android/src/main/java/com/lodev09/truesheet/events/DetentChangeEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DidDismissEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/DidPresentEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragBeginEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragChangeEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragEndEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/PositionChangeEvent.kt +0 -32
- package/android/src/main/java/com/lodev09/truesheet/events/SizeChangeEvent.kt +0 -27
- package/android/src/main/java/com/lodev09/truesheet/events/WillDismissEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/WillPresentEvent.kt +0 -26
- package/android/src/main/res/values/styles.xml +0 -8
- package/ios/events/OnDetentChangeEvent.h +0 -28
- package/ios/events/OnDetentChangeEvent.mm +0 -30
- package/ios/events/OnDidDismissEvent.mm +0 -25
- package/ios/events/OnDidPresentEvent.h +0 -28
- package/ios/events/OnDidPresentEvent.mm +0 -30
- package/ios/events/OnDragBeginEvent.h +0 -28
- package/ios/events/OnDragBeginEvent.mm +0 -30
- package/ios/events/OnDragChangeEvent.h +0 -28
- package/ios/events/OnDragChangeEvent.mm +0 -30
- package/ios/events/OnDragEndEvent.h +0 -28
- package/ios/events/OnDragEndEvent.mm +0 -30
- package/ios/events/OnMountEvent.mm +0 -25
- package/ios/events/OnPositionChangeEvent.mm +0 -32
- package/ios/events/OnSizeChangeEvent.h +0 -28
- package/ios/events/OnSizeChangeEvent.mm +0 -30
- package/ios/events/OnWillDismissEvent.mm +0 -25
- package/ios/events/OnWillPresentEvent.h +0 -28
- package/ios/events/OnWillPresentEvent.mm +0 -30
- package/ios/utils/LayoutUtil.h +0 -44
- package/ios/utils/LayoutUtil.mm +0 -50
- package/lib/module/TrueSheetGrabber.js +0 -51
- package/lib/module/TrueSheetGrabber.js.map +0 -1
- package/lib/typescript/src/TrueSheetGrabber.d.ts +0 -39
- package/lib/typescript/src/TrueSheetGrabber.d.ts.map +0 -1
- package/src/TrueSheetGrabber.tsx +0 -82
- 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,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
|
+
};
|