From abfc323aa09742360469d5bfa2dab18059e3a47a Mon Sep 17 00:00:00 2001 From: Mark de Vocht Date: Tue, 31 Mar 2026 10:14:43 +0300 Subject: [PATCH 1/5] Bottom bar fixes --- ios/BottomTabsAppearancePresenter.mm | 16 ++++++++++++---- ios/RNNBottomTabsController.mm | 5 +---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ios/BottomTabsAppearancePresenter.mm b/ios/BottomTabsAppearancePresenter.mm index 20abab9004..4679a87f94 100644 --- a/ios/BottomTabsAppearancePresenter.mm +++ b/ios/BottomTabsAppearancePresenter.mm @@ -8,8 +8,15 @@ @implementation BottomTabsAppearancePresenter - (void)applyBackgroundColor:(UIColor *)backgroundColor translucent:(BOOL)translucent { if (@available(iOS 26.0, *)) { - [self setTabBarTransparentBackground]; - self.tabBar.backgroundColor = UIColor.clearColor; + if (backgroundColor) { + if (backgroundColor.isTransparent) { + [self setTabBarTransparentBackground]; + } else { + [self setTabBarBackgroundColor:backgroundColor]; + } + } else { + [self setTabBarDefaultBackground]; + } return; } if (translucent) @@ -61,8 +68,9 @@ - (void)setTabBarTranslucent:(BOOL)translucent { - (void)setTabBarDefaultBackground { if (@available(iOS 26.0, *)) { - [self setTabBarTransparentBackground]; - self.tabBar.backgroundColor = UIColor.clearColor; + UITabBarAppearance *appearance = [UITabBarAppearance new]; + [appearance configureWithDefaultBackground]; + [self applyTabBarAppearance:appearance]; } else { [self setTabBarOpaqueBackground]; } diff --git a/ios/RNNBottomTabsController.mm b/ios/RNNBottomTabsController.mm index 3134bc63f9..9fbe4784c2 100644 --- a/ios/RNNBottomTabsController.mm +++ b/ios/RNNBottomTabsController.mm @@ -51,12 +51,9 @@ - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo if (@available(iOS 26.0, *)) { UITabBarAppearance *appearance = [UITabBarAppearance new]; - [appearance configureWithTransparentBackground]; - appearance.backgroundEffect = nil; - appearance.backgroundColor = UIColor.clearColor; + [appearance configureWithDefaultBackground]; self.tabBar.standardAppearance = appearance; self.tabBar.scrollEdgeAppearance = [appearance copy]; - self.tabBar.barTintColor = UIColor.clearColor; } else if (@available(iOS 13.0, *)) { UITabBarAppearance *appearance = [UITabBarAppearance new]; [appearance configureWithOpaqueBackground]; From 6608c49903dc5b0e93bfe217dd76db21d483340e Mon Sep 17 00:00:00 2001 From: Mark de Vocht Date: Thu, 9 Apr 2026 09:21:02 +0300 Subject: [PATCH 2/5] Fix for transparancy in iOS 26 --- ios/BottomTabsAppearancePresenter.mm | 6 +++++- .../NavigationTests/UIViewController+LayoutProtocolTest.mm | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ios/BottomTabsAppearancePresenter.mm b/ios/BottomTabsAppearancePresenter.mm index 4679a87f94..fa7b01b5c1 100644 --- a/ios/BottomTabsAppearancePresenter.mm +++ b/ios/BottomTabsAppearancePresenter.mm @@ -103,7 +103,11 @@ - (void)setTabBarOpaqueBackground { - (UITabBarAppearance *)appearanceWithColor:(UIColor *)color { UITabBarAppearance *appearance = [UITabBarAppearance new]; - [appearance configureWithOpaqueBackground]; + if (@available(iOS 26.0, *)) { + [appearance configureWithTransparentBackground]; + } else { + [appearance configureWithOpaqueBackground]; + } appearance.backgroundEffect = nil; appearance.shadowColor = nil; UIColor *resolvedColor = color ?: UIColor.systemBackgroundColor; diff --git a/playground/ios/NavigationTests/UIViewController+LayoutProtocolTest.mm b/playground/ios/NavigationTests/UIViewController+LayoutProtocolTest.mm index b68f0f716d..6b744ac6fe 100644 --- a/playground/ios/NavigationTests/UIViewController+LayoutProtocolTest.mm +++ b/playground/ios/NavigationTests/UIViewController+LayoutProtocolTest.mm @@ -264,7 +264,8 @@ - (void)testConstants_shouldReturnNavigationBarHeight_visible { childViewControllers:@[ stack, stack2 ] bottomTabsAttacher:nil]; - XCTAssertEqual([bottomTabs getTopBarHeight], stack.navigationBar.frame.size.height); + XCTAssertEqual([bottomTabs getTopBarHeight], + stack.navigationBar.frame.origin.y + stack.navigationBar.frame.size.height); } - (void)testConstants_shouldReturnNavigationBarHeight_invisible { From 4d4ba84c06070d82abf2ae5aa4edcd54877263a8 Mon Sep 17 00:00:00 2001 From: Mark de Vocht Date: Thu, 9 Apr 2026 11:45:30 +0300 Subject: [PATCH 3/5] yarn update --- package.json | 2 +- playground/package.json | 4 +- yarn.lock | 86 ++++++----------------------------------- 3 files changed, 14 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index d5d366e79f..f16bdb8f70 100644 --- a/package.json +++ b/package.json @@ -182,4 +182,4 @@ ] ] } -} \ No newline at end of file +} diff --git a/playground/package.json b/playground/package.json index d89eb2868e..a8a0d6510b 100644 --- a/playground/package.json +++ b/playground/package.json @@ -33,6 +33,7 @@ "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", "@babel/types": "7.25.0", + "@d11/react-native-fast-image": "^8.13.0", "@react-native-community/cli": "20.0.0", "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", @@ -61,7 +62,6 @@ "eslint-plugin-jest": "^28.11.0", "eslint-plugin-prettier": "3.1.4", "github-release-notes": "https://github.com/yogevbd/github-release-notes/tarball/e601b3dba72dcd6cba323c1286ea6dd0c0110b58", - "identity-obj-proxy": "3.0.0", "jest": "^29.6.3", "lint-staged": "10.2.11", @@ -70,7 +70,6 @@ "prettier": "2.8.8", "react": "19.2.3", "react-native": "0.84.0", - "@d11/react-native-fast-image": "^8.13.0", "react-native-gesture-handler": "^2.29.1", "react-native-monorepo-config": "^0.3.0", "react-native-reanimated": "4.2.2", @@ -85,7 +84,6 @@ "typedoc": "0.x.x", "typescript": "^5.8.3" }, - "lint-staged": { "*.{js,ts,tsx}": "eslint --fix", "*.{h,m,mm}": "node ./scripts/check-clang-format" diff --git a/yarn.lock b/yarn.lock index c904e2b182..060409d534 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1663,6 +1663,16 @@ __metadata: languageName: node linkType: hard +"@d11/react-native-fast-image@npm:^8.13.0": + version: 8.13.0 + resolution: "@d11/react-native-fast-image@npm:8.13.0::__archiveUrl=https%3A%2F%2Fnpm.dev.wixpress.com%2Fapi%2Fnpm%2Fnpm-repos%2F%40d11%2Freact-native-fast-image%2F-%2Freact-native-fast-image-8.13.0.tgz" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10/bbd3ed3db96ca54c86173ae9a0de8c254448a5ff495d9b4a33fe491bee8ad03b655ed2d7d862996af8817ee5562c2031e7e2969880229cac133e84fd1c3e9f78 + languageName: node + linkType: hard + "@dabh/diagnostics@npm:^2.0.8": version: 2.0.8 resolution: "@dabh/diagnostics@npm:2.0.8" @@ -5016,13 +5026,6 @@ __metadata: languageName: node linkType: hard -"compare-versions@npm:^3.6.0": - version: 3.6.0 - resolution: "compare-versions@npm:3.6.0" - checksum: 10/7492a50cdaa2c27f5254eee7c4b38856e1c164991bab3d98d7fd067fe4b570d47123ecb92523b78338be86aa221668fd3868bfe8caa5587dc3ebbe1a03d52b5d - languageName: node - linkType: hard - "compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -6794,15 +6797,6 @@ __metadata: languageName: node linkType: hard -"find-versions@npm:^3.2.0": - version: 3.2.0 - resolution: "find-versions@npm:3.2.0" - dependencies: - semver-regex: "npm:^2.0.0" - checksum: 10/f010e00f9dedd5b83206762d668b4b3b86bbb81f3c2d957e2559969b9eadb6124297c4a2a1d51c5efea3d79557b19660a2758c77bb6a5ba5ce7750fba9847082 - languageName: node - linkType: hard - "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -7733,27 +7727,6 @@ __metadata: languageName: node linkType: hard -"husky@npm:4.2.5": - version: 4.2.5 - resolution: "husky@npm:4.2.5" - dependencies: - chalk: "npm:^4.0.0" - ci-info: "npm:^2.0.0" - compare-versions: "npm:^3.6.0" - cosmiconfig: "npm:^6.0.0" - find-versions: "npm:^3.2.0" - opencollective-postinstall: "npm:^2.0.2" - pkg-dir: "npm:^4.2.0" - please-upgrade-node: "npm:^3.2.0" - slash: "npm:^3.0.0" - which-pm-runs: "npm:^1.0.0" - bin: - husky-run: bin/run.js - husky-upgrade: lib/upgrader/bin.js - checksum: 10/57fb1723f5c6e28edffd79896a5b10a69b4c55f89ddfa1fe6354cf37cf2dab27d7159213d4fc90e9bef2ea10ea1ca60d2003985b77480b4fa719f29d0e89153f - languageName: node - linkType: hard - "iconv-lite@npm:^0.4.17, iconv-lite@npm:~0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -11430,15 +11403,6 @@ __metadata: languageName: node linkType: hard -"opencollective-postinstall@npm:^2.0.2": - version: 2.0.3 - resolution: "opencollective-postinstall@npm:2.0.3" - bin: - opencollective-postinstall: index.js - checksum: 10/69d63778087cd10c9d707d9ed360556780cfdd0cd6241ded0e26632f467f1d5a064f4a9aec19a30c187770c17adba034d988f7684b226f3a73e79f44e73fab0e - languageName: node - linkType: hard - "opener@npm:^1.5.2": version: 1.5.2 resolution: "opener@npm:1.5.2" @@ -12278,16 +12242,6 @@ __metadata: languageName: node linkType: hard -"react-native-fast-image@npm:^8.6.3": - version: 8.6.3 - resolution: "react-native-fast-image@npm:8.6.3" - peerDependencies: - react: ^17 || ^18 - react-native: ">=0.60.0" - checksum: 10/ed340c2b6c2e76658fa0a899a45132871017018bec0a03423b7456610810e79b2844dfa16063c05d98b89a7613eeb0de2fdf3ad978cdfa4d488a4e01228a7349 - languageName: node - linkType: hard - "react-native-gesture-handler@npm:^2.29.1": version: 2.30.0 resolution: "react-native-gesture-handler@npm:2.30.0" @@ -12332,6 +12286,7 @@ __metadata: "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" "@babel/types": "npm:7.25.0" + "@d11/react-native-fast-image": "npm:^8.13.0" "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" "@react-native-community/cli-platform-ios": "npm:20.0.0" @@ -12361,7 +12316,6 @@ __metadata: eslint-plugin-prettier: "npm:3.1.4" github-release-notes: "https://github.com/yogevbd/github-release-notes/tarball/e601b3dba72dcd6cba323c1286ea6dd0c0110b58" hoist-non-react-statics: "npm:^3.3.2" - husky: "npm:4.2.5" identity-obj-proxy: "npm:3.0.0" jest: "npm:^29.6.3" lint-staged: "npm:10.2.11" @@ -12373,7 +12327,6 @@ __metadata: react: "npm:19.2.3" react-lifecycles-compat: "npm:^3.0.4" react-native: "npm:0.84.0" - react-native-fast-image: "npm:^8.6.3" react-native-gesture-handler: "npm:^2.29.1" react-native-monorepo-config: "npm:^0.3.0" react-native-reanimated: "npm:4.2.2" @@ -12405,6 +12358,7 @@ __metadata: "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" "@babel/types": "npm:7.25.0" + "@d11/react-native-fast-image": "npm:^8.13.0" "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" "@react-native-community/cli-platform-ios": "npm:20.0.0" @@ -12435,7 +12389,6 @@ __metadata: eslint-plugin-prettier: "npm:3.1.4" github-release-notes: "https://github.com/yogevbd/github-release-notes/tarball/e601b3dba72dcd6cba323c1286ea6dd0c0110b58" hoist-non-react-statics: "npm:3.3.2" - husky: "npm:4.2.5" identity-obj-proxy: "npm:3.0.0" jest: "npm:^29.6.3" lint-staged: "npm:10.2.11" @@ -12448,7 +12401,6 @@ __metadata: react-lifecycles-compat: "npm:^3.0.4" react-native: "npm:0.84.0" react-native-builder-bob: "npm:^0.40.13" - react-native-fast-image: "npm:^8.6.3" react-native-gesture-handler: "npm:^2.29.1" react-native-reanimated: "npm:4.2.2" react-native-worklets: "npm:0.7.4" @@ -13307,13 +13259,6 @@ __metadata: languageName: node linkType: hard -"semver-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "semver-regex@npm:2.0.0" - checksum: 10/da7d6f5ceae80e2097933b1e4ea2815c2cfa2c50c6501db1a3d435a6063c0f23d66bc25fe8d06755048f3d7588d85339db6471446b2c91fea907e5c2ada5b0df - languageName: node - linkType: hard - "semver@npm:2 || 3 || 4 || 5, semver@npm:2.x || 3.x || 4 || 5, semver@npm:5.x.x, semver@npm:^2.3.0 || 3.x || 4 || 5, semver@npm:^5.0.3, semver@npm:^5.1.0, semver@npm:^5.4.1, semver@npm:^5.5.1, semver@npm:^5.6.0, semver@npm:^5.7.1": version: 5.7.2 resolution: "semver@npm:5.7.2" @@ -15100,13 +15045,6 @@ __metadata: languageName: node linkType: hard -"which-pm-runs@npm:^1.0.0": - version: 1.1.0 - resolution: "which-pm-runs@npm:1.1.0" - checksum: 10/39a56ee50886fb33ec710e3b36dc9fe3d0096cac44850d9ca0c6186c4cb824d6c8125f013e0562e7c94744e1e8e4a6ab695592cdb12555777c7a4368143d822c - languageName: node - linkType: hard - "which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": version: 1.1.20 resolution: "which-typed-array@npm:1.1.20" From f7828cd21f615cff1076890ad118266ad1347a2d Mon Sep 17 00:00:00 2001 From: Mark de Vocht Date: Thu, 9 Apr 2026 11:53:42 +0300 Subject: [PATCH 4/5] lodash: 4.18.1 --- .yarnrc.yml | 1 - package.json | 2 +- yarn.lock | 10 +++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.yarnrc.yml b/.yarnrc.yml index 01c9770bb3..3f236e8d37 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -5,7 +5,6 @@ enableGlobalCache: false nmHoistingLimits: workspaces npmMinimalAgeGate: 14d - nodeLinker: node-modules npmRegistryServer: "https://npm.dev.wixpress.com" diff --git a/package.json b/package.json index f16bdb8f70..1abbdf487d 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ }, "dependencies": { "hoist-non-react-statics": "3.3.2", - "lodash": "4.17.23", + "lodash": "4.18.1", "prop-types": "15.x.x", "react-lifecycles-compat": "^3.0.4", "tslib": "1.9.3" diff --git a/yarn.lock b/yarn.lock index 060409d534..8ac414524b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9836,10 +9836,10 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.23, lodash@npm:4.x.x, lodash@npm:^4.17.11, lodash@npm:^4.17.21, lodash@npm:^4.17.5, lodash@npm:^4.3.0": - version: 4.17.23 - resolution: "lodash@npm:4.17.23" - checksum: 10/82504c88250f58da7a5a4289f57a4f759c44946c005dd232821c7688b5fcfbf4a6268f6a6cdde4b792c91edd2f3b5398c1d2a0998274432cff76def48735e233 +"lodash@npm:4.18.1": + version: 4.18.1 + resolution: "lodash@npm:4.18.1::__archiveUrl=https%3A%2F%2Fnpm.dev.wixpress.com%2Fapi%2Fnpm%2Fnpm-repos%2Flodash%2F-%2Flodash-4.18.1.tgz" + checksum: 10/306fea53dfd39dad1f03d45ba654a2405aebd35797b673077f401edb7df2543623dc44b9effbb98f69b32152295fff725a4cec99c684098947430600c6af0c3f languageName: node linkType: hard @@ -12392,7 +12392,7 @@ __metadata: identity-obj-proxy: "npm:3.0.0" jest: "npm:^29.6.3" lint-staged: "npm:10.2.11" - lodash: "npm:4.17.23" + lodash: "npm:4.18.1" pixelmatch: "npm:^5.2.1" pngjs: "npm:^6.0.0" prettier: "npm:2.8.8" From 3ce43ec57b9d7b369fdcf6930eda3db6093338a8 Mon Sep 17 00:00:00 2001 From: Mark de Vocht Date: Thu, 9 Apr 2026 12:02:42 +0300 Subject: [PATCH 5/5] pure OSS --- .yarnrc.yml | 2 +- yarn.lock | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.yarnrc.yml b/.yarnrc.yml index 3f236e8d37..237c13dcfc 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -7,6 +7,6 @@ nmHoistingLimits: workspaces npmMinimalAgeGate: 14d nodeLinker: node-modules -npmRegistryServer: "https://npm.dev.wixpress.com" +npmRegistryServer: "https://registry.npmjs.org" yarnPath: .yarn/releases/yarn-4.12.0.cjs diff --git a/yarn.lock b/yarn.lock index 8ac414524b..ce756b62fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1665,7 +1665,7 @@ __metadata: "@d11/react-native-fast-image@npm:^8.13.0": version: 8.13.0 - resolution: "@d11/react-native-fast-image@npm:8.13.0::__archiveUrl=https%3A%2F%2Fnpm.dev.wixpress.com%2Fapi%2Fnpm%2Fnpm-repos%2F%40d11%2Freact-native-fast-image%2F-%2Freact-native-fast-image-8.13.0.tgz" + resolution: "@d11/react-native-fast-image@npm:8.13.0" peerDependencies: react: "*" react-native: "*" @@ -9836,9 +9836,16 @@ __metadata: languageName: node linkType: hard +"lodash@npm:4.17.23, lodash@npm:4.x.x, lodash@npm:^4.17.11, lodash@npm:^4.17.21, lodash@npm:^4.17.5, lodash@npm:^4.3.0": + version: 4.17.23 + resolution: "lodash@npm:4.17.23" + checksum: 10/82504c88250f58da7a5a4289f57a4f759c44946c005dd232821c7688b5fcfbf4a6268f6a6cdde4b792c91edd2f3b5398c1d2a0998274432cff76def48735e233 + languageName: node + linkType: hard + "lodash@npm:4.18.1": version: 4.18.1 - resolution: "lodash@npm:4.18.1::__archiveUrl=https%3A%2F%2Fnpm.dev.wixpress.com%2Fapi%2Fnpm%2Fnpm-repos%2Flodash%2F-%2Flodash-4.18.1.tgz" + resolution: "lodash@npm:4.18.1" checksum: 10/306fea53dfd39dad1f03d45ba654a2405aebd35797b673077f401edb7df2543623dc44b9effbb98f69b32152295fff725a4cec99c684098947430600c6af0c3f languageName: node linkType: hard