@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
|
@@ -9,25 +9,57 @@
|
|
|
9
9
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
10
10
|
|
|
11
11
|
#import "TrueSheetContainerView.h"
|
|
12
|
+
#import <React/RCTScrollViewComponentView.h>
|
|
13
|
+
#import "TrueSheetContentView.h"
|
|
14
|
+
#import "TrueSheetFooterView.h"
|
|
15
|
+
#import "TrueSheetHeaderView.h"
|
|
16
|
+
#import "TrueSheetPeekView.h"
|
|
17
|
+
#import "TrueSheetViewController.h"
|
|
18
|
+
#import "core/TrueSheetKeyboardObserver.h"
|
|
19
|
+
#import "utils/UIView+ScrollEdgeInteraction.h"
|
|
20
|
+
|
|
12
21
|
#import <react/renderer/components/TrueSheetSpec/ComponentDescriptors.h>
|
|
13
22
|
#import <react/renderer/components/TrueSheetSpec/EventEmitters.h>
|
|
14
23
|
#import <react/renderer/components/TrueSheetSpec/Props.h>
|
|
15
24
|
#import <react/renderer/components/TrueSheetSpec/RCTComponentViewHelpers.h>
|
|
16
|
-
#import "TrueSheetContentView.h"
|
|
17
|
-
#import "TrueSheetFooterView.h"
|
|
18
25
|
|
|
19
26
|
#import <React/RCTConversions.h>
|
|
27
|
+
#import <React/RCTLog.h>
|
|
20
28
|
|
|
21
29
|
using namespace facebook::react;
|
|
22
30
|
|
|
23
|
-
@
|
|
31
|
+
@implementation ScrollableOptions
|
|
32
|
+
|
|
33
|
+
- (instancetype)init {
|
|
34
|
+
if (self = [super init]) {
|
|
35
|
+
_contentInsetAdjustment = YES;
|
|
36
|
+
_keyboardScrollOffset = 0;
|
|
37
|
+
_keyboardOffset = 0;
|
|
38
|
+
_scrollingExpandsSheet = YES;
|
|
39
|
+
_topScrollEdgeEffect = TrueSheetViewTopScrollEdgeEffect::Hidden;
|
|
40
|
+
_bottomScrollEdgeEffect = TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
41
|
+
}
|
|
42
|
+
return self;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@end
|
|
46
|
+
|
|
47
|
+
@interface TrueSheetContainerView () <TrueSheetContentViewDelegate,
|
|
48
|
+
TrueSheetHeaderViewDelegate,
|
|
49
|
+
TrueSheetFooterViewDelegate,
|
|
50
|
+
TrueSheetPeekViewDelegate>
|
|
24
51
|
@end
|
|
25
52
|
|
|
26
53
|
@implementation TrueSheetContainerView {
|
|
27
54
|
TrueSheetContentView *_contentView;
|
|
55
|
+
TrueSheetHeaderView *_headerView;
|
|
28
56
|
TrueSheetFooterView *_footerView;
|
|
57
|
+
TrueSheetPeekView *__weak _peekView;
|
|
58
|
+
TrueSheetKeyboardObserver *_keyboardObserver;
|
|
29
59
|
}
|
|
30
60
|
|
|
61
|
+
#pragma mark - Initialization
|
|
62
|
+
|
|
31
63
|
+ (ComponentDescriptorProvider)componentDescriptorProvider {
|
|
32
64
|
return concreteComponentDescriptorProvider<TrueSheetContainerViewComponentDescriptor>();
|
|
33
65
|
}
|
|
@@ -38,62 +70,187 @@ using namespace facebook::react;
|
|
|
38
70
|
_props = defaultProps;
|
|
39
71
|
|
|
40
72
|
self.backgroundColor = [UIColor clearColor];
|
|
41
|
-
|
|
42
73
|
_contentView = nil;
|
|
74
|
+
_headerView = nil;
|
|
43
75
|
_footerView = nil;
|
|
76
|
+
self.isAccessibilityElement = NO;
|
|
44
77
|
}
|
|
45
78
|
return self;
|
|
46
79
|
}
|
|
47
80
|
|
|
48
|
-
-
|
|
81
|
+
#pragma mark - Accessibility
|
|
82
|
+
|
|
83
|
+
- (NSArray *)accessibilityElements {
|
|
84
|
+
NSMutableArray *elements = [NSMutableArray array];
|
|
85
|
+
if (_headerView) {
|
|
86
|
+
[elements addObject:_headerView];
|
|
87
|
+
}
|
|
88
|
+
if (_contentView) {
|
|
89
|
+
[elements addObject:_contentView];
|
|
90
|
+
}
|
|
91
|
+
if (_footerView) {
|
|
92
|
+
// Footer hosts are layout containers; expose their children when present so
|
|
93
|
+
// VoiceOver and XCTest can target the actual footer controls.
|
|
94
|
+
NSArray *footerElements = _footerView.accessibilityElements;
|
|
95
|
+
if (footerElements.count > 0) {
|
|
96
|
+
[elements addObjectsFromArray:footerElements];
|
|
97
|
+
} else {
|
|
98
|
+
[elements addObject:_footerView];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return elements;
|
|
49
102
|
}
|
|
50
103
|
|
|
104
|
+
- (BOOL)hasAccessibilityFooterElements {
|
|
105
|
+
return _footerView && _footerView.accessibilityElements.count > 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
#pragma mark - Layout
|
|
109
|
+
|
|
51
110
|
- (CGFloat)contentHeight {
|
|
52
|
-
return _contentView ? _contentView.
|
|
111
|
+
return _contentView ? _contentView.naturalHeight : 0;
|
|
53
112
|
}
|
|
54
113
|
|
|
55
|
-
- (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
114
|
+
- (CGFloat)headerHeight {
|
|
115
|
+
return _headerView ? _headerView.frame.size.height : 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
- (CGFloat)footerHeight {
|
|
119
|
+
return _footerView ? _footerView.frame.size.height : 0;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
- (CGFloat)footerAppliedBottomInset {
|
|
123
|
+
return _footerView ? _footerView.appliedBottomInset : 0;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Distance from the top of the content view to the bottom of the peek view.
|
|
127
|
+
// Includes the peek view's offset within the content (padding, views above it)
|
|
128
|
+
// so the peek detent reveals everything down to the peek content's bottom edge.
|
|
129
|
+
- (CGFloat)peekContentHeight {
|
|
130
|
+
if (!_peekView) {
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (!_contentView || ![_peekView isDescendantOfView:_contentView]) {
|
|
135
|
+
return _peekView.frame.size.height;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return CGRectGetMaxY([_peekView convertRect:_peekView.bounds toView:_contentView]);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
- (void)updateFooterKeyboardOffset {
|
|
142
|
+
[_footerView applyKeyboardOffset];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
- (void)setFooterBottomInset:(CGFloat)footerBottomInset {
|
|
146
|
+
_footerBottomInset = footerBottomInset;
|
|
147
|
+
[_footerView setBottomInset:footerBottomInset];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
- (void)setScrollableOptions:(ScrollableOptions *)scrollableOptions {
|
|
151
|
+
_scrollableOptions = scrollableOptions;
|
|
152
|
+
_contentView.keyboardScrollOffset = scrollableOptions ? scrollableOptions.keyboardScrollOffset : 0;
|
|
153
|
+
_contentView.keyboardOffset = scrollableOptions ? scrollableOptions.keyboardOffset : 0;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
- (void)setupScrollable {
|
|
157
|
+
if (_contentView) {
|
|
158
|
+
_contentView.scrollableHandle = _scrollableHandle;
|
|
159
|
+
_contentView.contentInsetAdjustment = _contentInsetAdjustment;
|
|
160
|
+
[_contentView setupScrollable];
|
|
161
|
+
[_contentView applyScrollEdgeEffects:_scrollableOptions];
|
|
162
|
+
if (@available(iOS 26.0, *)) {
|
|
163
|
+
[self setupEdgeInteractions];
|
|
61
164
|
}
|
|
62
165
|
}
|
|
63
166
|
}
|
|
64
167
|
|
|
168
|
+
- (void)setupEdgeInteractions API_AVAILABLE(ios(26.0)) {
|
|
169
|
+
if (!_contentView) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
auto topEffect =
|
|
174
|
+
_scrollableOptions ? _scrollableOptions.topScrollEdgeEffect : TrueSheetViewTopScrollEdgeEffect::Hidden;
|
|
175
|
+
auto bottomEffect =
|
|
176
|
+
_scrollableOptions ? _scrollableOptions.bottomScrollEdgeEffect : TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
177
|
+
|
|
178
|
+
BOOL topHidden = topEffect == TrueSheetViewTopScrollEdgeEffect::Hidden;
|
|
179
|
+
BOOL bottomHidden = bottomEffect == TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
180
|
+
|
|
181
|
+
RCTScrollViewComponentView *scrollViewComponent = [_contentView findScrollView];
|
|
182
|
+
UIScrollView *scrollView = scrollViewComponent.scrollView;
|
|
183
|
+
|
|
184
|
+
if (_headerView) {
|
|
185
|
+
[_headerView setupEdgeInteractionWithScrollView:topHidden ? nil : scrollView edge:UIRectEdgeTop];
|
|
186
|
+
}
|
|
187
|
+
if (_footerView) {
|
|
188
|
+
[_footerView setupEdgeInteractionWithScrollView:bottomHidden ? nil : scrollView edge:UIRectEdgeBottom];
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
#pragma mark - Child Component Mounting
|
|
193
|
+
|
|
65
194
|
- (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index {
|
|
66
195
|
[super mountChildComponentView:childComponentView index:index];
|
|
67
196
|
|
|
68
|
-
// Handle content view mounting
|
|
69
197
|
if ([childComponentView isKindOfClass:[TrueSheetContentView class]]) {
|
|
70
198
|
if (_contentView != nil) {
|
|
71
|
-
|
|
199
|
+
RCTLogWarn(@"TrueSheet: Container can only have one content component.");
|
|
72
200
|
return;
|
|
73
201
|
}
|
|
74
|
-
|
|
75
202
|
_contentView = (TrueSheetContentView *)childComponentView;
|
|
76
203
|
_contentView.delegate = self;
|
|
204
|
+
_contentView.footerView = _footerView;
|
|
205
|
+
|
|
206
|
+
// Children mount bottom-up, so the content subtree is complete here.
|
|
207
|
+
// Late-mounted peek views attach themselves instead (see TrueSheetPeekView).
|
|
208
|
+
TrueSheetPeekView *peekView = [self findPeekViewIn:_contentView];
|
|
209
|
+
if (peekView) {
|
|
210
|
+
[self attachPeekView:peekView];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if ([childComponentView isKindOfClass:[TrueSheetHeaderView class]]) {
|
|
215
|
+
if (_headerView != nil) {
|
|
216
|
+
RCTLogWarn(@"TrueSheet: Container can only have one header component.");
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
_headerView = (TrueSheetHeaderView *)childComponentView;
|
|
220
|
+
_headerView.delegate = self;
|
|
221
|
+
[self headerViewDidChangeSize:_headerView.frame.size];
|
|
77
222
|
}
|
|
78
223
|
|
|
79
|
-
// Handle footer view mounting
|
|
80
224
|
if ([childComponentView isKindOfClass:[TrueSheetFooterView class]]) {
|
|
81
225
|
if (_footerView != nil) {
|
|
82
|
-
|
|
226
|
+
RCTLogWarn(@"TrueSheet: Container can only have one footer component.");
|
|
83
227
|
return;
|
|
84
228
|
}
|
|
85
|
-
|
|
86
229
|
_footerView = (TrueSheetFooterView *)childComponentView;
|
|
230
|
+
_footerView.delegate = self;
|
|
231
|
+
_contentView.footerView = _footerView;
|
|
232
|
+
[_footerView setBottomInset:_footerBottomInset];
|
|
233
|
+
[self footerViewDidChangeSize:_footerView.frame.size];
|
|
87
234
|
}
|
|
88
235
|
}
|
|
89
236
|
|
|
90
237
|
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index {
|
|
91
238
|
if ([childComponentView isKindOfClass:[TrueSheetContentView class]]) {
|
|
239
|
+
_contentView.delegate = nil;
|
|
92
240
|
_contentView = nil;
|
|
93
241
|
}
|
|
94
242
|
|
|
243
|
+
if ([childComponentView isKindOfClass:[TrueSheetHeaderView class]]) {
|
|
244
|
+
_headerView.delegate = nil;
|
|
245
|
+
_headerView = nil;
|
|
246
|
+
[self headerViewDidChangeSize:CGSizeZero];
|
|
247
|
+
}
|
|
248
|
+
|
|
95
249
|
if ([childComponentView isKindOfClass:[TrueSheetFooterView class]]) {
|
|
250
|
+
_footerView.delegate = nil;
|
|
96
251
|
_footerView = nil;
|
|
252
|
+
_contentView.footerView = nil;
|
|
253
|
+
[self footerViewDidChangeSize:CGSizeZero];
|
|
97
254
|
}
|
|
98
255
|
|
|
99
256
|
[super unmountChildComponentView:childComponentView index:index];
|
|
@@ -106,12 +263,112 @@ using namespace facebook::react;
|
|
|
106
263
|
#pragma mark - TrueSheetContentViewDelegate
|
|
107
264
|
|
|
108
265
|
- (void)contentViewDidChangeSize:(CGSize)newSize {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
266
|
+
[self.delegate containerViewContentDidChangeSize:newSize];
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
- (void)contentViewScrollViewDidChange {
|
|
270
|
+
[self.delegate containerViewScrollViewDidChange];
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
#pragma mark - TrueSheetHeaderViewDelegate
|
|
274
|
+
|
|
275
|
+
- (void)headerViewDidChangeSize:(CGSize)newSize {
|
|
276
|
+
[self.delegate containerViewHeaderDidChangeSize:newSize];
|
|
277
|
+
if (@available(iOS 26.0, *)) {
|
|
278
|
+
[self setupEdgeInteractions];
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
#pragma mark - TrueSheetFooterViewDelegate
|
|
283
|
+
|
|
284
|
+
- (void)footerViewDidChangeSize:(CGSize)newSize {
|
|
285
|
+
[self.delegate containerViewFooterDidChangeSize:newSize];
|
|
286
|
+
if (@available(iOS 26.0, *)) {
|
|
287
|
+
[self setupEdgeInteractions];
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
#pragma mark - TrueSheetPeekViewDelegate
|
|
292
|
+
|
|
293
|
+
- (nullable TrueSheetPeekView *)findPeekViewIn:(UIView *)view {
|
|
294
|
+
if ([view isKindOfClass:[TrueSheetPeekView class]]) {
|
|
295
|
+
return (TrueSheetPeekView *)view;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
for (UIView *subview in view.subviews) {
|
|
299
|
+
TrueSheetPeekView *found = [self findPeekViewIn:subview];
|
|
300
|
+
if (found) {
|
|
301
|
+
return found;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return nil;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
- (void)attachPeekView:(TrueSheetPeekView *)peekView {
|
|
309
|
+
if (_peekView == peekView) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (_peekView != nil) {
|
|
314
|
+
RCTLogWarn(@"TrueSheet: Sheet can only have one peek component.");
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
_peekView = peekView;
|
|
319
|
+
peekView.delegate = self;
|
|
320
|
+
[self peekViewDidChangeSize:peekView.frame.size];
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
- (void)peekViewDidChangeSize:(CGSize)newSize {
|
|
324
|
+
[self.delegate containerViewPeekDidChangeSize:newSize];
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
- (void)peekViewWillDetach:(TrueSheetPeekView *)peekView {
|
|
328
|
+
if (_peekView != peekView) {
|
|
329
|
+
return;
|
|
112
330
|
}
|
|
331
|
+
|
|
332
|
+
_peekView.delegate = nil;
|
|
333
|
+
_peekView = nil;
|
|
334
|
+
[self peekViewDidChangeSize:CGSizeZero];
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
#pragma mark - Keyboard Observer
|
|
338
|
+
|
|
339
|
+
- (void)setupKeyboardObserverWithViewController:(UIViewController *)viewController {
|
|
340
|
+
[self cleanupKeyboardObserver];
|
|
341
|
+
|
|
342
|
+
_keyboardObserver = [[TrueSheetKeyboardObserver alloc] init];
|
|
343
|
+
_keyboardObserver.viewController = (TrueSheetViewController *)viewController;
|
|
344
|
+
|
|
345
|
+
if (_contentView) {
|
|
346
|
+
_contentView.keyboardObserver = _keyboardObserver;
|
|
347
|
+
[_keyboardObserver addDelegate:_contentView];
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
if (_footerView) {
|
|
351
|
+
_footerView.keyboardObserver = _keyboardObserver;
|
|
352
|
+
[_keyboardObserver addDelegate:_footerView];
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
[_keyboardObserver start];
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
- (void)cleanupKeyboardObserver {
|
|
359
|
+
if (_keyboardObserver) {
|
|
360
|
+
[_keyboardObserver stop];
|
|
361
|
+
_keyboardObserver = nil;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
_contentView.keyboardObserver = nil;
|
|
365
|
+
_footerView.keyboardObserver = nil;
|
|
113
366
|
}
|
|
114
367
|
|
|
115
368
|
@end
|
|
116
369
|
|
|
370
|
+
Class<RCTComponentViewProtocol> TrueSheetContainerViewCls(void) {
|
|
371
|
+
return TrueSheetContainerView.class;
|
|
372
|
+
}
|
|
373
|
+
|
|
117
374
|
#endif
|
|
@@ -8,28 +8,81 @@
|
|
|
8
8
|
|
|
9
9
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
10
10
|
|
|
11
|
+
#import <React/RCTMountingTransactionObserving.h>
|
|
11
12
|
#import <React/RCTSurfaceTouchHandler.h>
|
|
12
13
|
#import <React/RCTViewComponentView.h>
|
|
13
14
|
#import <UIKit/UIKit.h>
|
|
14
15
|
#import <react/renderer/core/LayoutMetrics.h>
|
|
16
|
+
#import "core/TrueSheetKeyboardObserver.h"
|
|
15
17
|
|
|
16
18
|
@class TrueSheetViewController;
|
|
19
|
+
@class TrueSheetFooterView;
|
|
17
20
|
@class RCTScrollViewComponentView;
|
|
21
|
+
@class ScrollableOptions;
|
|
18
22
|
|
|
19
23
|
NS_ASSUME_NONNULL_BEGIN
|
|
20
24
|
|
|
21
25
|
@protocol TrueSheetContentViewDelegate <NSObject>
|
|
22
26
|
|
|
23
27
|
- (void)contentViewDidChangeSize:(CGSize)newSize;
|
|
28
|
+
- (void)contentViewScrollViewDidChange;
|
|
24
29
|
|
|
25
30
|
@end
|
|
26
31
|
|
|
27
|
-
@interface TrueSheetContentView
|
|
32
|
+
@interface TrueSheetContentView
|
|
33
|
+
: RCTViewComponentView <TrueSheetKeyboardObserverDelegate, RCTMountingTransactionObserving>
|
|
28
34
|
|
|
29
35
|
@property (nonatomic, weak, nullable) id<TrueSheetContentViewDelegate> delegate;
|
|
36
|
+
@property (nonatomic, assign) CGFloat keyboardScrollOffset;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Adjustment added to the keyboard bottom inset applied to the detected
|
|
40
|
+
* scrollable — negative values reduce the inset (e.g. to cancel out safe-area
|
|
41
|
+
* padding already baked into the content's paddingBottom).
|
|
42
|
+
*/
|
|
43
|
+
@property (nonatomic, assign) CGFloat keyboardOffset;
|
|
44
|
+
|
|
45
|
+
@property (nonatomic, weak, nullable) TrueSheetKeyboardObserver *keyboardObserver;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Sibling footer view — a relative footer shields part of the keyboard's
|
|
49
|
+
* overlap from the inset; an absolute footer extends the caret reveal target.
|
|
50
|
+
*/
|
|
51
|
+
@property (nonatomic, weak, nullable) TrueSheetFooterView *footerView;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Content height measured unconstrained by the shadow node — the height the
|
|
55
|
+
* content wants regardless of container bounds (see
|
|
56
|
+
* TrueSheetContentViewShadowNode). Falls back to the frame height before the
|
|
57
|
+
* first state update.
|
|
58
|
+
*/
|
|
59
|
+
@property (nonatomic, readonly) CGFloat naturalHeight;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* React tag of the user-provided scrollable (see the `scrollableRef` prop).
|
|
63
|
+
* Setting a new handle clears the currently resolved ScrollView.
|
|
64
|
+
*/
|
|
65
|
+
@property (nonatomic, assign) NSInteger scrollableHandle;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Sets the resolved ScrollView's `contentInsetAdjustmentBehavior` to
|
|
69
|
+
* `automatic` while plugged so UIKit applies the bottom safe-area inset to
|
|
70
|
+
* the scroll content. The previous behavior is restored on clear.
|
|
71
|
+
*/
|
|
72
|
+
@property (nonatomic, assign) BOOL contentInsetAdjustment;
|
|
30
73
|
|
|
31
74
|
- (RCTScrollViewComponentView *_Nullable)findScrollView;
|
|
32
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Resolve the ScrollView from `scrollableHandle`, wiring keyboard handling
|
|
78
|
+
*/
|
|
79
|
+
- (void)setupScrollable;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Apply scroll edge effects to the detected scroll view (iOS 26+)
|
|
83
|
+
*/
|
|
84
|
+
- (void)applyScrollEdgeEffects:(nullable ScrollableOptions *)options;
|
|
85
|
+
|
|
33
86
|
@end
|
|
34
87
|
|
|
35
88
|
NS_ASSUME_NONNULL_END
|