diff --git a/App.tsx b/App.tsx
index f44b31b..90395cb 100644
--- a/App.tsx
+++ b/App.tsx
@@ -1,12 +1,25 @@
-import { StatusBar } from "expo-status-bar";
-import { StyleSheet, Text, View } from "react-native";
+import { UserAuthenticationContextProvider } from "@/contexts/UserAuthenticationContext";
+import UnloggedUserStackNavigation from "@/navigations/UnloggedUserStackNavigation";
+import theme from "@/themes/Theme";
+import { NavigationContainer } from "@react-navigation/native";
+import { ThemeProvider } from "@shopify/restyle";
+import { StyleSheet } from "react-native";
export default function App() {
return (
-
- Open up App.tsx to start working on your app!
-
-
+
+
+
+ {/* */}
+ {/*
+
+
+ */}
+
+ {/* */}
+
+
+
);
}
@@ -18,3 +31,5 @@ const styles = StyleSheet.create({
justifyContent: "center",
},
});
+
+const NavigatonRenderer = () => {};
diff --git a/README.md b/README.md
index df89b73..f2271a0 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,12 @@
-
+
+
- 
+   
## B-EASY
@@ -17,37 +18,25 @@ Que vous disposiez d'un site Internet ou non, vous pouvez accepter les paiements
## Mobile Application Project
-The integrated payment platform is a space for the sale of goods and services to the general public. To simplify the process of accepting payments, we decided to develop a mobile app using [Expo](https://docs.expo.dev/).
+Le système de paiement intégré est un espace pour la vente de biens et de services au public général. Pour simplifier le processus d'acceptation des paiements, nous avons décidé de développer une application mobile en utilisant [Expo](https://docs.expo.dev/).
-Expo is a framework that allows us to build native mobile apps using [React Native](https://reactnative.dev/). It provides a fast and efficient development environment, with access to a wide range of native APIs.
+Expo est un framework qui nous permet de développer des applications mobiles natives en utilisant [React Native](https://reactnative.dev/). Il nous offre un environnement de développement rapide et efficace, avec accès à une grande variété d'APIs natives.
-By using Expo, we can avoid the need for a native build process and the associated complexity that comes with it. This allows us to focus more on developing the app's features and user experience, rather than dealing with platform-specific issues.
+En utilisant Expo, nous évitons la nécessité d'un processus de build natif et de la complexité associée à celui-ci. Cela nous permet de nous concentrer davantage sur le développement des fonctionnalités et de l'expérience utilisateur de l'application, plutôt que de nous occuper des problèmes spécifiques à la plateforme.
## Installation
To install and run this application locally, follow these steps:
-1. Clone the repository.
-2. Install Node.js version 18 or higher. You can download it from the official website: [Node.js](https://nodejs.org/).
-3. Install [Yarn package manager](https://yarnpkg.com/). You can install it by running the following command: `npm install -g yarn`
-4. Install the project dependencies by running the following command: `yarn install`
-5. Start the Expo development server by running the following command: `yarn start`
-6. Open the Expo development app on your mobile device or emulator and scan the QR code displayed in the terminal.
+1. Cloner le dépot.
+2. Installer Node.js version 18 ou plus. Site officiel : [Node.js](https://nodejs.org/).
+3. Installer [Yarn package manager](https://yarnpkg.com/). Utiliser la commande : `npm install -g yarn`
+4. Installer les dependences du projet avec la commande : `yarn install`
+5. Demarrer le serveur de developpement Expo avec la commande : `yarn start`
+6. Ouvrir l'application Expo sur votre emulateur ou appareil et scanner le code QR afficher dans votre terminal.
-## Contributing
-
-If you'd like to contribute to this project, please follow these guidelines:
-
-1. ...
-2. ...
-
## License
-This project is a private and proprietary project of [Barnoin Informatique](http://barnoininformatique.ci/). Any use or distribution of this project outside of the company is strictly prohibited and considered fraud.
-
-
-## Contact
-
-For any questions or inquiries, please contact ...
\ No newline at end of file
+Projet privé et proprietaire de l'entreprise [Barnoin Informatique](http://barnoininformatique.ci/). Toutes utulisation ou distribution sans permission explicite est strictement interdit et considéré comme fraude.
diff --git a/app.json b/app.json
index 838969d..35ad2a2 100644
--- a/app.json
+++ b/app.json
@@ -4,12 +4,12 @@
"slug": "beasy-mobile",
"version": "1.0.0",
"orientation": "portrait",
- "icon": "./assets/icon.png",
+ "icon": "./assets/beasy_icon.png",
"userInterfaceStyle": "light",
"splash": {
- "image": "./assets/splash.png",
- "resizeMode": "contain",
- "backgroundColor": "#ffffff"
+ "image": "./assets/beasy_splash.png",
+ "resizeMode": "cover",
+ "backgroundColor": "#00875A"
},
"assetBundlePatterns": ["**/*"],
"ios": {
diff --git a/assets/background_content_white.png b/assets/background_content_white.png
new file mode 100644
index 0000000..4c396b4
Binary files /dev/null and b/assets/background_content_white.png differ
diff --git a/assets/background_content_white2.png b/assets/background_content_white2.png
new file mode 100644
index 0000000..bc6b1cf
Binary files /dev/null and b/assets/background_content_white2.png differ
diff --git a/assets/balance_container.png b/assets/balance_container.png
new file mode 100644
index 0000000..f39cc7c
Binary files /dev/null and b/assets/balance_container.png differ
diff --git a/assets/beasy_background.png b/assets/beasy_background.png
new file mode 100644
index 0000000..9c750af
Binary files /dev/null and b/assets/beasy_background.png differ
diff --git a/assets/beasy_default.png b/assets/beasy_default.png
new file mode 100644
index 0000000..78eee56
Binary files /dev/null and b/assets/beasy_default.png differ
diff --git a/assets/beasy_icon.png b/assets/beasy_icon.png
new file mode 100644
index 0000000..7458734
Binary files /dev/null and b/assets/beasy_icon.png differ
diff --git a/assets/beasy_splash.png b/assets/beasy_splash.png
new file mode 100644
index 0000000..ec2d743
Binary files /dev/null and b/assets/beasy_splash.png differ
diff --git a/assets/logo_beasy.png b/assets/logo_beasy.png
new file mode 100644
index 0000000..c3b837a
Binary files /dev/null and b/assets/logo_beasy.png differ
diff --git a/assets/operators/moov_money.png b/assets/operators/moov_money.png
new file mode 100644
index 0000000..6b11bb9
Binary files /dev/null and b/assets/operators/moov_money.png differ
diff --git a/assets/operators/mtn_money.png b/assets/operators/mtn_money.png
new file mode 100644
index 0000000..e1f1d5e
Binary files /dev/null and b/assets/operators/mtn_money.png differ
diff --git a/assets/operators/orange_money.png b/assets/operators/orange_money.png
new file mode 100644
index 0000000..2054852
Binary files /dev/null and b/assets/operators/orange_money.png differ
diff --git a/assets/operators/visa_card.png b/assets/operators/visa_card.png
new file mode 100644
index 0000000..e5fa54a
Binary files /dev/null and b/assets/operators/visa_card.png differ
diff --git a/assets/operators/wave_money.png b/assets/operators/wave_money.png
new file mode 100644
index 0000000..4f2fc73
Binary files /dev/null and b/assets/operators/wave_money.png differ
diff --git a/assets/payment_processing.png b/assets/payment_processing.png
new file mode 100644
index 0000000..e051963
Binary files /dev/null and b/assets/payment_processing.png differ
diff --git a/biome.json b/biome.json
index 86b2b92..f8103ba 100644
--- a/biome.json
+++ b/biome.json
@@ -17,6 +17,10 @@
"enabled": true,
"rules": {
"recommended": true,
+ "correctness": {
+ "noUnusedImports": "warn",
+ "noUnusedVariables": "warn"
+ },
"complexity": {
"noExcessiveCognitiveComplexity": "error"
},
diff --git a/media/beasy_banner.png b/media/beasy_banner.png
new file mode 100644
index 0000000..4964612
Binary files /dev/null and b/media/beasy_banner.png differ
diff --git a/package.json b/package.json
index 808118e..145275c 100644
--- a/package.json
+++ b/package.json
@@ -13,10 +13,16 @@
"prepare": "husky"
},
"dependencies": {
+ "@react-navigation/bottom-tabs": "^7.0.0-alpha.22",
+ "@react-navigation/native": "^7.0.0-alpha.18",
+ "@react-navigation/native-stack": "^7.0.0-alpha.20",
+ "@shopify/restyle": "^2.4.4",
"expo": "~50.0.14",
"expo-status-bar": "~1.11.1",
"react": "18.2.0",
- "react-native": "0.73.6"
+ "react-native": "0.73.6",
+ "react-native-safe-area-context": "4.8.2",
+ "react-native-screens": "~3.29.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
diff --git a/src/components/BalanceContainer.tsx b/src/components/BalanceContainer.tsx
new file mode 100644
index 0000000..69c23b9
--- /dev/null
+++ b/src/components/BalanceContainer.tsx
@@ -0,0 +1,40 @@
+import Box from "@components/bases/Box";
+import Text from "@components/bases/Text";
+import { images } from "@styles/Commons";
+import { Image } from "react-native";
+
+type Props = { balance: number; label: string };
+
+const BalanceContainer = ({ label, balance }: Props) => {
+ return (
+
+
+
+
+
+
+
+ {balance}
+
+ {label}
+
+
+ );
+};
+
+export default BalanceContainer;
diff --git a/src/components/BeasyLogoIcon.tsx b/src/components/BeasyLogoIcon.tsx
new file mode 100644
index 0000000..63edfd3
--- /dev/null
+++ b/src/components/BeasyLogoIcon.tsx
@@ -0,0 +1,12 @@
+import Box from "@components/bases/Box";
+import { images } from "@styles/Commons";
+import { Image } from "react-native";
+const BeasyLogoIcon = () => {
+ return (
+
+
+
+ );
+};
+
+export default BeasyLogoIcon;
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
new file mode 100644
index 0000000..47faf3e
--- /dev/null
+++ b/src/components/Button.tsx
@@ -0,0 +1,24 @@
+import type { BoxProps, VariantProps } from "@shopify/restyle";
+import type { Theme } from "@themes/Theme";
+import { TouchableOpacity } from "react-native";
+import ButtonBase from "./bases/ButtonBase";
+import Text from "./bases/Text";
+
+type Props = BoxProps &
+ VariantProps &
+ VariantProps & {
+ label: string;
+ onPress: () => void;
+ };
+
+const Button = ({ onPress, label, textVariants, variant, ...rest }: Props) => {
+ return (
+
+
+ {label}
+
+
+ );
+};
+
+export default Button;
diff --git a/src/components/Card.tsx b/src/components/Card.tsx
new file mode 100644
index 0000000..053cbae
--- /dev/null
+++ b/src/components/Card.tsx
@@ -0,0 +1,14 @@
+import { type BoxProps, type VariantProps, createRestyleComponent } from "@shopify/restyle";
+import type { Theme } from "@themes/Theme";
+import { cardVariants } from "@themes/Variants";
+import Box from "./bases/Box";
+
+const Card = createRestyleComponent<
+ VariantProps &
+ BoxProps & {
+ children: React.ReactNode;
+ },
+ Theme
+>([cardVariants], Box);
+
+export default Card;
diff --git a/src/components/ContainerBorderTopCurved.tsx b/src/components/ContainerBorderTopCurved.tsx
new file mode 100644
index 0000000..faa1c2b
--- /dev/null
+++ b/src/components/ContainerBorderTopCurved.tsx
@@ -0,0 +1,45 @@
+import { containers } from "@styles/Commons";
+import { useEffect } from "react";
+import { Animated, Dimensions } from "react-native";
+import Box from "./bases/Box";
+
+type Props = { children: React.ReactNode };
+const ContainerBorderTopCurved = ({ children }: Props) => {
+ const animated = new Animated.Value(0);
+
+ useEffect(() => {
+ Animated.spring(animated, {
+ toValue: 1,
+ useNativeDriver: true,
+ }).start();
+ }, [animated]);
+
+ return (
+
+
+ {children}
+
+
+ );
+};
+
+export default ContainerBorderTopCurved;
diff --git a/src/components/GoBackIconButton.tsx b/src/components/GoBackIconButton.tsx
new file mode 100644
index 0000000..05033b5
--- /dev/null
+++ b/src/components/GoBackIconButton.tsx
@@ -0,0 +1,18 @@
+import Box from "@components/bases/Box";
+import { Ionicons } from "@expo/vector-icons";
+import { TouchableOpacity } from "react-native";
+
+type Props = {
+ onPress: () => void;
+};
+const GoBackIconButton = ({ onPress }: Props) => {
+ return (
+
+
+
+
+
+ );
+};
+
+export default GoBackIconButton;
diff --git a/src/components/Input.tsx b/src/components/Input.tsx
new file mode 100644
index 0000000..1750831
--- /dev/null
+++ b/src/components/Input.tsx
@@ -0,0 +1,24 @@
+import type { VariantProps } from "@shopify/restyle";
+import type { Theme } from "@themes/Theme";
+import { TextInput } from "react-native";
+import type { TextInputProps } from "react-native";
+import Box from "./bases/Box";
+import Text from "./bases/Text";
+
+type Props = TextInputProps &
+ VariantProps & {
+ label: string;
+ };
+
+const Input = ({ label, textVariants, ...rest }: Props) => {
+ return (
+
+ {label}
+
+
+
+
+ );
+};
+
+export default Input;
diff --git a/src/components/NotificationIconButton.tsx b/src/components/NotificationIconButton.tsx
new file mode 100644
index 0000000..7a49a63
--- /dev/null
+++ b/src/components/NotificationIconButton.tsx
@@ -0,0 +1,34 @@
+import Box from "@components/bases/Box";
+import { Ionicons } from "@expo/vector-icons";
+const NotificationIconButton = () => {
+ return (
+
+
+
+
+
+
+ );
+};
+
+export default NotificationIconButton;
diff --git a/src/components/PaymentOption.tsx b/src/components/PaymentOption.tsx
new file mode 100644
index 0000000..f13016c
--- /dev/null
+++ b/src/components/PaymentOption.tsx
@@ -0,0 +1,90 @@
+import { images } from "@styles/Commons";
+import { Image, TouchableOpacity } from "react-native";
+import Box from "./bases/Box";
+
+export enum PaymentMethods {
+ OrangeMoney = 1,
+ MtnMoney = 2,
+ MoobMoney = 3,
+ WaveMoney = 4,
+ VisaCard = 5,
+}
+
+type PaymentOptions = "OrangeMoney" | "MtnMoney" | "MoovMoney" | "WaveMoney" | "VisaCard";
+
+type Props = {
+ onPress: () => void;
+ paymentMethod: PaymentOptions;
+};
+
+const PaymentOptionContainer = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+const OrangeMoney = () => {
+ return (
+
+
+
+ );
+};
+
+const MtnMoney = () => {
+ return (
+
+
+
+ );
+};
+
+const MoovMoney = () => {
+ return (
+
+
+
+ );
+};
+
+const WaveMoney = () => {
+ return (
+
+
+
+ );
+};
+
+const VisaCard = () => {
+ return (
+
+
+
+ );
+};
+
+const PaymentOption = ({ onPress, paymentMethod }: Props) => {
+ return (
+
+ {paymentMethod === "OrangeMoney" && }
+ {paymentMethod === "MtnMoney" && }
+ {paymentMethod === "MoovMoney" && }
+ {paymentMethod === "WaveMoney" && }
+ {paymentMethod === "VisaCard" && }
+
+ );
+};
+
+export default PaymentOption;
diff --git a/src/components/backgrounds/BackgroundDefault.tsx b/src/components/backgrounds/BackgroundDefault.tsx
new file mode 100644
index 0000000..93c36e5
--- /dev/null
+++ b/src/components/backgrounds/BackgroundDefault.tsx
@@ -0,0 +1,20 @@
+import { containers, images } from "@styles/Commons";
+import { ImageBackground, View } from "react-native";
+
+type Props = { children: React.ReactNode };
+
+const BackgroundDefault = ({ children }: Props) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
+
+export default BackgroundDefault;
diff --git a/src/components/backgrounds/BackgroundGreenWhiteContentArea.tsx b/src/components/backgrounds/BackgroundGreenWhiteContentArea.tsx
new file mode 100644
index 0000000..12a8070
--- /dev/null
+++ b/src/components/backgrounds/BackgroundGreenWhiteContentArea.tsx
@@ -0,0 +1,20 @@
+import { containers, images } from "@styles/Commons";
+import { ImageBackground, View } from "react-native";
+
+type Props = { children: React.ReactNode };
+
+const BackgroundGreenWhiteContentArea = ({ children }: Props) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
+
+export default BackgroundGreenWhiteContentArea;
diff --git a/src/components/bases/Box.tsx b/src/components/bases/Box.tsx
new file mode 100644
index 0000000..08db90c
--- /dev/null
+++ b/src/components/bases/Box.tsx
@@ -0,0 +1,6 @@
+import type { Theme } from "@/themes/Theme";
+import { createBox } from "@shopify/restyle";
+
+const Box = createBox();
+
+export default Box;
diff --git a/src/components/bases/ButtonBase.tsx b/src/components/bases/ButtonBase.tsx
new file mode 100644
index 0000000..87885db
--- /dev/null
+++ b/src/components/bases/ButtonBase.tsx
@@ -0,0 +1,14 @@
+import { type BoxProps, type VariantProps, createRestyleComponent } from "@shopify/restyle";
+import type { Theme } from "@themes/Theme";
+import { buttonVariants } from "@themes/Variants";
+import Box from "./Box";
+
+const ButtonBase = createRestyleComponent<
+ VariantProps &
+ BoxProps & {
+ children: React.ReactNode;
+ },
+ Theme
+>([buttonVariants], Box);
+
+export default ButtonBase;
diff --git a/src/components/bases/Text.tsx b/src/components/bases/Text.tsx
new file mode 100644
index 0000000..ad64fae
--- /dev/null
+++ b/src/components/bases/Text.tsx
@@ -0,0 +1,6 @@
+import type { Theme } from "@/themes/Theme";
+import { createText } from "@shopify/restyle";
+
+const Text = createText();
+
+export default Text;
diff --git a/src/contexts/UserAuthenticationContext.tsx b/src/contexts/UserAuthenticationContext.tsx
new file mode 100644
index 0000000..8387feb
--- /dev/null
+++ b/src/contexts/UserAuthenticationContext.tsx
@@ -0,0 +1,27 @@
+import { createContext, useContext, useState } from "react";
+
+export interface UserAuthenticationContextProps {
+ isAuthenticated: boolean;
+ setIsAuthenticated: React.Dispatch>;
+}
+
+export const UserAuthenticationContext = createContext({
+ isAuthenticated: false,
+ setIsAuthenticated: () => {},
+});
+
+export const UserAuthenticationContextProvider = ({ children }: { children: React.ReactNode }) => {
+ const [isAuthenticated, setIsAuthenticated] = useState(false);
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useUserAuthenticationContext = () => {
+ return useContext(UserAuthenticationContext);
+};
diff --git a/src/navigations/BottomTabs.tsx b/src/navigations/BottomTabs.tsx
new file mode 100644
index 0000000..b651222
--- /dev/null
+++ b/src/navigations/BottomTabs.tsx
@@ -0,0 +1,95 @@
+import { Entypo } from "@expo/vector-icons";
+import { FontAwesome } from "@expo/vector-icons";
+import { Ionicons } from "@expo/vector-icons";
+import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
+import { useTheme } from "@shopify/restyle";
+// import palette
+import type { Theme } from "@themes/Theme";
+import { View } from "react-native";
+import Text from "../components/bases/Text";
+import PaymentStackNavigator from "./PaymentStackNavigation";
+const Tab = createBottomTabNavigator();
+
+export const BottomTabs = () => {
+ const theme = useTheme();
+
+ return (
+
+ (
+
+ ),
+ tabBarActiveTintColor: theme.colors.secondary,
+ }}
+ />
+ (
+
+ ),
+ tabBarActiveTintColor: theme.colors.secondary,
+ }}
+ />
+ (
+
+ ),
+ tabBarActiveTintColor: theme.colors.secondary,
+ }}
+ />
+ (
+
+ ),
+ tabBarActiveTintColor: theme.colors.secondary,
+ }}
+ />
+
+ );
+};
+
+const HomeScreen = () => {
+ return (
+
+ Home!
+
+ );
+};
+
+const Transactions = () => {
+ return (
+
+ Transactions!
+
+ );
+};
+
+const SettingsScreen = () => {
+ return (
+
+ Settings!
+
+ );
+};
+
+const ProfileScreen = () => {
+ return (
+
+ Profile!
+
+ );
+};
diff --git a/src/navigations/InitialNavigationHandler.tsx b/src/navigations/InitialNavigationHandler.tsx
new file mode 100644
index 0000000..5562e4d
--- /dev/null
+++ b/src/navigations/InitialNavigationHandler.tsx
@@ -0,0 +1,11 @@
+import { useUserAuthenticationContext } from "@/contexts/UserAuthenticationContext";
+import UnloggedUserStackNavigation from "./UnloggedUserStackNavigation";
+
+const InitialNavigationHandler = () => {
+ const { isAuthenticated } = useUserAuthenticationContext();
+ console.log("isAuthenticated", isAuthenticated);
+
+ return ;
+};
+
+export default InitialNavigationHandler;
diff --git a/src/navigations/PaymentStackNavigation.tsx b/src/navigations/PaymentStackNavigation.tsx
new file mode 100644
index 0000000..5bc4ba4
--- /dev/null
+++ b/src/navigations/PaymentStackNavigation.tsx
@@ -0,0 +1,28 @@
+import { createNativeStackNavigator } from "@react-navigation/native-stack";
+import HomePageWithPaymentOptions from "@screens/HomePageWithPaymentOptions";
+import NumberAndOtpForPaymentScreen from "@screens/NumberAndOtpForPaymentScreen";
+import PaymentAmountInputScreen from "@screens/PaymentAmountInputScreen";
+import type { PaymentStackParamList } from "./Types";
+
+const Stack = createNativeStackNavigator();
+
+const PaymentStackNavigator = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export default PaymentStackNavigator;
diff --git a/src/navigations/Types.ts b/src/navigations/Types.ts
new file mode 100644
index 0000000..ee2a930
--- /dev/null
+++ b/src/navigations/Types.ts
@@ -0,0 +1,31 @@
+import type { NativeStackScreenProps } from "@react-navigation/native-stack";
+
+export type PaymentStackParamList = {
+ homePageWithPaymentOptions: undefined;
+ numberAndOtpForPaymentScreen: undefined;
+ paymentAmountInputScreen: undefined;
+ homeUserNotLoggedIn: undefined;
+ userLoginScreen: undefined;
+};
+
+export type PaymentStackScreenProps = NativeStackScreenProps<
+ PaymentStackParamList,
+ T,
+ "PaymentStackParamList"
+>;
+
+export type PaymentStackScreenComponentProps = React.FC<
+ PaymentStackScreenProps
+>;
+
+export type UnloggedUserStackParamList = {
+ homeUserNotLoggedIn: undefined;
+ userLoginScreen: undefined;
+ bottomTabs: undefined;
+};
+
+export type UnloggedUserStackScreenProps =
+ NativeStackScreenProps;
+
+export type UnloggedUserStackScreenComponentProps =
+ React.FC>;
diff --git a/src/navigations/UnloggedUserStackNavigation.tsx b/src/navigations/UnloggedUserStackNavigation.tsx
new file mode 100644
index 0000000..88fdb5a
--- /dev/null
+++ b/src/navigations/UnloggedUserStackNavigation.tsx
@@ -0,0 +1,22 @@
+import { createNativeStackNavigator } from "@react-navigation/native-stack";
+import HomeUserNotLoggedIn from "@screens/HomeUserNotLoggedIn";
+import UserLoginScreen from "@screens/UserLoginScreen";
+import { BottomTabs } from "./BottomTabs";
+import type { UnloggedUserStackParamList } from "./Types";
+
+const Stack = createNativeStackNavigator();
+
+const UnloggedUserStackNavigation = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export default UnloggedUserStackNavigation;
diff --git a/src/screens/HomePageWithPaymentOptions.tsx b/src/screens/HomePageWithPaymentOptions.tsx
new file mode 100644
index 0000000..1e74825
--- /dev/null
+++ b/src/screens/HomePageWithPaymentOptions.tsx
@@ -0,0 +1,96 @@
+import type { PaymentStackScreenComponentProps } from "@/navigations/Types";
+import BalanceContainer from "@components/BalanceContainer";
+import BeasyLogoIcon from "@components/BeasyLogoIcon";
+import NotificationIconButton from "@components/NotificationIconButton";
+import PaymentOption from "@components/PaymentOption";
+import BackgroundGreenWhiteContentArea from "@components/backgrounds/BackgroundGreenWhiteContentArea";
+import Box from "@components/bases/Box";
+import Text from "@components/bases/Text";
+import { Dimensions } from "react-native";
+import { SafeAreaView } from "react-native-safe-area-context";
+
+const HomePageWithPaymentOptions: PaymentStackScreenComponentProps<"homePageWithPaymentOptions"> =
+ ({ navigation }) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Méthode de paiement
+
+
+
+
+
+ navigation.navigate("paymentAmountInputScreen")
+ }
+ paymentMethod={"OrangeMoney"}
+ />
+
+
+
+ navigation.navigate("paymentAmountInputScreen")
+ }
+ paymentMethod={"MtnMoney"}
+ />
+
+
+
+
+
+ navigation.navigate("paymentAmountInputScreen")
+ }
+ paymentMethod={"MoovMoney"}
+ />
+
+
+
+ navigation.navigate("paymentAmountInputScreen")
+ }
+ paymentMethod={"WaveMoney"}
+ />
+
+
+
+ navigation.navigate("paymentAmountInputScreen")}
+ paymentMethod={"VisaCard"}
+ />
+
+
+
+
+
+ );
+ };
+
+export default HomePageWithPaymentOptions;
+
+const screenWidth = Dimensions.get("window").width;
+const paymentOptionCardWidth = screenWidth / 2 - 30;
+const paymentOptionCardHeight = paymentOptionCardWidth * 0.65;
+const PaymentOptionContainer = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+ {children}
+
+ );
+};
diff --git a/src/screens/HomeUserNotLoggedIn.tsx b/src/screens/HomeUserNotLoggedIn.tsx
new file mode 100644
index 0000000..cb67422
--- /dev/null
+++ b/src/screens/HomeUserNotLoggedIn.tsx
@@ -0,0 +1,69 @@
+import { useUserAuthenticationContext } from "@/contexts/UserAuthenticationContext";
+import type { UnloggedUserStackScreenComponentProps } from "@/navigations/Types";
+import Button from "@components/Button";
+import Box from "@components/bases/Box";
+import Text from "@components/bases/Text";
+import { Image, StyleSheet } from "react-native";
+const HomeUserNotLoggedIn: UnloggedUserStackScreenComponentProps<"homeUserNotLoggedIn"> = ({
+ navigation,
+}) => {
+ const { isAuthenticated } = useUserAuthenticationContext();
+
+ if (isAuthenticated) {
+ navigation.replace("bottomTabs");
+ }
+
+ return (
+
+
+
+
+
+
+ Acceptez des paiements en magasin et en ligne et recevez votre argent en
+ quelques secondes
+
+
+
+
+
+ );
+};
+
+const style = StyleSheet.create({
+ container: {
+ width: "100%",
+ height: "100%",
+ flex: 1,
+ alignItems: "center",
+ justifyContent: "center",
+ },
+ image: {
+ width: "100%",
+ height: "100%",
+ },
+});
+
+export default HomeUserNotLoggedIn;
diff --git a/src/screens/NumberAndOtpForPaymentScreen.tsx b/src/screens/NumberAndOtpForPaymentScreen.tsx
new file mode 100644
index 0000000..0e0f2e9
--- /dev/null
+++ b/src/screens/NumberAndOtpForPaymentScreen.tsx
@@ -0,0 +1,59 @@
+import type { PaymentStackScreenComponentProps } from "@/navigations/Types";
+import BeasyLogoIcon from "@components/BeasyLogoIcon";
+import Button from "@components/Button";
+import GoBackIconButton from "@components/GoBackIconButton";
+import Input from "@components/Input";
+import PaymentOption from "@components/PaymentOption";
+import BackgroundGreenWhiteContentArea from "@components/backgrounds/BackgroundGreenWhiteContentArea";
+import Box from "@components/bases/Box";
+import Text from "@components/bases/Text";
+import { SafeAreaView } from "react-native-safe-area-context";
+
+const NumberAndOtpForPaymentScreen: PaymentStackScreenComponentProps<
+ "numberAndOtpForPaymentScreen"
+> = ({ navigation }) => {
+ return (
+
+
+
+
+
+ navigation.goBack()} />
+
+
+ Montant à payer
+
+ 78000
+
+
+
+
+ {}} paymentMethod={"OrangeMoney"} />
+
+
+
+
+
+ {}}
+ variant={"full"}
+ textVariants={"primary"}
+ label="Paiement"
+ />
+
+
+
+
+ );
+};
+
+export default NumberAndOtpForPaymentScreen;
diff --git a/src/screens/PaymentAmountInputScreen.tsx b/src/screens/PaymentAmountInputScreen.tsx
new file mode 100644
index 0000000..8ac18d4
--- /dev/null
+++ b/src/screens/PaymentAmountInputScreen.tsx
@@ -0,0 +1,52 @@
+import type { PaymentStackScreenComponentProps } from "@/navigations/Types";
+import BalanceContainer from "@components/BalanceContainer";
+import BeasyLogoIcon from "@components/BeasyLogoIcon";
+import Button from "@components/Button";
+import GoBackIconButton from "@components/GoBackIconButton";
+import Input from "@components/Input";
+import BackgroundGreenWhiteContentArea from "@components/backgrounds/BackgroundGreenWhiteContentArea";
+import Box from "@components/bases/Box";
+import { SafeAreaView } from "react-native-safe-area-context";
+
+const PaymentAmountInputScreen: PaymentStackScreenComponentProps<"paymentAmountInputScreen"> = ({
+ navigation,
+}) => {
+ return (
+
+
+
+
+
+ navigation.goBack()} />
+
+
+
+
+
+
+
+
+ navigation.navigate("numberAndOtpForPaymentScreen")}
+ variant={"full"}
+ textVariants={"primary"}
+ label="Confirmer"
+ />
+
+
+
+
+ );
+};
+
+export default PaymentAmountInputScreen;
diff --git a/src/screens/UserLoginScreen.tsx b/src/screens/UserLoginScreen.tsx
new file mode 100644
index 0000000..105560f
--- /dev/null
+++ b/src/screens/UserLoginScreen.tsx
@@ -0,0 +1,76 @@
+import type { UnloggedUserStackScreenComponentProps } from "@/navigations/Types";
+import Button from "@components/Button";
+import ContainerBorderTopCurved from "@components/ContainerBorderTopCurved";
+import Input from "@components/Input";
+import BackgroundDefault from "@components/backgrounds/BackgroundDefault";
+import Box from "@components/bases/Box";
+import Text from "@components/bases/Text";
+import { Fontisto } from "@expo/vector-icons";
+import { containers } from "@styles/Commons";
+import { KeyboardAvoidingView, Platform, TouchableOpacity, View } from "react-native";
+import { useSafeAreaInsets } from "react-native-safe-area-context";
+
+const UserLoginScreen: UnloggedUserStackScreenComponentProps<"userLoginScreen"> = ({
+ navigation,
+}) => {
+ const insets = useSafeAreaInsets();
+
+ return (
+
+
+
+
+
+ navigation.goBack()}>
+
+
+
+
+ Mot de passe oublie ?
+
+
+
+
+
+
+
+ Connexion
+
+ Bienvenue, vous nous avez manqué !
+
+
+
+
+
+
+
+
+ navigation.navigate("bottomTabs")}
+ />
+ {}}
+ />
+
+
+
+
+
+ );
+};
+
+export default UserLoginScreen;
diff --git a/src/styles/Commons.tsx b/src/styles/Commons.tsx
new file mode 100644
index 0000000..3283300
--- /dev/null
+++ b/src/styles/Commons.tsx
@@ -0,0 +1,26 @@
+import { StyleSheet } from "react-native";
+
+export const containers = StyleSheet.create({
+ fullScreenContentCentered: {
+ width: "100%",
+ height: "100%",
+ flex: 1,
+ alignItems: "center",
+ justifyContent: "center",
+ },
+ containerFull: {
+ width: "100%",
+ height: "100%",
+ flex: 1,
+ },
+ containerFlexUno: {
+ flex: 1,
+ },
+});
+
+export const images = StyleSheet.create({
+ cover: {
+ width: "100%",
+ height: "100%",
+ },
+});
diff --git a/src/themes/Theme.tsx b/src/themes/Theme.tsx
new file mode 100644
index 0000000..da7793d
--- /dev/null
+++ b/src/themes/Theme.tsx
@@ -0,0 +1,130 @@
+import { createTheme } from "@shopify/restyle";
+
+const palette = {
+ purpleLight: "#8C6FF7",
+ purplePrimary: "#5A31F4",
+ purpleDark: "#3F22AB",
+
+ greenLight: "#56DCBA",
+ greenPrimary: "#0ECD9D",
+ greenDark: "#0A906E",
+
+ black: "#0B0B0B",
+ white: "#FFFFFF",
+ green: "#00875A",
+ lightGray: "#F4F5F7",
+ gray: "#747E98",
+ yellow: "#F4C44A",
+};
+
+const theme = createTheme({
+ colors: {
+ primary: palette.white,
+ secondary: palette.green,
+ tertiary: palette.yellow,
+ black: palette.black,
+ white: palette.white,
+ lightGray: palette.lightGray,
+ gray: palette.gray,
+ yellow: palette.yellow,
+ },
+ spacing: {
+ s: 8,
+ m: 16,
+ l: 24,
+ xl: 40,
+ x64: 64,
+ x72: 72,
+ x80: 80,
+ x100: 100,
+ x120: 120,
+ x140: 140,
+ x160: 160,
+ x180: 180,
+ x200: 200,
+ x220: 220,
+ x240: 240,
+ // full: "100%",
+ },
+ breakpoints: {
+ phone: 0,
+ tablet: 768,
+ },
+ textVariants: {
+ defaults: {
+ // We can define a default text variant here.
+ color: "gray",
+ },
+
+ header: {
+ fontWeight: "bold",
+ fontSize: 34,
+ },
+ body: {
+ fontSize: 16,
+ lineHeight: 24,
+ },
+ primary: {
+ color: "primary",
+ },
+ secondary: {
+ color: "secondary",
+ },
+ black: {
+ color: "black",
+ },
+ white: {
+ color: "white",
+ },
+ gray: {
+ color: "gray",
+ },
+ lightGray: {
+ color: "lightGray",
+ },
+ },
+ cardVariants: {
+ defaults: {
+ // We can define defaults for the variant here.
+ // This will be applied after the defaults passed to createVariant and before the variant defined below.
+ },
+ regular: {
+ // We can refer to other values in the theme here, and use responsive props
+ padding: {
+ phone: "s",
+ tablet: "m",
+ },
+ },
+ elevated: {
+ padding: {
+ phone: "s",
+ tablet: "m",
+ },
+ shadowColor: "black",
+ shadowOpacity: 0.5,
+ shadowOffset: { width: 10, height: 10 },
+ shadowRadius: 10,
+ elevation: 5,
+ },
+ },
+ buttonVariants: {
+ defaults: {
+ // We can define defaults for the variant here.
+ },
+ full: {
+ backgroundColor: "secondary",
+ color: "white",
+ },
+ clean: {
+ backgroundColor: "primary",
+ color: "secondary",
+ },
+ lightGray: {
+ backgroundColor: "lightGray",
+ color: "black",
+ },
+ },
+});
+
+export type Theme = typeof theme;
+export default theme;
diff --git a/src/themes/Variants.tsx b/src/themes/Variants.tsx
new file mode 100644
index 0000000..a4d79ac
--- /dev/null
+++ b/src/themes/Variants.tsx
@@ -0,0 +1,36 @@
+import { createVariant } from "@shopify/restyle";
+import type { Theme } from "@themes/Theme";
+
+export const cardVariants = createVariant({
+ themeKey: "cardVariants",
+ defaults: {
+ margin: {
+ phone: "s",
+ tablet: "m",
+ },
+ backgroundColor: "white",
+ },
+});
+
+export const buttonVariants = createVariant({
+ themeKey: "buttonVariants",
+ defaults: {
+ backgroundColor: "primary",
+ color: "secondary",
+ height: 50,
+ borderRadius: 10,
+ margin: {
+ phone: "s",
+ tablet: "m",
+ },
+ },
+});
+
+export const textVariants = createVariant({
+ themeKey: "textVariants",
+ defaults: {
+ fontSize: 16,
+ fontWeight: "normal",
+ color: "gray",
+ },
+});
diff --git a/tsconfig.json b/tsconfig.json
index c4a1038..4fae3b1 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,15 @@
{
"extends": "expo/tsconfig.base",
"compilerOptions": {
- "strict": true
+ "strict": true,
+ "baseUrl": ".",
+ "paths": {
+ "@screens/*": ["./src/screens/*"],
+ "@components/*": ["./src/components/*"],
+ "@themes/*": ["./src/themes/*"],
+ "@styles/*": ["./src/styles/*"],
+ "@hooks/*": ["./src/hooks/*"],
+ "@/*": ["./src/*"]
+ }
}
}
diff --git a/yarn.lock b/yarn.lock
index eae5f67..405d416 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2052,6 +2052,59 @@
invariant "^2.2.4"
nullthrows "^1.1.1"
+"@react-navigation/bottom-tabs@^7.0.0-alpha.22":
+ version "7.0.0-alpha.22"
+ resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-7.0.0-alpha.22.tgz#3205fe030afc28994cad3b698b73a37e4d570723"
+ integrity sha512-aiqbPjAfAcR57XItMQaYhrRdWYdgMqsh5WuXkGWDaSi53WQm1a9GYAteSkm/gtY6Flxro77Q++2L6e09VBh+kA==
+ dependencies:
+ "@react-navigation/elements" "^2.0.0-alpha.17"
+ color "^4.2.3"
+
+"@react-navigation/core@^7.0.0-alpha.17":
+ version "7.0.0-alpha.17"
+ resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-7.0.0-alpha.17.tgz#6ed770634ed07ca71a4956f7bc11e098ebd4a754"
+ integrity sha512-Oto3GAHCYWbLe8Fck8I7+1M5ATYlHkippoyNMM2UQWyBR5eudvPlvhioxzupdUu/70P8H4LX7lksyFBtVTGZIA==
+ dependencies:
+ "@react-navigation/routers" "^7.0.0-alpha.6"
+ escape-string-regexp "^4.0.0"
+ nanoid "3.3.7"
+ query-string "^7.1.3"
+ react-is "^18.2.0"
+ use-latest-callback "^0.1.9"
+
+"@react-navigation/elements@^2.0.0-alpha.17":
+ version "2.0.0-alpha.17"
+ resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-2.0.0-alpha.17.tgz#433ca7ff49097c46e7db40a08b8dc37f344d688c"
+ integrity sha512-DvKPYhqDMjS7/61MM+xlAq22078M/WKqzwwjmXR5/fd+rDtOq3ysMzyCBSRKSjy5Dh+UUcQP3GobIWZhzVBPsA==
+ dependencies:
+ color "^4.2.3"
+
+"@react-navigation/native-stack@^7.0.0-alpha.20":
+ version "7.0.0-alpha.20"
+ resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-7.0.0-alpha.20.tgz#1147108f59dac47f73a45731b267db0583c3c80a"
+ integrity sha512-QGJjQNEAeb0JESia5lBBkns5ELuzsDJ0Ff4/nPDGYRDBXjW4d+SJ4Nu5pBXmkIXs0MK5PqMy46kKXf38ew5Hrw==
+ dependencies:
+ "@react-navigation/elements" "^2.0.0-alpha.17"
+ warn-once "^0.1.1"
+
+"@react-navigation/native@^7.0.0-alpha.18":
+ version "7.0.0-alpha.18"
+ resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-7.0.0-alpha.18.tgz#ea18461ff40d538f87b80938384c470788d924db"
+ integrity sha512-XzRTvWav7pM/S1by0wGMbDIYsuy0uel7chPi3ZHEcbPnskOmzs0h8QietVTz04LYclY8tSg8ojLjq1KNG7dGYA==
+ dependencies:
+ "@react-navigation/core" "^7.0.0-alpha.17"
+ escape-string-regexp "^4.0.0"
+ fast-deep-equal "^3.1.3"
+ nanoid "3.3.7"
+ use-latest-callback "^0.1.9"
+
+"@react-navigation/routers@^7.0.0-alpha.6":
+ version "7.0.0-alpha.6"
+ resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-7.0.0-alpha.6.tgz#d10fcbc408d94b9b6904b1e97de88422f69954fb"
+ integrity sha512-0V+/WRbgVmrPXW5TjMLxf8NJAHsUoG9G8X4WWmVIf1ASMF3POZM4CCbhEeudhgUxN4QEvkoSIrzvUpoUplQOMw==
+ dependencies:
+ nanoid "3.3.7"
+
"@segment/loosely-validate-event@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681"
@@ -2060,6 +2113,11 @@
component-type "^1.2.1"
join-component "^1.1.0"
+"@shopify/restyle@^2.4.4":
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/@shopify/restyle/-/restyle-2.4.4.tgz#a94dde4e7fcfa03bc5f06648b70ecf47caa661ba"
+ integrity sha512-Y64T8pCSKZi7ChMMfCfe+EJJsqeF+lNLsxYDHbuU63ffLHN7wRwIALJY6VqzcJWZX3fhCztX7AqOkgc7CetfPg==
+
"@sideway/address@^4.1.5":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
@@ -2851,11 +2909,27 @@ color-name@1.1.3:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-color-name@~1.1.4:
+color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+color-string@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
+ integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
+ integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
+ dependencies:
+ color-convert "^2.0.1"
+ color-string "^1.9.0"
+
colorette@^1.0.7:
version "1.4.0"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
@@ -3085,6 +3159,11 @@ decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+decode-uri-component@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
+ integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
@@ -3537,6 +3616,11 @@ expo@~50.0.14:
fbemitter "^3.0.0"
whatwg-url-without-unicode "8.0.0-3"
+fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
fast-glob@^3.2.5, fast-glob@^3.2.9:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
@@ -3606,6 +3690,11 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
+filter-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
+ integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==
+
finalhandler@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
@@ -4145,6 +4234,11 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
is-bigint@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
@@ -5203,7 +5297,7 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nanoid@^3.3.7:
+nanoid@3.3.7, nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
@@ -5737,6 +5831,16 @@ qrcode-terminal@0.11.0:
resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e"
integrity sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==
+query-string@^7.1.3:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328"
+ integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==
+ dependencies:
+ decode-uri-component "^0.2.2"
+ filter-obj "^1.1.0"
+ split-on-first "^1.0.0"
+ strict-uri-encode "^2.0.0"
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -5772,6 +5876,11 @@ react-devtools-core@^4.27.7:
shell-quote "^1.6.1"
ws "^7"
+react-freeze@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/react-freeze/-/react-freeze-1.0.4.tgz#cbbea2762b0368b05cbe407ddc9d518c57c6f3ad"
+ integrity sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==
+
"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
@@ -5787,6 +5896,24 @@ react-is@^17.0.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+react-is@^18.2.0:
+ version "18.3.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.0.tgz#6c2d9b6cdd4c2cffb7c89b1bcb57bc44d12f1993"
+ integrity sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ==
+
+react-native-safe-area-context@4.8.2:
+ version "4.8.2"
+ resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.8.2.tgz#e6b3d8acf3c6afcb4b5db03a97f9c37df7668f65"
+ integrity sha512-ffUOv8BJQ6RqO3nLml5gxJ6ab3EestPiyWekxdzO/1MQ7NF8fW1Mzh1C5QE9yq573Xefnc7FuzGXjtesZGv7cQ==
+
+react-native-screens@~3.29.0:
+ version "3.29.0"
+ resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.29.0.tgz#1dee0326defbc1d4ef4e68287abb32a8e6b76b29"
+ integrity sha512-yB1GoAMamFAcYf4ku94uBPn0/ani9QG7NdI98beJ5cet2YFESYYzuEIuU+kt+CNRcO8qqKeugxlfgAa3HyTqlg==
+ dependencies:
+ react-freeze "^1.0.0"
+ warn-once "^0.1.0"
+
react-native@0.73.6:
version "0.73.6"
resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.6.tgz#ed4c675e205a34bd62c4ce8b9bd1ca5c85126d5b"
@@ -6286,6 +6413,13 @@ simple-plist@^1.1.0:
bplist-parser "0.3.1"
plist "^3.0.5"
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+ dependencies:
+ is-arrayish "^0.3.1"
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -6354,6 +6488,11 @@ source-map@^0.7.3:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
+split-on-first@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
+ integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
+
split@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
@@ -6407,6 +6546,11 @@ stream-buffers@2.2.x:
resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==
+strict-uri-encode@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
+ integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
+
string-argv@0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
@@ -6932,6 +7076,11 @@ url-join@4.0.0:
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a"
integrity sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==
+use-latest-callback@^0.1.9:
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.9.tgz#10191dc54257e65a8e52322127643a8940271e2a"
+ integrity sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==
+
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -6981,6 +7130,11 @@ walker@^1.0.7:
dependencies:
makeerror "1.0.12"
+warn-once@^0.1.0, warn-once@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/warn-once/-/warn-once-0.1.1.tgz#952088f4fb56896e73fd4e6a3767272a3fccce43"
+ integrity sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==
+
wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"