diff --git a/App.tsx b/App.tsx index 5e963b1..fb8dff9 100644 --- a/App.tsx +++ b/App.tsx @@ -1,45 +1,166 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - * - * @format - */ - -import { NewAppScreen } from '@react-native/new-app-screen'; -import { StatusBar, StyleSheet, useColorScheme, View } from 'react-native'; +import React, { useState } from 'react'; import { - SafeAreaProvider, - useSafeAreaInsets, -} from 'react-native-safe-area-context'; + View, + Text, + StyleSheet, + TouchableOpacity, + SafeAreaView, +} from 'react-native'; +import Ionicons from '@react-native-vector-icons/ionicons'; -function App() { - const isDarkMode = useColorScheme() === 'dark'; +const PIN_LENGTH = 4; + +const App: React.FC = () => { + const [pin, setPin] = useState(''); + + const handlePress = (value: string) => { + if (pin.length < PIN_LENGTH) { + setPin(pin + value); + } + }; + + const handleDelete = () => { + setPin(pin.slice(0, -1)); + }; return ( - - - - + + Verify Identity + + Use PIN, Fingerprint or Face ID + + + {/* PIN DOTS */} + + {Array.from({ length: PIN_LENGTH }).map((_, i) => ( + i && styles.pinDotFilled, + ]} + /> + ))} + + + {/* BIOMETRIC OPTIONS */} + + + + Fingerprint + + + + + Face ID + + + + {/* KEYPAD */} + + {[1, 2, 3, 4, 5, 6, 7, 8, 9, '', 0, 'del'].map((item, index) => { + if (item === '') { + return ; + } + + if (item === 'del') { + return ( + + + + ); + } + + return ( + handlePress(item.toString())} + > + {item} + + ); + })} + + ); -} - -function AppContent() { - const safeAreaInsets = useSafeAreaInsets(); - - return ( - - - - ); -} +}; const styles = StyleSheet.create({ container: { flex: 1, + backgroundColor: '#F8FAFF', + alignItems: 'center', + paddingHorizontal: 20, + }, + title: { + fontSize: 24, + fontWeight: '700', + marginTop: 40, + color: '#111827', + }, + subtitle: { + fontSize: 14, + color: '#6B7280', + marginTop: 6, + }, + + pinRow: { + flexDirection: 'row', + marginVertical: 28, + }, + pinDot: { + width: 14, + height: 14, + borderRadius: 7, + borderWidth: 1.5, + borderColor: '#2563EB', + marginHorizontal: 8, + }, + pinDotFilled: { + backgroundColor: '#2563EB', + }, + + bioRow: { + flexDirection: 'row', + marginBottom: 30, + }, + bioBtn: { + alignItems: 'center', + marginHorizontal: 30, + }, + bioText: { + marginTop: 6, + fontSize: 12, + color: '#374151', + }, + + keypad: { + width: '80%', + flexDirection: 'row', + flexWrap: 'wrap', + justifyContent: 'center', + }, + key: { + width: '33%', + height: 70, + justifyContent: 'center', + alignItems: 'center', + }, + keyText: { + fontSize: 26, + fontWeight: '500', + color: '#111827', }, }); + export default App; diff --git a/package-lock.json b/package-lock.json index 0cdcd76..0ab69b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "authenticationsdk", "version": "0.0.1", "dependencies": { + "@react-native-vector-icons/ionicons": "^12.3.0", "@react-native/new-app-screen": "0.83.1", "react": "19.2.0", "react-native": "0.83.1", @@ -2924,6 +2925,132 @@ "node": ">=10" } }, + "node_modules/@react-native-vector-icons/common": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/@react-native-vector-icons/common/-/common-12.4.0.tgz", + "integrity": "sha512-t9W0q+AW7WH1Oj5aEg7wGNXDLZJb5sIVkAWo5qtad3PcbBADqoCdikRK/ToLK+xlB0TxjcuL0T74ogudMkYGeA==", + "license": "MIT", + "dependencies": { + "find-up": "^7.0.0", + "picocolors": "^1.1.1", + "plist": "^3.1.0" + }, + "bin": { + "rnvi-update-plist": "lib/commonjs/scripts/updatePlist.js" + }, + "engines": { + "node": ">=20.19.0 <21.0.0 || >=22.0.0" + }, + "peerDependencies": { + "@react-native-vector-icons/get-image": "^12.3.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@react-native-vector-icons/get-image": { + "optional": true + } + } + }, + "node_modules/@react-native-vector-icons/common/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/common/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/common/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/common/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/common/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@react-native-vector-icons/common/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/ionicons": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@react-native-vector-icons/ionicons/-/ionicons-12.3.0.tgz", + "integrity": "sha512-H/rlYzUEm0hhwwca2k6VMNjy0rLcjan6iwyaYDXMhsJQl7O4+Qkm7uVd/KEreS5gXfGuntUlcSa9GSn+dYqnjA==", + "license": "MIT", + "dependencies": { + "@react-native-vector-icons/common": "^12.3.0" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/@react-native/assets-registry": { "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", @@ -3753,6 +3880,15 @@ "devOptional": true, "license": "MIT" }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -9611,6 +9747,20 @@ "node": ">=8" } }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -11418,6 +11568,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -11716,6 +11878,15 @@ "async-limiter": "~1.0.0" } }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 362359c..2666c73 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,10 @@ "test": "jest" }, "dependencies": { + "@react-native-vector-icons/ionicons": "^12.3.0", + "@react-native/new-app-screen": "0.83.1", "react": "19.2.0", "react-native": "0.83.1", - "@react-native/new-app-screen": "0.83.1", "react-native-safe-area-context": "^5.5.2" }, "devDependencies": { @@ -38,4 +39,4 @@ "engines": { "node": ">=20" } -} \ No newline at end of file +}