diff --git a/package.json b/package.json index a92385db4..876c4e822 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@react-navigation/native-stack": "^6.11.0", "@sentry/react-native": "~6.14.0", "@sinonjs/text-encoding": "^0.7.3", - "@tonomy/tonomy-id-sdk": "0.37.0-rc.2", + "@tonomy/tonomy-id-sdk": "0.37.0-development.2", "@veramo/core": "^6.0.0", "@veriff/react-native-sdk": "^8.1.0", "@walletconnect/core": "^2.17.2", diff --git a/src/assets/images/kyc-onboarding/1.png b/src/assets/images/kyc-onboarding/1.png index c38745b99..a7f289d60 100644 Binary files a/src/assets/images/kyc-onboarding/1.png and b/src/assets/images/kyc-onboarding/1.png differ diff --git a/src/assets/images/kyc-onboarding/2.png b/src/assets/images/kyc-onboarding/2.png index 28995f432..96ad0d554 100644 Binary files a/src/assets/images/kyc-onboarding/2.png and b/src/assets/images/kyc-onboarding/2.png differ diff --git a/src/assets/images/kyc-onboarding/3.png b/src/assets/images/kyc-onboarding/3.png index 51ed79027..23f179a35 100644 Binary files a/src/assets/images/kyc-onboarding/3.png and b/src/assets/images/kyc-onboarding/3.png differ diff --git a/src/assets/images/kyc-onboarding/4.png b/src/assets/images/kyc-onboarding/4.png deleted file mode 100644 index 3818135e9..000000000 Binary files a/src/assets/images/kyc-onboarding/4.png and /dev/null differ diff --git a/src/assets/images/kyc-onboarding/verifiedRequest.png b/src/assets/images/kyc-onboarding/verifiedRequest.png new file mode 100644 index 000000000..31cb5e722 Binary files /dev/null and b/src/assets/images/kyc-onboarding/verifiedRequest.png differ diff --git a/src/containers/KycOnboardingContainer.tsx b/src/containers/KycOnboardingContainer.tsx index 0fb82e6fa..804ec3580 100644 --- a/src/containers/KycOnboardingContainer.tsx +++ b/src/containers/KycOnboardingContainer.tsx @@ -1,8 +1,8 @@ /* eslint-disable react-hooks/rules-of-hooks */ import React, { useState } from 'react'; -import { View, Text, StyleSheet, Image, TouchableOpacity, Dimensions, ScrollView } from 'react-native'; +import { View, Text, StyleSheet, Image, TouchableOpacity, ScrollView } from 'react-native'; import Swiper from 'react-native-swiper'; -import Animated, { useSharedValue, useAnimatedStyle, withTiming, Easing } from 'react-native-reanimated'; +import Animated, { useSharedValue, useAnimatedStyle } from 'react-native-reanimated'; import theme, { commonStyles } from '../utils/theme'; import ArrowForwardIcon from '../assets/icons/ArrowForwardIcon'; import { Props } from '../screens/KycOnboardingScreen'; @@ -10,20 +10,12 @@ import useErrorStore from '../store/errorStore'; import OnBoardingImage1 from '../assets/images/kyc-onboarding/1.png'; import OnBoardingImage2 from '../assets/images/kyc-onboarding/2.png'; import OnBoardingImage3 from '../assets/images/kyc-onboarding/3.png'; -import OnBoardingImage4 from '../assets/images/kyc-onboarding/4.png'; -import BackgroundSvg from '../assets/images/kyc-onboarding/bg.svg'; -import { Bubble } from '../components/Bubble'; import { handleVeriffIfRequired } from '../utils/veriff'; import { KYCPayload, KYCVC, SdkErrors, util, VeriffStatusEnum, VerificationTypeEnum } from '@tonomy/tonomy-id-sdk'; import settings from '../settings'; import useUserStore from '../store/userStore'; import TSpinner from '../components/atoms/TSpinner'; -const { height: screenHeight } = Dimensions.get('window'); -const pictureAndSliderHeight = screenHeight * 0.59; -const textHeight = screenHeight * 0.22; -const buttonsHeight = screenHeight * 0.09; - type VeriffPayload = { appName: string; proof?: string; @@ -35,51 +27,24 @@ function KycOnboardingContainer({ navigation }: { navigation: Props['navigation' const errorStore = useErrorStore(); const { user } = useUserStore(); - const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); const slides = [ { id: 1, title: `Tired of verifying your identity again and again?`, - text: '', + text: 'Skip the forms and endless uploads β€” verify once, use everywhere', image: OnBoardingImage1, - bubbles: [ - { top: -0.27, left: 0.23, text: 'Frustration', delay: 300, side: 'right' }, - { top: -0.22, left: -0.43, text: 'πŸ’’', delay: 400, side: 'left' }, - { top: -0.004, left: 0.35, text: '😀', delay: 500, side: 'right' }, - ], }, { id: 2, - title: `Meet reusable KYC`, - text: `Verify once. Log in anywhere securely β€” without repeating the process`, + title: `Skip new verifications – meet reusable KYC`, + text: `Verify once. Log in anywhere securely – without repeating the process`, image: OnBoardingImage2, - bubbles: [ - { top: -0.29, left: 0.11, text: 'Already verified?', delay: 300, side: 'right' }, - { top: -0.22, left: -0.44, text: '😍', delay: 400, side: 'left' }, - { top: -0.02, left: -0.44, text: 'Felt kind of magic', delay: 500, side: 'left' }, - ], }, { id: 3, - title: 'Faster access. Full control', - text: `Your data stays private and secure β€” even we can't see it`, - image: OnBoardingImage3, - bubbles: [ - { top: -0.29, left: -0.44, text: 'Privacy', delay: 300, side: 'left' }, - { top: -0.2, left: 0.34, text: '😎', delay: 400, side: 'right' }, - { top: 0.0, left: 0.19, text: 'Confidence', delay: 500, side: 'right' }, - ], - }, - { - id: 4, title: 'One ID. All your apps', - text: 'This is just the beginning', - image: OnBoardingImage4, - bubbles: [ - { top: -0.27, left: -0.44, text: 'πŸ‘', delay: 300, side: 'left' }, - { top: -0.13, left: 0.13, text: 'No forms? Nice', delay: 400, side: 'right' }, - { top: 0.0, left: -0.45, text: 'That was fast', delay: 500, side: 'left' }, - ], + text: `Keep your data private and use it anywhere you log in`, + image: OnBoardingImage3, }, ]; // Animation values for slide transitions @@ -176,52 +141,32 @@ function KycOnboardingContainer({ navigation }: { navigation: Props['navigation' ) : ( - + setActiveIndex(index)} + showsPagination={true} + dotStyle={styles.dot} + activeDotStyle={styles.activeDot} + paginationStyle={{ bottom: 230 }} + > + {slides.map((slide) => { + return ( + + + + ); + })} + - - setActiveIndex(index)} - showsPagination={true} - dotStyle={styles.dot} - activeDotStyle={styles.activeDot} - > - {slides.map((slide) => { - return ( - - - - {slide.bubbles.map((b, i) => { - const top = b.top * screenHeight; - const left = b.left * screenWidth; - - return ( - - - - ); - })} - - - ); - })} - - - - + {slides[activeIndex]?.title} {slides[activeIndex]?.text} - + {activeIndex < slides.length - 1 && ( <> @@ -229,10 +174,10 @@ function KycOnboardingContainer({ navigation }: { navigation: Props['navigation' - + Next - + @@ -250,7 +195,7 @@ function KycOnboardingContainer({ navigation }: { navigation: Props['navigation' } const styles = StyleSheet.create({ - container: { flex: 1 }, + container: { flex: 1, display: 'flex' }, loadingContainer: { flex: 1, justifyContent: 'center', @@ -260,27 +205,30 @@ const styles = StyleSheet.create({ pictureAndSlider: { justifyContent: 'center', alignItems: 'center', - marginTop: 20, }, slide: { flex: 1, - justifyContent: 'center', alignItems: 'center', + paddingTop: 80, }, + image: { - width: '80%', - height: '75%', + width: '90%', + height: '85%', // slightly taller image to fill space resizeMode: 'contain', + marginBottom: 5, // smaller bottom space + bottom: 70, }, + dot: { - backgroundColor: theme.colors.white, + backgroundColor: theme.colors.primary, width: 6, height: 5, borderRadius: 10, marginHorizontal: 5, }, activeDot: { - backgroundColor: theme.colors.white, + backgroundColor: theme.colors.primary, width: 18, height: 5, borderRadius: 10, @@ -289,8 +237,8 @@ const styles = StyleSheet.create({ textContainer: { justifyContent: 'center', alignItems: 'center', - paddingBottom: 10, paddingHorizontal: 6, + bottom: 190, }, content: { gap: 9, @@ -302,16 +250,17 @@ const styles = StyleSheet.create({ alignItems: 'center', }, title: { - fontSize: 26, + fontSize: 29, fontWeight: 'bold', lineHeight: 32, - color: theme.colors.white, + color: theme.colors.black, + textAlign: 'center', ...commonStyles.primaryFontFamily, }, text: { - fontSize: 16, + fontSize: 18, lineHeight: 21, - color: theme.colors.white, + color: theme.colors.black, textAlign: 'center', ...commonStyles.secondaryFontFamily, }, @@ -322,10 +271,11 @@ const styles = StyleSheet.create({ paddingHorizontal: 20, width: '100%', minHeight: 55, + bottom: 60, }, skipButton: { fontSize: 16, - color: theme.colors.white, + color: theme.colors.black, }, nextButton: { width: 70, @@ -336,7 +286,7 @@ const styles = StyleSheet.create({ }, getStartedBtn: { width: '100%', - backgroundColor: theme.colors.black, + backgroundColor: theme.colors.primary, paddingVertical: 14, paddingHorizontal: 20, borderRadius: 8, @@ -346,13 +296,7 @@ const styles = StyleSheet.create({ borderWidth: 1, borderColor: '#BA54D3', }, - bubblesContainer: { - position: 'absolute', - bottom: screenHeight * 0.2, - flexDirection: 'row', - flexWrap: 'wrap', - justifyContent: 'center', - }, + inner: { alignItems: 'center', }, diff --git a/src/containers/SSOLoginContainer.tsx b/src/containers/SSOLoginContainer.tsx index b57ceb770..aff47d070 100644 --- a/src/containers/SSOLoginContainer.tsx +++ b/src/containers/SSOLoginContainer.tsx @@ -19,9 +19,10 @@ import useErrorStore from '../store/errorStore'; import Debug from 'debug'; import { SSOLoginScreenProps } from '../screens/SSOLoginScreen'; import TInfoModalBox from '../components/TInfoModalBox'; -import { ArrowUpRight } from 'iconoir-react-native'; import SSOLoginBottomLayover from '../components/SSOLoginBottomLayover'; import { useVerificationStore } from '../store/verificationStore'; +import RBSheet from 'react-native-raw-bottom-sheet'; +import TIconButton from '../components/TIconButton'; const debug = Debug('tonomy-id:containers:SSOLoginContainer'); @@ -229,28 +230,6 @@ export default function SSOLoginContainer({ - {/* Progress bar */} - {requestType === 'login' ? ( - - - - ) : ( - <> - {reuseKycCount > 0 ? ( - - - - - ) : ( - - - - - - )} - - )} - {ssoApp && ( @@ -265,7 +244,35 @@ export default function SSOLoginContainer({ )} + + + + Before we continue + refMessage?.current?.close()}> + + + + + Here’s how identity verification works: + β›Ά We’ll check if you’re already verified + πŸͺͺ If needed, scan your ID once + + Got It + + + } footerHint={ @@ -279,7 +286,11 @@ export default function SSOLoginContainer({ } footer={ - + refMessage.current?.open() : onLogin} + > Proceed @@ -316,7 +327,7 @@ const styles = StyleSheet.create({ borderRadius: 15, borderWidth: 1, borderColor: theme.colors.grey8, - marginBottom: 30, + marginBottom: 20, marginTop: 70, }, promptText: { @@ -374,4 +385,23 @@ const styles = StyleSheet.create({ marginLeft: 4, borderRadius: 2, }, + vestHead: { + paddingHorizontal: 5, + paddingVertical: 13, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'flex-start', + }, + drawerHead: { + fontSize: 22, + fontWeight: '700', + marginTop: 8, + }, + lockedParagraph: { + fontSize: 18, + fontWeight: '400', + color: theme.colors.black, + marginTop: 6, + paddingHorizontal: 10, + }, }); diff --git a/src/containers/VeriffDataSharingContainer.tsx b/src/containers/VeriffDataSharingContainer.tsx index c2f8ace16..57efd4ace 100644 --- a/src/containers/VeriffDataSharingContainer.tsx +++ b/src/containers/VeriffDataSharingContainer.tsx @@ -177,20 +177,7 @@ export default function VeriffDataSharingContainer({ style={styles.container} contentContainerStyle={{ flexGrow: 1, justifyContent: 'space-between' }} > - {/* Progress bar */} - {reuseKycCount > 1 ? ( - - - - - ) : ( - - - - - - )} {/* Top Card */} @@ -199,8 +186,9 @@ export default function VeriffDataSharingContainer({ - Share data with {ssoApp?.appName} + Finish login with {ssoApp?.appName} + {"Here's what data {ssoApp?.appName} will receive"} @{username} @@ -225,8 +213,8 @@ export default function VeriffDataSharingContainer({ {reuseKycCount > 1 - ? `KYC data reused ${reuseKycCount} times – saving you ~25 minutes of your previous time` - : `Your KYC data is now ready for faster login next time`} + ? `KYC data reused ${reuseKycCount} times - saving you ~25 minutes of your previous time` + : "Haven't reused your KYC data yet - you're all set for a faster login next time"} @@ -343,6 +331,7 @@ const styles = StyleSheet.create({ appIcon: { width: 40, height: 40, resizeMode: 'contain' }, dots: { marginHorizontal: 15, marginBottom: 20, fontSize: 35, color: theme.colors.grey9 }, shareText: { fontSize: 20, fontWeight: '600', textAlign: 'center' }, + shareSubText: { fontSize: 16, textAlign: 'center', marginTop: 6 }, discord: { color: theme.colors.primary }, sectionWrapper: { paddingVertical: 9, paddingLeft: 9 }, usernameView: { diff --git a/yarn.lock b/yarn.lock index fa2573945..f74271b8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5390,9 +5390,9 @@ __metadata: languageName: node linkType: hard -"@tonomy/tonomy-id-sdk@npm:0.37.0-rc.2": - version: 0.37.0-rc.2 - resolution: "@tonomy/tonomy-id-sdk@npm:0.37.0-rc.2" +"@tonomy/tonomy-id-sdk@npm:0.37.0-development.2": + version: 0.37.0-development.2 + resolution: "@tonomy/tonomy-id-sdk@npm:0.37.0-development.2" dependencies: "@consento/sync-randombytes": "npm:^1.0.5" "@tonomy/antelope-did-resolver": "npm:^0.10.0" @@ -5420,7 +5420,7 @@ __metadata: typeorm: "npm:0.3.22" universal-base64url: "npm:^1.1.0" web-did-resolver: "npm:^2.0.27" - checksum: 10c0/f23152b54fe5a9efce7a46f182e86fb06c62f06d0b5943e3f792b5a1907f649dffb577aa76a956c227c7d2005a9718c31f601a0e59f10fdce00de483c55a9536 + checksum: 10c0/9aeb510ac542e34b3631e7a7a3ff8e5173bb9810b232053f9d32c0c1f5434a8ec49b3407f2709b06aea0174bb6497473da185231831901967232688f4620df4b languageName: node linkType: hard @@ -19439,7 +19439,7 @@ __metadata: "@semantic-release/git": "npm:^10.0.1" "@sentry/react-native": "npm:~6.14.0" "@sinonjs/text-encoding": "npm:^0.7.3" - "@tonomy/tonomy-id-sdk": "npm:0.37.0-rc.2" + "@tonomy/tonomy-id-sdk": "npm:0.37.0-development.2" "@types/bluebird": "npm:^3" "@types/jest": "npm:^29.5.14" "@types/react": "npm:~19.0.10"