diff --git a/scripts/list-outdated-dependencies/mobile-dependencies.txt b/scripts/list-outdated-dependencies/mobile-dependencies.txt
index 9790db953fa9..db2f584debab 100644
--- a/scripts/list-outdated-dependencies/mobile-dependencies.txt
+++ b/scripts/list-outdated-dependencies/mobile-dependencies.txt
@@ -53,7 +53,7 @@ expo-updates
jotai
lottie-react-native
react-native-gesture-handler
-react-native-keyboard-aware-scroll-view
+react-native-keyboard-controller
react-native-mmkv
react-native-quick-crypto
react-native-restart
diff --git a/suite-native/app/package.json b/suite-native/app/package.json
index 8587b3f44f73..7af50c3a4289 100644
--- a/suite-native/app/package.json
+++ b/suite-native/app/package.json
@@ -112,7 +112,7 @@
"react-native": "0.76.1",
"react-native-edge-to-edge": "^1.3.1",
"react-native-gesture-handler": "^2.21.0",
- "react-native-keyboard-aware-scroll-view": "0.9.5",
+ "react-native-keyboard-controller": "1.16.2",
"react-native-mmkv": "2.12.2",
"react-native-quick-crypto": "^0.7.6",
"react-native-reanimated": "^3.16.7",
diff --git a/suite-native/app/src/App.tsx b/suite-native/app/src/App.tsx
index 586800cf3608..7cfd9cc7f892 100644
--- a/suite-native/app/src/App.tsx
+++ b/suite-native/app/src/App.tsx
@@ -1,5 +1,6 @@
import { useEffect } from 'react';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
+import { KeyboardProvider } from 'react-native-keyboard-controller';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { useDispatch, useSelector } from 'react-redux';
@@ -80,13 +81,15 @@ const PureApp = () => (
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/suite-native/module-accounts-import/src/components/AccountImportSummaryScreen.tsx b/suite-native/module-accounts-import/src/components/AccountImportSummaryScreen.tsx
index f456125d8ffc..8bc631c24c59 100644
--- a/suite-native/module-accounts-import/src/components/AccountImportSummaryScreen.tsx
+++ b/suite-native/module-accounts-import/src/components/AccountImportSummaryScreen.tsx
@@ -1,8 +1,7 @@
import { ReactNode } from 'react';
-import { KeyboardAvoidingView, Platform } from 'react-native';
import { Box, PictogramTitleHeader, VStack } from '@suite-native/atoms';
-import { Screen, ScreenFooterGradient } from '@suite-native/navigation';
+import { KeyboardAvoidingScreen, ScreenFooterGradient } from '@suite-native/navigation';
import { AccountImportScreenHeader } from './AccountImportScreenHeader';
@@ -21,13 +20,13 @@ export const AccountImportSummaryScreen = ({
footer,
testID,
}: AccountImportSummaryScreenProps) => (
- }
footer={
-
+ <>
{footer}
-
+ >
}
>
@@ -43,5 +42,5 @@ export const AccountImportSummaryScreen = ({
{children}
-
+
);
diff --git a/suite-native/module-accounts-import/src/screens/XpubScanScreen.tsx b/suite-native/module-accounts-import/src/screens/XpubScanScreen.tsx
index aa3115b1f278..c97aad80d945 100644
--- a/suite-native/module-accounts-import/src/screens/XpubScanScreen.tsx
+++ b/suite-native/module-accounts-import/src/screens/XpubScanScreen.tsx
@@ -22,7 +22,7 @@ import { Translation, useTranslate } from '@suite-native/intl';
import {
AccountsImportStackParamList,
AccountsImportStackRoutes,
- Screen,
+ KeyboardAvoidingScreen,
StackProps,
} from '@suite-native/navigation';
import { ScanQRBottomSheet } from '@suite-native/qr-code';
@@ -36,9 +36,6 @@ import { XpubImportSection, networkTypeToTitleMap } from '../components/XpubImpo
const FORM_BUTTON_FADE_IN_DURATION = 200;
-// Extra padding needed to make multiline xpub input form visible even with the sticky footer.
-const EXTRA_KEYBOARD_AVOIDING_VIEW_HEIGHT = 350;
-
const cameraStyle = prepareNativeStyle(_ => ({
alignItems: 'center',
marginTop: 20,
@@ -173,10 +170,9 @@ export const XpubScanScreen = ({
};
return (
- }
footer={}
- extraKeyboardAvoidingViewHeight={EXTRA_KEYBOARD_AVOIDING_VIEW_HEIGHT}
>
@@ -232,6 +228,6 @@ export const XpubScanScreen = ({
onCodeScanned={handleBarCodeScanned}
onClose={handleToggleScanner}
/>
-
+
);
};
diff --git a/suite-native/module-authorize-device/src/components/passphrase/PassphraseContentScreenWrapper.tsx b/suite-native/module-authorize-device/src/components/passphrase/PassphraseContentScreenWrapper.tsx
index 9bf9b233df26..a167e8d1136b 100644
--- a/suite-native/module-authorize-device/src/components/passphrase/PassphraseContentScreenWrapper.tsx
+++ b/suite-native/module-authorize-device/src/components/passphrase/PassphraseContentScreenWrapper.tsx
@@ -1,6 +1,6 @@
import { ReactNode } from 'react';
-import { Text, VStack } from '@suite-native/atoms';
+import { TitleHeader, VStack } from '@suite-native/atoms';
import { Screen } from '@suite-native/navigation';
import { PassphraseScreenHeader } from './PassphraseScreenHeader';
@@ -18,10 +18,7 @@ export const PassphraseContentScreenWrapper = ({
}: PassphraseContentScreenWrapperProps) => (
}>
-
- {title}
- {subtitle && {subtitle}}
-
+
{children}
diff --git a/suite-native/module-authorize-device/src/screens/passphrase/PassphraseEnterOnTrezorScreen.tsx b/suite-native/module-authorize-device/src/screens/passphrase/PassphraseEnterOnTrezorScreen.tsx
index eb08135f7378..13082b716f49 100644
--- a/suite-native/module-authorize-device/src/screens/passphrase/PassphraseEnterOnTrezorScreen.tsx
+++ b/suite-native/module-authorize-device/src/screens/passphrase/PassphraseEnterOnTrezorScreen.tsx
@@ -78,6 +78,7 @@ export const PassphraseEnterOnTrezorScreen = () => {
};
return (
+ // TODO: Use just Screen
}
subtitle={
diff --git a/suite-native/module-authorize-device/src/screens/passphrase/PassphraseFormScreen.tsx b/suite-native/module-authorize-device/src/screens/passphrase/PassphraseFormScreen.tsx
index 0f688ebe13ca..a86e4743a78b 100644
--- a/suite-native/module-authorize-device/src/screens/passphrase/PassphraseFormScreen.tsx
+++ b/suite-native/module-authorize-device/src/screens/passphrase/PassphraseFormScreen.tsx
@@ -2,14 +2,15 @@ import { LayoutChangeEvent, View } from 'react-native';
import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
import { EventType, analytics } from '@suite-native/analytics';
-import { Box, Button, HStack, Text, VStack } from '@suite-native/atoms';
+import { Box, Button, HStack, Text, TitleHeader, VStack } from '@suite-native/atoms';
import { Icon } from '@suite-native/icons';
import { Translation, useTranslate } from '@suite-native/intl';
import { useOpenLink } from '@suite-native/link';
+import { KeyboardAvoidingScreen } from '@suite-native/navigation';
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
-import { PassphraseContentScreenWrapper } from '../../components/passphrase/PassphraseContentScreenWrapper';
import { PassphraseForm } from '../../components/passphrase/PassphraseForm';
+import { PassphraseScreenHeader } from '../../components/passphrase/PassphraseScreenHeader';
const ANIMATION_DURATION = 300;
@@ -70,18 +71,20 @@ export const PassphraseFormScreen = () => {
};
return (
- }
- subtitle={
- {chunks},
- }}
+ }>
+
+ }
+ subtitle={
+ {chunks},
+ }}
+ />
+ }
+ titleVariant="titleMedium"
/>
- }
- >
-
@@ -158,6 +161,6 @@ export const PassphraseFormScreen = () => {
inputLabel={translate('modulePassphrase.form.createWalletInputLabel')}
/>
-
+
);
};
diff --git a/suite-native/module-authorize-device/src/screens/passphrase/PassphraseVerifyEmptyWalletScreen.tsx b/suite-native/module-authorize-device/src/screens/passphrase/PassphraseVerifyEmptyWalletScreen.tsx
index b21969338e43..bb4e36c0bd5f 100644
--- a/suite-native/module-authorize-device/src/screens/passphrase/PassphraseVerifyEmptyWalletScreen.tsx
+++ b/suite-native/module-authorize-device/src/screens/passphrase/PassphraseVerifyEmptyWalletScreen.tsx
@@ -4,15 +4,16 @@ import { useDispatch } from 'react-redux';
import { isFulfilled } from '@reduxjs/toolkit';
import { EventType, analytics } from '@suite-native/analytics';
-import { AlertBox, Text, VStack } from '@suite-native/atoms';
+import { AlertBox, Text, TitleHeader, VStack } from '@suite-native/atoms';
import {
finishPassphraseFlow,
verifyPassphraseOnEmptyWalletThunk,
} from '@suite-native/device-authorization';
import { Translation, useTranslate } from '@suite-native/intl';
+import { KeyboardAvoidingScreen } from '@suite-native/navigation';
-import { PassphraseContentScreenWrapper } from '../../components/passphrase/PassphraseContentScreenWrapper';
import { PassphraseForm } from '../../components/passphrase/PassphraseForm';
+import { PassphraseScreenHeader } from '../../components/passphrase/PassphraseScreenHeader';
export const PassphraseVerifyEmptyWalletScreen = () => {
const dispatch = useDispatch();
@@ -34,15 +35,17 @@ export const PassphraseVerifyEmptyWalletScreen = () => {
}, [dispatch]);
return (
-
- }
- subtitle={
-
- }
- >
-
+ }>
+
+
+ }
+ subtitle={
+
+ }
+ titleVariant="titleMedium"
+ />
{
inputLabel={translate('modulePassphrase.form.verifyPassphraseInputLabel')}
/>
-
+
);
};
diff --git a/suite-native/module-send/src/components/SendScreen.tsx b/suite-native/module-send/src/components/SendScreen.tsx
deleted file mode 100644
index 42e99c2108f4..000000000000
--- a/suite-native/module-send/src/components/SendScreen.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { ReactNode } from 'react';
-
-import { Screen } from '@suite-native/navigation';
-
-type SendScreenProps = {
- children: ReactNode;
- screenHeader: ReactNode;
- footer?: ReactNode;
-};
-
-export const SendScreen = ({ children, footer, screenHeader }: SendScreenProps) => (
-
- {children}
-
-);
diff --git a/suite-native/module-send/src/screens/SendAccountsScreen.tsx b/suite-native/module-send/src/screens/SendAccountsScreen.tsx
index bade258a3cc2..e9431768821b 100644
--- a/suite-native/module-send/src/screens/SendAccountsScreen.tsx
+++ b/suite-native/module-send/src/screens/SendAccountsScreen.tsx
@@ -1,14 +1,13 @@
import { AccountsList, OnSelectAccount } from '@suite-native/accounts';
import { useTranslate } from '@suite-native/intl';
import {
+ Screen,
ScreenHeader,
SendStackParamList,
SendStackRoutes,
StackProps,
} from '@suite-native/navigation';
-import { SendScreen } from '../components/SendScreen';
-
// TODO: So far we do not want enable send form for any other networkS than Bitcoin-like coins.
// This filter will be removed in a follow up PR.
const BITCOIN_LIKE_FILTER = 'bitcoin';
@@ -25,15 +24,13 @@ export const SendAccountsScreen = ({
// TODO: move text content to @suite-native/intl package when is copy ready
return (
- }
- >
+ }>
{/* TODO: Enable filtering same as receive screen account list has. */}
-
+
);
};
diff --git a/suite-native/module-send/src/screens/SendAddressReviewScreen.tsx b/suite-native/module-send/src/screens/SendAddressReviewScreen.tsx
index 20ccd9990407..3e8e9af94ac7 100644
--- a/suite-native/module-send/src/screens/SendAddressReviewScreen.tsx
+++ b/suite-native/module-send/src/screens/SendAddressReviewScreen.tsx
@@ -5,6 +5,7 @@ import { AccountsRootState, DeviceRootState, SendRootState } from '@suite-common
import { Box, Text, VStack } from '@suite-native/atoms';
import { Translation, useTranslate } from '@suite-native/intl';
import {
+ Screen,
ScreenHeader,
SendStackParamList,
SendStackRoutes,
@@ -13,7 +14,6 @@ import {
import { AddressReviewStepList } from '../components/AddressReviewStepList';
import { SendConfirmOnDeviceImage } from '../components/SendConfirmOnDeviceImage';
-import { SendScreen } from '../components/SendScreen';
import {
selectIsReceiveAddressOutputConfirmed,
selectIsTransactionReviewInProgress,
@@ -43,8 +43,8 @@ export const SendAddressReviewScreen = ({
}, [isAddressConfirmed, accountKey, navigation, tokenContract]);
return (
-
-
+
);
};
diff --git a/suite-native/module-send/src/screens/SendDestinationTagReviewScreen.tsx b/suite-native/module-send/src/screens/SendDestinationTagReviewScreen.tsx
index 834475aadebd..be2e5191fc41 100644
--- a/suite-native/module-send/src/screens/SendDestinationTagReviewScreen.tsx
+++ b/suite-native/module-send/src/screens/SendDestinationTagReviewScreen.tsx
@@ -7,6 +7,7 @@ import { AccountsRootState, DeviceRootState, SendRootState } from '@suite-common
import { Text, VStack } from '@suite-native/atoms';
import { Translation, useTranslate } from '@suite-native/intl';
import {
+ Screen,
ScreenHeader,
SendStackParamList,
SendStackRoutes,
@@ -15,7 +16,6 @@ import {
import { ReviewDestinationTagCard } from '../components/ReviewDestinationTagCard';
import { SendConfirmOnDeviceImage } from '../components/SendConfirmOnDeviceImage';
-import { SendScreen } from '../components/SendScreen';
import { useHandleOnDeviceTransactionReview } from '../hooks/useHandleOnDeviceTransactionReview';
import {
selectIsDestinationTagOutputConfirmed,
@@ -65,8 +65,8 @@ export const SendDestinationTagReviewScreen = ({
}, [isDestinationTagConfirmed, accountKey, navigation, tokenContract, transaction]);
return (
-
-
+
);
};
diff --git a/suite-native/module-send/src/screens/SendFeesScreen.tsx b/suite-native/module-send/src/screens/SendFeesScreen.tsx
index dedf53a04567..f3f54450f296 100644
--- a/suite-native/module-send/src/screens/SendFeesScreen.tsx
+++ b/suite-native/module-send/src/screens/SendFeesScreen.tsx
@@ -1,11 +1,10 @@
import { useSelector } from 'react-redux';
import { AccountsRootState, selectAccountByKey } from '@suite-common/wallet-core';
-import { SendStackParamList, SendStackRoutes, StackProps } from '@suite-native/navigation';
+import { Screen, SendStackParamList, SendStackRoutes, StackProps } from '@suite-native/navigation';
import { AccountBalanceScreenHeader } from '../components/AccountBalanceScreenHeader';
import { SendFeesForm } from '../components/SendFeesForm';
-import { SendScreen } from '../components/SendScreen';
export const SendFeesScreen = ({
route: { params },
@@ -18,12 +17,12 @@ export const SendFeesScreen = ({
if (!account) return;
return (
-
}
>
-
+
);
};
diff --git a/suite-native/module-send/src/screens/SendOutputsReviewScreen.tsx b/suite-native/module-send/src/screens/SendOutputsReviewScreen.tsx
index c9ec16b1130d..9c62a57535e1 100644
--- a/suite-native/module-send/src/screens/SendOutputsReviewScreen.tsx
+++ b/suite-native/module-send/src/screens/SendOutputsReviewScreen.tsx
@@ -8,6 +8,7 @@ import { useTranslate } from '@suite-native/intl';
import {
RootStackParamList,
RootStackRoutes,
+ Screen,
ScreenHeader,
SendStackParamList,
SendStackRoutes,
@@ -17,7 +18,6 @@ import {
import { OutputsReviewFooter } from '../components/OutputsReviewFooter';
import { ReviewOutputItemList } from '../components/ReviewOutputItemList';
-import { SendScreen } from '../components/SendScreen';
import { useShowReviewCancellationAlert } from '../hooks/useShowReviewCancellationAlert';
import { cleanupSendFormThunk } from '../sendFormThunks';
@@ -59,8 +59,8 @@ export const SendOutputsReviewScreen = ({
});
return (
-
-
+
);
};
diff --git a/suite-native/module-send/src/screens/SendOutputsScreen.tsx b/suite-native/module-send/src/screens/SendOutputsScreen.tsx
index 918e86bf18be..99d02796daa5 100644
--- a/suite-native/module-send/src/screens/SendOutputsScreen.tsx
+++ b/suite-native/module-send/src/screens/SendOutputsScreen.tsx
@@ -26,6 +26,7 @@ import { Box, Button } from '@suite-native/atoms';
import { Form, useForm } from '@suite-native/forms';
import { Translation } from '@suite-native/intl';
import {
+ KeyboardAvoidingScreen,
ScreenFooterGradient,
SendStackParamList,
SendStackRoutes,
@@ -38,7 +39,6 @@ import { useDebounce } from '@trezor/react-utils';
import { AccountBalanceScreenHeader } from '../components/AccountBalanceScreenHeader';
import { SendOutputFields } from '../components/SendOutputFields';
-import { SendScreen } from '../components/SendScreen';
import { useSubscribeForSolanaBlockUpdates } from '../hooks/useSubscribeForSolanaBlockUpdates';
import { storeFeeLevels } from '../sendFormSlice';
import { calculateFeeLevelsMaxAmountThunk } from '../sendFormThunks';
@@ -263,8 +263,8 @@ export const SendOutputsScreen = ({
});
return (
-
}
footer={
@@ -291,6 +291,6 @@ export const SendOutputsScreen = ({
-
+
);
};
diff --git a/suite-native/navigation/package.json b/suite-native/navigation/package.json
index f974d87943f6..13d62243c91a 100644
--- a/suite-native/navigation/package.json
+++ b/suite-native/navigation/package.json
@@ -33,7 +33,7 @@
"react": "18.2.0",
"react-native": "0.76.1",
"react-native-edge-to-edge": "^1.3.1",
- "react-native-keyboard-aware-scroll-view": "0.9.5",
+ "react-native-keyboard-controller": "1.16.2",
"react-native-reanimated": "^3.16.7",
"react-native-safe-area-context": "^4.14.0",
"react-redux": "8.0.7"
diff --git a/suite-native/navigation/src/components/Screen.tsx b/suite-native/navigation/src/components/Screen.tsx
index 8fea49e18c76..3d6329cf1c9c 100644
--- a/suite-native/navigation/src/components/Screen.tsx
+++ b/suite-native/navigation/src/components/Screen.tsx
@@ -1,6 +1,7 @@
import { ReactNode, useContext } from 'react';
-import { ScrollViewProps, View } from 'react-native';
+import { Platform, ScrollViewProps, View } from 'react-native';
import { SystemBars } from 'react-native-edge-to-edge';
+import { KeyboardAvoidingView } from 'react-native-keyboard-controller';
import { EdgeInsets } from 'react-native-safe-area-context';
import { useSelector } from 'react-redux';
@@ -11,7 +12,7 @@ import { selectIsAnyBannerMessageActive } from '@suite-common/message-system';
import { Box } from '@suite-native/atoms';
import { useOfflineBannerAwareSafeAreaInsets } from '@suite-native/connection-status';
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
-import { Color } from '@trezor/theme';
+import { Color, nativeSpacings } from '@trezor/theme';
import { ScreenContentWrapper } from './ScreenContentWrapper';
import { useAndroidNavigationBarStyle } from '../hooks/useAndroidNavigationBarStyle';
@@ -27,7 +28,6 @@ type ScreenProps = {
extraKeyboardAvoidingViewHeight?: number;
hasBottomInset?: boolean;
refreshControl?: ScrollViewProps['refreshControl'];
- keyboardDismissMode?: ScrollViewProps['keyboardDismissMode'];
};
const screenContainerStyle = prepareNativeStyle<{
@@ -92,12 +92,10 @@ export const Screen = ({
header,
footer,
refreshControl,
- keyboardDismissMode,
isScrollable = true,
backgroundColor = 'backgroundSurfaceElevation0',
noHorizontalPadding = false,
noBottomPadding = false,
- extraKeyboardAvoidingViewHeight = 0,
hasBottomInset = true,
}: ScreenProps) => {
const {
@@ -131,9 +129,7 @@ export const Screen = ({
);
};
+
+const keyboardAvoidingScreenStyle = prepareNativeStyle(_ => ({
+ flex: 1,
+}));
+
+const keyboardVerticalOffset = Platform.OS === 'android' ? nativeSpacings.sp16 : 0;
+
+export const KeyboardAvoidingScreen = ({ children, ...rest }: ScreenProps) => {
+ const { applyStyle } = useNativeStyles();
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/suite-native/navigation/src/components/ScreenContentWrapper.tsx b/suite-native/navigation/src/components/ScreenContentWrapper.tsx
index 3dc16e2e703e..018db66d65b7 100644
--- a/suite-native/navigation/src/components/ScreenContentWrapper.tsx
+++ b/suite-native/navigation/src/components/ScreenContentWrapper.tsx
@@ -1,6 +1,5 @@
import React, { ReactNode, useRef } from 'react';
import { ScrollView, ScrollViewProps } from 'react-native';
-import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
import { prepareNativeStyle, useNativeStyles } from '@trezor/styles';
@@ -11,7 +10,6 @@ type ScreenContentProps = {
children: ReactNode;
isScrollable: boolean;
hasHeader: boolean;
- extraKeyboardAvoidingViewHeight: number;
refreshControl?: ScrollViewProps['refreshControl'];
keyboardDismissMode?: ScrollViewProps['keyboardDismissMode'];
};
@@ -22,7 +20,6 @@ export const ScreenContentWrapper = ({
children,
isScrollable,
hasHeader,
- extraKeyboardAvoidingViewHeight,
refreshControl,
keyboardDismissMode,
}: ScreenContentProps) => {
@@ -34,15 +31,11 @@ export const ScreenContentWrapper = ({
return isScrollable ? (
<>
{scrollDivider}
- {
- // Assign the ref of inner ScrollView.
- scrollViewRef.current = ref as unknown as ScrollView;
- }}
+
{children}
-
+
>
) : (
<>{children}>
diff --git a/suite-native/test-utils/package.json b/suite-native/test-utils/package.json
index c8086b6df3af..ce551b208b71 100644
--- a/suite-native/test-utils/package.json
+++ b/suite-native/test-utils/package.json
@@ -17,6 +17,7 @@
"@trezor/styles": "workspace:*",
"@trezor/theme": "workspace:*",
"react": "18.2.0",
+ "react-native-keyboard-controller": "1.16.2",
"react-native-safe-area-context": "^4.14.0",
"react-redux": "8.0.7"
}
diff --git a/suite-native/test-utils/src/expoMock.js b/suite-native/test-utils/src/expoMock.js
index 00b5785d979c..2ec798cea2c8 100644
--- a/suite-native/test-utils/src/expoMock.js
+++ b/suite-native/test-utils/src/expoMock.js
@@ -407,3 +407,7 @@ jest.mock('expo-constants', () => {
jest.mock('redux-devtools-expo-dev-plugin', () => () => next => next);
jest.mock('react-native-safe-area-context', () => mockSafeAreaContext);
+
+jest.mock('react-native-keyboard-controller', () =>
+ require('react-native-keyboard-controller/jest'),
+);
diff --git a/yarn.lock b/yarn.lock
index 69378db16e6c..af6621ea4f87 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10531,7 +10531,7 @@ __metadata:
react-native: "npm:0.76.1"
react-native-edge-to-edge: "npm:^1.3.1"
react-native-gesture-handler: "npm:^2.21.0"
- react-native-keyboard-aware-scroll-view: "npm:0.9.5"
+ react-native-keyboard-controller: "npm:1.16.2"
react-native-mmkv: "npm:2.12.2"
react-native-quick-crypto: "npm:^0.7.6"
react-native-reanimated: "npm:^3.16.7"
@@ -11467,7 +11467,7 @@ __metadata:
react: "npm:18.2.0"
react-native: "npm:0.76.1"
react-native-edge-to-edge: "npm:^1.3.1"
- react-native-keyboard-aware-scroll-view: "npm:0.9.5"
+ react-native-keyboard-controller: "npm:1.16.2"
react-native-reanimated: "npm:^3.16.7"
react-native-safe-area-context: "npm:^4.14.0"
react-redux: "npm:8.0.7"
@@ -11673,6 +11673,7 @@ __metadata:
"@trezor/styles": "workspace:*"
"@trezor/theme": "workspace:*"
react: "npm:18.2.0"
+ react-native-keyboard-controller: "npm:1.16.2"
react-native-safe-area-context: "npm:^4.14.0"
react-redux: "npm:8.0.7"
languageName: unknown
@@ -36852,24 +36853,26 @@ __metadata:
languageName: node
linkType: hard
-"react-native-iphone-x-helper@npm:^1.0.3":
- version: 1.3.1
- resolution: "react-native-iphone-x-helper@npm:1.3.1"
+"react-native-is-edge-to-edge@npm:^1.1.6":
+ version: 1.1.6
+ resolution: "react-native-is-edge-to-edge@npm:1.1.6"
peerDependencies:
- react-native: ">=0.42.0"
- checksum: 10/024376646009a966e33e12fc2358751830818b0fb73b1c601a64eb5e490d2dc43eec23668991b985a8c412a84d087f20eb45bb9b593567c08b66e741b7bddda5
+ react: ">=18.2.0"
+ react-native: ">=0.73.0"
+ checksum: 10/4e07c1e34c01c8d50fd7c1d0460db06f6f0515197405230386a8ffb950cb724b10743af032310d1384df0a90059bfb8992ba2d93344ce86315315f0493feccc2
languageName: node
linkType: hard
-"react-native-keyboard-aware-scroll-view@npm:0.9.5":
- version: 0.9.5
- resolution: "react-native-keyboard-aware-scroll-view@npm:0.9.5"
+"react-native-keyboard-controller@npm:1.16.2":
+ version: 1.16.2
+ resolution: "react-native-keyboard-controller@npm:1.16.2"
dependencies:
- prop-types: "npm:^15.6.2"
- react-native-iphone-x-helper: "npm:^1.0.3"
+ react-native-is-edge-to-edge: "npm:^1.1.6"
peerDependencies:
- react-native: ">=0.48.4"
- checksum: 10/95d8ed8a46426b16e819713495d64766a3eed5d63a03fb4feca0351cce55d74197f75d8b01dd3f2c491cda29c155bb71c8063d2fba23e8a0044208aad03d0d91
+ react: "*"
+ react-native: "*"
+ react-native-reanimated: ">=3.0.0"
+ checksum: 10/8e017d079755c098e2960e63f5d077060aaa40b31f979ef043483af143c51897f3fe9ff1a1ca7f04a6ebedc9b29a0cd3b76d635b26c865e0056f626893e0739a
languageName: node
linkType: hard