react-native-screens 5.0.0-alpha.1 → 5.0.0-alpha.3
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/Package.swift +87 -0
- package/README.md +0 -8
- package/RNScreens.podspec +2 -6
- package/android/build.gradle +26 -1
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +5 -0
- package/android/src/main/cpp/NativeProxy.cpp +30 -6
- package/android/src/main/cpp/NativeProxy.h +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +25 -7
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackFragment.kt +39 -10
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenViewManager.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAppearanceCoordinator.kt → native/coordinator/FormSheetAppearanceCoordinator.kt} +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetBehaviorController.kt → native/coordinator/FormSheetBehaviorController.kt} +74 -19
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +44 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetAvailableHeightProvider.kt +44 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContainer.kt → native/core/FormSheetContainer.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialog.kt +115 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +89 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeDelegate.kt → native/interfaces/FormSheetContentSizeChangeDelegate.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeProvider.kt → native/interfaces/FormSheetContentSizeChangeProvider.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogEventEmitter.kt → native/interfaces/FormSheetDialogEventEmitter.kt} +5 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetConfig.kt → native/model/FormSheetConfig.kt} +5 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +152 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAnimatorFactory.kt → native/presentation/FormSheetAnimatorFactory.kt} +9 -10
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDimmingManager.kt +115 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDismissalOrigin.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentation.kt +173 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +290 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationState.kt → native/presentation/FormSheetPresentationState.kt} +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetStackRegistry.kt +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapper.kt → react/contentwrapper/FormSheetContentWrapper.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapperViewManager.kt → react/contentwrapper/FormSheetContentWrapperViewManager.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetentChangedEvent.kt → react/event/FormSheetDetentChangedEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidAppearEvent.kt → react/event/FormSheetDidAppearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidDisappearEvent.kt → react/event/FormSheetDidDisappearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetDismissEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetNativeDismissEvent.kt → react/event/FormSheetNativeDismissEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetNativeDismissPreventedEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetSyncFlushEvent.kt → react/event/FormSheetSyncFlushEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillAppearEvent.kt → react/event/FormSheetWillAppearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillDisappearEvent.kt → react/event/FormSheetWillDisappearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentView.kt → react/host/FormSheetContentView.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHost.kt → react/host/FormSheetHost.kt} +6 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostEventEmitter.kt → react/host/FormSheetHostEventEmitter.kt} +23 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostViewManager.kt → react/host/FormSheetHostViewManager.kt} +13 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +380 -457
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +150 -182
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt +63 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +240 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayoutBehavior.kt → appbar/StackHeaderAppBarLayoutBehavior.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderScrollingViewBehavior.kt → appbar/StackHeaderScrollingViewBehavior.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +192 -167
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +393 -13
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +0 -4
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +33 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +9 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +195 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +43 -21
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementConfig.kt → model/StackHeaderToolbarMenuElementConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupConfig.kt → model/StackHeaderToolbarMenuGroupConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemConfig.kt → model/StackHeaderToolbarMenuItemConfig.kt} +2 -4
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemDefaults.kt → model/StackHeaderToolbarMenuItemDefaults.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemIconSource.kt → model/StackHeaderToolbarMenuItemIconSource.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemShowAsAction.kt → model/StackHeaderToolbarMenuItemShowAsAction.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemType.kt → model/StackHeaderToolbarMenuItemType.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarFieldUpdate.kt → update/StackHeaderToolbarFieldUpdate.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +84 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuUpdateQueue.kt → update/StackHeaderToolbarMenuUpdateQueue.kt} +24 -52
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueueDelegate.kt +9 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +103 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +20 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +2 -4
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +46 -25
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
- package/common/cpp/react/renderer/components/rnscreens/legacy/RNSScreenShadowNode.cpp +10 -5
- package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
- package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
- package/ios/RNSEnums.h +2 -2
- package/ios/RNSOrientationProviding.h +0 -2
- package/ios/RNSReactMountingTransactionObserving.h +15 -0
- package/ios/conversion/RNSConversions.h +7 -108
- package/ios/legacy/RNSBarButtonItem.mm +12 -5
- package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
- package/ios/legacy/RNSModalScreen.mm +1 -1
- package/ios/legacy/RNSScreen.h +8 -1
- package/ios/legacy/RNSScreen.mm +47 -36
- package/ios/legacy/RNSScreenContentWrapper.mm +9 -0
- package/ios/legacy/RNSScreenFooter.mm +2 -0
- package/ios/legacy/RNSScreenStack.mm +9 -4
- package/ios/legacy/RNSScreenStackHeaderConfig.mm +3 -1
- package/ios/legacy/RNSScreenStackHeaderSubview.mm +1 -1
- package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
- package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
- package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
- package/ios/modals/form-sheet/RNSFormSheetContentWrapperComponentView.mm +9 -0
- package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
- package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
- package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
- package/ios/safe-area/RNSSafeAreaViewComponentView.mm +2 -2
- package/ios/scroll-to-top-guard/RNSScrollToTopGuard.h +17 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuard.mm +57 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.h +28 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.mm +64 -0
- package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
- package/ios/split/RNSSplitAppearanceApplicator.h +36 -0
- package/ios/split/RNSSplitAppearanceApplicator.mm +182 -0
- package/ios/split/RNSSplitAppearanceCoordinator.h +26 -0
- package/ios/split/RNSSplitAppearanceCoordinator.mm +27 -0
- package/ios/split/RNSSplitAppearanceUpdateFlags.h +14 -0
- package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
- package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
- package/ios/split/RNSSplitHostComponentView.h +5 -15
- package/ios/split/RNSSplitHostComponentView.mm +56 -7
- package/ios/split/RNSSplitHostController.h +105 -0
- package/ios/split/RNSSplitHostController.mm +492 -0
- package/ios/split/RNSSplitHostProviders.h +67 -0
- package/ios/split/RNSSplitNavigationController.h +31 -0
- package/ios/split/RNSSplitNavigationController.mm +44 -0
- package/ios/split/RNSSplitNavigationControllerFrameObserver.h +32 -0
- package/ios/split/RNSSplitNavigationControllerFrameObserver.mm +80 -0
- package/ios/split/RNSSplitNavigationControllerFrameOriginChangeDelegate.h +15 -0
- package/ios/split/RNSSplitScreenComponentView.h +0 -39
- package/ios/split/RNSSplitScreenComponentView.mm +35 -19
- package/ios/split/RNSSplitScreenController.h +68 -0
- package/ios/split/RNSSplitScreenController.mm +113 -0
- package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
- package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
- package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
- package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
- package/ios/stack/conversion/RNSConversions-Stack.h +32 -0
- package/ios/stack/conversion/RNSConversions-Stack.mm +55 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +11 -1
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +108 -38
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +9 -0
- package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
- package/ios/stack/header/RNSStackHeaderItemComponentView.h +3 -1
- package/ios/stack/header/RNSStackHeaderItemComponentView.mm +15 -2
- package/ios/stack/header/RNSStackHeaderItemDataProviding.h +2 -0
- package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +9 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +15 -0
- package/ios/stack/header/RNSStackHeaderMenuFinder.h +18 -3
- package/ios/stack/header/RNSStackHeaderMenuFinder.mm +21 -3
- package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
- package/ios/stack/host/RNSStackHostComponentView.mm +3 -1
- package/ios/stack/host/RNSStackNavigationBar.h +25 -0
- package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
- package/ios/stack/host/RNSStackNavigationController.mm +14 -6
- package/ios/stack/host/RNSStackOperation.h +0 -2
- package/ios/stack/screen/RNSStackScreenComponentView.mm +9 -4
- package/ios/stack/screen/RNSStackScreenController.mm +12 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +14 -1
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +159 -28
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +40 -9
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +4 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +5 -2
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
- package/ios/tabs/conversion/RNSConversions-Tabs.h +78 -0
- package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +8 -71
- package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
- package/ios/tabs/host/RNSTabBarController.h +5 -12
- package/ios/tabs/host/RNSTabBarController.mm +1 -1
- package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
- package/ios/tabs/host/RNSTabsHostComponentView.mm +10 -3
- package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +20 -5
- package/ios/utils/RNSDefines.h +3 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +25 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js +24 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
- package/lib/commonjs/components/scroll-to-top-guard/index.js +13 -0
- package/lib/commonjs/components/scroll-to-top-guard/index.js.map +1 -0
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +34 -19
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +44 -13
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js +33 -2
- package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/utils.js +6 -9
- package/lib/commonjs/components/stack/header/utils.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.js +9 -6
- package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
- package/lib/commonjs/components/stack/index.js.map +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/commonjs/experimental/index.js +11 -0
- package/lib/commonjs/experimental/index.js.map +1 -1
- package/lib/commonjs/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +12 -0
- package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/split/SplitHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/split/SplitScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/flags.js +22 -1
- package/lib/commonjs/flags.js.map +1 -1
- package/lib/commonjs/legacy/components/Screen.js +6 -1
- package/lib/commonjs/legacy/components/Screen.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js +5 -0
- package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/commonjs/legacy/components/SearchBar.js +16 -16
- package/lib/commonjs/legacy/components/SearchBar.js.map +1 -1
- package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js +3 -0
- package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/commonjs/legacy/gesture-handler/fabricUtils.js.map +1 -1
- package/lib/commonjs/legacy/useTransitionProgress.js.map +1 -1
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +20 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js +18 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
- package/lib/module/components/scroll-to-top-guard/index.js +2 -0
- package/lib/module/components/scroll-to-top-guard/index.js.map +1 -0
- package/lib/module/components/stack/header/StackHeaderConfig.android.js +35 -20
- package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +48 -17
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/module/components/stack/header/ios/iconUtils.ios.js +31 -2
- package/lib/module/components/stack/header/ios/iconUtils.ios.js.map +1 -1
- package/lib/module/components/stack/header/utils.js +5 -8
- package/lib/module/components/stack/header/utils.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.js +9 -6
- package/lib/module/components/stack/host/StackHost.js.map +1 -1
- package/lib/module/components/stack/index.js.map +1 -1
- package/lib/module/components/tabs/host/TabsHost.ios.js +1 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/module/experimental/index.js +1 -0
- package/lib/module/experimental/index.js.map +1 -1
- package/lib/module/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
- package/lib/module/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +7 -0
- package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
- package/lib/module/fabric/split/SplitHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/split/SplitScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/module/flags.js +22 -1
- package/lib/module/flags.js.map +1 -1
- package/lib/module/legacy/components/Screen.js +6 -1
- package/lib/module/legacy/components/Screen.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackHeaderConfig.js +5 -0
- package/lib/module/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/module/legacy/components/SearchBar.js +17 -17
- package/lib/module/legacy/components/SearchBar.js.map +1 -1
- package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js +4 -0
- package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/module/legacy/gesture-handler/fabricUtils.js.map +1 -1
- package/lib/module/legacy/useTransitionProgress.js.map +1 -1
- package/lib/module/private/hooks/useRenderDebugInfo.js.map +1 -1
- package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +3 -3
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts +5 -2
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts.map +1 -1
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts +15 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts.map +1 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts +12 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts.map +1 -0
- package/lib/typescript/components/scroll-to-top-guard/index.d.ts +2 -0
- package/lib/typescript/components/scroll-to-top-guard/index.d.ts.map +1 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +639 -20
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +239 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +5 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +2 -0
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts +3 -0
- package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/utils.d.ts +1 -2
- package/lib/typescript/components/stack/header/utils.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.types.d.ts +26 -2
- package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.web.d.ts +6 -2
- package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/index.d.ts +2 -2
- package/lib/typescript/components/stack/index.d.ts.map +1 -1
- package/lib/typescript/components/stack/screen/StackScreen.web.d.ts +5 -2
- package/lib/typescript/components/stack/screen/StackScreen.web.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +16 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +5 -2
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts +7 -3
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +5 -2
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +1 -1
- package/lib/typescript/experimental/index.d.ts +1 -0
- package/lib/typescript/experimental/index.d.ts.map +1 -1
- package/lib/typescript/fabric/NativeScreensModule.d.ts +1 -1
- package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts +3 -3
- package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts +6 -6
- package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +53 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +27 -2
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +4 -2
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +4 -2
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/flags.d.ts +13 -0
- package/lib/typescript/flags.d.ts.map +1 -1
- package/lib/typescript/legacy/TransitionProgressContext.d.ts +1 -1
- package/lib/typescript/legacy/TransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/legacy/components/Screen.d.ts +5 -3
- package/lib/typescript/legacy/components/Screen.d.ts.map +1 -1
- package/lib/typescript/legacy/components/Screen.web.d.ts +10 -2
- package/lib/typescript/legacy/components/Screen.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContainer.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContainer.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenFooter.web.d.ts +10 -3
- package/lib/typescript/legacy/components/ScreenFooter.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts +10 -3
- package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStack.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenStack.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts +3 -1
- package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts +3 -2
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
- package/lib/typescript/legacy/components/SearchBar.d.ts +3 -3
- package/lib/typescript/legacy/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/legacy/components/SearchBar.web.d.ts +5 -2
- package/lib/typescript/legacy/components/SearchBar.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +15 -12
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
- package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts +3 -2
- package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts.map +1 -1
- package/lib/typescript/legacy/types.d.ts +25 -5
- package/lib/typescript/legacy/types.d.ts.map +1 -1
- package/lib/typescript/legacy/useTransitionProgress.d.ts +2 -5
- package/lib/typescript/legacy/useTransitionProgress.d.ts.map +1 -1
- package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts +2 -2
- package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts.map +1 -1
- package/package.json +18 -17
- package/react-native.config.js +3 -0
- package/src/components/modals/form-sheet/FormSheet.types.ts +3 -3
- package/src/components/scroll-to-top-guard/ScrollToTopGuard.ios.tsx +17 -0
- package/src/components/scroll-to-top-guard/ScrollToTopGuard.tsx +18 -0
- package/src/components/scroll-to-top-guard/index.ts +1 -0
- package/src/components/stack/header/StackHeaderConfig.android.tsx +48 -23
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +660 -20
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +77 -23
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +251 -2
- package/src/components/stack/header/StackHeaderConfig.types.ts +2 -2
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +1 -23
- package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +2 -0
- package/src/components/stack/header/ios/iconUtils.ios.ts +38 -2
- package/src/components/stack/header/utils.ts +6 -11
- package/src/components/stack/host/StackHost.tsx +4 -2
- package/src/components/stack/host/StackHost.types.ts +28 -4
- package/src/components/stack/index.ts +6 -1
- package/src/components/tabs/host/TabsHost.ios.tsx +1 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +16 -0
- package/src/components/tabs/host/TabsHost.types.ts +3 -0
- package/src/components/tabs/screen/TabsScreen.types.ts +7 -3
- package/src/experimental/index.ts +1 -0
- package/src/fabric/ScrollViewMarkerNativeComponent.ts +8 -2
- package/src/fabric/legacy/FullWindowOverlayNativeComponent.ts +6 -2
- package/src/fabric/legacy/ModalScreenNativeComponent.ts +8 -2
- package/src/fabric/legacy/ScreenContainerNativeComponent.ts +5 -2
- package/src/fabric/legacy/ScreenContentWrapperNativeComponent.ts +2 -2
- package/src/fabric/legacy/ScreenFooterNativeComponent.ts +5 -2
- package/src/fabric/legacy/ScreenNativeComponent.ts +8 -2
- package/src/fabric/legacy/ScreenNavigationContainerNativeComponent.ts +2 -2
- package/src/fabric/legacy/ScreenStackHeaderConfigNativeComponent.ts +8 -3
- package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -2
- package/src/fabric/legacy/ScreenStackNativeComponent.ts +10 -2
- package/src/fabric/legacy/SearchBarNativeComponent.ts +10 -7
- package/src/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.ts +2 -2
- package/src/fabric/modals/form-sheet/FormSheetHostNativeComponent.ts +7 -2
- package/src/fabric/safe-area/SafeAreaViewNativeComponent.ts +6 -2
- package/src/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.ts +10 -0
- package/src/fabric/split/SplitHostNativeComponent.ts +5 -2
- package/src/fabric/split/SplitScreenNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +81 -1
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +39 -2
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +4 -1
- package/src/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHeaderSubviewAndroidNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHostNativeComponent.ts +15 -3
- package/src/fabric/stack/StackScreenNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsBottomAccessoryContentNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsBottomAccessoryNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsHostAndroidNativeComponent.ts +7 -2
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -2
- package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +2 -1
- package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +2 -1
- package/src/flags.ts +26 -0
- package/src/legacy/TransitionProgressContext.tsx +1 -1
- package/src/legacy/components/Screen.tsx +14 -6
- package/src/legacy/components/ScreenStackHeaderConfig.tsx +7 -1
- package/src/legacy/components/ScreenStackItem.tsx +3 -4
- package/src/legacy/components/SearchBar.tsx +34 -44
- package/src/legacy/components/helpers/prepareHeaderBarButtonItems.ts +7 -1
- package/src/legacy/gesture-handler/fabricUtils.ts +5 -2
- package/src/legacy/types.ts +28 -5
- package/src/legacy/useTransitionProgress.tsx +4 -2
- package/src/private/hooks/useRenderDebugInfo.tsx +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDetents.kt +0 -106
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDialog.kt +0 -60
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDialogManager.kt +0 -138
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDimensionsCoordinator.kt +0 -131
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetNativeDismissCoordinator.kt +0 -25
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetPresentationManager.kt +0 -207
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderAppBarLayout.kt +0 -113
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuConfig.kt +0 -60
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuElementOptions.kt +0 -32
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuGroupMetadata.kt +0 -16
- package/ios/ReactMountingTransactionObserving.swift +0 -7
- package/ios/bridging/Swift-Bridging.h +0 -7
- package/ios/conversion/RNSConversions-Stack.h +0 -32
- package/ios/conversion/RNSConversions-Stack.mm +0 -41
- package/ios/conversion/always_false.h +0 -31
- package/ios/orientation/RNSOrientationProviding.swift +0 -6
- package/ios/orientation/RNSOrientationSwift.swift +0 -14
- package/ios/split/RNSSplitAppearanceApplicator.swift +0 -199
- package/ios/split/RNSSplitAppearanceCoordinator.swift +0 -26
- package/ios/split/RNSSplitAppearanceUpdateFlags.swift +0 -11
- package/ios/split/RNSSplitHostController.swift +0 -570
- package/ios/split/RNSSplitNavigationController.swift +0 -46
- package/ios/split/RNSSplitScreenController.swift +0 -133
- package/ios/utils/RNSLog.swift +0 -6
- /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
package/Package.swift
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// swift-tools-version: 6.0
|
|
2
|
+
import PackageDescription
|
|
3
|
+
|
|
4
|
+
// Header search paths for quoted cross-directory imports (SPM has no CocoaPods header maps).
|
|
5
|
+
// Keep in sync when adding new ios/ subdirectories that contain headers.
|
|
6
|
+
let headerSearchPaths: [String] = [
|
|
7
|
+
"ios",
|
|
8
|
+
"ios/bridging",
|
|
9
|
+
"ios/conversion",
|
|
10
|
+
"ios/helpers/container",
|
|
11
|
+
"ios/helpers/image",
|
|
12
|
+
"ios/helpers/scroll-view",
|
|
13
|
+
"ios/legacy",
|
|
14
|
+
"ios/legacy/events",
|
|
15
|
+
"ios/legacy/integrations",
|
|
16
|
+
"ios/legacy/utils",
|
|
17
|
+
"ios/modals/form-sheet",
|
|
18
|
+
"ios/modals/utils",
|
|
19
|
+
"ios/safe-area",
|
|
20
|
+
"ios/scroll-to-top-guard",
|
|
21
|
+
"ios/scroll-view-marker",
|
|
22
|
+
"ios/scroll-view-marker/conversion",
|
|
23
|
+
"ios/split",
|
|
24
|
+
"ios/split/conversion",
|
|
25
|
+
"ios/stack",
|
|
26
|
+
"ios/stack/conversion",
|
|
27
|
+
"ios/stack/header",
|
|
28
|
+
"ios/stack/host",
|
|
29
|
+
"ios/stack/screen",
|
|
30
|
+
"ios/tabs",
|
|
31
|
+
"ios/tabs/bottom-accessory",
|
|
32
|
+
"ios/tabs/conversion",
|
|
33
|
+
"ios/tabs/extensions",
|
|
34
|
+
"ios/tabs/host",
|
|
35
|
+
"ios/tabs/screen",
|
|
36
|
+
"ios/utils",
|
|
37
|
+
"ios/utils/extensions",
|
|
38
|
+
"common/cpp",
|
|
39
|
+
"cpp/legacy",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
let cSettings: [CSetting] = headerSearchPaths.map { .headerSearchPath($0) }
|
|
43
|
+
|
|
44
|
+
let cxxSettings: [CXXSetting] = [
|
|
45
|
+
.define("DEBUG", .when(configuration: .debug)),
|
|
46
|
+
.define("NDEBUG", .when(configuration: .release)),
|
|
47
|
+
] + headerSearchPaths.map { .headerSearchPath($0) }
|
|
48
|
+
|
|
49
|
+
let package = Package(
|
|
50
|
+
name: "RNScreens",
|
|
51
|
+
platforms: [.iOS(.v15)],
|
|
52
|
+
products: [
|
|
53
|
+
.library(name: "RNScreens", targets: ["RNScreens"]),
|
|
54
|
+
],
|
|
55
|
+
dependencies: [
|
|
56
|
+
// Resolved from the autolinker symlink `<app>/ios/build/generated/autolinking/libs/RNScreens`,
|
|
57
|
+
// not from node_modules: `../../../../xcframeworks` -> `<app>/ios/build/xcframeworks`,
|
|
58
|
+
// `../../../ios` -> `<app>/ios/build/generated/ios`. Same layout `npx react-native spm scaffold` emits.
|
|
59
|
+
// Making this self-contained (remote RN package URL + shipping our own codegen output) is blocked
|
|
60
|
+
// on RN publishing a remote SPM package and would require `codegenConfig.includesGeneratedCode`, see:
|
|
61
|
+
// https://github.com/react/react-native/blob/v0.87.1/packages/react-native/scripts/spm/__docs__/spm-header-paths-contract.md#hand-authored-community-library-contract
|
|
62
|
+
.package(name: "ReactNative", path: "../../../../xcframeworks"),
|
|
63
|
+
.package(name: "React-GeneratedCode", path: "../../../ios"),
|
|
64
|
+
],
|
|
65
|
+
targets: [
|
|
66
|
+
.target(
|
|
67
|
+
name: "RNScreens",
|
|
68
|
+
dependencies: [
|
|
69
|
+
.product(name: "ReactHeaders", package: "ReactNative"),
|
|
70
|
+
.product(name: "ReactNativeHeaders", package: "ReactNative"),
|
|
71
|
+
.product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"),
|
|
72
|
+
.product(name: "ReactAppHeaders", package: "React-GeneratedCode"),
|
|
73
|
+
],
|
|
74
|
+
path: ".",
|
|
75
|
+
exclude: ["ios/RNScreens.xcodeproj"],
|
|
76
|
+
sources: ["ios", "common/cpp", "cpp"],
|
|
77
|
+
publicHeadersPath: "ios",
|
|
78
|
+
cSettings: cSettings,
|
|
79
|
+
cxxSettings: cxxSettings,
|
|
80
|
+
linkerSettings: [
|
|
81
|
+
.linkedFramework("UIKit"),
|
|
82
|
+
.linkedFramework("Foundation"),
|
|
83
|
+
]
|
|
84
|
+
),
|
|
85
|
+
],
|
|
86
|
+
cxxLanguageStandard: .cxx20
|
|
87
|
+
)
|
package/README.md
CHANGED
|
@@ -254,14 +254,6 @@ There are many ways to contribute to this project. See [CONTRIBUTING](https://gi
|
|
|
254
254
|
|
|
255
255
|
React native screens library is licensed under [The MIT License](LICENSE).
|
|
256
256
|
|
|
257
|
-
## Credits
|
|
258
|
-
|
|
259
|
-
This project has been build and is maintained thanks to the support from [Shopify](https://shopify.com), [Expo.io](https://expo.io), and [Software Mansion](https://swmansion.com).
|
|
260
|
-
|
|
261
|
-
[](https://shopify.com)
|
|
262
|
-
[](https://expo.io)
|
|
263
|
-
[](https://swmansion.com)
|
|
264
|
-
|
|
265
257
|
## React Native Screens is created by Software Mansion
|
|
266
258
|
|
|
267
259
|
Since 2012 [Software Mansion](https://swmansion.com) is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues. We can help you build your next dream product – [Hire us](https://swmansion.com/contact/projects?utm_source=screens&utm_medium=readme).
|
package/RNScreens.podspec
CHANGED
|
@@ -6,7 +6,7 @@ debug_logging_enabled = ENV['RNS_DEBUG_LOGGING'] == '1'
|
|
|
6
6
|
use_cxxbridge = ENV['RNS_USE_CXXBRIDGE'] == '1'
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
source_files_exts = '{h,m,mm,cpp
|
|
9
|
+
source_files_exts = '{h,m,mm,cpp}'
|
|
10
10
|
source_files = ["ios/**/*.#{source_files_exts}"]
|
|
11
11
|
|
|
12
12
|
min_supported_ios_version = "15.1"
|
|
@@ -14,17 +14,14 @@ min_supported_tvos_version = "15.1"
|
|
|
14
14
|
min_supported_visionos_version = "1.0"
|
|
15
15
|
|
|
16
16
|
rnscreens_cpp_flags = []
|
|
17
|
-
rnscreens_swift_flags = []
|
|
18
17
|
|
|
19
18
|
if debug_logging_enabled
|
|
20
19
|
rnscreens_cpp_flags << "-DRNS_DEBUG_LOGGING=1"
|
|
21
|
-
rnscreens_swift_flags << "-DRNS_DEBUG_LOGGING"
|
|
22
20
|
end
|
|
23
21
|
rnscreens_cpp_flags << "-DRNS_USE_CXXBRIDGE=1" if use_cxxbridge
|
|
24
22
|
|
|
25
23
|
rnscreens_config = {
|
|
26
|
-
'OTHER_CPLUSPLUSFLAGS' => rnscreens_cpp_flags.join(" ")
|
|
27
|
-
'OTHER_SWIFT_FLAGS' => rnscreens_swift_flags.join(" ")
|
|
24
|
+
'OTHER_CPLUSPLUSFLAGS' => rnscreens_cpp_flags.join(" ")
|
|
28
25
|
}
|
|
29
26
|
|
|
30
27
|
rnscreens_config['DEFINES_MODULE'] = 'YES'
|
|
@@ -42,7 +39,6 @@ Pod::Spec.new do |s|
|
|
|
42
39
|
s.platforms = { :ios => min_supported_ios_version, :tvos => min_supported_tvos_version, :visionos => min_supported_visionos_version }
|
|
43
40
|
s.source = { :git => "https://github.com/software-mansion/react-native-screens.git", :tag => "#{s.version}" }
|
|
44
41
|
s.source_files = source_files
|
|
45
|
-
s.project_header_files = "ios/bridging/Swift-Bridging.h"
|
|
46
42
|
s.requires_arc = true
|
|
47
43
|
|
|
48
44
|
if debug_logging_enabled
|
package/android/build.gradle
CHANGED
|
@@ -82,7 +82,27 @@ if (isRunningInContextOfScreensRepo()) {
|
|
|
82
82
|
apply plugin: "com.facebook.react"
|
|
83
83
|
}
|
|
84
84
|
apply plugin: 'com.android.library'
|
|
85
|
-
|
|
85
|
+
|
|
86
|
+
// AGP 9 ships built-in Kotlin support enabled by default. When it is active, AGP compiles
|
|
87
|
+
// our Kotlin sources itself and *additionally* applying the Kotlin Android plugin fails the build.
|
|
88
|
+
// Consuming apps may opt out with `android.builtInKotlin=false` in which case AGP does NOT
|
|
89
|
+
// provide Kotlin and we MUST apply the plugin ourselves.
|
|
90
|
+
// AGP < 9 had no built-in Kotlin at all, so we always apply it there.
|
|
91
|
+
def shouldEnableAgpFallback() {
|
|
92
|
+
def agpMajorVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger()
|
|
93
|
+
if (agpMajorVersion <= 8) {
|
|
94
|
+
return true
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
def propertyVal = providers.gradleProperty("android.builtInKotlin").orNull
|
|
98
|
+
def isBuiltInKotlinEnabled = propertyVal != null ? propertyVal.toBoolean() : true
|
|
99
|
+
|
|
100
|
+
return !isBuiltInKotlinEnabled
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (shouldEnableAgpFallback()) {
|
|
104
|
+
apply plugin: 'kotlin-android'
|
|
105
|
+
}
|
|
86
106
|
|
|
87
107
|
def reactNativeArchitectures() {
|
|
88
108
|
def value = project.getProperties().get("reactNativeArchitectures")
|
|
@@ -165,6 +185,11 @@ android {
|
|
|
165
185
|
}
|
|
166
186
|
sourceSets.main {
|
|
167
187
|
ext.androidResDir = "src/main/res"
|
|
188
|
+
kotlin {
|
|
189
|
+
srcDirs += [
|
|
190
|
+
"src/fabric/java",
|
|
191
|
+
]
|
|
192
|
+
}
|
|
168
193
|
java {
|
|
169
194
|
srcDirs += [
|
|
170
195
|
"src/fabric/java",
|
|
@@ -64,6 +64,11 @@ class NativeProxy {
|
|
|
64
64
|
|
|
65
65
|
val screen = weakScreeRef.get()
|
|
66
66
|
if (screen is Screen) {
|
|
67
|
+
// Fabric's mounting transaction removes the screen on a Choreographer frame callback,
|
|
68
|
+
// which can execute before `startRemovalTransition` (scheduled via `Handler.post`).
|
|
69
|
+
// To prevent `Screen.isBeingRemoved` from being read as false during teardown,
|
|
70
|
+
// we must set this flag synchronously here.
|
|
71
|
+
screen.markAsBeingRemoved()
|
|
67
72
|
val isScheduled =
|
|
68
73
|
screen.post {
|
|
69
74
|
screen.startRemovalTransition()
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
#include <react/fabric/Binding.h>
|
|
3
3
|
#include <react/renderer/scheduler/Scheduler.h>
|
|
4
4
|
|
|
5
|
+
#include <memory>
|
|
5
6
|
#include <string>
|
|
6
7
|
|
|
7
8
|
#include "NativeProxy.h"
|
|
@@ -11,6 +12,19 @@ using namespace react;
|
|
|
11
12
|
|
|
12
13
|
namespace rnscreens {
|
|
13
14
|
|
|
15
|
+
namespace {
|
|
16
|
+
// Keep this listener process-lifetime to avoid races during initialization,
|
|
17
|
+
// when nativeAddMutationsListener() can be called concurrently from different
|
|
18
|
+
// threads. A function-local static initializes thread-safely, and an immortal
|
|
19
|
+
// instance suits core's delegate list, which is append-only. For more details:
|
|
20
|
+
// https://github.com/software-mansion/react-native-screens/pull/4413
|
|
21
|
+
const std::shared_ptr<RNSScreenRemovalListener> &removalListener() {
|
|
22
|
+
static const std::shared_ptr<RNSScreenRemovalListener> instance =
|
|
23
|
+
std::make_shared<RNSScreenRemovalListener>();
|
|
24
|
+
return instance;
|
|
25
|
+
}
|
|
26
|
+
} // namespace
|
|
27
|
+
|
|
14
28
|
NativeProxy::NativeProxy(jni::alias_ref<NativeProxy::javaobject> jThis)
|
|
15
29
|
: javaPart_(jni::make_global(jThis)) {}
|
|
16
30
|
|
|
@@ -32,13 +46,18 @@ void NativeProxy::nativeAddMutationsListener(
|
|
|
32
46
|
auto uiManager =
|
|
33
47
|
fabricUIManager->getBinding()->getScheduler()->getUIManager();
|
|
34
48
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
{
|
|
50
|
+
// Capture a copy of the global ref, never `this`: the listener outlives
|
|
51
|
+
// this NativeProxy, and the old live read of javaPart_ at call time raced
|
|
52
|
+
// invalidateNative(). installMutex_ keeps the copy from racing the
|
|
53
|
+
// invalidation write and keeps the stored token matching the last install.
|
|
54
|
+
std::lock_guard<std::mutex> lock(installMutex_);
|
|
55
|
+
removalListenerToken_ =
|
|
56
|
+
removalListener()->setListener([javaPart = javaPart_](int tag) {
|
|
38
57
|
static const auto method =
|
|
39
|
-
|
|
58
|
+
javaPart->getClass()->getMethod<void(jint)>(
|
|
40
59
|
"notifyScreenRemoved");
|
|
41
|
-
method(
|
|
60
|
+
method(javaPart, tag);
|
|
42
61
|
});
|
|
43
62
|
}
|
|
44
63
|
|
|
@@ -79,7 +98,7 @@ void NativeProxy::addMountingCoordinatorIfNeeded(
|
|
|
79
98
|
});
|
|
80
99
|
|
|
81
100
|
if (!wasRegistered) {
|
|
82
|
-
coordinator->setMountingOverrideDelegate(
|
|
101
|
+
coordinator->setMountingOverrideDelegate(removalListener());
|
|
83
102
|
coordinatorsWithMountingOverrides_.push_back(coordinator);
|
|
84
103
|
}
|
|
85
104
|
}
|
|
@@ -90,6 +109,11 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybrid(
|
|
|
90
109
|
}
|
|
91
110
|
|
|
92
111
|
void NativeProxy::invalidateNative() {
|
|
112
|
+
// Disarm before the hybrid is collected; also releases the captured global
|
|
113
|
+
// ref so the Java NativeProxy stays collectable. Serialized with the install
|
|
114
|
+
// path so the token is never stale and javaPart_ is not nulled mid-capture.
|
|
115
|
+
std::lock_guard<std::mutex> lock(installMutex_);
|
|
116
|
+
removalListener()->clearListener(removalListenerToken_);
|
|
93
117
|
javaPart_ = nullptr;
|
|
94
118
|
}
|
|
95
119
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
#include <react/fabric/JFabricUIManager.h>
|
|
5
5
|
#include "RNSScreenRemovalListener.h"
|
|
6
6
|
|
|
7
|
+
#include <cstdint>
|
|
7
8
|
#include <mutex>
|
|
8
9
|
#include <string>
|
|
9
10
|
|
|
@@ -13,7 +14,6 @@ using namespace facebook::jni;
|
|
|
13
14
|
|
|
14
15
|
class NativeProxy : public jni::HybridClass<NativeProxy> {
|
|
15
16
|
public:
|
|
16
|
-
std::shared_ptr<RNSScreenRemovalListener> screenRemovalListener_;
|
|
17
17
|
std::vector<std::weak_ptr<const facebook::react::MountingCoordinator>>
|
|
18
18
|
coordinatorsWithMountingOverrides_;
|
|
19
19
|
static auto constexpr kJavaDescriptor =
|
|
@@ -28,6 +28,12 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
|
|
|
28
28
|
|
|
29
29
|
std::mutex coordinatorsMutex_;
|
|
30
30
|
|
|
31
|
+
// Serializes callback install (nativeAddMutationsListener) with
|
|
32
|
+
// invalidateNative: the install-time copy of javaPart_ must not race the
|
|
33
|
+
// invalidation write, and the stored token must match the last install.
|
|
34
|
+
std::mutex installMutex_;
|
|
35
|
+
uint64_t removalListenerToken_{0};
|
|
36
|
+
|
|
31
37
|
explicit NativeProxy(jni::alias_ref<NativeProxy::javaobject> jThis);
|
|
32
38
|
|
|
33
39
|
void nativeAddMutationsListener(
|
|
@@ -18,8 +18,8 @@ import com.swmansion.rnscreens.legacy.ScreenStackViewManager
|
|
|
18
18
|
import com.swmansion.rnscreens.legacy.ScreenViewManager
|
|
19
19
|
import com.swmansion.rnscreens.legacy.SearchBarManager
|
|
20
20
|
import com.swmansion.rnscreens.legacy.utils.ScreenDummyLayoutHelper
|
|
21
|
-
import com.swmansion.rnscreens.modals.formsheet.FormSheetContentWrapperViewManager
|
|
22
|
-
import com.swmansion.rnscreens.modals.formsheet.FormSheetHostViewManager
|
|
21
|
+
import com.swmansion.rnscreens.modals.formsheet.react.contentwrapper.FormSheetContentWrapperViewManager
|
|
22
|
+
import com.swmansion.rnscreens.modals.formsheet.react.host.FormSheetHostViewManager
|
|
23
23
|
import com.swmansion.rnscreens.safearea.SafeAreaViewManager
|
|
24
24
|
import com.swmansion.rnscreens.scrollviewmarker.ScrollViewMarkerViewManager
|
|
25
25
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigViewManager
|
|
@@ -9,4 +9,12 @@ interface Container {
|
|
|
9
9
|
* (if any).
|
|
10
10
|
*/
|
|
11
11
|
fun resolveCurrentContentScrollView(): ViewGroup?
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Asked when this container's whole subtree is about to be natively dismissed,
|
|
15
|
+
* e.g. the screen hosting this container is popped. Returns the item that
|
|
16
|
+
* vetoes the dismissal via `preventNativeDismiss`, or null when nothing
|
|
17
|
+
* in the subtree does.
|
|
18
|
+
*/
|
|
19
|
+
fun wantsToPreventStackNativeDismiss(): ContainerItem?
|
|
12
20
|
}
|
|
@@ -2,7 +2,7 @@ package com.swmansion.rnscreens.common.container
|
|
|
2
2
|
|
|
3
3
|
import android.view.ViewGroup
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
interface ContainerItem {
|
|
6
6
|
// region Nested Container handling
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -27,4 +27,16 @@ internal interface ContainerItem {
|
|
|
27
27
|
fun findContentScrollView(): ViewGroup?
|
|
28
28
|
|
|
29
29
|
// endregion
|
|
30
|
+
|
|
31
|
+
// region Native dismissal
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Asked when this item (screen) is about to be natively dismissed together
|
|
35
|
+
* with its subtree. The nested container (if any) is consulted first; its
|
|
36
|
+
* non-null answer wins, otherwise the item answers for itself, returning
|
|
37
|
+
* itself when it vetoes the dismissal or null otherwise.
|
|
38
|
+
*/
|
|
39
|
+
fun wantsToPreventStackNativeDismiss(): ContainerItem?
|
|
40
|
+
|
|
41
|
+
// endregion
|
|
30
42
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.common.text
|
|
2
|
+
|
|
3
|
+
import android.content.res.AssetManager
|
|
4
|
+
import android.graphics.Typeface
|
|
5
|
+
import android.os.Build
|
|
6
|
+
import com.facebook.react.common.ReactConstants
|
|
7
|
+
import com.facebook.react.common.assets.ReactFontManager.TypefaceStyle
|
|
8
|
+
import com.facebook.react.views.text.ReactTypefaceUtils
|
|
9
|
+
import kotlin.properties.Delegates
|
|
10
|
+
import kotlin.properties.ReadWriteProperty
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* [TextAppearance] driven by React props. Font family, weight and style are kept as the raw
|
|
14
|
+
* React values and turned into a [Typeface]. [onChanged] is invoked whenever a property
|
|
15
|
+
* actually changes value.
|
|
16
|
+
*/
|
|
17
|
+
internal class ReactTextAppearance(
|
|
18
|
+
private val assets: AssetManager,
|
|
19
|
+
onChanged: () -> Unit,
|
|
20
|
+
) : TextAppearance {
|
|
21
|
+
override var color: Int? by changeNotifying(onChanged)
|
|
22
|
+
override var fontSize: Float? by changeNotifying(onChanged)
|
|
23
|
+
internal var fontFamily: String? by changeNotifying(onChanged)
|
|
24
|
+
internal var fontWeight: String? by changeNotifying(onChanged)
|
|
25
|
+
internal var fontStyle: String? by changeNotifying(onChanged)
|
|
26
|
+
|
|
27
|
+
override fun resolveTypeface(base: Typeface): Typeface {
|
|
28
|
+
val weight = ReactTypefaceUtils.parseFontWeight(fontWeight)
|
|
29
|
+
val style = ReactTypefaceUtils.parseFontStyle(fontStyle)
|
|
30
|
+
|
|
31
|
+
if (fontFamily == null && weight == ReactConstants.UNSET && style == ReactConstants.UNSET) {
|
|
32
|
+
return base
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ReactFontManager.TypefaceStyle turns an unset weight into 400 and an unset style into
|
|
36
|
+
// "not italic" rather than deriving them from the base. This would drop default styling
|
|
37
|
+
// from base typeface. Resolve both up front so it never receives UNSET style or weight.
|
|
38
|
+
return ReactTypefaceUtils.applyStyles(
|
|
39
|
+
base,
|
|
40
|
+
if (style != ReactConstants.UNSET) style else base.resolveStyle(),
|
|
41
|
+
if (weight != ReactConstants.UNSET) weight else base.resolveWeight(),
|
|
42
|
+
fontFamily,
|
|
43
|
+
assets,
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private fun <T> changeNotifying(onChanged: () -> Unit): ReadWriteProperty<Any?, T?> =
|
|
49
|
+
Delegates.observable(null) { _, old, new -> if (old != new) onChanged() }
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Numeric weight of this typeface. [Typeface.getWeight] requires API 28; below it only bold
|
|
53
|
+
* can be told apart from regular.
|
|
54
|
+
*/
|
|
55
|
+
private fun Typeface.resolveWeight(): Int =
|
|
56
|
+
when {
|
|
57
|
+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> weight
|
|
58
|
+
isBold -> TypefaceStyle.BOLD
|
|
59
|
+
else -> TypefaceStyle.NORMAL
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private fun Typeface.resolveStyle(): Int = if (isItalic) Typeface.ITALIC else Typeface.NORMAL
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.common.text
|
|
2
|
+
|
|
3
|
+
import android.graphics.Typeface
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Provides text styling for some given part of the interface. Interface is React-agnostic. A `null`
|
|
7
|
+
* value means "keep the default".
|
|
8
|
+
*/
|
|
9
|
+
internal interface TextAppearance {
|
|
10
|
+
val color: Int?
|
|
11
|
+
|
|
12
|
+
/** Font size in SP. */
|
|
13
|
+
val fontSize: Float?
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Returns the modified typeface based on [base] typeface. Properties that are not overridden
|
|
17
|
+
* are inherited from [base], which is returned unchanged when there are no overrides at all.
|
|
18
|
+
*/
|
|
19
|
+
fun resolveTypeface(base: Typeface): Typeface
|
|
20
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.common.text
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.graphics.Typeface
|
|
5
|
+
import androidx.annotation.AttrRes
|
|
6
|
+
import com.swmansion.rnscreens.utils.resolveColorAttr
|
|
7
|
+
import com.swmansion.rnscreens.utils.resolveStyleResAttr
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Default text styling of a single title/subtitle slot, resolved from the M3 type-scale
|
|
11
|
+
* style behind [textAppearanceAttr] and the color behind [textColorAttr].
|
|
12
|
+
*
|
|
13
|
+
* Resolved from the style rather than read back from the widget: Material resolves a slot's
|
|
14
|
+
* default typeface asynchronously, so until that lands the widget reports [Typeface.DEFAULT].
|
|
15
|
+
*/
|
|
16
|
+
internal class TextAppearanceDefaults(
|
|
17
|
+
val color: Int,
|
|
18
|
+
val textSizePx: Float,
|
|
19
|
+
val typeface: Typeface,
|
|
20
|
+
) {
|
|
21
|
+
companion object {
|
|
22
|
+
fun resolve(
|
|
23
|
+
context: Context,
|
|
24
|
+
@AttrRes textAppearanceAttr: Int,
|
|
25
|
+
@AttrRes textColorAttr: Int,
|
|
26
|
+
): TextAppearanceDefaults {
|
|
27
|
+
val appearanceRes = resolveStyleResAttr(context, textAppearanceAttr)
|
|
28
|
+
val attrs = context.obtainStyledAttributes(appearanceRes, APPEARANCE_ATTRS)
|
|
29
|
+
try {
|
|
30
|
+
val textSizePx = attrs.getDimension(IDX_TEXT_SIZE, 0f)
|
|
31
|
+
require(textSizePx > 0f) { "[RNScreens] Text appearance defines no text size." }
|
|
32
|
+
|
|
33
|
+
// android:fontFamily is either a font resource (@font/…, resolvable only
|
|
34
|
+
// asynchronously) or a family name. The M3 type scale always declares a family
|
|
35
|
+
// name (@string/m3_ref_typeface_* — "sans-serif" / "sans-serif-medium"),
|
|
36
|
+
// so we can unconditionally take the synchronous path (Material's own fallback and
|
|
37
|
+
// AppCompatTextHelper do the same).
|
|
38
|
+
val textStyle = attrs.getInt(IDX_TEXT_STYLE, Typeface.NORMAL)
|
|
39
|
+
val typeface =
|
|
40
|
+
attrs.getString(IDX_FONT_FAMILY)?.let { Typeface.create(it, textStyle) }
|
|
41
|
+
?: Typeface.defaultFromStyle(textStyle)
|
|
42
|
+
|
|
43
|
+
return TextAppearanceDefaults(
|
|
44
|
+
resolveColorAttr(context, textColorAttr),
|
|
45
|
+
textSizePx,
|
|
46
|
+
typeface,
|
|
47
|
+
)
|
|
48
|
+
} finally {
|
|
49
|
+
attrs.recycle()
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Framework attr ids are compile-time constants; the array must stay sorted
|
|
54
|
+
// ascending (obtainStyledAttributes requirement).
|
|
55
|
+
private val APPEARANCE_ATTRS =
|
|
56
|
+
intArrayOf(
|
|
57
|
+
android.R.attr.textSize,
|
|
58
|
+
android.R.attr.textStyle,
|
|
59
|
+
android.R.attr.fontFamily,
|
|
60
|
+
)
|
|
61
|
+
private const val IDX_TEXT_SIZE = 0
|
|
62
|
+
private const val IDX_TEXT_STYLE = 1
|
|
63
|
+
private const val IDX_FONT_FAMILY = 2
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.helpers
|
|
2
2
|
|
|
3
|
-
import android.content.Context
|
|
4
3
|
import android.graphics.drawable.Drawable
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -21,27 +20,28 @@ internal sealed interface IconResolution {
|
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* Stateful, latest-wins icon resolver for a single declaratively-driven icon slot — a `toolbarMenu`
|
|
24
|
-
* prop menu item, or the back button — that is re-evaluated on every
|
|
25
|
-
*
|
|
26
|
-
*
|
|
23
|
+
* prop menu item, or the back button — that is re-evaluated on every source change. It deduplicates
|
|
24
|
+
* unchanged sources ([IconResolution.Unchanged]) to avoid needless reloads/flicker, and drops stale
|
|
25
|
+
* async results so a slow load cannot clobber a newer source.
|
|
26
|
+
*
|
|
27
|
+
* [load] must invoke its completion callback exactly once — synchronously or asynchronously,
|
|
28
|
+
* always on the main thread — with the loaded drawable, or `null` when the source resolves to
|
|
29
|
+
* no icon or fails to load (see e.g. [resolveImage]).
|
|
27
30
|
*/
|
|
28
|
-
internal class PropIconResolver
|
|
31
|
+
internal class PropIconResolver(
|
|
32
|
+
private val load: (drawableIconResourceName: String?, imageIconUri: String?, onComplete: (Drawable?) -> Unit) -> Unit,
|
|
33
|
+
) {
|
|
29
34
|
private var lastDrawableName: String? = null
|
|
30
35
|
private var lastImageUri: String? = null
|
|
31
36
|
private var lastEmittedDrawableName: String? = null
|
|
32
37
|
private var lastEmittedImageUri: String? = null
|
|
33
38
|
|
|
34
39
|
/**
|
|
35
|
-
* Resolves an icon from a drawable resource name or an image uri.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* and asynchronously for image uris. For image uris, the callback is only invoked if the
|
|
39
|
-
* resolved uri is still the latest requested source (stale requests are dropped). On a failed
|
|
40
|
-
* image load the latest request still emits [IconResolution.Resolved] with a `null` drawable, so
|
|
41
|
-
* the icon is cleared rather than left stale.
|
|
40
|
+
* Resolves an icon from a drawable resource name or an image uri. The result is delivered
|
|
41
|
+
* to [onResult] only if the requested source is still the latest one (stale async results
|
|
42
|
+
* are dropped).
|
|
42
43
|
*/
|
|
43
44
|
fun resolve(
|
|
44
|
-
context: Context,
|
|
45
45
|
drawableIconResourceName: String?,
|
|
46
46
|
imageIconUri: String?,
|
|
47
47
|
onResult: (IconResolution) -> Unit,
|
|
@@ -56,16 +56,10 @@ internal class PropIconResolver {
|
|
|
56
56
|
}
|
|
57
57
|
lastEmittedDrawableName = drawableIconResourceName
|
|
58
58
|
lastEmittedImageUri = imageIconUri
|
|
59
|
-
|
|
60
|
-
drawableIconResourceName
|
|
61
|
-
onResult(IconResolution.Resolved(
|
|
62
|
-
|
|
63
|
-
loadImage(context, imageIconUri) { drawable ->
|
|
64
|
-
if (imageIconUri == lastImageUri && lastDrawableName == null) {
|
|
65
|
-
onResult(IconResolution.Resolved(drawable))
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else -> onResult(IconResolution.Resolved(null))
|
|
59
|
+
load(drawableIconResourceName, imageIconUri) { drawable ->
|
|
60
|
+
if (drawableIconResourceName == lastDrawableName && imageIconUri == lastImageUri) {
|
|
61
|
+
onResult(IconResolution.Resolved(drawable))
|
|
62
|
+
}
|
|
69
63
|
}
|
|
70
64
|
}
|
|
71
65
|
}
|
|
@@ -71,7 +71,14 @@ class Screen(
|
|
|
71
71
|
private set
|
|
72
72
|
var screenId: String? = null
|
|
73
73
|
var isStatusBarAnimated: Boolean? = null
|
|
74
|
+
|
|
75
|
+
// Can be set on the mounting coordinator's thread (see `markAsBeingRemoved`), read on the UI thread.
|
|
76
|
+
@Volatile
|
|
74
77
|
var isBeingRemoved = false
|
|
78
|
+
private set
|
|
79
|
+
|
|
80
|
+
// Keeps `startTransitionRecursive` / `endTransitionRecursive` calls paired. Should be used on UI thread only.
|
|
81
|
+
private var isRemovalTransitionStarted = false
|
|
75
82
|
|
|
76
83
|
// Props for controlling modal presentation
|
|
77
84
|
var isSheetGrabberVisible: Boolean = false
|
|
@@ -439,19 +446,28 @@ class Screen(
|
|
|
439
446
|
|
|
440
447
|
var nativeBackButtonDismissalEnabled: Boolean = true
|
|
441
448
|
|
|
449
|
+
/**
|
|
450
|
+
* Marks this screen as being removed from the native stack. Safe to call off the UI thread;
|
|
451
|
+
* must run before the mount transaction removing this screen executes.
|
|
452
|
+
*/
|
|
453
|
+
fun markAsBeingRemoved() {
|
|
454
|
+
isBeingRemoved = true
|
|
455
|
+
}
|
|
456
|
+
|
|
442
457
|
fun startRemovalTransition() {
|
|
443
|
-
|
|
444
|
-
|
|
458
|
+
isBeingRemoved = true
|
|
459
|
+
if (!isRemovalTransitionStarted) {
|
|
460
|
+
isRemovalTransitionStarted = true
|
|
445
461
|
startTransitionRecursive(this)
|
|
446
462
|
}
|
|
447
463
|
}
|
|
448
464
|
|
|
449
465
|
fun endRemovalTransition() {
|
|
450
|
-
if (
|
|
451
|
-
|
|
466
|
+
if (isRemovalTransitionStarted) {
|
|
467
|
+
isRemovalTransitionStarted = false
|
|
468
|
+
isBeingRemoved = false
|
|
469
|
+
endTransitionRecursive(this)
|
|
452
470
|
}
|
|
453
|
-
isBeingRemoved = false
|
|
454
|
-
endTransitionRecursive(this)
|
|
455
471
|
}
|
|
456
472
|
|
|
457
473
|
private fun endTransitionRecursive(parent: ViewGroup) {
|
|
@@ -479,8 +495,10 @@ class Screen(
|
|
|
479
495
|
// It has a custom `getChildDrawingOrder` method which returns
|
|
480
496
|
// wrong index if we called `startViewTransition` on the views on new arch.
|
|
481
497
|
// We add a simple View to bump the number of children to make it work.
|
|
498
|
+
// Appended, not inserted at `i`: a filler before the circle inflates the
|
|
499
|
+
// index `onMeasure` caches for it, which then outlives the child it points at.
|
|
482
500
|
// TODO: find a better way to handle this scenario
|
|
483
|
-
it.addView(View(context)
|
|
501
|
+
it.addView(View(context))
|
|
484
502
|
} else {
|
|
485
503
|
child?.let { view -> it.startViewTransition(view) }
|
|
486
504
|
}
|
|
@@ -282,6 +282,8 @@ class ScreenStack(
|
|
|
282
282
|
screenWrappers
|
|
283
283
|
.asSequence()
|
|
284
284
|
.dropWhile { it !== visibleBottom } // ignore all screens beneath the visible bottom
|
|
285
|
+
// dismissed screens are already removed above & preloaded ones must stay detached
|
|
286
|
+
.filter { !dismissedWrappers.contains(it) && it.screen.activityState !== Screen.ActivityState.INACTIVE }
|
|
285
287
|
.forEach { wrapper ->
|
|
286
288
|
// TODO: It should be enough to dispatch this on commit action once.
|
|
287
289
|
transaction.add(id, wrapper.fragment).runOnCommit {
|