yarn react-native-screens 4.25.0

5 hours ago

What's Changed

Minor release, bringing golden version of Tabs API. Unless we get your negative feedback, we plan to stabilise
Tabs API in next minor.

Important

4.25.0 no longer supports legacy architecture. Most likely, the library will simply fail to build.

This release brings important Tabs API changes in JS and native layer, required for stabilisation of the API.
Downstream libraries are already in advanced stage of adaptation to these changes. Please track the releases
of your navigation solution for compatibility remarks.

Improvements

  • feat(Tabs): remove freezeContents & placeholder props by @kkafar in #3673
  • feat(Android, Tabs): Add support for selectedIcon on Android by @t0maboro in #3633
  • chore: define min. required react-native version in peerDependencies by @kkafar in #3691
  • chore(readme): update supported RN versions in readme (drop legacy arch) by @kkafar in #3692
  • feat: add ScrollViewMarker experimental component by @kkafar in #3674
  • chore: rename TabsAccessory to TabsBottomAccessory by @kligarski in #3712
  • chore(iOS, Split): align naming for native components by @sgaczol in #3695
  • feat(Android, Tabs): State-driven appearance on Android by @t0maboro in #3714
  • feat(iOS, Tabs): handle colorScheme (dark mode) by @kligarski in #3716
  • feat(Tabs): add native RTL support for bottom tabs on iOS & Android by @ahmedawaad1804 in #3613
  • feat(Android): configure RNSLog utility by @sgaczol in #3718
  • feat(iOS): configure RNSLog utility by @sgaczol in #3727
  • chore(Android): disable default RNSLog activation in debug mode by @sgaczol in #3730
  • feat(iOS, Stack v4): Use new invalidation callback on Fabric by @t0maboro in #3728
  • feat(JS) - RNSLog utility by @sgaczol in #3733
  • feat(iOS, Tabs): Migrate tabs to new invalidate callback on Fabric by @t0maboro in #3729
  • feat(Tabs, Android): handle colorScheme (dark mode) by @kligarski in #3723
  • refactor(Tabs): Rename tabKey to screenKey by @t0maboro in #3750
  • refactor(JS, Tabs): Cleanup API following design doc by @t0maboro in #3748
  • feat(Android, Tabs): add prop to configure whether tab bar respects IME insets by @kligarski in #3740
  • refactor(example): rename leftover symbols mentioning "bottom tabs" by @kkafar in #3756
  • refactor(Tabs, Android): Split TabsHost into TabsHost and TabsContainer by @kkafar in #3766
  • fix(iOS, StackV5): Fix default props type by @t0maboro in #3800
  • feat(Android, Tabs): partially implement RFC-1028 for Tabs on Android by @kkafar in #3776
  • feat(iOS, Tabs): partially implement RFC-1028 for Tabs on iOS by @kkafar in #3781
  • chore: make all exports from v5 component modules explicit by @kkafar in #3808
  • feat(iOS, Tabs): Add proper support for moreNavigationController on iOS by @kkafar in #3785
  • refactor(tabs): rename onTabChange event to onTabSelected by @kkafar in #3789
  • feat(Tabs): update operation model, add TabSelectionRejectedEvent and support rejecting stale state updates by @kkafar in #3794
  • feat(Tabs): add preventNativeSelection support by @kkafar in #3838
  • feat(Android, Stack v5): add basic support for header by @kligarski in #3753
  • chore(Tabs): remove isFocused prop from TabsScreen codegen spec by @kkafar in #3863
  • refactor(Tabs, iOS): decouple moreNavigationController from navigation state by @kkafar in #3875
  • feat(iOS, Stack v4): allow background color customization by @sgaczol in #3833
  • chore: bump RN to 0.85.0 by @sgaczol in #3865
  • feat(Android, Stack v4): Add prop for manual opt-out from applying inset to header by @t0maboro in #3835
  • feat(iOS, Stack v5): Align Stack implementation with RFC 753 by @kmichalikk in #3774
  • refactor(iOS, Tabs): Migrate scrollEdgeEffects from TabsScreen to ScrollViewMarker by @t0maboro in #3895
  • chore(types): enable exactOptionalPropertyTypes support by @YevheniiKotyrlo in #3719
  • feat(Android, Stack v5): handle header configuration and custom subviews by @kligarski in #3796
  • feat(Android, Stack v5): add back button to header with customization by @kligarski in #3883

Bug fixes

  • fix(iOS, Modal): Filter-out obsolete state updates from JS by @t0maboro in #3760
  • fix(iOS, Stack v4): Fix usePreventRemove callback not called when tapping formSheet backdrop by @t0maboro in #3771
  • fix(iOS, Stack v4): hide back button when root screen is replaced with pop animation by @kligarski in #3770
  • fix(iOS, Tabs): fix diverging behavior of JS updates requesting moreNavigationController on various Apple platforms by @kkafar in #3813
  • fix(iOS): forward scrollEdgeEffects to inner screen in modals (#3816) by @maxencehenneron in #3825
  • fix(Android, Tabs): fix issue with badges being assigned to wrong menu items by @kkafar in #3799
  • fix(Android, Stack v4): Add heuristic for applying inset only on top-level header by @t0maboro in #3793
  • fix(android): Fix Activity memory leak in ScreenDummyLayoutHelper due to unreleased view references and missing lifecycle cleanup by @l2hyunwoo in #3638
  • fix(Android, Stack v4): Clear supportActionBar on fragment removal to prevent ScreenStackFragment leak by @t0maboro in #3867
  • fix(Tabs, iOS): reconcile navigation state on implicit UIKit selection changes by @kkafar in #3877
  • fix(ios): guard +load with #ifdef RCT_DYNAMIC_FRAMEWORKS by @DavidDuarte22 in #3828
  • fix: use path-based menuId to prevent collisions in nested submenus by @chrism in #3762
  • fix(Android, Stack): dispatch lifecycle events when parent is not a ScreenFragment by @collectioneur in #3854
  • fix(iOS, Stack v4): Fix reattaching screens which have preventNativeDismiss set by @t0maboro in #3886
  • fix(iOS, Tabs): prevent double event on more tab navigation by @kkafar in #3906

Misc

  • chore(Android, Tabs): move tabs files to separate packages by @kligarski in #3661
  • chore(CI): remove workflows related to the legacy architecture by @kkafar in #3686
  • chore(deps): bump tar from 7.5.7 to 7.5.9 in /FabricExample by @dependabot[bot] in #3687
  • chore(deps): bump basic-ftp from 5.0.5 to 5.2.0 by @dependabot[bot] in #3688
  • chore: Update lockfiles after 4.24 release by @t0maboro in #3699
  • chore: Update workflows after labels sync by @t0maboro in #3701
  • docs: add banner rotator by @p-malecki in #3696
  • docs: add analytics to banner by @p-malecki in #3703
  • chore: Move iOS runners to macos-26-xlarge instances by @kmichalikk in #3671
  • chore(deps): bump fast-xml-parser from 4.5.0 to 4.5.4 in /TVOSExample by @dependabot[bot] in #3705
  • chore(deps): bump fast-xml-parser from 4.5.1 to 4.5.4 in /Example by @dependabot[bot] in #3706
  • chore(deps): bump fast-xml-parser from 4.5.2 to 4.5.4 by @dependabot[bot] in #3707
  • chore(deps): bump minimatch from 3.1.2 to 3.1.5 in /FabricExample by @dependabot[bot] in #3693
  • chore: Remove Paper Example by @kmichalikk in #3710
  • chore: Update TVOSExample to RN 0.84 by @kmichalikk in #3713
  • refactor(Android): logNotAvailable refactor on Android by @sgaczol in #3697
  • chore(deps): bump fast-xml-parser from 4.5.2 to 4.5.4 in /FabricExample by @dependabot[bot] in #3715
  • chore(deps): bump minimatch from 3.1.2 to 3.1.5 in /TVOSExample by @dependabot[bot] in #3717
  • chore: Simplify single test import in App.tsx by @kmichalikk in #3678
  • fix(examples): Convert object to array for props.scenarioGroup and props.scenario by @t0maboro in #3720
  • chore(deps): aggregate dependabot updates by @kkafar in #3737
  • refactor(Tabs): Split JS components and specs internally by @t0maboro in #3722
  • chore(deps): bump tar from 7.5.9 to 7.5.11 in /FabricExample by @dependabot[bot] in #3738
  • fix(Examples): Fix default icon provider by @t0maboro in #3742
  • chore(Android): Remove android/src/paper directory and related code by @kmichalikk in #3743
  • chore(JS, Tabs): Refactor file structure for components in Tabs by @t0maboro in #3745
  • chore: Remove Paper related code & annotation from Tabs by @kmichalikk in #3746
  • chore: format SplitView conversions by @kligarski in #3749
  • chore(JS, Tabs): Remove dead code around onLifecycleStateChange event by @t0maboro in #3752
  • chore(Android): Remove BottomSheet-related Paper-specific code by @kmichalikk in #3751
  • chore(JS): RNSLog remove from public API by @sgaczol in #3744
  • chore(deps): bump tar from 7.5.10 to 7.5.11 by @dependabot[bot] in #3754
  • fix(Examples): Fix TestBottomTabsOrientation by @t0maboro in #3757
  • test(e2e, Fabric): add e2e tests for issue/PR examples 748..758, remove Test713 by @kligarski in #2932
  • docs: remove paradise banner by @p-malecki in #3787
  • refactor(example): align TabsContainer structure with StackContainer by @kkafar in #3759
  • refactor(example): align TabsContainer with StackContainer & retire TabsConfigProvider by @kkafar in #3764
  • refactor(example): remove TabsConfigProvider/TabsAutoconfig infrastructure by @kkafar in #3765
  • chore(readme): fix link to example usage in FullWindowOverlay section by @retyui in #3779
  • chore(Android, Stack): remove legacy architecture related code by @sgaczol in #3775
  • chore(Android, SafeArea): remove legacy architecture related code by @sgaczol in #3778
  • chore: review suggestions for #3759 by @kkafar in #3790
  • chore(deps): aggregate dependabot updates by @kkafar in #3810
  • chore: exclude AI agent config files from repo by @kkafar in #3820
  • fix(Example): fix Test3492 after changes to TabsContainer by @kligarski in #3823
  • chore: remove local changelog requirement from PR template by @kligarski in #3829
  • fix(example): correct TabsHostConfig type to exclude navState by @kkafar in #3830
  • refactor(example): use path aliases for imports in example apps by @kkafar in #3821
  • refactor(tabs): extract TabsContainerItem and memoize tab screens by @kkafar in #3827
  • chore: Bump RN to 0.85.0-rc.7 by @t0maboro in #3822
  • chore(Android): remove legacy architecture related code by @sgaczol in #3836
  • chore(iOS, SafeArea): legacy architecture related code removal by @sgaczol in #3837
  • chore(iOS, Stack): remove legacy architecture related code by @sgaczol in #3788
  • chore(tests): Tab-bar-hidden test refactor with new manual scenario by @LKuchno in #3840
  • refactor(tests): reorganizing test-tabs-color-scheme and adding scenario by @LKuchno in #3844
  • refactor(tests): test-tabs-tab-bar-hidden scenario update by @LKuchno in #3846
  • chore(deps): Aggregate dependabot updates by @kkafar in #3853
  • chore(test): new test-tabs-minimize-behavior-ios with scenario by @LKuchno in #3852
  • refactor(tests): reorganizing test-tabs-layout-direction plus scenario by @LKuchno in #3845
  • refactor(tests): test-tabs-color-scheme test rename to test-tabs-tab-bar-color-scheme by @LKuchno in #3857
  • chore(test): new test-tabs-controller-mode-ios with scenario by @LKuchno in #3848
  • refactor(test): defining testID for ScenarioButton an assign scenario key property value to it by @LKuchno in #3866
  • refactor(Tabs, iOS): extract RNSTabBarControllerDelegate into a formal protocol by @kkafar in #3876
  • fix(CI): fix nightly releases by bumping node version by @kligarski in #3878
  • chore(TVOSExample): bump RN to 0.85.0 by @sgaczol in #3882
  • refactor(test): Changed indentation spaces and updated the style using StyleSheet by @LKuchno in #3887
  • chore(test): E2E test for tabBarHidden and function to select SFT screens in e2e by @LKuchno in #3879
  • chore(deps): aggregate dependabot updates by @kkafar in #3890
  • feat(Example): add ThemeProvider for testing by @sgaczol in #3864
  • chore(test): add scenario template in dedicated directory by @LKuchno in #3891
  • fix(Example): fix Colors imports by @sgaczol in #3892
  • chore: Run formatters by @t0maboro in #3893
  • refactor(Tabs): remove controlledBottomTabs / controlNavigationStateInJS option by @kkafar in #3888
  • chore(Tabs): add usesStableTabsApi compatibility flag by @kkafar in #3889
  • ci: add publish workflow using npm-package-publish action by @kkafar in #3898
  • refactor(test): tabBarHidden scenario refactored, e2e test title updated by @LKuchno in #3900
  • refactor(test): Existing test scenario updates - unify with scenario template by @LKuchno in #3902
  • fix(Example): prevent unwanted full reload by @sgaczol in #3894
  • chore(CI): disable dry-run enforcement for nightly workflow by @kkafar in #3903
  • chore(tests): allow forcing tab-select action when already selected by @kkafar in #3907
  • chore(CI): remove old nightly publish workflow by @kkafar in #3913
  • chore(CI): move dry-run input to top of publish workflow by @kkafar in #3915
  • chore(release): bump version to 4.25.0-beta.1 by @kkafar in #3916
  • chore: cherry-pick changes to 4.25.0-beta.2 by @kkafar in #3979
  • chore: cherry-pick changes to 4.25.0-beta.2 by @kkafar in #3983
  • chore: cherry-pick changes to 4.25.0 stable by @kkafar in #4006

New Contributors

Full Changelog: 4.24.0...4.25.0

Don't miss a new react-native-screens release

NewReleases is sending notifications on new releases.