@lodev09/react-native-true-sheet 4.0.0-beta.0 → 4.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +150 -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 +1217 -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/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 +1136 -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 +224 -64
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/module/TrueSheet.web.js +1201 -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 +85 -0
- package/lib/module/mocks/navigation.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/TrueSheetRouter.js +170 -0
- package/lib/module/navigation/TrueSheetRouter.js.map +1 -0
- package/lib/module/navigation/TrueSheetView.js +71 -0
- package/lib/module/navigation/TrueSheetView.js.map +1 -0
- package/lib/module/navigation/createTrueSheetNavigator.js +63 -0
- package/lib/module/navigation/createTrueSheetNavigator.js.map +1 -0
- package/lib/module/navigation/index.js +6 -0
- package/lib/module/navigation/index.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/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 +93 -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 +66 -0
- package/lib/typescript/src/mocks/navigation.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/TrueSheetRouter.d.ts +57 -0
- package/lib/typescript/src/navigation/TrueSheetRouter.d.ts.map +1 -0
- package/lib/typescript/src/navigation/TrueSheetView.d.ts +10 -0
- package/lib/typescript/src/navigation/TrueSheetView.d.ts.map +1 -0
- package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts +35 -0
- package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts.map +1 -0
- package/lib/typescript/src/navigation/index.d.ts +6 -0
- package/lib/typescript/src/navigation/index.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 +15 -0
- package/lib/typescript/src/navigation/screen/types.d.ts.map +1 -0
- package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts +35 -0
- package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -0
- package/lib/typescript/src/navigation/types.d.ts +153 -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/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 +78 -34
- package/react-native.config.js +9 -2
- package/src/TrueSheet.tsx +276 -60
- package/src/TrueSheet.types.ts +525 -71
- package/src/TrueSheet.web.tsx +1366 -0
- package/src/TrueSheetPeek.tsx +11 -0
- package/src/TrueSheetPeek.web.tsx +63 -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 +72 -0
- package/src/mocks/reanimated.ts +101 -0
- package/src/navigation/TrueSheetRouter.ts +234 -0
- package/src/navigation/TrueSheetView.tsx +99 -0
- package/src/navigation/createTrueSheetNavigator.tsx +93 -0
- package/src/navigation/index.ts +14 -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 +21 -0
- package/src/navigation/screen/useSheetScreenState.ts +107 -0
- package/src/navigation/types.ts +219 -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/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 +124 -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
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2026 lodev09
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
of this software and associated documentation files (the "Software"), to deal
|
|
6
6
|
in the Software without restriction, including without limitation the rights
|
package/README.md
CHANGED
|
@@ -1,59 +1,69 @@
|
|
|
1
|
-
# React Native
|
|
1
|
+
# React Native TrueSheet
|
|
2
2
|
|
|
3
|
-
[](https://github.com/lodev09/react-native-true-sheet/actions/workflows/checks.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/@lodev09/react-native-true-sheet)
|
|
5
|
+
[](https://deepwiki.com/lodev09/react-native-true-sheet)
|
|
5
6
|
|
|
6
7
|
The true native bottom sheet experience for your React Native Apps. 💩
|
|
7
8
|
|
|
8
|
-
<img alt="React Native True Sheet -
|
|
9
|
+
<img alt="React Native True Sheet - iPad" src="docs/static/img/preview-ipad.gif" width="744" /><br>
|
|
10
|
+
<img alt="React Native True Sheet - IOS" src="docs/static/img/preview-ios.gif" width="248" height="500" /><img alt="React Native True Sheet - Android" src="docs/static/img/preview-android.gif" width="248" height="500" /><img alt="React Native True Sheet - Web" src="docs/static/img/preview-web.gif" width="248" height="500" />
|
|
9
11
|
|
|
10
12
|
## Features
|
|
11
13
|
|
|
12
14
|
* ⚡ **Powered by Fabric** - Built on React Native's new architecture for maximum performance
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* 🚀 **Fully Native** - Implemented in the native realm, zero JS hacks
|
|
16
|
+
* ♿ **Accessible** - Native accessibility and screen reader support out of the box
|
|
17
|
+
* 🔄 **Flexible API** - Use [imperative methods](https://sheet.lodev09.com/reference/methods#ref-methods) or [lifecycle events](https://sheet.lodev09.com/reference/events)
|
|
18
|
+
* ⌨️ **Keyboard Handling** - Built-in [keyboard handling](https://sheet.lodev09.com/guides/keyboard) with automatic adjustment
|
|
19
|
+
* 📐 **Side Sheets** - Native [side sheet](https://sheet.lodev09.com/guides/side-sheets) support for iPad and Android tablets
|
|
20
|
+
* 🪟 **Liquid Glass** - [iOS 26+ Liquid Glass](https://sheet.lodev09.com/guides/liquid-glass) support out of the box, featured in [Expo Blog](https://expo.dev/blog/how-to-create-apple-maps-style-liquid-glass-sheets)
|
|
21
|
+
* 🐎 **Reanimated** - First-class support for [react-native-reanimated](https://sheet.lodev09.com/guides/reanimated)
|
|
22
|
+
* 🧭 **React Navigation** - Built-in [sheet navigator](https://sheet.lodev09.com/guides/navigation) for seamless navigation integration
|
|
23
|
+
* 🌐 **Web Support** - Full [web support](https://sheet.lodev09.com/guides/web) out of the box
|
|
17
24
|
|
|
18
25
|
## Installation
|
|
19
26
|
|
|
20
27
|
> [!IMPORTANT]
|
|
21
28
|
> **Version 3.0+ requires React Native's New Architecture (Fabric)**
|
|
22
|
-
> For the old architecture, use version 2.x. See the [Migration Guide
|
|
29
|
+
> For the old architecture, use version 2.x. See the [Migration Guide](https://sheet.lodev09.com/migration) for upgrading.
|
|
23
30
|
|
|
24
31
|
### Prerequisites
|
|
25
32
|
|
|
26
|
-
- React Native
|
|
27
|
-
- New Architecture enabled
|
|
33
|
+
- React Native 0.82+
|
|
34
|
+
- New Architecture enabled
|
|
35
|
+
- Xcode 26.1+
|
|
28
36
|
|
|
29
|
-
###
|
|
37
|
+
### Compatibility
|
|
38
|
+
|
|
39
|
+
| TrueSheet | React Native | Expo SDK |
|
|
40
|
+
|------------|--------------|----------|
|
|
41
|
+
| 4.0+ | 0.82+ | 55+ |
|
|
42
|
+
| 3.7 - 3.11 | 0.81+ | 54+ |
|
|
43
|
+
| 3.6 | 0.80 | 52-53 |
|
|
44
|
+
|
|
45
|
+
### Expo
|
|
30
46
|
|
|
31
47
|
```sh
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
```sh
|
|
35
|
-
npm i @lodev09/react-native-true-sheet
|
|
48
|
+
npx expo install @lodev09/react-native-true-sheet
|
|
36
49
|
```
|
|
37
50
|
|
|
38
|
-
###
|
|
51
|
+
### Bare React Native
|
|
39
52
|
|
|
40
53
|
```sh
|
|
54
|
+
yarn add @lodev09/react-native-true-sheet
|
|
41
55
|
cd ios && pod install
|
|
42
56
|
```
|
|
43
57
|
|
|
44
|
-
> **Note:** If you need old architecture support, use version 2.x:
|
|
45
|
-
> ```sh
|
|
46
|
-
> yarn add @lodev09/react-native-true-sheet@^2.0.0
|
|
47
|
-
> ```
|
|
48
|
-
|
|
49
58
|
## Documentation
|
|
50
59
|
|
|
51
60
|
- [Example](example)
|
|
52
|
-
- [
|
|
53
|
-
- [
|
|
54
|
-
- [
|
|
61
|
+
- [Configuration](https://sheet.lodev09.com/reference/configuration)
|
|
62
|
+
- [Lifecycle Events](https://sheet.lodev09.com/reference/events)
|
|
63
|
+
- [React Navigation](https://sheet.lodev09.com/guides/navigation)
|
|
55
64
|
- [Troubleshooting](https://sheet.lodev09.com/troubleshooting)
|
|
56
65
|
- [Testing with Jest](https://sheet.lodev09.com/guides/jest)
|
|
66
|
+
- [Migrating to v3](https://sheet.lodev09.com/migration)
|
|
57
67
|
|
|
58
68
|
## Usage
|
|
59
69
|
|
|
@@ -81,7 +91,6 @@ export const App = () => {
|
|
|
81
91
|
<TrueSheet
|
|
82
92
|
ref={sheet}
|
|
83
93
|
detents={['auto', 1]}
|
|
84
|
-
cornerRadius={24}
|
|
85
94
|
>
|
|
86
95
|
<Button onPress={dismiss} title="Dismiss" />
|
|
87
96
|
</TrueSheet>
|
|
@@ -90,17 +99,19 @@ export const App = () => {
|
|
|
90
99
|
}
|
|
91
100
|
```
|
|
92
101
|
|
|
93
|
-
##
|
|
102
|
+
## AI Skills
|
|
94
103
|
|
|
95
|
-
|
|
104
|
+
Skills are reusable AI capabilities that give your AI coding agent knowledge about TrueSheet. With the right skill loaded, your agent can pick the right patterns, avoid common mistakes, and generate correct code without you having to explain the library every time.
|
|
96
105
|
|
|
97
|
-
```
|
|
98
|
-
|
|
106
|
+
```sh
|
|
107
|
+
npx skills add lodev09/react-native-true-sheet
|
|
99
108
|
```
|
|
100
109
|
|
|
101
|
-
|
|
110
|
+
This will install the **TrueSheet Usage** skill into your project.
|
|
111
|
+
|
|
112
|
+
## That map is awesome!
|
|
102
113
|
|
|
103
|
-
|
|
114
|
+
Yes it is! Checkout [`@lugg/maps`](https://github.com/lugg/maps), a universal maps library for React Native that I'm developing at [Lugg](https://lugg.com).
|
|
104
115
|
|
|
105
116
|
## Contributing
|
|
106
117
|
|
package/RNTrueSheet.podspec
CHANGED
|
@@ -10,11 +10,19 @@ Pod::Spec.new do |s|
|
|
|
10
10
|
s.license = package["license"]
|
|
11
11
|
s.authors = package["author"]
|
|
12
12
|
|
|
13
|
-
s.platforms = { :ios => min_ios_version_supported }
|
|
13
|
+
s.platforms = { :ios => min_ios_version_supported, :tvos => min_ios_version_supported }
|
|
14
14
|
s.source = { :git => "https://github.com/lodev09/react-native-true-sheet.git", :tag => "#{s.version}" }
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
# tvOS compiles stubs only — sheets are not supported there, but codegen
|
|
17
|
+
# still registers the components so the classes must exist (#722)
|
|
18
|
+
s.ios.source_files = "ios/**/*.{h,m,mm,swift,cpp}", "common/cpp/**/*.{cpp,h}"
|
|
19
|
+
s.ios.exclude_files = "ios/tvos/**/*"
|
|
20
|
+
s.tvos.source_files = "ios/tvos/**/*.mm", "common/cpp/**/*.{cpp,h}"
|
|
17
21
|
s.private_header_files = "ios/**/*.h"
|
|
18
22
|
|
|
23
|
+
s.pod_target_xcconfig = {
|
|
24
|
+
"HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\""
|
|
25
|
+
}
|
|
26
|
+
|
|
19
27
|
install_modules_dependencies(s)
|
|
20
28
|
end
|
package/android/build.gradle
CHANGED
|
@@ -96,10 +96,11 @@ repositories {
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
99
|
+
def material_version = getExtOrDefault("materialVersion") ?: "1.12.0"
|
|
99
100
|
|
|
100
101
|
dependencies {
|
|
101
102
|
implementation "com.facebook.react:react-android"
|
|
102
103
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
103
|
-
implementation "com.google.android.material:material
|
|
104
|
+
implementation "com.google.android.material:material:$material_version"
|
|
104
105
|
}
|
|
105
106
|
|
|
@@ -2,107 +2,232 @@ package com.lodev09.truesheet
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.view.View
|
|
5
|
-
import
|
|
5
|
+
import android.view.ViewGroup
|
|
6
6
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
7
|
+
import com.facebook.react.uimanager.events.EventDispatcher
|
|
8
|
+
import com.facebook.react.util.RNLog
|
|
7
9
|
import com.facebook.react.views.view.ReactViewGroup
|
|
8
10
|
|
|
9
|
-
/**
|
|
10
|
-
* Delegate interface for container view changes
|
|
11
|
-
*/
|
|
12
11
|
interface TrueSheetContainerViewDelegate {
|
|
12
|
+
val eventDispatcher: EventDispatcher?
|
|
13
13
|
fun containerViewContentDidChangeSize(width: Int, height: Int)
|
|
14
|
+
fun containerViewContentDidScroll()
|
|
15
|
+
fun containerViewScrollViewDidChange()
|
|
16
|
+
fun containerViewHeaderDidChangeSize(width: Int, height: Int)
|
|
14
17
|
fun containerViewFooterDidChangeSize(width: Int, height: Int)
|
|
18
|
+
fun containerViewPeekDidChangeSize(width: Int, height: Int)
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
/**
|
|
18
|
-
* Container view that manages the
|
|
19
|
-
*
|
|
22
|
+
* Container view that manages the sheet's content, header, and footer views.
|
|
23
|
+
* Size changes are forwarded to the delegate for sheet reconfiguration.
|
|
20
24
|
*/
|
|
21
25
|
@SuppressLint("ViewConstructor")
|
|
22
|
-
class TrueSheetContainerView(
|
|
26
|
+
class TrueSheetContainerView(reactContext: ThemedReactContext) :
|
|
23
27
|
ReactViewGroup(reactContext),
|
|
24
28
|
TrueSheetContentViewDelegate,
|
|
25
|
-
|
|
29
|
+
TrueSheetHeaderViewDelegate,
|
|
30
|
+
TrueSheetFooterViewDelegate,
|
|
31
|
+
TrueSheetPeekViewDelegate {
|
|
26
32
|
|
|
27
33
|
var delegate: TrueSheetContainerViewDelegate? = null
|
|
28
34
|
|
|
35
|
+
var contentView: TrueSheetContentView? = null
|
|
36
|
+
var headerView: TrueSheetHeaderView? = null
|
|
37
|
+
var footerView: TrueSheetFooterView? = null
|
|
38
|
+
var peekView: TrueSheetPeekView? = null
|
|
39
|
+
|
|
40
|
+
var contentHeight: Int = 0
|
|
41
|
+
var headerHeight: Int = 0
|
|
42
|
+
var footerHeight: Int = 0
|
|
43
|
+
|
|
29
44
|
/**
|
|
30
|
-
*
|
|
45
|
+
* Distance from the top of the content view to the bottom of the peek view.
|
|
46
|
+
* Includes the peek view's offset within the content (padding, views above it)
|
|
47
|
+
* so the peek detent reveals everything down to the peek content's bottom edge.
|
|
31
48
|
*/
|
|
32
|
-
val
|
|
33
|
-
get()
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
49
|
+
val peekContentHeight: Int
|
|
50
|
+
get() {
|
|
51
|
+
val peek = peekView ?: return 0
|
|
52
|
+
val content = contentView ?: return peek.height
|
|
53
|
+
|
|
54
|
+
var bottom = peek.height
|
|
55
|
+
var view: View = peek
|
|
56
|
+
while (view !== content) {
|
|
57
|
+
bottom += view.top
|
|
58
|
+
view = view.parent as? View ?: return peek.height
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return bottom
|
|
37
62
|
}
|
|
38
63
|
|
|
64
|
+
var insetAdjustment: TrueSheetInsetAdjustment = TrueSheetInsetAdjustment.AUTOMATIC
|
|
65
|
+
var scrollViewBottomInset: Int = 0
|
|
66
|
+
var absoluteFooter: Boolean = false
|
|
67
|
+
|
|
39
68
|
/**
|
|
40
|
-
*
|
|
69
|
+
* Bottom safe-area inset the footer absorbs as padding — the footer
|
|
70
|
+
* owns the sheet's bottom edge, so its background fills the inset.
|
|
41
71
|
*/
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
72
|
+
var footerBottomInset: Int = 0
|
|
73
|
+
set(value) {
|
|
74
|
+
field = value
|
|
75
|
+
footerView?.setBottomInset(value)
|
|
76
|
+
}
|
|
77
|
+
var scrollableOptions: ScrollableOptions? = null
|
|
78
|
+
set(value) {
|
|
79
|
+
field = value
|
|
80
|
+
contentView?.scrollableOptions = value
|
|
47
81
|
}
|
|
48
82
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
83
|
+
var hasAutoDetent = false
|
|
84
|
+
set(value) {
|
|
85
|
+
field = value
|
|
86
|
+
contentView?.hasAutoDetent = value
|
|
87
|
+
}
|
|
54
88
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
*/
|
|
58
|
-
val footerHeight: Int
|
|
59
|
-
get() = footerView?.height ?: 0
|
|
89
|
+
override val eventDispatcher: EventDispatcher?
|
|
90
|
+
get() = delegate?.eventDispatcher
|
|
60
91
|
|
|
61
92
|
init {
|
|
62
|
-
//
|
|
93
|
+
// Allow footer to position outside container bounds
|
|
63
94
|
clipChildren = false
|
|
64
95
|
clipToPadding = false
|
|
65
96
|
}
|
|
66
97
|
|
|
98
|
+
fun setupScrollable() {
|
|
99
|
+
val bottomInset = if (insetAdjustment == TrueSheetInsetAdjustment.AUTOMATIC) scrollViewBottomInset else 0
|
|
100
|
+
contentView?.setupScrollable(bottomInset)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
fun setupKeyboardHandler() {
|
|
104
|
+
contentView?.setupKeyboardHandler()
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
fun cleanupKeyboardHandler() {
|
|
108
|
+
contentView?.cleanupKeyboardHandler()
|
|
109
|
+
}
|
|
110
|
+
|
|
67
111
|
override fun addView(child: View?, index: Int) {
|
|
68
112
|
super.addView(child, index)
|
|
69
113
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
114
|
+
when (child) {
|
|
115
|
+
is TrueSheetContentView -> {
|
|
116
|
+
child.delegate = this
|
|
117
|
+
child.scrollableOptions = scrollableOptions
|
|
118
|
+
child.hasAutoDetent = hasAutoDetent
|
|
119
|
+
contentView = child
|
|
120
|
+
|
|
121
|
+
// Children mount bottom-up, so the content subtree is complete here.
|
|
122
|
+
// Late-mounted peek views attach themselves instead (see TrueSheetPeekView).
|
|
123
|
+
findPeekView(child)?.let { attachPeekView(it) }
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
is TrueSheetHeaderView -> {
|
|
127
|
+
child.delegate = this
|
|
128
|
+
headerView = child
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
is TrueSheetFooterView -> {
|
|
132
|
+
child.delegate = this
|
|
133
|
+
child.setBottomInset(footerBottomInset)
|
|
134
|
+
footerView = child
|
|
135
|
+
}
|
|
73
136
|
}
|
|
137
|
+
}
|
|
74
138
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
139
|
+
override fun removeViewAt(index: Int) {
|
|
140
|
+
when (val view = getChildAt(index)) {
|
|
141
|
+
is TrueSheetContentView -> {
|
|
142
|
+
view.delegate = null
|
|
143
|
+
contentView = null
|
|
144
|
+
contentViewDidChangeSize(0, 0)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
is TrueSheetHeaderView -> {
|
|
148
|
+
view.delegate = null
|
|
149
|
+
headerView = null
|
|
150
|
+
headerViewDidChangeSize(0, 0)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
is TrueSheetFooterView -> {
|
|
154
|
+
view.delegate = null
|
|
155
|
+
footerView = null
|
|
156
|
+
footerViewDidChangeSize(0, 0)
|
|
157
|
+
}
|
|
78
158
|
}
|
|
159
|
+
|
|
160
|
+
super.removeViewAt(index)
|
|
79
161
|
}
|
|
80
162
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
163
|
+
// ==================== Peek View ====================
|
|
164
|
+
|
|
165
|
+
private fun findPeekView(view: View): TrueSheetPeekView? {
|
|
166
|
+
if (view is TrueSheetPeekView) return view
|
|
167
|
+
|
|
168
|
+
if (view is ViewGroup) {
|
|
169
|
+
for (i in 0 until view.childCount) {
|
|
170
|
+
findPeekView(view.getChildAt(i))?.let { return it }
|
|
171
|
+
}
|
|
85
172
|
}
|
|
86
173
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
174
|
+
return null
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
fun attachPeekView(view: TrueSheetPeekView) {
|
|
178
|
+
if (peekView === view) return
|
|
179
|
+
|
|
180
|
+
if (peekView != null) {
|
|
181
|
+
RNLog.w(context as ThemedReactContext, "TrueSheet: Sheet can only have one peek component.")
|
|
182
|
+
return
|
|
90
183
|
}
|
|
91
184
|
|
|
92
|
-
|
|
185
|
+
peekView = view
|
|
186
|
+
view.delegate = this
|
|
187
|
+
peekViewDidChangeSize(view.width, view.height)
|
|
93
188
|
}
|
|
94
189
|
|
|
95
|
-
|
|
190
|
+
fun detachPeekView(view: TrueSheetPeekView) {
|
|
191
|
+
if (peekView !== view) return
|
|
192
|
+
|
|
193
|
+
view.delegate = null
|
|
194
|
+
peekView = null
|
|
195
|
+
peekViewDidChangeSize(0, 0)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// ==================== Delegate Implementations ====================
|
|
96
199
|
|
|
97
200
|
override fun contentViewDidChangeSize(width: Int, height: Int) {
|
|
98
|
-
|
|
201
|
+
contentHeight = height
|
|
99
202
|
delegate?.containerViewContentDidChangeSize(width, height)
|
|
100
203
|
}
|
|
101
204
|
|
|
102
|
-
|
|
205
|
+
override val footerKeyboardOcclusion: Int
|
|
206
|
+
get() = if (absoluteFooter) footerView?.keyboardOcclusionHeight ?: 0 else -(footerView?.height ?: 0)
|
|
207
|
+
|
|
208
|
+
override fun contentViewDidScroll() {
|
|
209
|
+
delegate?.containerViewContentDidScroll()
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
override fun contentViewScrollViewDidChange() {
|
|
213
|
+
delegate?.containerViewScrollViewDidChange()
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
override fun headerViewDidChangeSize(width: Int, height: Int) {
|
|
217
|
+
headerHeight = height
|
|
218
|
+
delegate?.containerViewHeaderDidChangeSize(width, height)
|
|
219
|
+
}
|
|
103
220
|
|
|
104
221
|
override fun footerViewDidChangeSize(width: Int, height: Int) {
|
|
105
|
-
|
|
222
|
+
footerHeight = height
|
|
106
223
|
delegate?.containerViewFooterDidChangeSize(width, height)
|
|
107
224
|
}
|
|
225
|
+
|
|
226
|
+
override fun peekViewDidChangeSize(width: Int, height: Int) {
|
|
227
|
+
delegate?.containerViewPeekDidChangeSize(width, height)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
companion object {
|
|
231
|
+
const val TAG_NAME = "TrueSheet"
|
|
232
|
+
}
|
|
108
233
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
package com.lodev09.truesheet
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.module.annotations.ReactModule
|
|
4
|
+
import com.facebook.react.uimanager.PointerEvents
|
|
4
5
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
6
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* ViewManager for TrueSheetContainerView
|
|
@@ -15,6 +17,11 @@ class TrueSheetContainerViewManager : ViewGroupManager<TrueSheetContainerView>()
|
|
|
15
17
|
|
|
16
18
|
override fun createViewInstance(reactContext: ThemedReactContext): TrueSheetContainerView = TrueSheetContainerView(reactContext)
|
|
17
19
|
|
|
20
|
+
@ReactProp(name = "pointerEvents")
|
|
21
|
+
fun setPointerEvents(view: TrueSheetContainerView, pointerEventsStr: String?) {
|
|
22
|
+
view.pointerEvents = PointerEvents.parsePointerEvents(pointerEventsStr)
|
|
23
|
+
}
|
|
24
|
+
|
|
18
25
|
companion object {
|
|
19
26
|
const val REACT_CLASS = "TrueSheetContainerView"
|
|
20
27
|
}
|