@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,38 @@
|
|
|
1
|
+
package com.lodev09.truesheet
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint
|
|
4
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Delegate interface for header view size changes
|
|
9
|
+
*/
|
|
10
|
+
interface TrueSheetHeaderViewDelegate {
|
|
11
|
+
fun headerViewDidChangeSize(width: Int, height: Int)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Header view that holds the header content
|
|
16
|
+
* Positioned at the top of the sheet content area
|
|
17
|
+
*/
|
|
18
|
+
@SuppressLint("ViewConstructor")
|
|
19
|
+
class TrueSheetHeaderView(context: ThemedReactContext) : ReactViewGroup(context) {
|
|
20
|
+
var delegate: TrueSheetHeaderViewDelegate? = null
|
|
21
|
+
|
|
22
|
+
private var lastWidth = 0
|
|
23
|
+
private var lastHeight = 0
|
|
24
|
+
|
|
25
|
+
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
|
26
|
+
super.onSizeChanged(w, h, oldw, oldh)
|
|
27
|
+
|
|
28
|
+
if (w != lastWidth || h != lastHeight) {
|
|
29
|
+
lastWidth = w
|
|
30
|
+
lastHeight = h
|
|
31
|
+
delegate?.headerViewDidChangeSize(w, h)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
companion object {
|
|
36
|
+
const val TAG_NAME = "TrueSheet"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
package com.lodev09.truesheet
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
4
|
+
import com.facebook.react.uimanager.PointerEvents
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* ViewManager for TrueSheetHeaderView
|
|
11
|
+
* Manages the header area of the sheet
|
|
12
|
+
*/
|
|
13
|
+
@ReactModule(name = TrueSheetHeaderViewManager.REACT_CLASS)
|
|
14
|
+
class TrueSheetHeaderViewManager : ViewGroupManager<TrueSheetHeaderView>() {
|
|
15
|
+
|
|
16
|
+
override fun getName(): String = REACT_CLASS
|
|
17
|
+
|
|
18
|
+
override fun createViewInstance(reactContext: ThemedReactContext): TrueSheetHeaderView = TrueSheetHeaderView(reactContext)
|
|
19
|
+
|
|
20
|
+
@ReactProp(name = "pointerEvents")
|
|
21
|
+
fun setPointerEvents(view: TrueSheetHeaderView, pointerEventsStr: String?) {
|
|
22
|
+
view.pointerEvents = PointerEvents.parsePointerEvents(pointerEventsStr)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
companion object {
|
|
26
|
+
const val REACT_CLASS = "TrueSheetHeaderView"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -8,6 +8,7 @@ import com.facebook.react.bridge.ReactMethod
|
|
|
8
8
|
import com.facebook.react.module.annotations.ReactModule
|
|
9
9
|
import com.facebook.react.turbomodule.core.interfaces.TurboModule
|
|
10
10
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
11
|
+
import com.lodev09.truesheet.core.TrueSheetStackManager
|
|
11
12
|
import java.util.concurrent.ConcurrentHashMap
|
|
12
13
|
|
|
13
14
|
/**
|
|
@@ -21,16 +22,13 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
|
|
|
21
22
|
|
|
22
23
|
override fun getName(): String = NAME
|
|
23
24
|
|
|
24
|
-
override fun initialize() {
|
|
25
|
-
super.initialize()
|
|
26
|
-
}
|
|
27
|
-
|
|
28
25
|
override fun invalidate() {
|
|
29
26
|
super.invalidate()
|
|
30
|
-
// Clear all registered views on module invalidation
|
|
27
|
+
// Clear all registered views and observer on module invalidation
|
|
31
28
|
synchronized(viewRegistry) {
|
|
32
29
|
viewRegistry.clear()
|
|
33
30
|
}
|
|
31
|
+
TrueSheetStackManager.clear()
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
/**
|
|
@@ -44,19 +42,19 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
|
|
|
44
42
|
* @throws OPERATION_FAILED if the operation fails for any other reason
|
|
45
43
|
*/
|
|
46
44
|
@ReactMethod
|
|
47
|
-
fun presentByRef(viewTag: Double, index: Double, promise: Promise) {
|
|
45
|
+
fun presentByRef(viewTag: Double, index: Double, animated: Boolean, promise: Promise) {
|
|
48
46
|
val tag = viewTag.toInt()
|
|
49
47
|
val detentIndex = index.toInt()
|
|
50
48
|
|
|
51
49
|
withTrueSheetView(tag, promise) { view ->
|
|
52
|
-
view.present(detentIndex) {
|
|
50
|
+
view.present(detentIndex, animated) {
|
|
53
51
|
promise.resolve(null)
|
|
54
52
|
}
|
|
55
53
|
}
|
|
56
54
|
}
|
|
57
55
|
|
|
58
56
|
/**
|
|
59
|
-
* Dismiss a sheet
|
|
57
|
+
* Dismiss a sheet and all sheets presented on top of it
|
|
60
58
|
*
|
|
61
59
|
* @param viewTag Native view tag of the sheet component
|
|
62
60
|
* @param promise Promise that resolves when sheet is fully dismissed
|
|
@@ -65,11 +63,31 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
|
|
|
65
63
|
* @throws OPERATION_FAILED if the operation fails for any other reason
|
|
66
64
|
*/
|
|
67
65
|
@ReactMethod
|
|
68
|
-
fun dismissByRef(viewTag: Double, promise: Promise) {
|
|
66
|
+
fun dismissByRef(viewTag: Double, animated: Boolean, promise: Promise) {
|
|
69
67
|
val tag = viewTag.toInt()
|
|
70
68
|
|
|
71
69
|
withTrueSheetView(tag, promise) { view ->
|
|
72
|
-
view.dismiss {
|
|
70
|
+
view.dismiss(animated) {
|
|
71
|
+
promise.resolve(null)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Dismiss only the sheets presented on top of this sheet, keeping this sheet presented
|
|
78
|
+
*
|
|
79
|
+
* @param viewTag Native view tag of the sheet component
|
|
80
|
+
* @param promise Promise that resolves when all child sheets are fully dismissed
|
|
81
|
+
* @throws VIEW_NOT_FOUND if the view with the given tag is not found
|
|
82
|
+
* @throws INVALID_VIEW_TYPE if the view is not a TrueSheetView
|
|
83
|
+
* @throws OPERATION_FAILED if the operation fails for any other reason
|
|
84
|
+
*/
|
|
85
|
+
@ReactMethod
|
|
86
|
+
fun dismissStackByRef(viewTag: Double, animated: Boolean, promise: Promise) {
|
|
87
|
+
val tag = viewTag.toInt()
|
|
88
|
+
|
|
89
|
+
withTrueSheetView(tag, promise) { view ->
|
|
90
|
+
view.dismissStack(animated) {
|
|
73
91
|
promise.resolve(null)
|
|
74
92
|
}
|
|
75
93
|
}
|
|
@@ -87,8 +105,49 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
|
|
|
87
105
|
*/
|
|
88
106
|
@ReactMethod
|
|
89
107
|
fun resizeByRef(viewTag: Double, index: Double, promise: Promise) {
|
|
90
|
-
|
|
91
|
-
|
|
108
|
+
val tag = viewTag.toInt()
|
|
109
|
+
val detentIndex = index.toInt()
|
|
110
|
+
|
|
111
|
+
withTrueSheetView(tag, promise) { view ->
|
|
112
|
+
view.resize(detentIndex) {
|
|
113
|
+
promise.resolve(null)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Dismiss all presented sheets by dismissing from the bottom of the stack
|
|
120
|
+
*
|
|
121
|
+
* @param animated Whether to animate the dismissals
|
|
122
|
+
* @param promise Promise that resolves when all sheets are dismissed
|
|
123
|
+
*/
|
|
124
|
+
@ReactMethod
|
|
125
|
+
fun dismissAll(animated: Boolean, promise: Promise) {
|
|
126
|
+
Handler(Looper.getMainLooper()).post {
|
|
127
|
+
try {
|
|
128
|
+
val rootSheet = TrueSheetStackManager.getRootSheet()
|
|
129
|
+
if (rootSheet == null) {
|
|
130
|
+
promise.resolve(null)
|
|
131
|
+
return@post
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
rootSheet.dismiss(animated) {
|
|
135
|
+
promise.resolve(null)
|
|
136
|
+
}
|
|
137
|
+
} catch (e: Exception) {
|
|
138
|
+
promise.reject("OPERATION_FAILED", "Failed to dismiss all sheets: ${e.message}", e)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@ReactMethod
|
|
144
|
+
fun handleBackPress(viewTag: Double, promise: Promise) {
|
|
145
|
+
val tag = viewTag.toInt()
|
|
146
|
+
|
|
147
|
+
withTrueSheetView(tag, promise) { view ->
|
|
148
|
+
view.handleBackPress()
|
|
149
|
+
promise.resolve(null)
|
|
150
|
+
}
|
|
92
151
|
}
|
|
93
152
|
|
|
94
153
|
/**
|
|
@@ -98,29 +157,30 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
|
|
|
98
157
|
Handler(Looper.getMainLooper()).post {
|
|
99
158
|
try {
|
|
100
159
|
// First try to get from registry (faster)
|
|
101
|
-
|
|
160
|
+
var view = getSheetByTag(tag)
|
|
102
161
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
} else {
|
|
106
|
-
// Fallback to UIManager resolution
|
|
162
|
+
// Fallback to UIManager resolution
|
|
163
|
+
if (view == null) {
|
|
107
164
|
val manager = UIManagerHelper.getUIManagerForReactTag(reactApplicationContext, tag)
|
|
108
165
|
val resolvedView = manager?.resolveView(tag)
|
|
109
166
|
|
|
110
|
-
if (resolvedView == null) {
|
|
111
|
-
promise.reject("VIEW_NOT_FOUND", "TrueSheetView with tag $tag not found")
|
|
112
|
-
return@post
|
|
113
|
-
}
|
|
114
|
-
|
|
115
167
|
if (resolvedView is TrueSheetView) {
|
|
116
|
-
|
|
117
|
-
} else {
|
|
168
|
+
view = resolvedView
|
|
169
|
+
} else if (resolvedView != null) {
|
|
118
170
|
promise.reject(
|
|
119
171
|
"INVALID_VIEW_TYPE",
|
|
120
172
|
"View with tag $tag is not a TrueSheetView (got ${resolvedView::class.simpleName})"
|
|
121
173
|
)
|
|
174
|
+
return@post
|
|
122
175
|
}
|
|
123
176
|
}
|
|
177
|
+
|
|
178
|
+
if (view == null) {
|
|
179
|
+
promise.reject("VIEW_NOT_FOUND", "TrueSheetView with tag $tag not found")
|
|
180
|
+
return@post
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
closure(view)
|
|
124
184
|
} catch (e: Exception) {
|
|
125
185
|
promise.reject("OPERATION_FAILED", "Failed to execute operation: ${e.message}", e)
|
|
126
186
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
package com.lodev09.truesheet
|
|
2
2
|
|
|
3
|
-
import com.facebook.react.
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
6
|
import com.facebook.react.module.model.ReactModuleInfo
|
|
@@ -11,7 +11,7 @@ import com.facebook.react.uimanager.ViewManager
|
|
|
11
11
|
* TrueSheet package for Fabric architecture
|
|
12
12
|
* Registers all view managers and the TurboModule
|
|
13
13
|
*/
|
|
14
|
-
class TrueSheetPackage :
|
|
14
|
+
class TrueSheetPackage : BaseReactPackage() {
|
|
15
15
|
|
|
16
16
|
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? =
|
|
17
17
|
when (name) {
|
|
@@ -27,7 +27,6 @@ class TrueSheetPackage : TurboReactPackage() {
|
|
|
27
27
|
TrueSheetModule::class.java.name,
|
|
28
28
|
false, // canOverrideExistingModule
|
|
29
29
|
false, // needsEagerInit
|
|
30
|
-
true, // hasConstants
|
|
31
30
|
false, // isCxxModule
|
|
32
31
|
true // isTurboModule
|
|
33
32
|
)
|
|
@@ -39,6 +38,8 @@ class TrueSheetPackage : TurboReactPackage() {
|
|
|
39
38
|
TrueSheetViewManager(),
|
|
40
39
|
TrueSheetContainerViewManager(),
|
|
41
40
|
TrueSheetContentViewManager(),
|
|
42
|
-
|
|
41
|
+
TrueSheetHeaderViewManager(),
|
|
42
|
+
TrueSheetFooterViewManager(),
|
|
43
|
+
TrueSheetPeekViewManager()
|
|
43
44
|
)
|
|
44
45
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
package com.lodev09.truesheet
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint
|
|
4
|
+
import android.view.ViewParent
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Delegate interface for peek view size changes
|
|
10
|
+
*/
|
|
11
|
+
interface TrueSheetPeekViewDelegate {
|
|
12
|
+
fun peekViewDidChangeSize(width: Int, height: Int)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Peek view that marks part of the content as the sheet's peek content.
|
|
17
|
+
* The peek detent covers the content through this view's bottom edge.
|
|
18
|
+
*/
|
|
19
|
+
@SuppressLint("ViewConstructor")
|
|
20
|
+
class TrueSheetPeekView(context: ThemedReactContext) : ReactViewGroup(context) {
|
|
21
|
+
var delegate: TrueSheetPeekViewDelegate? = null
|
|
22
|
+
|
|
23
|
+
override fun onLayout(
|
|
24
|
+
changed: Boolean,
|
|
25
|
+
left: Int,
|
|
26
|
+
top: Int,
|
|
27
|
+
right: Int,
|
|
28
|
+
bottom: Int
|
|
29
|
+
) {
|
|
30
|
+
super.onLayout(changed, left, top, right, bottom)
|
|
31
|
+
|
|
32
|
+
attachToContainerView()
|
|
33
|
+
|
|
34
|
+
// Position changes matter too — the peek's offset within the content
|
|
35
|
+
// affects the peek detent.
|
|
36
|
+
if (changed) {
|
|
37
|
+
delegate?.peekViewDidChangeSize(width, height)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
override fun onAttachedToWindow() {
|
|
42
|
+
super.onAttachedToWindow()
|
|
43
|
+
attachToContainerView()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Peek can be nested anywhere within the content, so it attaches itself to the
|
|
48
|
+
* nearest container instead of being mounted by it. The container also searches
|
|
49
|
+
* for it when the content is added to cover the initial (bottom-up) mount order.
|
|
50
|
+
*/
|
|
51
|
+
private fun attachToContainerView() {
|
|
52
|
+
if (delegate != null) return
|
|
53
|
+
|
|
54
|
+
var parent: ViewParent? = parent
|
|
55
|
+
while (parent != null && parent !is TrueSheetContainerView) {
|
|
56
|
+
parent = parent.parent
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
(parent as? TrueSheetContainerView)?.attachPeekView(this)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Called by the ViewManager when the view is dropped (Fabric unmount)
|
|
64
|
+
*/
|
|
65
|
+
fun detachFromContainerView() {
|
|
66
|
+
(delegate as? TrueSheetContainerView)?.detachPeekView(this)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
companion object {
|
|
70
|
+
const val TAG_NAME = "TrueSheet"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package com.lodev09.truesheet
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
4
|
+
import com.facebook.react.uimanager.PointerEvents
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* ViewManager for TrueSheetPeekView
|
|
11
|
+
* Marks part of the content as the sheet's peek content
|
|
12
|
+
*/
|
|
13
|
+
@ReactModule(name = TrueSheetPeekViewManager.REACT_CLASS)
|
|
14
|
+
class TrueSheetPeekViewManager : ViewGroupManager<TrueSheetPeekView>() {
|
|
15
|
+
|
|
16
|
+
override fun getName(): String = REACT_CLASS
|
|
17
|
+
|
|
18
|
+
override fun createViewInstance(reactContext: ThemedReactContext): TrueSheetPeekView = TrueSheetPeekView(reactContext)
|
|
19
|
+
|
|
20
|
+
override fun onDropViewInstance(view: TrueSheetPeekView) {
|
|
21
|
+
super.onDropViewInstance(view)
|
|
22
|
+
view.detachFromContainerView()
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@ReactProp(name = "pointerEvents")
|
|
26
|
+
fun setPointerEvents(view: TrueSheetPeekView, pointerEventsStr: String?) {
|
|
27
|
+
view.pointerEvents = PointerEvents.parsePointerEvents(pointerEventsStr)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
companion object {
|
|
31
|
+
const val REACT_CLASS = "TrueSheetPeekView"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
package com.lodev09.truesheet
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Synchronous Fabric state updates via JNI (see TrueSheetStateUpdater.cpp).
|
|
7
|
+
*
|
|
8
|
+
* StateWrapper.updateState commits asynchronously, so the container's Yoga
|
|
9
|
+
* layout lags the sheet by a frame or two during drags. The native bridge
|
|
10
|
+
* commits with `unstable_Immediate`, which mounts synchronously when called
|
|
11
|
+
* from the UI thread — same-frame layout, like iOS.
|
|
12
|
+
*/
|
|
13
|
+
object TrueSheetStateUpdater {
|
|
14
|
+
private val isAvailable: Boolean = try {
|
|
15
|
+
System.loadLibrary("react_codegen_TrueSheetSpec")
|
|
16
|
+
true
|
|
17
|
+
} catch (e: UnsatisfiedLinkError) {
|
|
18
|
+
false
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Returns false when unavailable — caller should fall back to async updateState. */
|
|
22
|
+
fun updateState(stateWrapper: StateWrapper, widthDp: Float, heightDp: Float): Boolean =
|
|
23
|
+
isAvailable && nativeUpdateState(stateWrapper, widthDp, heightDp)
|
|
24
|
+
|
|
25
|
+
/** Returns false when unavailable — caller should fall back to async updateState. */
|
|
26
|
+
fun updateFooterState(stateWrapper: StateWrapper, bottomInsetDp: Float): Boolean =
|
|
27
|
+
isAvailable && nativeUpdateFooterState(stateWrapper, bottomInsetDp)
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Publishes the precalculated bottom safe-area inset so a late-mounted
|
|
31
|
+
* footer's first layout is already padded (see TrueSheetFooterViewShadowNode).
|
|
32
|
+
*/
|
|
33
|
+
fun setBottomSafeArea(insetDp: Float) {
|
|
34
|
+
if (isAvailable) nativeSetBottomSafeArea(insetDp)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@JvmStatic
|
|
38
|
+
private external fun nativeUpdateState(stateWrapper: Any, width: Float, height: Float): Boolean
|
|
39
|
+
|
|
40
|
+
@JvmStatic
|
|
41
|
+
private external fun nativeUpdateFooterState(stateWrapper: Any, bottomInset: Float): Boolean
|
|
42
|
+
|
|
43
|
+
@JvmStatic
|
|
44
|
+
private external fun nativeSetBottomSafeArea(insetDp: Float)
|
|
45
|
+
}
|