@lodev09/react-native-true-sheet 4.0.0-beta.0 → 4.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +62 -30
- package/RNTrueSheet.podspec +10 -2
- package/android/build.gradle +24 -2
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +189 -47
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerViewManager.kt +7 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentView.kt +401 -19
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentViewManager.kt +18 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetFooterView.kt +145 -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/TrueSheetOverlayView.kt +106 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetOverlayViewManager.kt +45 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetPackage.kt +6 -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 +63 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +564 -226
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +1399 -598
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +161 -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 +375 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDetentCalculator.kt +299 -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/TrueSheetOverlayRootView.kt +137 -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 +127 -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 +42 -0
- package/android/src/main/jni/CMakeLists.txt +63 -0
- package/android/src/main/jni/TrueSheetSpec.h +20 -0
- package/android/src/main/jni/TrueSheetStateUpdater.cpp +96 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewComponentDescriptor.h +16 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.cpp +68 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewShadowNode.h +33 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.cpp +11 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetContentViewState.h +39 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewComponentDescriptor.h +24 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetFooterViewShadowNode.cpp +63 -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/TrueSheetLayoutUtils.h +46 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewComponentDescriptor.h +21 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewShadowNode.cpp +17 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetOverlayViewShadowNode.h +36 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewComponentDescriptor.h +28 -0
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.cpp +30 -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 +88 -6
- package/ios/TrueSheetContainerView.mm +278 -21
- package/ios/TrueSheetContentView.h +54 -1
- package/ios/TrueSheetContentView.mm +371 -47
- package/ios/TrueSheetFooterView.h +33 -2
- package/ios/TrueSheetFooterView.mm +187 -35
- package/ios/{events/OnWillDismissEvent.h → TrueSheetHeaderView.h} +10 -7
- package/ios/TrueSheetHeaderView.mm +64 -0
- package/ios/TrueSheetModule.h +2 -7
- package/ios/TrueSheetModule.mm +98 -20
- package/ios/TrueSheetOverlayView.h +32 -0
- package/ios/TrueSheetOverlayView.mm +161 -0
- package/ios/TrueSheetPeekView.h +32 -0
- package/ios/TrueSheetPeekView.mm +99 -0
- package/ios/TrueSheetView.h +7 -15
- package/ios/TrueSheetView.mm +775 -215
- package/ios/TrueSheetViewController.h +94 -16
- package/ios/TrueSheetViewController.mm +1316 -331
- 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 +188 -0
- package/ios/core/TrueSheetKeyboardObserver.h +39 -0
- package/ios/core/TrueSheetKeyboardObserver.mm +112 -0
- package/ios/core/TrueSheetOverlayContainerView.h +31 -0
- package/ios/core/TrueSheetOverlayContainerView.mm +35 -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 +42 -0
- package/ios/events/TrueSheetLifecycleEvents.mm +79 -0
- package/ios/events/TrueSheetStateEvents.h +35 -0
- package/ios/events/TrueSheetStateEvents.mm +49 -0
- package/ios/tvos/TrueSheetStubs.mm +166 -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/utils/UIView+ScrollEdgeInteraction.h +26 -0
- package/ios/utils/UIView+ScrollEdgeInteraction.mm +84 -0
- package/ios/utils/WindowUtil.mm +17 -1
- package/lib/module/TrueSheet.js +349 -74
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/module/TrueSheet.web.js +1270 -0
- package/lib/module/TrueSheet.web.js.map +1 -0
- package/lib/module/TrueSheetOverlay.js +30 -0
- package/lib/module/TrueSheetOverlay.js.map +1 -0
- package/lib/module/TrueSheetOverlay.web.js +35 -0
- package/lib/module/TrueSheetOverlay.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/TrueSheetOverlayViewNativeComponent.ts +12 -0
- package/lib/module/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
- package/lib/module/fabric/TrueSheetViewNativeComponent.ts +110 -18
- package/lib/module/index.js +4 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/mocks/index.js +103 -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/base-types.js +2 -0
- package/lib/module/navigation/base-types.js.map +1 -0
- package/lib/module/navigation/createTrueSheetRouter.js +157 -0
- package/lib/module/navigation/createTrueSheetRouter.js.map +1 -0
- package/lib/module/navigation/expo-router/base-types.js +2 -0
- package/lib/module/navigation/expo-router/base-types.js.map +1 -0
- package/lib/module/navigation/expo-router/index.js +50 -0
- package/lib/module/navigation/expo-router/index.js.map +1 -0
- package/lib/module/navigation/expo-router/types.js +4 -0
- package/lib/module/navigation/expo-router/types.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 +69 -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 +19 -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 +1342 -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 +57 -14
- package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.types.d.ts +535 -55
- 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/TrueSheetOverlay.d.ts +8 -0
- package/lib/typescript/src/TrueSheetOverlay.d.ts.map +1 -0
- package/lib/typescript/src/TrueSheetOverlay.web.d.ts +8 -0
- package/lib/typescript/src/TrueSheetOverlay.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/TrueSheetOverlayViewNativeComponent.d.ts +6 -0
- package/lib/typescript/src/fabric/TrueSheetOverlayViewNativeComponent.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 +71 -16
- package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/mocks/index.d.ts +47 -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/base-types.d.ts +9 -0
- package/lib/typescript/src/navigation/base-types.d.ts.map +1 -0
- package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts +3 -0
- package/lib/typescript/src/navigation/createTrueSheetRouter.d.ts.map +1 -0
- package/lib/typescript/src/navigation/expo-router/base-types.d.ts +8 -0
- package/lib/typescript/src/navigation/expo-router/base-types.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/expo-router/types.d.ts +44 -0
- package/lib/typescript/src/navigation/expo-router/types.d.ts.map +1 -0
- package/lib/typescript/src/navigation/index.d.ts +45 -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 +34 -0
- package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -0
- package/lib/typescript/src/navigation/types.d.ts +213 -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 +14 -0
- package/lib/typescript/src/web/vaul/constants.d.ts.map +1 -0
- package/lib/typescript/src/web/vaul/context.d.ts +54 -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 +234 -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 +104 -37
- package/react-native.config.js +10 -2
- package/src/TrueSheet.tsx +424 -70
- package/src/TrueSheet.types.ts +602 -72
- package/src/TrueSheet.web.tsx +1437 -0
- package/src/TrueSheetOverlay.tsx +24 -0
- package/src/TrueSheetOverlay.web.tsx +33 -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/TrueSheetOverlayViewNativeComponent.ts +12 -0
- package/src/fabric/TrueSheetPeekViewNativeComponent.ts +8 -0
- package/src/fabric/TrueSheetViewNativeComponent.ts +110 -18
- package/src/index.ts +3 -2
- package/src/mocks/index.ts +96 -0
- package/src/mocks/navigation.ts +79 -0
- package/src/mocks/navigationExpoRouter.ts +41 -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/base-types.ts +20 -0
- package/src/navigation/createTrueSheetRouter.ts +194 -0
- package/src/navigation/expo-router/base-types.ts +18 -0
- package/src/navigation/expo-router/index.ts +90 -0
- package/src/navigation/expo-router/types.ts +116 -0
- package/src/navigation/index.ts +80 -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 +102 -0
- package/src/navigation/types.ts +302 -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 +24 -0
- package/src/web/vaul/context.ts +102 -0
- package/src/web/vaul/helpers.ts +131 -0
- package/src/web/vaul/index.tsx +1785 -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.h +0 -26
- 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,96 @@
|
|
|
1
|
+
import React, { createElement, isValidElement, type ReactNode } from 'react';
|
|
2
|
+
import { View, type ViewProps } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import type { TrueSheetProps, TrueSheetStaticMethods } from '../TrueSheet.types';
|
|
5
|
+
|
|
6
|
+
interface TrueSheetState {
|
|
7
|
+
shouldRenderNativeView: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Mock TrueSheet component for testing.
|
|
12
|
+
* Import from '@lodev09/react-native-true-sheet/mock' in your test setup.
|
|
13
|
+
*/
|
|
14
|
+
export class TrueSheet extends React.Component<TrueSheetProps, TrueSheetState> {
|
|
15
|
+
static instances: Record<string, TrueSheet> = {};
|
|
16
|
+
|
|
17
|
+
static dismiss = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
|
|
18
|
+
static dismissStack = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
|
|
19
|
+
static present = jest.fn((_name: string, _index?: number, _animated?: boolean) =>
|
|
20
|
+
Promise.resolve()
|
|
21
|
+
);
|
|
22
|
+
static resize = jest.fn((_name: string, _index: number) => Promise.resolve());
|
|
23
|
+
static dismissAll = jest.fn((_animated?: boolean) => Promise.resolve());
|
|
24
|
+
|
|
25
|
+
dismiss = jest.fn((_animated?: boolean) => Promise.resolve());
|
|
26
|
+
dismissStack = jest.fn((_animated?: boolean) => Promise.resolve());
|
|
27
|
+
present = jest.fn((_index?: number, _animated?: boolean) => Promise.resolve());
|
|
28
|
+
resize = jest.fn((_index: number) => Promise.resolve());
|
|
29
|
+
|
|
30
|
+
componentDidMount() {
|
|
31
|
+
const { name } = this.props;
|
|
32
|
+
if (name) {
|
|
33
|
+
TrueSheet.instances[name] = this;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
componentWillUnmount() {
|
|
38
|
+
const { name } = this.props;
|
|
39
|
+
if (name) {
|
|
40
|
+
delete TrueSheet.instances[name];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private renderHeader(): ReactNode {
|
|
45
|
+
const { header } = this.props;
|
|
46
|
+
if (!header) return null;
|
|
47
|
+
return isValidElement(header) ? header : createElement(header);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private renderFooter(): ReactNode {
|
|
51
|
+
const { footer } = this.props;
|
|
52
|
+
if (!footer) return null;
|
|
53
|
+
return isValidElement(footer) ? footer : createElement(footer);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
render() {
|
|
57
|
+
const { children, style } = this.props;
|
|
58
|
+
return React.createElement(View, { style }, this.renderHeader(), children, this.renderFooter());
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Mock TrueSheetPeek component for testing.
|
|
64
|
+
*/
|
|
65
|
+
export function TrueSheetPeek({ children, ...rest }: ViewProps) {
|
|
66
|
+
return React.createElement(View, rest, children);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Mock TrueSheetOverlay component for testing.
|
|
71
|
+
*/
|
|
72
|
+
export function TrueSheetOverlay({ children, ...rest }: ViewProps) {
|
|
73
|
+
return React.createElement(View, rest, children);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Mock TrueSheetProvider for testing.
|
|
78
|
+
*/
|
|
79
|
+
export function TrueSheetProvider({ children }: { children: React.ReactNode }) {
|
|
80
|
+
return children;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Mock useTrueSheet hook for testing.
|
|
85
|
+
*/
|
|
86
|
+
export function useTrueSheet(): TrueSheetStaticMethods {
|
|
87
|
+
return {
|
|
88
|
+
present: TrueSheet.present,
|
|
89
|
+
dismiss: TrueSheet.dismiss,
|
|
90
|
+
dismissStack: TrueSheet.dismissStack,
|
|
91
|
+
resize: TrueSheet.resize,
|
|
92
|
+
dismissAll: TrueSheet.dismissAll,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export * from '../TrueSheet.types';
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ParamListBase } from '@react-navigation/native';
|
|
2
|
+
|
|
3
|
+
import type { TrueSheetNavigationProp } from '../navigation/types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Mock createTrueSheetNavigator for testing.
|
|
7
|
+
* Import from '@lodev09/react-native-true-sheet/navigation/mock' in your test setup.
|
|
8
|
+
*/
|
|
9
|
+
export const createTrueSheetNavigator = jest.fn(() => ({
|
|
10
|
+
Navigator: jest.fn(({ children }: { children: React.ReactNode }) => children),
|
|
11
|
+
Screen: jest.fn(() => null),
|
|
12
|
+
Group: jest.fn(() => null),
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Mock createTrueSheetScreen for testing the static API.
|
|
17
|
+
*/
|
|
18
|
+
export const createTrueSheetScreen = jest.fn((config: object) => config);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Mock TrueSheetActions for testing.
|
|
22
|
+
*/
|
|
23
|
+
export const TrueSheetActions = {
|
|
24
|
+
push: jest.fn((name: string, params?: object) => ({ type: 'PUSH', payload: { name, params } })),
|
|
25
|
+
pop: jest.fn((count?: number) => ({ type: 'POP', payload: { count } })),
|
|
26
|
+
popTo: jest.fn((name: string, params?: object) => ({
|
|
27
|
+
type: 'POP_TO',
|
|
28
|
+
payload: { name, params },
|
|
29
|
+
})),
|
|
30
|
+
popToTop: jest.fn(() => ({ type: 'POP_TO_TOP' })),
|
|
31
|
+
replace: jest.fn((name: string, params?: object) => ({
|
|
32
|
+
type: 'REPLACE',
|
|
33
|
+
payload: { name, params },
|
|
34
|
+
})),
|
|
35
|
+
resize: jest.fn((index: number) => ({ type: 'RESIZE', index })),
|
|
36
|
+
dismiss: jest.fn(() => ({ type: 'DISMISS' })),
|
|
37
|
+
remove: jest.fn(() => ({ type: 'REMOVE' })),
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Mock useTrueSheetNavigation hook for testing.
|
|
42
|
+
*/
|
|
43
|
+
export const useTrueSheetNavigation = jest.fn(<T extends ParamListBase = ParamListBase>() => {
|
|
44
|
+
// Partial drops react-navigation's private-brand member (PrivateValueStore),
|
|
45
|
+
// which no mock can implement — the members themselves stay type-checked.
|
|
46
|
+
const navigation: Partial<TrueSheetNavigationProp<T>> = {
|
|
47
|
+
navigate: jest.fn(),
|
|
48
|
+
goBack: jest.fn(),
|
|
49
|
+
reset: jest.fn(),
|
|
50
|
+
setParams: jest.fn(),
|
|
51
|
+
dispatch: jest.fn(),
|
|
52
|
+
isFocused: jest.fn(() => true),
|
|
53
|
+
canGoBack: jest.fn(() => true),
|
|
54
|
+
getId: jest.fn(),
|
|
55
|
+
getParent: jest.fn(),
|
|
56
|
+
getState: jest.fn(),
|
|
57
|
+
addListener: jest.fn(() => jest.fn()),
|
|
58
|
+
removeListener: jest.fn(),
|
|
59
|
+
setOptions: jest.fn(),
|
|
60
|
+
push: jest.fn(),
|
|
61
|
+
pop: jest.fn(),
|
|
62
|
+
popTo: jest.fn(),
|
|
63
|
+
popToTop: jest.fn(),
|
|
64
|
+
replace: jest.fn(),
|
|
65
|
+
resize: jest.fn(),
|
|
66
|
+
};
|
|
67
|
+
return navigation as TrueSheetNavigationProp<T>;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
export type { TrueSheetActionType } from '../navigation/actions';
|
|
71
|
+
export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
72
|
+
export type {
|
|
73
|
+
TrueSheetNavigationEventMap,
|
|
74
|
+
TrueSheetNavigationHelpers,
|
|
75
|
+
TrueSheetNavigationOptions,
|
|
76
|
+
TrueSheetNavigationProp,
|
|
77
|
+
TrueSheetNavigationState,
|
|
78
|
+
TrueSheetScreenProps,
|
|
79
|
+
} from '../navigation/types';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ParamListBase } from '../navigation/expo-router/base-types';
|
|
2
|
+
import type { TrueSheetNavigationProp } from '../navigation/expo-router/types';
|
|
3
|
+
import {
|
|
4
|
+
TrueSheetActions,
|
|
5
|
+
useTrueSheetNavigation as useTrueSheetNavigationMock,
|
|
6
|
+
} from './navigation';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Mock Sheet layout for testing.
|
|
10
|
+
* Import from '@lodev09/react-native-true-sheet/navigation/expo-router/mock' in your test setup.
|
|
11
|
+
*/
|
|
12
|
+
export const Sheet = Object.assign(
|
|
13
|
+
jest.fn(({ children }: { children: React.ReactNode }) => children),
|
|
14
|
+
{
|
|
15
|
+
Screen: jest.fn(() => null),
|
|
16
|
+
Protected: jest.fn(() => null),
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Mock useTrueSheetNavigation hook for testing.
|
|
22
|
+
*/
|
|
23
|
+
export const useTrueSheetNavigation = jest.fn(
|
|
24
|
+
// Double cast: the shared mock is typed against React Navigation, this entry
|
|
25
|
+
// against Expo Router's vendored copy — identical shapes, unrelated declarations
|
|
26
|
+
<T extends ParamListBase = ParamListBase>(): TrueSheetNavigationProp<T> =>
|
|
27
|
+
useTrueSheetNavigationMock() as unknown as TrueSheetNavigationProp<T>
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export { TrueSheetActions };
|
|
31
|
+
|
|
32
|
+
export type { TrueSheetActionType } from '../navigation/actions';
|
|
33
|
+
export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
34
|
+
export type {
|
|
35
|
+
TrueSheetNavigationEventMap,
|
|
36
|
+
TrueSheetNavigationHelpers,
|
|
37
|
+
TrueSheetNavigationOptions,
|
|
38
|
+
TrueSheetNavigationProp,
|
|
39
|
+
TrueSheetNavigationState,
|
|
40
|
+
TrueSheetScreenProps,
|
|
41
|
+
} from '../navigation/expo-router/types';
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import React, { createElement, isValidElement, type ReactNode } from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import type { SharedValue } from 'react-native-reanimated';
|
|
4
|
+
|
|
5
|
+
import type { TrueSheetProps, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
6
|
+
|
|
7
|
+
interface TrueSheetState {
|
|
8
|
+
shouldRenderNativeView: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface MockReanimatedTrueSheetContextValue {
|
|
12
|
+
animatedPosition: SharedValue<number>;
|
|
13
|
+
animatedIndex: SharedValue<number>;
|
|
14
|
+
animatedDetent: SharedValue<number>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const createMockSharedValue = <T>(initialValue: T): SharedValue<T> => ({
|
|
18
|
+
value: initialValue,
|
|
19
|
+
get: () => initialValue,
|
|
20
|
+
set: () => {},
|
|
21
|
+
addListener: () => {},
|
|
22
|
+
removeListener: () => {},
|
|
23
|
+
modify: () => {},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Mock ReanimatedTrueSheet component for testing.
|
|
28
|
+
* Import from '@lodev09/react-native-true-sheet/reanimated/mock' in your test setup.
|
|
29
|
+
*/
|
|
30
|
+
export class ReanimatedTrueSheet extends React.Component<TrueSheetProps, TrueSheetState> {
|
|
31
|
+
static instances: Record<string, ReanimatedTrueSheet> = {};
|
|
32
|
+
|
|
33
|
+
static dismiss = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
|
|
34
|
+
static dismissStack = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
|
|
35
|
+
static present = jest.fn((_name: string, _index?: number, _animated?: boolean) =>
|
|
36
|
+
Promise.resolve()
|
|
37
|
+
);
|
|
38
|
+
static resize = jest.fn((_name: string, _index: number) => Promise.resolve());
|
|
39
|
+
|
|
40
|
+
dismiss = jest.fn((_animated?: boolean) => Promise.resolve());
|
|
41
|
+
dismissStack = jest.fn((_animated?: boolean) => Promise.resolve());
|
|
42
|
+
present = jest.fn((_index?: number, _animated?: boolean) => Promise.resolve());
|
|
43
|
+
resize = jest.fn((_index: number) => Promise.resolve());
|
|
44
|
+
|
|
45
|
+
componentDidMount() {
|
|
46
|
+
const { name } = this.props;
|
|
47
|
+
if (name) {
|
|
48
|
+
ReanimatedTrueSheet.instances[name] = this;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
componentWillUnmount() {
|
|
53
|
+
const { name } = this.props;
|
|
54
|
+
if (name) {
|
|
55
|
+
delete ReanimatedTrueSheet.instances[name];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private renderHeader(): ReactNode {
|
|
60
|
+
const { header } = this.props;
|
|
61
|
+
if (!header) return null;
|
|
62
|
+
return isValidElement(header) ? header : createElement(header);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private renderFooter(): ReactNode {
|
|
66
|
+
const { footer } = this.props;
|
|
67
|
+
if (!footer) return null;
|
|
68
|
+
return isValidElement(footer) ? footer : createElement(footer);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
render() {
|
|
72
|
+
const { children, style } = this.props;
|
|
73
|
+
return React.createElement(View, { style }, this.renderHeader(), children, this.renderFooter());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Mock ReanimatedTrueSheetProvider for testing.
|
|
79
|
+
*/
|
|
80
|
+
export function ReanimatedTrueSheetProvider({ children }: { children: React.ReactNode }) {
|
|
81
|
+
return children;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Mock useReanimatedTrueSheet hook for testing.
|
|
86
|
+
*/
|
|
87
|
+
export const useReanimatedTrueSheet = jest.fn(
|
|
88
|
+
(): MockReanimatedTrueSheetContextValue => ({
|
|
89
|
+
animatedPosition: createMockSharedValue(0),
|
|
90
|
+
animatedIndex: createMockSharedValue(-1),
|
|
91
|
+
animatedDetent: createMockSharedValue(0),
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Mock useReanimatedPositionChangeHandler hook for testing.
|
|
97
|
+
*/
|
|
98
|
+
export const useReanimatedPositionChangeHandler = jest.fn(
|
|
99
|
+
(_handler: (payload: PositionChangeEventPayload) => void, _dependencies?: unknown[]) => jest.fn()
|
|
100
|
+
);
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { NavigatorArgs } from 'standard-navigation';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
TrueSheetNavigationOptions,
|
|
5
|
+
TrueSheetNavigatorContentExtraProps,
|
|
6
|
+
TrueSheetStandardEventMap,
|
|
7
|
+
} from './types';
|
|
8
|
+
import { TrueSheetScreen, type TrueSheetScreenProps } from './screen';
|
|
9
|
+
|
|
10
|
+
let ReanimatedTrueSheetScreen: React.ComponentType<TrueSheetScreenProps> | null = null;
|
|
11
|
+
|
|
12
|
+
const getReanimatedScreen = (): React.ComponentType<TrueSheetScreenProps> => {
|
|
13
|
+
if (!ReanimatedTrueSheetScreen) {
|
|
14
|
+
ReanimatedTrueSheetScreen =
|
|
15
|
+
require('./screen/ReanimatedTrueSheetScreen').ReanimatedTrueSheetScreen;
|
|
16
|
+
}
|
|
17
|
+
return ReanimatedTrueSheetScreen!;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const DEFAULT_DETENTS: ('auto' | number)[] = ['auto'];
|
|
21
|
+
|
|
22
|
+
const clampDetentIndex = (index: number, detentsLength: number): number =>
|
|
23
|
+
Math.min(index, Math.max(detentsLength - 1, 0));
|
|
24
|
+
|
|
25
|
+
export type TrueSheetNavigatorContentProps = NavigatorArgs<
|
|
26
|
+
TrueSheetNavigationOptions,
|
|
27
|
+
TrueSheetStandardEventMap
|
|
28
|
+
> &
|
|
29
|
+
TrueSheetNavigatorContentExtraProps;
|
|
30
|
+
|
|
31
|
+
export const TrueSheetNavigatorContent = ({
|
|
32
|
+
routes,
|
|
33
|
+
dispatch,
|
|
34
|
+
descriptors,
|
|
35
|
+
emitter,
|
|
36
|
+
}: TrueSheetNavigatorContentProps) => {
|
|
37
|
+
// First route is the base screen, rest are sheets.
|
|
38
|
+
// Rendered from the raw routes (not the standard state) so custom fields are
|
|
39
|
+
// available and preloaded routes never present as sheets.
|
|
40
|
+
const [baseRoute, ...sheetRoutes] = routes;
|
|
41
|
+
|
|
42
|
+
const baseDescriptor = baseRoute ? descriptors[baseRoute.key] : null;
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<>
|
|
46
|
+
{/* Render base screen */}
|
|
47
|
+
{baseDescriptor?.render()}
|
|
48
|
+
|
|
49
|
+
{/* Render sheet screens */}
|
|
50
|
+
{sheetRoutes.map((route) => {
|
|
51
|
+
const descriptor = descriptors[route.key];
|
|
52
|
+
|
|
53
|
+
if (!descriptor) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const { options, render } = descriptor;
|
|
58
|
+
const {
|
|
59
|
+
detentIndex = 0,
|
|
60
|
+
detents = DEFAULT_DETENTS,
|
|
61
|
+
reanimated,
|
|
62
|
+
positionChangeHandler,
|
|
63
|
+
...sheetProps
|
|
64
|
+
} = options;
|
|
65
|
+
const resolvedIndex = clampDetentIndex(route.resizeIndex ?? detentIndex, detents.length);
|
|
66
|
+
|
|
67
|
+
if (reanimated) {
|
|
68
|
+
const ReanimatedScreen = getReanimatedScreen();
|
|
69
|
+
return (
|
|
70
|
+
<ReanimatedScreen
|
|
71
|
+
key={route.key}
|
|
72
|
+
routeKey={route.key}
|
|
73
|
+
closing={route.closing}
|
|
74
|
+
detentIndex={resolvedIndex}
|
|
75
|
+
resizeKey={route.resizeKey}
|
|
76
|
+
detents={detents}
|
|
77
|
+
dispatch={dispatch}
|
|
78
|
+
emit={emitter.emit}
|
|
79
|
+
positionChangeHandler={positionChangeHandler}
|
|
80
|
+
{...sheetProps}
|
|
81
|
+
>
|
|
82
|
+
{render()}
|
|
83
|
+
</ReanimatedScreen>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<TrueSheetScreen
|
|
89
|
+
key={route.key}
|
|
90
|
+
routeKey={route.key}
|
|
91
|
+
closing={route.closing}
|
|
92
|
+
detentIndex={resolvedIndex}
|
|
93
|
+
resizeKey={route.resizeKey}
|
|
94
|
+
detents={detents}
|
|
95
|
+
dispatch={dispatch}
|
|
96
|
+
emit={emitter.emit}
|
|
97
|
+
positionChangeHandler={positionChangeHandler}
|
|
98
|
+
{...sheetProps}
|
|
99
|
+
>
|
|
100
|
+
{render()}
|
|
101
|
+
</TrueSheetScreen>
|
|
102
|
+
);
|
|
103
|
+
})}
|
|
104
|
+
</>
|
|
105
|
+
);
|
|
106
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export type TrueSheetActionType =
|
|
2
|
+
| {
|
|
3
|
+
type: 'PUSH';
|
|
4
|
+
payload: { name: string; params?: object };
|
|
5
|
+
source?: string;
|
|
6
|
+
target?: string;
|
|
7
|
+
}
|
|
8
|
+
| {
|
|
9
|
+
type: 'POP';
|
|
10
|
+
payload: { count: number };
|
|
11
|
+
source?: string;
|
|
12
|
+
target?: string;
|
|
13
|
+
}
|
|
14
|
+
| {
|
|
15
|
+
type: 'POP_TO';
|
|
16
|
+
payload: { name: string; params?: object; merge?: boolean };
|
|
17
|
+
source?: string;
|
|
18
|
+
target?: string;
|
|
19
|
+
}
|
|
20
|
+
| {
|
|
21
|
+
type: 'POP_TO_TOP';
|
|
22
|
+
source?: string;
|
|
23
|
+
target?: string;
|
|
24
|
+
}
|
|
25
|
+
| {
|
|
26
|
+
type: 'REPLACE';
|
|
27
|
+
payload: { name: string; params?: object };
|
|
28
|
+
source?: string;
|
|
29
|
+
target?: string;
|
|
30
|
+
}
|
|
31
|
+
| {
|
|
32
|
+
type: 'GO_BACK';
|
|
33
|
+
source?: string;
|
|
34
|
+
target?: string;
|
|
35
|
+
}
|
|
36
|
+
| {
|
|
37
|
+
type: 'RESIZE';
|
|
38
|
+
index: number;
|
|
39
|
+
source?: string;
|
|
40
|
+
target?: string;
|
|
41
|
+
}
|
|
42
|
+
| {
|
|
43
|
+
type: 'DISMISS';
|
|
44
|
+
source?: string;
|
|
45
|
+
target?: string;
|
|
46
|
+
}
|
|
47
|
+
| {
|
|
48
|
+
type: 'REMOVE';
|
|
49
|
+
source?: string;
|
|
50
|
+
target?: string;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Action creators for the TrueSheet navigator.
|
|
55
|
+
* Plain objects matching `StackActions` shapes, plus sheet-specific actions.
|
|
56
|
+
*/
|
|
57
|
+
export const TrueSheetActions = {
|
|
58
|
+
push: (name: string, params?: object): TrueSheetActionType => ({
|
|
59
|
+
type: 'PUSH',
|
|
60
|
+
payload: { name, params },
|
|
61
|
+
}),
|
|
62
|
+
pop: (count: number = 1): TrueSheetActionType => ({
|
|
63
|
+
type: 'POP',
|
|
64
|
+
payload: { count },
|
|
65
|
+
}),
|
|
66
|
+
popTo: (name: string, params?: object, options?: { merge?: boolean }): TrueSheetActionType => ({
|
|
67
|
+
type: 'POP_TO',
|
|
68
|
+
payload: { name, params, merge: options?.merge },
|
|
69
|
+
}),
|
|
70
|
+
popToTop: (): TrueSheetActionType => ({ type: 'POP_TO_TOP' }),
|
|
71
|
+
replace: (name: string, params?: object): TrueSheetActionType => ({
|
|
72
|
+
type: 'REPLACE',
|
|
73
|
+
payload: { name, params },
|
|
74
|
+
}),
|
|
75
|
+
resize: (index: number): TrueSheetActionType => ({ type: 'RESIZE', index }),
|
|
76
|
+
dismiss: (): TrueSheetActionType => ({ type: 'DISMISS' }),
|
|
77
|
+
remove: (): TrueSheetActionType => ({ type: 'REMOVE' }),
|
|
78
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base navigation types for the React Navigation entry point.
|
|
3
|
+
*
|
|
4
|
+
* The Expo Router entry has its own copy sourced from `expo-router/react-navigation`
|
|
5
|
+
* (see `./expo-router/base-types`) because Expo Router apps never install
|
|
6
|
+
* `@react-navigation/*` — importing it there would silently resolve to `any`.
|
|
7
|
+
*/
|
|
8
|
+
export type {
|
|
9
|
+
DefaultNavigatorOptions,
|
|
10
|
+
Descriptor,
|
|
11
|
+
NavigationAction,
|
|
12
|
+
NavigationHelpers,
|
|
13
|
+
NavigationProp,
|
|
14
|
+
NavigationState,
|
|
15
|
+
ParamListBase,
|
|
16
|
+
RouteProp,
|
|
17
|
+
Router,
|
|
18
|
+
StackActionHelpers,
|
|
19
|
+
StackRouterOptions,
|
|
20
|
+
} from '@react-navigation/core';
|