diff --git a/suite-common/icons/assets/icons/wifiSlash.svg b/suite-common/icons/assets/icons/wifiSlash.svg
new file mode 100644
index 00000000000..a63b66729f6
--- /dev/null
+++ b/suite-common/icons/assets/icons/wifiSlash.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/suite-common/icons/src/icons.ts b/suite-common/icons/src/icons.ts
index d240103631e..2e46325ac5d 100644
--- a/suite-common/icons/src/icons.ts
+++ b/suite-common/icons/src/icons.ts
@@ -117,6 +117,7 @@ export const icons = {
warningOctagon: require('../assets/icons/warningOctagon.svg'),
warningTriangle: require('../assets/icons/warningTriangle.svg'),
warningTriangleLight: require('../assets/icons/warningTriangleLight.svg'),
+ wifiSlash: require('../assets/icons/wifiSlash.svg'),
} as const;
export type IconName = keyof typeof icons;
diff --git a/suite-native/app/e2e/utils.ts b/suite-native/app/e2e/utils.ts
index b13578c8da6..952572c31ee 100644
--- a/suite-native/app/e2e/utils.ts
+++ b/suite-native/app/e2e/utils.ts
@@ -4,7 +4,7 @@ import { expect as detoxExpect } from 'detox';
const APP_LAUNCH_ARGS = {
// Do not synchronize communication with the trezor bridge and metro server running on localhost. Since the trezor
// bridge is exchanging messages with the app all the time, the test runner would wait forever otherwise.
- detoxURLBlacklistRegex: '\\("^.*127.0.0.1.*",".*localhost.*"\\)',
+ detoxURLBlacklistRegex: '\\("^.*127.0.0.1.*",".*localhost.*","^*clients3\\.google\\.com*"\\)',
};
const platform = device.getPlatform();
diff --git a/suite-native/app/package.json b/suite-native/app/package.json
index 7aec7eb31a9..64586766b86 100644
--- a/suite-native/app/package.json
+++ b/suite-native/app/package.json
@@ -20,6 +20,7 @@
"reverse-ports": "adb reverse tcp:8081 tcp:8081 && adb reverse tcp:21325 tcp:21325 && adb reverse tcp:19121 tcp:19121"
},
"dependencies": {
+ "@react-native-community/netinfo": "11.3.2",
"@react-native/metro-config": "0.74.83",
"@react-navigation/bottom-tabs": "6.5.20",
"@react-navigation/native": "6.1.17",
@@ -44,6 +45,7 @@
"@suite-native/biometrics": "workspace:*",
"@suite-native/coin-enabling": "workspace:*",
"@suite-native/config": "workspace:*",
+ "@suite-native/connection-status": "workspace:*",
"@suite-native/device": "workspace:*",
"@suite-native/device-authorization": "workspace:*",
"@suite-native/feature-flags": "workspace:*",
diff --git a/suite-native/app/src/App.tsx b/suite-native/app/src/App.tsx
index 0c812503b65..245b8f31342 100644
--- a/suite-native/app/src/App.tsx
+++ b/suite-native/app/src/App.tsx
@@ -10,6 +10,7 @@ import { selectIsAppReady, selectIsConnectInitialized, StoreProvider } from '@su
import { FormatterProvider } from '@suite-common/formatters';
import { NavigationContainerWithAnalytics } from '@suite-native/navigation';
import { FeatureMessageScreen, MessageSystemBannerRenderer } from '@suite-native/message-system';
+import { OfflineBanner } from '@suite-native/connection-status';
import { IntlProvider } from '@suite-native/intl';
import { isDebugEnv } from '@suite-native/config';
@@ -57,6 +58,7 @@ const AppComponent = () => {
return (
+
diff --git a/suite-native/app/tsconfig.json b/suite-native/app/tsconfig.json
index 88a7dd208d7..68e741f9ab9 100644
--- a/suite-native/app/tsconfig.json
+++ b/suite-native/app/tsconfig.json
@@ -34,6 +34,7 @@
{ "path": "../biometrics" },
{ "path": "../coin-enabling" },
{ "path": "../config" },
+ { "path": "../connection-status" },
{ "path": "../device" },
{ "path": "../device-authorization" },
{ "path": "../feature-flags" },
diff --git a/suite-native/connection-status/package.json b/suite-native/connection-status/package.json
new file mode 100644
index 00000000000..294518135d5
--- /dev/null
+++ b/suite-native/connection-status/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@suite-native/connection-status",
+ "version": "1.0.0",
+ "private": true,
+ "license": "See LICENSE.md in repo root",
+ "sideEffects": false,
+ "main": "src/index",
+ "scripts": {
+ "lint:js": "yarn g:eslint '**/*.{ts,tsx,js}'",
+ "depcheck": "yarn g:depcheck",
+ "type-check": "yarn g:tsc --build"
+ },
+ "dependencies": {
+ "@react-native-community/netinfo": "11.3.2",
+ "@suite-common/icons": "workspace:*",
+ "@suite-native/atoms": "workspace:*",
+ "@suite-native/intl": "workspace:*",
+ "@suite-native/settings": "workspace:*",
+ "@trezor/styles": "workspace:*",
+ "react": "18.2.0",
+ "react-native": "0.74.1",
+ "react-native-safe-area-context": "4.10.3",
+ "react-redux": "8.0.7"
+ }
+}
diff --git a/suite-native/connection-status/src/OfflineBanner.tsx b/suite-native/connection-status/src/OfflineBanner.tsx
new file mode 100644
index 00000000000..1195f7163b9
--- /dev/null
+++ b/suite-native/connection-status/src/OfflineBanner.tsx
@@ -0,0 +1,45 @@
+import { useSafeAreaInsets } from 'react-native-safe-area-context';
+import { View } from 'react-native';
+
+import { Icon } from '@suite-common/icons';
+import { Text, HStack } from '@suite-native/atoms';
+import { Translation } from '@suite-native/intl';
+import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
+
+import { useIsOfflineBannerVisible } from './useIsOfflineBannerVisible';
+
+const containerStyle = prepareNativeStyle(utils => ({
+ backgroundColor: utils.colors.backgroundAlertYellowBold,
+ alignItems: 'center',
+}));
+
+const contentStyle = prepareNativeStyle<{ topSafeAreaInset: number }>(
+ (utils, { topSafeAreaInset }) => ({
+ marginTop: topSafeAreaInset,
+ paddingTop: utils.spacings.small,
+ paddingBottom: 12,
+ alignItems: 'center',
+ }),
+);
+
+export const OfflineBanner = () => {
+ const { applyStyle } = useNativeStyles();
+ const { top: topSafeAreaInset } = useSafeAreaInsets();
+
+ const isOfflineBannerVisible = useIsOfflineBannerVisible();
+
+ if (!isOfflineBannerVisible) {
+ return null;
+ }
+
+ return (
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/suite-native/connection-status/src/index.ts b/suite-native/connection-status/src/index.ts
new file mode 100644
index 00000000000..50017fde040
--- /dev/null
+++ b/suite-native/connection-status/src/index.ts
@@ -0,0 +1,3 @@
+export * from './OfflineBanner';
+export * from './useOfflineBannerAwareSafeAreaInsets';
+export * from './useIsOfflineBannerVisible';
diff --git a/suite-native/connection-status/src/useIsOfflineBannerVisible.tsx b/suite-native/connection-status/src/useIsOfflineBannerVisible.tsx
new file mode 100644
index 00000000000..6ffa3b0c296
--- /dev/null
+++ b/suite-native/connection-status/src/useIsOfflineBannerVisible.tsx
@@ -0,0 +1,12 @@
+import { useSelector } from 'react-redux';
+
+import { useNetInfo } from '@react-native-community/netinfo';
+
+import { selectIsOnboardingFinished } from '@suite-native/settings';
+
+export const useIsOfflineBannerVisible = () => {
+ const isOnboardingFinished = useSelector(selectIsOnboardingFinished);
+ const { isConnected } = useNetInfo();
+
+ return !isConnected && isOnboardingFinished;
+};
diff --git a/suite-native/connection-status/src/useOfflineBannerAwareSafeAreaInsets.tsx b/suite-native/connection-status/src/useOfflineBannerAwareSafeAreaInsets.tsx
new file mode 100644
index 00000000000..7df454ceddd
--- /dev/null
+++ b/suite-native/connection-status/src/useOfflineBannerAwareSafeAreaInsets.tsx
@@ -0,0 +1,12 @@
+import { EdgeInsets, useSafeAreaInsets } from 'react-native-safe-area-context';
+
+import { useIsOfflineBannerVisible } from './useIsOfflineBannerVisible';
+
+// If offline banner is visible, return 0 for top inset, otherwise return the top inset from safe area insets
+// this is because the offline banner is displayed on top of the screen and we don't want to add any top padding
+export const useOfflineBannerAwareSafeAreaInsets = () => {
+ const { top, ...rest } = useSafeAreaInsets();
+ const isOfflineBannerVisible = useIsOfflineBannerVisible();
+
+ return { top: isOfflineBannerVisible ? 0 : top, ...rest } as EdgeInsets;
+};
diff --git a/suite-native/connection-status/tsconfig.json b/suite-native/connection-status/tsconfig.json
new file mode 100644
index 00000000000..a9c499fee6b
--- /dev/null
+++ b/suite-native/connection-status/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": { "outDir": "libDev" },
+ "references": [
+ { "path": "../../suite-common/icons" },
+ { "path": "../atoms" },
+ { "path": "../intl" },
+ { "path": "../settings" },
+ { "path": "../../packages/styles" }
+ ],
+ "include": [".", "**/*.json"]
+}
diff --git a/suite-native/intl/src/en.ts b/suite-native/intl/src/en.ts
index e898b9e6c1a..91b986a253a 100644
--- a/suite-native/intl/src/en.ts
+++ b/suite-native/intl/src/en.ts
@@ -19,6 +19,7 @@ export const en = {
unknownError: 'Something went wrong',
default: 'Default',
orSeparator: 'OR',
+ offline: "You're offline.",
},
messageSystem: {
killswitch: {
diff --git a/suite-native/message-system/package.json b/suite-native/message-system/package.json
index be5f630961f..6a7e39e3519 100644
--- a/suite-native/message-system/package.json
+++ b/suite-native/message-system/package.json
@@ -19,6 +19,7 @@
"@suite-common/suite-types": "workspace:*",
"@suite-common/wallet-core": "workspace:*",
"@suite-native/atoms": "workspace:*",
+ "@suite-native/connection-status": "workspace:*",
"@suite-native/intl": "workspace:*",
"@suite-native/link": "workspace:*",
"@trezor/styles": "workspace:*",
@@ -26,7 +27,6 @@
"react": "18.2.0",
"react-native": "0.74.1",
"react-native-reanimated": "3.11.0",
- "react-native-safe-area-context": "4.10.3",
"react-redux": "8.0.7"
}
}
diff --git a/suite-native/message-system/src/components/MessageSystemBannerRenderer.tsx b/suite-native/message-system/src/components/MessageSystemBannerRenderer.tsx
index df264d0bb9d..a6142dca869 100644
--- a/suite-native/message-system/src/components/MessageSystemBannerRenderer.tsx
+++ b/suite-native/message-system/src/components/MessageSystemBannerRenderer.tsx
@@ -1,4 +1,3 @@
-import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { useSelector } from 'react-redux';
import { A } from '@mobily/ts-belt';
@@ -6,6 +5,7 @@ import { A } from '@mobily/ts-belt';
import { VStack } from '@suite-native/atoms';
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
import { selectActiveBannerMessages } from '@suite-common/message-system';
+import { useOfflineBannerAwareSafeAreaInsets } from '@suite-native/connection-status';
import { MessageBanner } from './MessageBanner';
@@ -17,7 +17,7 @@ const messageBannerContainerStyle = prepareNativeStyle<{ topSafeAreaInset: numbe
export const MessageSystemBannerRenderer = () => {
const { applyStyle } = useNativeStyles();
- const { top: topSafeAreaInset } = useSafeAreaInsets();
+ const { top: topSafeAreaInset } = useOfflineBannerAwareSafeAreaInsets();
const activeBannerMessages = useSelector(selectActiveBannerMessages);
const topInset = A.isNotEmpty(activeBannerMessages) ? topSafeAreaInset : 0;
diff --git a/suite-native/message-system/tsconfig.json b/suite-native/message-system/tsconfig.json
index 7502a2ce774..c19532950a8 100644
--- a/suite-native/message-system/tsconfig.json
+++ b/suite-native/message-system/tsconfig.json
@@ -16,6 +16,7 @@
"path": "../../suite-common/wallet-core"
},
{ "path": "../atoms" },
+ { "path": "../connection-status" },
{ "path": "../intl" },
{ "path": "../link" },
{ "path": "../../packages/styles" },
diff --git a/suite-native/module-add-accounts/package.json b/suite-native/module-add-accounts/package.json
index 29d70da728a..41fda06519f 100644
--- a/suite-native/module-add-accounts/package.json
+++ b/suite-native/module-add-accounts/package.json
@@ -22,6 +22,7 @@
"@suite-native/accounts": "workspace:*",
"@suite-native/alerts": "workspace:*",
"@suite-native/atoms": "workspace:*",
+ "@suite-native/connection-status": "workspace:*",
"@suite-native/discovery": "workspace:*",
"@suite-native/intl": "workspace:*",
"@suite-native/link": "workspace:*",
diff --git a/suite-native/module-add-accounts/src/screens/SelectAccountTypeScreen.tsx b/suite-native/module-add-accounts/src/screens/SelectAccountTypeScreen.tsx
index 23e4d92683b..9de8641adab 100644
--- a/suite-native/module-add-accounts/src/screens/SelectAccountTypeScreen.tsx
+++ b/suite-native/module-add-accounts/src/screens/SelectAccountTypeScreen.tsx
@@ -1,5 +1,4 @@
import { useState } from 'react';
-import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { View } from 'react-native';
import { LinearGradient } from 'expo-linear-gradient';
@@ -24,6 +23,7 @@ import {
} from '@suite-native/atoms';
import { useTranslate, Translation, TxKeyPath } from '@suite-native/intl';
import { useOpenLink } from '@suite-native/link';
+import { useOfflineBannerAwareSafeAreaInsets } from '@suite-native/connection-status';
import { useAddCoinAccount, accountTypeTranslationKeys } from '../hooks/useAddCoinAccount';
@@ -89,7 +89,7 @@ export const SelectAccountTypeScreen = ({
const { accountType: defaultType, networkSymbol, flowType } = route.params;
const { translate } = useTranslate();
const openLink = useOpenLink();
- const insets = useSafeAreaInsets();
+ const insets = useOfflineBannerAwareSafeAreaInsets();
const { applyStyle, utils } = useNativeStyles();
const { getAvailableAccountTypesForNetworkSymbol, addCoinAccount } = useAddCoinAccount();
diff --git a/suite-native/module-add-accounts/tsconfig.json b/suite-native/module-add-accounts/tsconfig.json
index 35e24b0ebbe..1c416f40bb4 100644
--- a/suite-native/module-add-accounts/tsconfig.json
+++ b/suite-native/module-add-accounts/tsconfig.json
@@ -17,6 +17,7 @@
{ "path": "../accounts" },
{ "path": "../alerts" },
{ "path": "../atoms" },
+ { "path": "../connection-status" },
{ "path": "../discovery" },
{ "path": "../intl" },
{ "path": "../link" },
diff --git a/suite-native/navigation/package.json b/suite-native/navigation/package.json
index d3ee5748669..ed50ca94e44 100644
--- a/suite-native/navigation/package.json
+++ b/suite-native/navigation/package.json
@@ -22,6 +22,7 @@
"@suite-common/wallet-types": "workspace:*",
"@suite-native/analytics": "workspace:*",
"@suite-native/atoms": "workspace:*",
+ "@suite-native/connection-status": "workspace:*",
"@trezor/connect": "workspace:*",
"@trezor/styles": "workspace:*",
"@trezor/theme": "workspace:*",
diff --git a/suite-native/navigation/src/components/Screen.tsx b/suite-native/navigation/src/components/Screen.tsx
index e1f957ec4b2..cd367000893 100644
--- a/suite-native/navigation/src/components/Screen.tsx
+++ b/suite-native/navigation/src/components/Screen.tsx
@@ -1,6 +1,6 @@
import { useEffect, useContext, ReactNode } from 'react';
import { Platform, ScrollViewProps, StatusBar, View } from 'react-native';
-import { useSafeAreaInsets, EdgeInsets } from 'react-native-safe-area-context';
+import { EdgeInsets } from 'react-native-safe-area-context';
import { useSelector } from 'react-redux';
import * as SystemUI from 'expo-system-ui';
@@ -8,6 +8,7 @@ import * as NavigationBar from 'expo-navigation-bar';
import { BottomTabBarHeightContext } from '@react-navigation/bottom-tabs';
import { useRoute } from '@react-navigation/native';
+import { useOfflineBannerAwareSafeAreaInsets } from '@suite-native/connection-status';
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
import { Color, nativeSpacings } from '@trezor/theme';
import { selectIsAnyBannerMessageActive } from '@suite-common/message-system';
@@ -114,7 +115,7 @@ export const Screen = ({
} = useNativeStyles();
const hasPaddingBottom = !useContext(BottomTabBarHeightContext) && hasBottomInset;
- const insets = useSafeAreaInsets();
+ const insets = useOfflineBannerAwareSafeAreaInsets();
const backgroundCSSColor = colors[backgroundColor];
const barStyle = isDarkColor(backgroundCSSColor) ? 'light-content' : 'dark-content';
diff --git a/suite-native/navigation/tsconfig.json b/suite-native/navigation/tsconfig.json
index c7e21690cda..8e1861f35f7 100644
--- a/suite-native/navigation/tsconfig.json
+++ b/suite-native/navigation/tsconfig.json
@@ -14,6 +14,7 @@
},
{ "path": "../analytics" },
{ "path": "../atoms" },
+ { "path": "../connection-status" },
{ "path": "../../packages/connect" },
{ "path": "../../packages/styles" },
{ "path": "../../packages/theme" }
diff --git a/suite-native/notifications/package.json b/suite-native/notifications/package.json
index 174b8f5d394..37624de9360 100644
--- a/suite-native/notifications/package.json
+++ b/suite-native/notifications/package.json
@@ -18,6 +18,7 @@
"@suite-common/wallet-core": "workspace:*",
"@suite-common/wallet-types": "workspace:*",
"@suite-native/atoms": "workspace:*",
+ "@suite-native/connection-status": "workspace:*",
"@suite-native/formatters": "workspace:*",
"@suite-native/navigation": "workspace:*",
"@suite-native/theme": "workspace:*",
@@ -27,7 +28,6 @@
"react-native": "0.74.1",
"react-native-gesture-handler": "2.16.2",
"react-native-reanimated": "3.11.0",
- "react-native-safe-area-context": "4.10.3",
"react-redux": "8.0.7"
}
}
diff --git a/suite-native/notifications/src/components/NotificationRenderer.tsx b/suite-native/notifications/src/components/NotificationRenderer.tsx
index 16de0e1615e..81fbebeee0a 100644
--- a/suite-native/notifications/src/components/NotificationRenderer.tsx
+++ b/suite-native/notifications/src/components/NotificationRenderer.tsx
@@ -1,9 +1,9 @@
-import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { useSelector } from 'react-redux';
import { Box, VStack } from '@suite-native/atoms';
import { selectOpenedTransactionNotifications } from '@suite-common/toast-notifications';
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
+import { useOfflineBannerAwareSafeAreaInsets } from '@suite-native/connection-status';
import { TransactionNotification } from './TransactionNotification';
@@ -19,7 +19,7 @@ const notificationContainerStyle = prepareNativeStyle<{ topSafeAreaInset: number
export const NotificationRenderer = () => {
const { applyStyle } = useNativeStyles();
- const { top: topSafeAreaInset } = useSafeAreaInsets();
+ const { top: topSafeAreaInset } = useOfflineBannerAwareSafeAreaInsets();
const transactionNotifications = useSelector(selectOpenedTransactionNotifications);
return (
diff --git a/suite-native/notifications/tsconfig.json b/suite-native/notifications/tsconfig.json
index 83013223027..c94347423d1 100644
--- a/suite-native/notifications/tsconfig.json
+++ b/suite-native/notifications/tsconfig.json
@@ -16,6 +16,7 @@
"path": "../../suite-common/wallet-types"
},
{ "path": "../atoms" },
+ { "path": "../connection-status" },
{ "path": "../formatters" },
{ "path": "../navigation" },
{ "path": "../theme" },
diff --git a/suite-native/toasts/package.json b/suite-native/toasts/package.json
index 0e2d7ad97d8..e14e2b356e2 100644
--- a/suite-native/toasts/package.json
+++ b/suite-native/toasts/package.json
@@ -14,11 +14,11 @@
"@mobily/ts-belt": "^3.13.1",
"@suite-common/icons": "workspace:*",
"@suite-native/atoms": "workspace:*",
+ "@suite-native/connection-status": "workspace:*",
"@trezor/styles": "workspace:*",
"@trezor/theme": "workspace:*",
"jotai": "1.9.1",
"react": "18.2.0",
- "react-native-reanimated": "3.11.0",
- "react-native-safe-area-context": "4.10.3"
+ "react-native-reanimated": "3.11.0"
}
}
diff --git a/suite-native/toasts/src/components/ToastRenderer.tsx b/suite-native/toasts/src/components/ToastRenderer.tsx
index 8d364f9528f..e523d7afac5 100644
--- a/suite-native/toasts/src/components/ToastRenderer.tsx
+++ b/suite-native/toasts/src/components/ToastRenderer.tsx
@@ -1,7 +1,6 @@
-import { useSafeAreaInsets } from 'react-native-safe-area-context';
-
import { useAtomValue } from 'jotai';
+import { useOfflineBannerAwareSafeAreaInsets } from '@suite-native/connection-status';
import { Box, VStack } from '@suite-native/atoms';
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
@@ -20,7 +19,7 @@ const toastsContainerStyle = prepareNativeStyle<{ topSafeAreaInset: number }>(
export const ToastRenderer = () => {
const { applyStyle } = useNativeStyles();
- const { top: topSafeAreaInset } = useSafeAreaInsets();
+ const { top: topSafeAreaInset } = useOfflineBannerAwareSafeAreaInsets();
const toasts = useAtomValue(toastsAtom);
return (
diff --git a/suite-native/toasts/tsconfig.json b/suite-native/toasts/tsconfig.json
index 274f237be2e..4b6ba356e1d 100644
--- a/suite-native/toasts/tsconfig.json
+++ b/suite-native/toasts/tsconfig.json
@@ -4,6 +4,7 @@
"references": [
{ "path": "../../suite-common/icons" },
{ "path": "../atoms" },
+ { "path": "../connection-status" },
{ "path": "../../packages/styles" },
{ "path": "../../packages/theme" }
]
diff --git a/tsconfig.json b/tsconfig.json
index fe2ca52b767..b143697c148 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -50,6 +50,9 @@
{ "path": "suite-native/blockchain" },
{ "path": "suite-native/coin-enabling" },
{ "path": "suite-native/config" },
+ {
+ "path": "suite-native/connection-status"
+ },
{ "path": "suite-native/device" },
{
"path": "suite-native/device-authorization"
diff --git a/yarn.lock b/yarn.lock
index 0a193de2f14..83c71b68615 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6678,6 +6678,15 @@ __metadata:
languageName: node
linkType: hard
+"@react-native-community/netinfo@npm:11.3.2":
+ version: 11.3.2
+ resolution: "@react-native-community/netinfo@npm:11.3.2"
+ peerDependencies:
+ react-native: ">=0.59"
+ checksum: 10/5c4f754cf6ab4c065c98c9cf11c79aec04987d542b1d3ee3e6f19b96c1cb051717c44f79e405b92f0cfccbfc4d796a087fa36de14b46c6eca37526dce4dc4c4f
+ languageName: node
+ linkType: hard
+
"@react-native/assets-registry@npm:0.74.83, @react-native/assets-registry@npm:~0.74.83":
version: 0.74.83
resolution: "@react-native/assets-registry@npm:0.74.83"
@@ -9112,6 +9121,7 @@ __metadata:
"@babel/core": "npm:^7.20.0"
"@babel/plugin-transform-export-namespace-from": "npm:^7.23.4"
"@config-plugins/detox": "npm:^7.0.0"
+ "@react-native-community/netinfo": "npm:11.3.2"
"@react-native/babel-preset": "npm:^0.74.83"
"@react-native/metro-config": "npm:0.74.83"
"@react-navigation/bottom-tabs": "npm:6.5.20"
@@ -9137,6 +9147,7 @@ __metadata:
"@suite-native/biometrics": "workspace:*"
"@suite-native/coin-enabling": "workspace:*"
"@suite-native/config": "workspace:*"
+ "@suite-native/connection-status": "workspace:*"
"@suite-native/device": "workspace:*"
"@suite-native/device-authorization": "workspace:*"
"@suite-native/feature-flags": "workspace:*"
@@ -9318,6 +9329,23 @@ __metadata:
languageName: unknown
linkType: soft
+"@suite-native/connection-status@workspace:*, @suite-native/connection-status@workspace:suite-native/connection-status":
+ version: 0.0.0-use.local
+ resolution: "@suite-native/connection-status@workspace:suite-native/connection-status"
+ dependencies:
+ "@react-native-community/netinfo": "npm:11.3.2"
+ "@suite-common/icons": "workspace:*"
+ "@suite-native/atoms": "workspace:*"
+ "@suite-native/intl": "workspace:*"
+ "@suite-native/settings": "workspace:*"
+ "@trezor/styles": "workspace:*"
+ react: "npm:18.2.0"
+ react-native: "npm:0.74.1"
+ react-native-safe-area-context: "npm:4.10.3"
+ react-redux: "npm:8.0.7"
+ languageName: unknown
+ linkType: soft
+
"@suite-native/device-authorization@workspace:*, @suite-native/device-authorization@workspace:suite-native/device-authorization":
version: 0.0.0-use.local
resolution: "@suite-native/device-authorization@workspace:suite-native/device-authorization"
@@ -9583,6 +9611,7 @@ __metadata:
"@suite-common/suite-types": "workspace:*"
"@suite-common/wallet-core": "workspace:*"
"@suite-native/atoms": "workspace:*"
+ "@suite-native/connection-status": "workspace:*"
"@suite-native/intl": "workspace:*"
"@suite-native/link": "workspace:*"
"@trezor/styles": "workspace:*"
@@ -9590,7 +9619,6 @@ __metadata:
react: "npm:18.2.0"
react-native: "npm:0.74.1"
react-native-reanimated: "npm:3.11.0"
- react-native-safe-area-context: "npm:4.10.3"
react-redux: "npm:8.0.7"
languageName: unknown
linkType: soft
@@ -9693,6 +9721,7 @@ __metadata:
"@suite-native/accounts": "workspace:*"
"@suite-native/alerts": "workspace:*"
"@suite-native/atoms": "workspace:*"
+ "@suite-native/connection-status": "workspace:*"
"@suite-native/discovery": "workspace:*"
"@suite-native/intl": "workspace:*"
"@suite-native/link": "workspace:*"
@@ -9929,6 +9958,7 @@ __metadata:
"@suite-common/wallet-types": "workspace:*"
"@suite-native/analytics": "workspace:*"
"@suite-native/atoms": "workspace:*"
+ "@suite-native/connection-status": "workspace:*"
"@trezor/connect": "workspace:*"
"@trezor/styles": "workspace:*"
"@trezor/theme": "workspace:*"
@@ -9953,6 +9983,7 @@ __metadata:
"@suite-common/wallet-core": "workspace:*"
"@suite-common/wallet-types": "workspace:*"
"@suite-native/atoms": "workspace:*"
+ "@suite-native/connection-status": "workspace:*"
"@suite-native/formatters": "workspace:*"
"@suite-native/navigation": "workspace:*"
"@suite-native/theme": "workspace:*"
@@ -9962,7 +9993,6 @@ __metadata:
react-native: "npm:0.74.1"
react-native-gesture-handler: "npm:2.16.2"
react-native-reanimated: "npm:3.11.0"
- react-native-safe-area-context: "npm:4.10.3"
react-redux: "npm:8.0.7"
languageName: unknown
linkType: soft
@@ -10140,12 +10170,12 @@ __metadata:
"@mobily/ts-belt": "npm:^3.13.1"
"@suite-common/icons": "workspace:*"
"@suite-native/atoms": "workspace:*"
+ "@suite-native/connection-status": "workspace:*"
"@trezor/styles": "workspace:*"
"@trezor/theme": "workspace:*"
jotai: "npm:1.9.1"
react: "npm:18.2.0"
react-native-reanimated: "npm:3.11.0"
- react-native-safe-area-context: "npm:4.10.3"
languageName: unknown
linkType: soft