github software-mansion/react-native-screens 4.25.0-beta.1

pre-release8 hours ago

What's Changed

First beta of the 4.25.0 release.

This version is a major step towards stabilization of the Tabs API.
It brings both, many API changes in yet-unstable Tabs API and internal refactors
allowing us to bring you more stable & reliable experience.

The Tabs API we publish in this version is a "stable candidate".
We'll release a couple more of 4.25.0 versions and "stable candidate API" in stable
4.25.0 version. Once we receive final round of feedback we plan to stabilize the
Tabs API in 4.26.0.

✅ 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
  • feat: add ScrollViewMarker experimental component by @kkafar in #3674
  • 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, Android): handle colorScheme (dark mode) by @kligarski in #3723
  • 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
  • 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): configure RNSLog utility by @sgaczol in #3727
  • refactor(Tabs): Split JS components and specs internally by @t0maboro in #3722
  • feat(iOS, Tabs): Migrate tabs to new invalidate callback on Fabric by @t0maboro in #3729
  • 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
  • chore(JS): RNSLog remove from public API by @sgaczol in #3744
  • fix(iOS, Modal): Filter-out obsolete state updates from JS by @t0maboro in #3760
  • 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
  • fix(iOS, Tabs): fix diverging behavior of JS updates requesting moreNavigationController on various Apple platforms by @kkafar in #3813
  • feat(Tabs): update operation model, add TabSelectionRejectedEvent and support rejecting stale state updates by @kkafar in #3794
  • fix(Android, Tabs): fix issue with badges being assigned to wrong menu items by @kkafar in #3799
  • chore: Bump RN to 0.85.0-rc.7 by @t0maboro in #3822
  • 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(Tabs): remove controlledBottomTabs / controlNavigationStateInJS option by @kkafar in #3888
  • chore(Tabs): add usesStableTabsApi compatibility flag by @kkafar in #3889
  • 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(Examples): Fix default icon provider by @t0maboro in #3742
  • 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): forward scrollEdgeEffects to inner screen in modals (#3816) by @maxencehenneron in #3825
  • 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: rename TabsAccessory to TabsBottomAccessory by @kligarski in #3712
  • 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(readme): update supported RN versions in readme (drop legacy arch) by @kkafar in #3692
  • 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(iOS, Split): align naming for native components by @sgaczol in #3695
  • 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
  • chore(deps): bump tar from 7.5.9 to 7.5.11 in /FabricExample by @dependabot[bot] in #3738
  • 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(deps): bump tar from 7.5.10 to 7.5.11 by @dependabot[bot] in #3754
  • fix(Examples): Fix TestBottomTabsOrientation by @t0maboro in #3757
  • refactor(example): rename leftover symbols mentioning "bottom tabs" by @kkafar in #3756
  • 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(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
  • 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

New Contributors

Full Changelog: 4.24.0...4.25.0-beta.1

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

NewReleases is sending notifications on new releases.