diff --git a/%ProgramData%/Microsoft/Windows/UUS/State/_active.uusver b/%ProgramData%/Microsoft/Windows/UUS/State/_active.uusver new file mode 100644 index 0000000..8a2fff5 --- /dev/null +++ b/%ProgramData%/Microsoft/Windows/UUS/State/_active.uusver @@ -0,0 +1 @@ +1301.2403.14011.0 \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..6e099d1 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +EXPO_PUBLIC_REACT_APP_GEMINI_KEY=your_gemini_key +EXPO_PUBLIC_REACT_APP_SUPABASE_URL=your_supabase_url +EXPO_PUBLIC_REACT_APP_ANON_KEY=your_app_anon_key \ No newline at end of file diff --git a/.gitignore b/.gitignore index 05647d5..dbe5e16 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ yarn-error.* # local env files .env*.local +.env # typescript *.tsbuildinfo diff --git a/.husky/pre-commit 2 b/.husky/pre-commit 2 new file mode 100644 index 0000000..6ab4e0e --- /dev/null +++ b/.husky/pre-commit 2 @@ -0,0 +1 @@ +npx lint-staged . diff --git a/App.js b/App.js index f79587c..7f39931 100644 --- a/App.js +++ b/App.js @@ -1,20 +1,159 @@ +import React, { useState, useEffect, useRef } from 'react'; +import { + Image, + Text, + View, + TouchableOpacity, + StyleSheet, + Animated, + Dimensions, + PanResponder, +} from 'react-native'; import { StatusBar } from 'expo-status-bar'; -import { StyleSheet, Text, View } from 'react-native'; +import Navigator from './src/navigator/Navigator'; +import { supabase } from './src/config/supabaseClient'; +import SignupScreen from './src/screens/SignupScreen'; +import { NavigationContainer } from '@react-navigation/native'; +import { createStackNavigator } from '@react-navigation/stack'; +import { Provider } from 'react-redux'; +import store from './src/store/storeConfig'; +import { userLogin } from './src/store/ducks/user'; +import ChatBotScreen from './src/screens/ChatbotScreen'; +import Modal from 'react-native-modal'; + + +const Stack = createStackNavigator(); + +const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get('window'); +const TOOLTIP_SIZE = 60; export default function App() { + const [session, setSession] = useState(null); + const [isChatVisible, setIsChatVisible] = useState(false); + const [isLoading, setIsLoading] = useState(true); + const [isLoggedIn, setIsLoggedIn] = useState(false); + const pan = useRef(new Animated.ValueXY()).current; + + + useEffect(() => { + const checkSession = async () => { + const { + data: { session }, + } = await supabase.auth.getSession(); + if (session) { + setSession(session); + store.dispatch(userLogin(session)); + setIsLoggedIn(true); + setIsLoading(false); + } else { + setIsLoading(false); + } + }; + + checkSession(); + + const { data: listener } = supabase.auth.onAuthStateChange( + (_event, session) => { + setSession(session); + } + ); + + return () => { + listener.unsubscribe(); + }; + }, []); + + const handlePress = () => { + setIsChatVisible(true); + }; + return ( + + + + + {isLoggedIn ? ( + + {() => ()} + + ) : (isLoading ? ( + ) : ( + + {() => ()} + + ))} + + {session && ( + <> + setIsChatVisible(false)} + style={styles.modal}> + + setIsChatVisible(false) }} + /> + + + setIsChatVisible(true)}> + + + + + + )} + + + ); +} + + +export function LoadingScreen() { return ( - - Initial commit for Habit Tracker - + + Loading... ); } const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', + tooltipButton: { + position: 'absolute', + bottom: 80, + right: 30, + zIndex: 1000, + }, + tooltipCircle: { + width: 60, + height: 60, + borderRadius: 30, + backgroundColor: 'lightblue', + justifyContent: 'center', alignItems: 'center', + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.8, + shadowRadius: 2, + elevation: 5, + }, + tooltipImage: { + width: 50, + height: 50, + resizeMode: 'contain', + }, + modal: { justifyContent: 'center', + alignItems: 'center', + }, + modalContent: { + width: '100%', + height: '80%', + backgroundColor: 'white', + borderRadius: 10, + padding: 20, }, }); diff --git a/README.md b/README.md index fd7e8bc..b10398b 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,113 @@ -## **Project Description** +# Live Timeless +- [**Project Overview**](#project-overview) +- [**Status**](#status) +- [**Installation**](#installation) +- [Project Structure](#project-structure) +- [**Architecture and Design**](#architecture-and-design) +- [**Usage**](#usage) -We are excited to embark on an ambitious initiative to create a mobile app designed to promote healthy living and wellness optimization through: +# **Project Overview** -- Habit logging -- Fitness trackers -- Medical test analysis -- Personalized AI coaching +- **Description:** Live Timeless is a mobile application for IOS and Android designed to engage users in maintaining and tracking healthy habits. Live Timeless motivates consistent health habits with social engagement, helping users manage their health efficiently and potentially reduce life insurance premiums. The app streamlines health management with a user-friendly interface and AI-driven suggestions, saving time and enhancing habit adherence. This app was developed in response to the need for a more engaging and effective habit management tool. -With a foundation in the CST program's Web and Mobile option, this app will be a fresh greenfield project iterating on an existing concept prototype called Live Timeless. Students will be encouraged to: +# **Status:** -- Reassess and redesign this app from the ground up -- Pick an appropriate and modern tech stack -- Integrate with public APIs +As of the latest project update (May 27th, 2024), "Live Timeless" has successfully implemented the majority of its planned features, aligning closely with our initial scope and objectives: -This initiative will serve as a cornerstone for a broader corporate wellness program, blending financial incentives with health optimization. The goal is to empower users with actionable insights into their wellness journey, guided by: +- **Coaching Chatbot:** Fully integrated with Google's gemini pro model, the AI coaching chatbot is operational, offering personalized plans and actionable steps to help users achieve their health goals. -- Fitness tracker data -- Regular blood-work -- Social groups -- A personalized AI chatbot coach -- A corporate wellness program +- **User Account Management:**: All user account management features are complete and functioning as intended, making it GDPR (General data protection regulation) compliant. This includes: -## **Programming Language(s)** +- Secure registration and login processes. +- Functionalities to delete accounts and download user data. +- Email-based authentication with enhanced security through OAuth (SupaAuth). -Students will be expected to assess the project and pick an appropriate tech stack based on the project requirements and their capabilities. There is a strong preference for modern, popular, and open-source technologies. Examples include: +- **Habit Setting and Tracking**: -- Flutter -- React Native -- Django -- Laravel +- Users can set and track various habit goals such as water intake and daily pushups. +- The application supports the upload of progress photos and descriptions. +- Users can create, post, view, and track the progress of their habits and see detailed reports including optional progress photos and descriptions. -(All technologies chosen must be free and open-source) +- **System Performance and Scalability**: -Students will also be given the opportunity to use APIs of existing services to augment their app's capabilities. Examples include: +The backend architecture, powered by Supabase, effectively handles real-time data management and user interactions, ensuring scalability and robust performance. -- OAuth / Firebase for authentication -- Apple HealthKit / Google Fit for fitness trackers -- OpenAI GPT for AI customized coaching chatbots -- Tesseract for document OCR +- **User Experience and Interface**: -Additionally, students will have the chance to build their own DevOps pipeline, striving for continuous integration and deployment to the app store and to the cloud. We will be using GitHub Workflows and Actions. The use of a Mono-Repo is encouraged. +The user interface is clean, intuitive, and fully responsive, designed to cater to a broad demographic across various devices and platforms. -## **Hardware/Software Requirements** +- **Pending Implementation**: -Development will utilize open-source tools, with students using their own computing resources. Fitness wearables and health data will be provided as needed. +The only two components not fully implemented as planned is the community interaction feature and instagram posting. While users can share and interact with friends' habit feeds, the broader community functionalities such as searching for and joining community groups around specific health habits are still under development. The API for posting habits to instagram also requires a few weeks for approval, ultimately causing it to fall out of scope for this project's timeline -## **Current Work/Arrangement** +# **Installation** -Transitioning from manual and fragmented wellness tracking, this project aims for a technological leap. The existing mobile app, built with React Native & Laravel, provides a valuable learning platform, but the goal is to innovate beyond its current capabilities, creating a new, more sophisticated solution. The project aims to digitize and enhance the wellness tracking process, currently reliant on manual inputs and disparate systems. By leveraging Agile methodologies and a robust DevOps pipeline, we intend to streamline development and deployment, ensuring a seamless and scalable solution. +- **Prerequisites:** Make sure you have the latest version of Node.js installed +- **Setup:** Build instructions are here: https://docs.google.com/document/d/1zsOa7byMlx2hp6cp83-3GDG_W2bQ26CHtWwud7Ewx5s/edit?usp=sharing +- **Configuration:** the .env file is to be placed in the root folder and is of the following format: + +- API key for Gemini +EXPO_PUBLIC_REACT_APP_GEMINI_KEY=your_gemini_api_key_here + +- Supabase URL for connecting to your database +EXPO_PUBLIC_REACT_APP_SUPABASE_URL=https://your_supabase_url_here + +- Anonymous key for accessing Supabase services +EXPO_PUBLIC_REACT_APP_ANON_KEY=your_supabase_anon_key_here + +# Project Structure + +- /src: Holds most of the files making up the application +- /navigator: Contains the bottom navigation bar that helps navigate between screens +- /assets: Contains all static resources like images, logos, and icon files. +- /components: Reusable components used throughout the application. These components are mostly from the frontend of the old repo +- /screens: Contains all the individual screens of the app, each representing a different UI section. +- /services: Contains an example service for Stripe implementation (is not used in app yet since it is out of scope. It's there for future development if needed) +- /utils: Utility functions and helpers to run in the app +- App.js: The root component that houses the overall app structure. + +# **Architecture and Design** + +![Live Timeless ERD](assets/images/ERDSupabase.png) + +- **Technologies Used:** List of main technologies, frameworks, and libraries. + +- AI-Model: Google Generative AI (Gemini Pro): This AI model is used to generate Habit plans/schedules for Users to follow to reach their health goals. + +- Frontend Development: React Native (version 0.74): Is used for developing UI components which provide a seamless user experience across Android and IOS devices. + +- Backend Development: Supabase (in General Availability, version 2.43.1): This is a firebase alternative that provides a database to store and sync data in real-time among users which tracks habit data. Supabase also handles backend logic and API integrations. Lastly, supabase has built-in support for authentication including OAuth. + +- Emulation Framework:Expo Go (SDK 51): Will be used to emulate the app on both android and ios devices during development + +# **Usage** + +Below are some use cases among many for the application + +Creating a habit: +- Navigate to the 'Habit' section in the app and click 'Add Habit'. +- Enter details about the habit, such as 'Habit Name' (e.g., 'Drink Water'), 'Habit Description' (e.g., 'Stay hydrated by drinking 8 glasses of water daily'), and set an 'End Date' for the habit. + +Interacting with the AI Coach: +- Open the 'AI Coach' by clicking on the circle with the chatbot icon in the bottom right +- Input your current habit goals and receive guidance from Gemini AI +- The AI is accessible when creating a habit as well, click 'generate habit schedule' to see a suggestion based on the habit you're creating + +Updating Posting Progress: +- Access the 'Checklist' dashboard. +- Select the habit for the day you completed the habit (this will cross it off the list). +- Navigate to the 'Timeline' and create a new post. Select the habit you did for the day +- Upload a description and progress photo optionally and submit the update. + +Viewing Friend Feeds: +- Go to the 'Profile' section and select 'Find User' +- search a user by their username and press 'Follow' +- Go to the 'Timeline' tab. +- View posts from friends including their habit updates and progress photos. +- React with a heart or comment on their posts to engage with their progress. + +Registering and Managing Account: +- Register for a new account by providing an email and creating a password. +- Verify your email through the link sent to your email inbox. +- Log in to access your new account. +- Click the gear icon in the top right of 'Profile' to get your data, sign out, or delete your account \ No newline at end of file diff --git a/assets/icons/activity-selected.png b/assets/icons/activity-selected.png new file mode 100644 index 0000000..bde3d83 Binary files /dev/null and b/assets/icons/activity-selected.png differ diff --git a/assets/icons/activity.png b/assets/icons/activity.png new file mode 100644 index 0000000..b9b0266 Binary files /dev/null and b/assets/icons/activity.png differ diff --git a/assets/icons/add-photo.png b/assets/icons/add-photo.png new file mode 100644 index 0000000..d78745e Binary files /dev/null and b/assets/icons/add-photo.png differ diff --git a/assets/icons/alert 2.png b/assets/icons/alert 2.png new file mode 100644 index 0000000..ea9cdcb Binary files /dev/null and b/assets/icons/alert 2.png differ diff --git a/assets/icons/alert.png b/assets/icons/alert.png new file mode 100644 index 0000000..ea9cdcb Binary files /dev/null and b/assets/icons/alert.png differ diff --git a/assets/icons/arrow-right 2.png b/assets/icons/arrow-right 2.png new file mode 100644 index 0000000..712f921 Binary files /dev/null and b/assets/icons/arrow-right 2.png differ diff --git a/assets/icons/arrow-right.png b/assets/icons/arrow-right.png new file mode 100644 index 0000000..712f921 Binary files /dev/null and b/assets/icons/arrow-right.png differ diff --git a/assets/icons/arrow-up-right.png b/assets/icons/arrow-up-right.png new file mode 100644 index 0000000..28b6cc9 Binary files /dev/null and b/assets/icons/arrow-up-right.png differ diff --git a/assets/icons/battery 2.png b/assets/icons/battery 2.png new file mode 100644 index 0000000..51700e2 Binary files /dev/null and b/assets/icons/battery 2.png differ diff --git a/assets/icons/battery.png b/assets/icons/battery.png new file mode 100644 index 0000000..51700e2 Binary files /dev/null and b/assets/icons/battery.png differ diff --git a/assets/icons/bed 2.png b/assets/icons/bed 2.png new file mode 100644 index 0000000..3e60cfe Binary files /dev/null and b/assets/icons/bed 2.png differ diff --git a/assets/icons/bed.png b/assets/icons/bed.png new file mode 100644 index 0000000..3e60cfe Binary files /dev/null and b/assets/icons/bed.png differ diff --git a/assets/icons/bolt 2.png b/assets/icons/bolt 2.png new file mode 100644 index 0000000..e3775bd Binary files /dev/null and b/assets/icons/bolt 2.png differ diff --git a/assets/icons/bolt.png b/assets/icons/bolt.png new file mode 100644 index 0000000..e3775bd Binary files /dev/null and b/assets/icons/bolt.png differ diff --git a/assets/icons/bookmark-bordered.png b/assets/icons/bookmark-bordered.png new file mode 100644 index 0000000..c8bb887 Binary files /dev/null and b/assets/icons/bookmark-bordered.png differ diff --git a/assets/icons/bookmark-selected 2.png b/assets/icons/bookmark-selected 2.png new file mode 100644 index 0000000..ca4d1b0 Binary files /dev/null and b/assets/icons/bookmark-selected 2.png differ diff --git a/assets/icons/bookmark-selected.png b/assets/icons/bookmark-selected.png new file mode 100644 index 0000000..ca4d1b0 Binary files /dev/null and b/assets/icons/bookmark-selected.png differ diff --git a/assets/icons/bookmark-white.png b/assets/icons/bookmark-white.png new file mode 100644 index 0000000..407f967 Binary files /dev/null and b/assets/icons/bookmark-white.png differ diff --git a/assets/icons/bookmark.png b/assets/icons/bookmark.png new file mode 100644 index 0000000..e15fbc5 Binary files /dev/null and b/assets/icons/bookmark.png differ diff --git a/assets/icons/bullseye 2.png b/assets/icons/bullseye 2.png new file mode 100644 index 0000000..6a1f949 Binary files /dev/null and b/assets/icons/bullseye 2.png differ diff --git a/assets/icons/bullseye.png b/assets/icons/bullseye.png new file mode 100644 index 0000000..6a1f949 Binary files /dev/null and b/assets/icons/bullseye.png differ diff --git a/assets/icons/calendar 2.png b/assets/icons/calendar 2.png new file mode 100644 index 0000000..2d7c1d4 Binary files /dev/null and b/assets/icons/calendar 2.png differ diff --git a/assets/icons/calendar-selected 2.png b/assets/icons/calendar-selected 2.png new file mode 100644 index 0000000..f27d542 Binary files /dev/null and b/assets/icons/calendar-selected 2.png differ diff --git a/assets/icons/calendar-selected.png b/assets/icons/calendar-selected.png new file mode 100644 index 0000000..f27d542 Binary files /dev/null and b/assets/icons/calendar-selected.png differ diff --git a/assets/icons/calendar.png b/assets/icons/calendar.png new file mode 100644 index 0000000..2d7c1d4 Binary files /dev/null and b/assets/icons/calendar.png differ diff --git a/assets/icons/check.png b/assets/icons/check.png new file mode 100644 index 0000000..5a67216 Binary files /dev/null and b/assets/icons/check.png differ diff --git a/assets/icons/circle-selected.png b/assets/icons/circle-selected.png new file mode 100644 index 0000000..d299316 Binary files /dev/null and b/assets/icons/circle-selected.png differ diff --git a/assets/icons/circle.png b/assets/icons/circle.png new file mode 100644 index 0000000..a7de561 Binary files /dev/null and b/assets/icons/circle.png differ diff --git a/assets/icons/clipboard-check-selected.png b/assets/icons/clipboard-check-selected.png new file mode 100644 index 0000000..d5587c9 Binary files /dev/null and b/assets/icons/clipboard-check-selected.png differ diff --git a/assets/icons/clipboard-check.png b/assets/icons/clipboard-check.png new file mode 100644 index 0000000..3f3eb7b Binary files /dev/null and b/assets/icons/clipboard-check.png differ diff --git a/assets/icons/close-image.png b/assets/icons/close-image.png new file mode 100644 index 0000000..89d8ef0 Binary files /dev/null and b/assets/icons/close-image.png differ diff --git a/assets/icons/close.png b/assets/icons/close.png new file mode 100644 index 0000000..dcc06ae Binary files /dev/null and b/assets/icons/close.png differ diff --git a/assets/icons/cog.png b/assets/icons/cog.png new file mode 100644 index 0000000..97d3be2 Binary files /dev/null and b/assets/icons/cog.png differ diff --git a/assets/icons/comment.png b/assets/icons/comment.png new file mode 100644 index 0000000..8d7f172 Binary files /dev/null and b/assets/icons/comment.png differ diff --git a/assets/icons/delete.png b/assets/icons/delete.png new file mode 100644 index 0000000..32b417f Binary files /dev/null and b/assets/icons/delete.png differ diff --git a/assets/icons/edit.png b/assets/icons/edit.png new file mode 100644 index 0000000..fff533b Binary files /dev/null and b/assets/icons/edit.png differ diff --git a/assets/icons/ellipse-separator.png b/assets/icons/ellipse-separator.png new file mode 100644 index 0000000..5bb6b24 Binary files /dev/null and b/assets/icons/ellipse-separator.png differ diff --git a/assets/icons/ellipse-vertical.png b/assets/icons/ellipse-vertical.png new file mode 100644 index 0000000..56d5ca3 Binary files /dev/null and b/assets/icons/ellipse-vertical.png differ diff --git a/assets/icons/ellipse.png b/assets/icons/ellipse.png new file mode 100644 index 0000000..bfd971d Binary files /dev/null and b/assets/icons/ellipse.png differ diff --git a/assets/icons/envelope-blue 2.png b/assets/icons/envelope-blue 2.png new file mode 100644 index 0000000..0dc5a25 Binary files /dev/null and b/assets/icons/envelope-blue 2.png differ diff --git a/assets/icons/envelope-blue.png b/assets/icons/envelope-blue.png new file mode 100644 index 0000000..0dc5a25 Binary files /dev/null and b/assets/icons/envelope-blue.png differ diff --git a/assets/icons/envelope-white 2.png b/assets/icons/envelope-white 2.png new file mode 100644 index 0000000..47bf0d5 Binary files /dev/null and b/assets/icons/envelope-white 2.png differ diff --git a/assets/icons/envelope-white.png b/assets/icons/envelope-white.png new file mode 100644 index 0000000..47bf0d5 Binary files /dev/null and b/assets/icons/envelope-white.png differ diff --git a/assets/icons/exercise.png b/assets/icons/exercise.png new file mode 100644 index 0000000..5e7311d Binary files /dev/null and b/assets/icons/exercise.png differ diff --git a/assets/icons/exit 2.png b/assets/icons/exit 2.png new file mode 100644 index 0000000..499e50f Binary files /dev/null and b/assets/icons/exit 2.png differ diff --git a/assets/icons/exit.png b/assets/icons/exit.png new file mode 100644 index 0000000..499e50f Binary files /dev/null and b/assets/icons/exit.png differ diff --git a/assets/icons/eye.png b/assets/icons/eye.png new file mode 100644 index 0000000..b588640 Binary files /dev/null and b/assets/icons/eye.png differ diff --git a/assets/icons/film-disabled.png b/assets/icons/film-disabled.png new file mode 100644 index 0000000..f1ad635 Binary files /dev/null and b/assets/icons/film-disabled.png differ diff --git a/assets/icons/film.png b/assets/icons/film.png new file mode 100644 index 0000000..60170d1 Binary files /dev/null and b/assets/icons/film.png differ diff --git a/assets/icons/full-ellipse.png b/assets/icons/full-ellipse.png new file mode 100644 index 0000000..6145ef5 Binary files /dev/null and b/assets/icons/full-ellipse.png differ diff --git a/assets/icons/heart-full.png b/assets/icons/heart-full.png new file mode 100644 index 0000000..ec91fbb Binary files /dev/null and b/assets/icons/heart-full.png differ diff --git a/assets/icons/heart.png b/assets/icons/heart.png new file mode 100644 index 0000000..903a560 Binary files /dev/null and b/assets/icons/heart.png differ diff --git a/assets/icons/home-selected.png b/assets/icons/home-selected.png new file mode 100644 index 0000000..c2870eb Binary files /dev/null and b/assets/icons/home-selected.png differ diff --git a/assets/icons/home.png b/assets/icons/home.png new file mode 100644 index 0000000..ec30647 Binary files /dev/null and b/assets/icons/home.png differ diff --git a/assets/icons/icon-comment.png b/assets/icons/icon-comment.png new file mode 100644 index 0000000..a34ba35 Binary files /dev/null and b/assets/icons/icon-comment.png differ diff --git a/assets/icons/icon-habit.png b/assets/icons/icon-habit.png new file mode 100644 index 0000000..fa2f0ac Binary files /dev/null and b/assets/icons/icon-habit.png differ diff --git a/assets/icons/icon-privacy.png b/assets/icons/icon-privacy.png new file mode 100644 index 0000000..e91c63c Binary files /dev/null and b/assets/icons/icon-privacy.png differ diff --git a/assets/icons/image-plus-disabled.png b/assets/icons/image-plus-disabled.png new file mode 100644 index 0000000..a3d59eb Binary files /dev/null and b/assets/icons/image-plus-disabled.png differ diff --git a/assets/icons/image-plus.png b/assets/icons/image-plus.png new file mode 100644 index 0000000..58d9947 Binary files /dev/null and b/assets/icons/image-plus.png differ diff --git a/assets/icons/info 2.png b/assets/icons/info 2.png new file mode 100644 index 0000000..788938d Binary files /dev/null and b/assets/icons/info 2.png differ diff --git a/assets/icons/info-selected 2.png b/assets/icons/info-selected 2.png new file mode 100644 index 0000000..25ad122 Binary files /dev/null and b/assets/icons/info-selected 2.png differ diff --git a/assets/icons/info-selected.png b/assets/icons/info-selected.png new file mode 100644 index 0000000..25ad122 Binary files /dev/null and b/assets/icons/info-selected.png differ diff --git a/assets/icons/info.png b/assets/icons/info.png new file mode 100644 index 0000000..788938d Binary files /dev/null and b/assets/icons/info.png differ diff --git a/assets/icons/like.png b/assets/icons/like.png new file mode 100644 index 0000000..0f078fa Binary files /dev/null and b/assets/icons/like.png differ diff --git a/assets/icons/liked.png b/assets/icons/liked.png new file mode 100644 index 0000000..161bde6 Binary files /dev/null and b/assets/icons/liked.png differ diff --git a/assets/icons/list 2.png b/assets/icons/list 2.png new file mode 100644 index 0000000..1702bb0 Binary files /dev/null and b/assets/icons/list 2.png differ diff --git a/assets/icons/list-selected 2.png b/assets/icons/list-selected 2.png new file mode 100644 index 0000000..3ba592e Binary files /dev/null and b/assets/icons/list-selected 2.png differ diff --git a/assets/icons/list-selected.png b/assets/icons/list-selected.png new file mode 100644 index 0000000..3ba592e Binary files /dev/null and b/assets/icons/list-selected.png differ diff --git a/assets/icons/list.png b/assets/icons/list.png new file mode 100644 index 0000000..1702bb0 Binary files /dev/null and b/assets/icons/list.png differ diff --git a/assets/icons/lock 2.png b/assets/icons/lock 2.png new file mode 100644 index 0000000..d852669 Binary files /dev/null and b/assets/icons/lock 2.png differ diff --git a/assets/icons/lock.png b/assets/icons/lock.png new file mode 100644 index 0000000..d852669 Binary files /dev/null and b/assets/icons/lock.png differ diff --git a/assets/icons/medal-achievements.png b/assets/icons/medal-achievements.png new file mode 100644 index 0000000..6bfed41 Binary files /dev/null and b/assets/icons/medal-achievements.png differ diff --git a/assets/icons/medal-bronze.png b/assets/icons/medal-bronze.png new file mode 100644 index 0000000..d8697b0 Binary files /dev/null and b/assets/icons/medal-bronze.png differ diff --git a/assets/icons/medal-gold.png b/assets/icons/medal-gold.png new file mode 100644 index 0000000..8c76f41 Binary files /dev/null and b/assets/icons/medal-gold.png differ diff --git a/assets/icons/medal-post.png b/assets/icons/medal-post.png new file mode 100644 index 0000000..407f967 Binary files /dev/null and b/assets/icons/medal-post.png differ diff --git a/assets/icons/medal-score.png b/assets/icons/medal-score.png new file mode 100644 index 0000000..dd7b2b2 Binary files /dev/null and b/assets/icons/medal-score.png differ diff --git a/assets/icons/medal-silver.png b/assets/icons/medal-silver.png new file mode 100644 index 0000000..65988cf Binary files /dev/null and b/assets/icons/medal-silver.png differ diff --git a/assets/icons/medal.png b/assets/icons/medal.png new file mode 100644 index 0000000..8c76f41 Binary files /dev/null and b/assets/icons/medal.png differ diff --git a/assets/icons/message-dots.png b/assets/icons/message-dots.png new file mode 100644 index 0000000..458fe3e Binary files /dev/null and b/assets/icons/message-dots.png differ diff --git a/assets/icons/omega 2.png b/assets/icons/omega 2.png new file mode 100644 index 0000000..31c7a17 Binary files /dev/null and b/assets/icons/omega 2.png differ diff --git a/assets/icons/omega.png b/assets/icons/omega.png new file mode 100644 index 0000000..31c7a17 Binary files /dev/null and b/assets/icons/omega.png differ diff --git a/assets/icons/pencil 2.png b/assets/icons/pencil 2.png new file mode 100644 index 0000000..a19a078 Binary files /dev/null and b/assets/icons/pencil 2.png differ diff --git a/assets/icons/pencil.png b/assets/icons/pencil.png new file mode 100644 index 0000000..a19a078 Binary files /dev/null and b/assets/icons/pencil.png differ diff --git a/assets/icons/play-button.png b/assets/icons/play-button.png new file mode 100644 index 0000000..1ed4384 Binary files /dev/null and b/assets/icons/play-button.png differ diff --git a/assets/icons/ray.png b/assets/icons/ray.png new file mode 100644 index 0000000..21134cb Binary files /dev/null and b/assets/icons/ray.png differ diff --git a/assets/icons/score 2.png b/assets/icons/score 2.png new file mode 100644 index 0000000..e994cd6 Binary files /dev/null and b/assets/icons/score 2.png differ diff --git a/assets/icons/score.png b/assets/icons/score.png new file mode 100644 index 0000000..e994cd6 Binary files /dev/null and b/assets/icons/score.png differ diff --git a/assets/icons/share-profile.png b/assets/icons/share-profile.png new file mode 100644 index 0000000..33178c3 Binary files /dev/null and b/assets/icons/share-profile.png differ diff --git a/assets/icons/smartphone 2.png b/assets/icons/smartphone 2.png new file mode 100644 index 0000000..c33d041 Binary files /dev/null and b/assets/icons/smartphone 2.png differ diff --git a/assets/icons/smartphone.png b/assets/icons/smartphone.png new file mode 100644 index 0000000..c33d041 Binary files /dev/null and b/assets/icons/smartphone.png differ diff --git a/assets/icons/stakes 2.png b/assets/icons/stakes 2.png new file mode 100644 index 0000000..3eb1ac5 Binary files /dev/null and b/assets/icons/stakes 2.png differ diff --git a/assets/icons/stakes-selected.jpeg b/assets/icons/stakes-selected.jpeg new file mode 100644 index 0000000..43bd339 Binary files /dev/null and b/assets/icons/stakes-selected.jpeg differ diff --git a/assets/icons/stakes-selected.png b/assets/icons/stakes-selected.png new file mode 100644 index 0000000..31554c4 Binary files /dev/null and b/assets/icons/stakes-selected.png differ diff --git a/assets/icons/stakes.jpeg b/assets/icons/stakes.jpeg new file mode 100644 index 0000000..558c1a9 Binary files /dev/null and b/assets/icons/stakes.jpeg differ diff --git a/assets/icons/stakes.png b/assets/icons/stakes.png new file mode 100644 index 0000000..3eb1ac5 Binary files /dev/null and b/assets/icons/stakes.png differ diff --git a/assets/icons/star 2.png b/assets/icons/star 2.png new file mode 100644 index 0000000..a9d184f Binary files /dev/null and b/assets/icons/star 2.png differ diff --git a/assets/icons/star.png b/assets/icons/star.png new file mode 100644 index 0000000..a9d184f Binary files /dev/null and b/assets/icons/star.png differ diff --git a/assets/icons/store 2.png b/assets/icons/store 2.png new file mode 100644 index 0000000..56d5263 Binary files /dev/null and b/assets/icons/store 2.png differ diff --git a/assets/icons/store.png b/assets/icons/store.png new file mode 100644 index 0000000..56d5263 Binary files /dev/null and b/assets/icons/store.png differ diff --git a/assets/icons/timeline-selected.png b/assets/icons/timeline-selected.png new file mode 100644 index 0000000..a1f9c70 Binary files /dev/null and b/assets/icons/timeline-selected.png differ diff --git a/assets/icons/timeline.png b/assets/icons/timeline.png new file mode 100644 index 0000000..bcbd2d1 Binary files /dev/null and b/assets/icons/timeline.png differ diff --git a/assets/icons/trash 2.png b/assets/icons/trash 2.png new file mode 100644 index 0000000..7f880ed Binary files /dev/null and b/assets/icons/trash 2.png differ diff --git a/assets/icons/trash.png b/assets/icons/trash.png new file mode 100644 index 0000000..7f880ed Binary files /dev/null and b/assets/icons/trash.png differ diff --git a/assets/icons/user-plus.png b/assets/icons/user-plus.png new file mode 100644 index 0000000..bf01acc Binary files /dev/null and b/assets/icons/user-plus.png differ diff --git a/assets/icons/user-selected.png b/assets/icons/user-selected.png new file mode 100644 index 0000000..493c322 Binary files /dev/null and b/assets/icons/user-selected.png differ diff --git a/assets/icons/user.png b/assets/icons/user.png new file mode 100644 index 0000000..439ab56 Binary files /dev/null and b/assets/icons/user.png differ diff --git a/assets/icons/users-selected.png b/assets/icons/users-selected.png new file mode 100644 index 0000000..26a96ca Binary files /dev/null and b/assets/icons/users-selected.png differ diff --git a/assets/icons/users-white.png b/assets/icons/users-white.png new file mode 100644 index 0000000..26e0813 Binary files /dev/null and b/assets/icons/users-white.png differ diff --git a/assets/icons/users.png b/assets/icons/users.png new file mode 100644 index 0000000..8b518c9 Binary files /dev/null and b/assets/icons/users.png differ diff --git a/assets/icons/warning.png b/assets/icons/warning.png new file mode 100644 index 0000000..b960ec2 Binary files /dev/null and b/assets/icons/warning.png differ diff --git a/assets/icons/wrong.png b/assets/icons/wrong.png new file mode 100644 index 0000000..45604d3 Binary files /dev/null and b/assets/icons/wrong.png differ diff --git a/assets/images/Chatbot.png b/assets/images/Chatbot.png new file mode 100644 index 0000000..5e90609 Binary files /dev/null and b/assets/images/Chatbot.png differ diff --git a/assets/images/Click.png b/assets/images/Click.png new file mode 100644 index 0000000..f22f06e Binary files /dev/null and b/assets/images/Click.png differ diff --git a/assets/images/ERDSupabase.png b/assets/images/ERDSupabase.png new file mode 100644 index 0000000..fae23d5 Binary files /dev/null and b/assets/images/ERDSupabase.png differ diff --git a/assets/images/ExpoLogo.png b/assets/images/ExpoLogo.png new file mode 100644 index 0000000..6d3425a Binary files /dev/null and b/assets/images/ExpoLogo.png differ diff --git a/assets/images/background-onboarding.png b/assets/images/background-onboarding.png new file mode 100644 index 0000000..8b33f46 Binary files /dev/null and b/assets/images/background-onboarding.png differ diff --git a/assets/images/bg.png b/assets/images/bg.png new file mode 100644 index 0000000..aa0baec Binary files /dev/null and b/assets/images/bg.png differ diff --git a/assets/images/click-blue.png b/assets/images/click-blue.png new file mode 100644 index 0000000..013e052 Binary files /dev/null and b/assets/images/click-blue.png differ diff --git a/assets/images/detail-login.png b/assets/images/detail-login.png new file mode 100644 index 0000000..71ddc35 Binary files /dev/null and b/assets/images/detail-login.png differ diff --git a/assets/images/image-tip.png b/assets/images/image-tip.png new file mode 100644 index 0000000..6782ac6 Binary files /dev/null and b/assets/images/image-tip.png differ diff --git a/assets/images/imagem-teste.png b/assets/images/imagem-teste.png new file mode 100644 index 0000000..f9716ec Binary files /dev/null and b/assets/images/imagem-teste.png differ diff --git a/assets/images/lines-down.png b/assets/images/lines-down.png new file mode 100644 index 0000000..2bb13e4 Binary files /dev/null and b/assets/images/lines-down.png differ diff --git a/assets/images/logo-onboarding.png b/assets/images/logo-onboarding.png new file mode 100644 index 0000000..1078a3c Binary files /dev/null and b/assets/images/logo-onboarding.png differ diff --git a/assets/images/logo-white.png b/assets/images/logo-white.png new file mode 100644 index 0000000..8c8a929 Binary files /dev/null and b/assets/images/logo-white.png differ diff --git a/assets/images/medal-ranking.png b/assets/images/medal-ranking.png new file mode 100644 index 0000000..71f3059 Binary files /dev/null and b/assets/images/medal-ranking.png differ diff --git a/assets/images/modal-header.png b/assets/images/modal-header.png new file mode 100644 index 0000000..f9716ec Binary files /dev/null and b/assets/images/modal-header.png differ diff --git a/assets/images/no-habits-photo.png b/assets/images/no-habits-photo.png new file mode 100644 index 0000000..018b9b2 Binary files /dev/null and b/assets/images/no-habits-photo.png differ diff --git a/assets/images/no-profile.png b/assets/images/no-profile.png new file mode 100644 index 0000000..99c8cec Binary files /dev/null and b/assets/images/no-profile.png differ diff --git a/assets/images/titan-bg.png b/assets/images/titan-bg.png new file mode 100644 index 0000000..eec8d5d Binary files /dev/null and b/assets/images/titan-bg.png differ diff --git a/assets/styles/Colors.js b/assets/styles/Colors.js new file mode 100644 index 0000000..5a8c16b --- /dev/null +++ b/assets/styles/Colors.js @@ -0,0 +1,32 @@ +import { ActivityIndicator } from "react-native-paper"; + +export default { + primary: '#082139', + primary2: '#03111F', + primary3: '#9F2436', + primary4: '#9CC6FF', + primary5: '#00ACEE', + primary6: '#051626', + primary7: '#1D4369', + primary8: '#1B7BFC', + primary9: '#B5BCC4', + primary10: '#44648A', + grey1: '#212121', + grey2: '#424242', + grey3: '#616161', + grey4: '#757575', + grey5: '#9e9e9e', + grey6: '#bdbdbd', + grey7: '#e0e0e0', + dkGreyBg: '#232323', + greyOutline: '#cbd2d9', + background: '#082139', + text: '#FCFCFC', + text2: '#F8F7F9', + success: '#32a852', + error: '#cf3434', + warning: '#e86c00', + navigator: '#091725', + white: '#FFFFFF', + ActivityIndicator: '#90E0EF', +}; \ No newline at end of file diff --git a/assets/styles/Default.js b/assets/styles/Default.js new file mode 100644 index 0000000..41c2b94 --- /dev/null +++ b/assets/styles/Default.js @@ -0,0 +1,141 @@ +import { StyleSheet, Dimensions } from "react-native"; +import Colors from "./Colors"; + +export default StyleSheet.create({ + container: { + flex: 1, + width: Dimensions.get("window").width, + backgroundColor: Colors.primary, + }, + containerScrollview: { + paddingVertical: 60, + alignItems: "center", + justifyContent: "center", + flexGrow: 1, + }, + centerContainer: { + flex: 1, + alignItems: "center", + justifyContent: "center", + }, + contentContainer: { + flex: 1, + alignItems: "center", + width: Dimensions.get("window").width, + }, + containerStyle: { + paddingHorizontal: 0, + marginHorizontal: 0, + }, + loginButtonTitle: { + color: "white", + fontSize: 16, + fontWeight: "400", + }, + loginButton: { + height: 60, + borderRadius: 4, + marginBottom: 16, + backgroundColor: "transparent", + borderWidth: 2, + borderColor: "white", + width: Dimensions.get("window").width - 100, + justifyContent: "flex-start", + }, + disabledLoginButton: { + justifyContent: "center", + }, + loginButtonEmail: { + backgroundColor: "rgba(0, 75, 125, 1)", + borderColor: "rgba(0, 75, 125, 1)", + }, + loginButtonGoogle: { + backgroundColor: "#9F2436", + borderColor: "#9F2436", + }, + loginButtonApple: { + backgroundColor: "#000", + borderColor: "#000", + }, + loginIconButtonContainer: { + marginHorizontal: 24, + }, + loginInput: { + width: Dimensions.get("window").width - 44, + color: "#9CC6FF", + fontSize: 16, + }, + loginInputContainer: { + borderColor: "#455c8a", + borderBottomWidth: StyleSheet.hairlineWidth, + width: Dimensions.get("window").width - 44, + padding: 0, + marginLeft: 0, + }, + containerInput: { + paddingLeft: 0, + }, + loginInputLabel: { + color: "#FCFCFC", + fontSize: 16, + paddingLeft: 0, + fontWeight: "300", + }, + loginNextButton: { + height: 64, + borderRadius: 4, + backgroundColor: "#982538", + width: Dimensions.get("window").width - 44, + }, + loginCreateAccountButton: { + height: 64, + borderRadius: 8, + marginTop: 16, + backgroundColor: "transparent", + borderWidth: StyleSheet.hairlineWidth, + borderColor: "#9CC6FF", + width: Dimensions.get("window").width - 44, + }, + loginButtonBoldTitle: { + color: "#FCFCFC", + fontSize: 16, + fontWeight: "600", + }, + actionSheetButtonBox: { + height: 50, + marginTop: StyleSheet.hairlineWidth, + alignItems: "center", + justifyContent: "center", + backgroundColor: "#292929", + }, + actionSheetBody: { + flex: 1, + alignSelf: "flex-end", + backgroundColor: "#4a4a4a", + }, + actionSheetCancelButtonBox: { + height: 50, + marginTop: 6, + alignItems: "center", + justifyContent: "center", + backgroundColor: "#292929", + }, + loginButtonApple: { + backgroundColor: "#111", + borderColor: "#111", + }, + buttonIconStyle: { + width: 24, + height: 24, + marginHorizontal: 20, + }, + inputIconStyle: { + width: 16, + height: 16, + opacity: 0.4, + }, + iconStyle: { + width: 24, + height: 24, + }, +}); diff --git a/eslint.config.mjs b/eslint.config.mjs index 3b9c05e..0fd38cb 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,9 +1,67 @@ +// import globals from 'globals'; +// import pluginJs from '@eslint/js'; +// import pluginReactConfig from 'eslint-plugin-react/configs/recommended.js'; + +// export default [ +// { languageOptions: { globals: globals.node } }, +// pluginJs.configs.recommended, +// pluginReactConfig, +// ]; + +// To address temporary errors of pushing initial skeleton frontend code, May 13th 9:30PM import globals from 'globals'; import pluginJs from '@eslint/js'; import pluginReactConfig from 'eslint-plugin-react/configs/recommended.js'; export default [ - { languageOptions: { globals: globals.browser } }, + { + languageOptions: { + globals: globals.node, + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + }, + }, + }, pluginJs.configs.recommended, pluginReactConfig, + { + settings: { + react: { + version: 'detect', // automatically detect the React version + }, + }, + }, + { + files: [ + 'App.js', + 'src/components/CustomPicker.js', + 'src/navigator/Navigator.js', + 'src/screens/community/ViewCommunity.js', + 'src/screens/profile/HealthHabitReport.js', + 'src/screens/profile/HealthHabitReportDetails.js', + 'src/screens/profile/Profile.js', + 'src/screens/profile/SavedPost.js', + 'src/screens/profile/UpdateFavoriteBook.js', + 'src/screens/profile/UpdateFavoriteFood.js', + 'src/screens/profile/UpdateProfile.js', + 'src/screens/profile/UserCommunity.js', + 'src/screens/profile/UserHabit.js', + 'src/screens/profile/UserProfile.js', + 'src/screens/profile/HealthHabitReportUtils.js', + ], + rules: { + 'no-unused-vars': 'off', + 'react/react-in-jsx-scope': 'off', + 'react/prop-types': 'off', + 'no-undef': 'off', + 'react/no-unescaped-entities': 'off', + 'no-empty': 'off', + 'no-dupe-keys': 'off', + 'no-warning-comments': 'off', + }, + }, ]; diff --git a/package-lock.json b/package-lock.json index 523fb49..29552fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,70 @@ "version": "1.0.0", "hasInstallScript": true, "dependencies": { - "expo": "~51.0.5", - "expo-status-bar": "~1.11.1", + + "@emailjs/react-native": "^4.2.2", + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-brands-svg-icons": "^6.5.2", + "@fortawesome/free-regular-svg-icons": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-native-fontawesome": "^0.3.1", + "@google/generative-ai": "^0.11.3", + "@react-native-async-storage/async-storage": "1.23.1", + "@react-native-community/blur": "^4.4.0", + "@react-native-community/datetimepicker": "^8.0.1", + "@react-native-picker/picker": "^2.7.5", + "@react-native-vector-icons/fontawesome5": "^5.15.4-alpha.12", + "@react-navigation/bottom-tabs": "^6.5.20", + "@react-navigation/native": "^6.1.17", + "@react-navigation/native-stack": "^6.9.26", + "@react-navigation/stack": "^6.3.29", + "@reduxjs/toolkit": "^2.2.5", + "@stripe/stripe-react-native": "^0.37.3", + "@supabase/supabase-js": "^2.43.1", + "axios": "^1.6.8", + "base64-arraybuffer": "^1.0.2", + "emailjs-com": "^3.2.0", + "expo": "^51.0.0", + "expo-av": "~14.0.3", + "expo-blur": "~13.0.2", + "expo-contacts": "~13.0.3", + "expo-file-system": "~17.0.1", + "expo-image-manipulator": "~12.0.3", + "expo-image-picker": "~15.0.5", + "expo-linear-gradient": "^13.0.2", + "expo-notifications": "~0.28.1", + "expo-permissions": "^14.4.0", + "expo-sharing": "~12.0.1", + "expo-status-bar": "~1.12.1", + "moment": "^2.30.1", + "prop-types": "^15.8.1", "react": "18.2.0", - "react-native": "0.73.6" + "react-native": "0.74.1", + "react-native-actionsheet": "^2.4.2", + "react-native-chart-kit": "^6.12.0", + "react-native-collapsible": "^1.6.1", + "react-native-elements": "^3.4.3", + "react-native-gesture-handler": "^2.16.2", + "react-native-get-random-values": "^1.11.0", + "react-native-keyboard-aware-scroll-view": "^0.9.5", + "react-native-mime-types": "^2.5.0", + "react-native-modal": "^13.0.1", + "react-native-modal-datetime-picker": "^17.1.0", + "react-native-modalize": "^2.1.1", + "react-native-paper": "^5.12.3", + "react-native-raw-bottom-sheet": "^3.0.0", + "react-native-reanimated": "^3.11.0", + "react-native-select-dropdown": "^4.0.1", + "react-native-step-indicator": "^1.0.3", + "react-native-svg": "^15.3.0", + "react-native-swipeable": "^0.6.0", + "react-native-tooltip-menu": "^3.0.7", + "react-native-typography": "^1.4.1", + "react-native-url-polyfill": "^2.0.0", + "react-native-vector-icons": "^10.1.0", + "react-redux": "^9.1.2", + "redux": "^5.0.1", + "stripe": "^15.5.0" }, "devDependencies": { "@babel/plugin-transform-numeric-separator": "^7.18.6", @@ -190,6 +250,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", @@ -2105,6 +2181,60 @@ "node": ">=6.9.0" } }, + "node_modules/@callstack/react-theme-provider": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.9.tgz", + "integrity": "sha512-tTQ0uDSCL0ypeMa8T/E9wAZRGKWj8kXP7+6RYgPTfOPs9N07C9xM8P02GJ3feETap4Ux5S69D9nteq9mEj86NA==", + "dependencies": { + "deepmerge": "^3.2.0", + "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/@callstack/react-theme-provider/node_modules/deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "dependencies": { + "@types/hammerjs": "^2.0.36" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@emailjs/browser": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@emailjs/browser/-/browser-4.3.3.tgz", + "integrity": "sha512-ltpt2S/WVREIBXptxYAVYBvXb2O6yTUYiRUWF8OLikMxlmiGsIgKpgHppikNd4Df0uAav7jCsQKcOJ3TJFUx5g==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@emailjs/react-native": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@emailjs/react-native/-/react-native-4.2.2.tgz", + "integrity": "sha512-jXjEliE8zMWsOkOfbCA/jA16usjV0SdhQvZ6Cw3PDBxsFbInIMPKhxexHG4/bXxX7cjAhdBK4lfDHL4P+dZfNw==", + "dependencies": { + "@emailjs/browser": "^4.3.3", + "@react-native-async-storage/async-storage": "^1.22.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react-native": ">=0.60 <1.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2152,12 +2282,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -2173,55 +2297,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2235,9 +2310,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.1.1.tgz", - "integrity": "sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", + "integrity": "sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2259,9 +2334,9 @@ } }, "node_modules/@expo/cli": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.11.tgz", - "integrity": "sha512-2xIfvj5RnQbQqZdkYa9a7Roll1ywBER2omCUKdbJazRcJTkkN3HMv/jILztdZ2uKlcfIqPq4VTbKEhV/IkewYg==", + "version": "0.18.9", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.9.tgz", + "integrity": "sha512-CoxiISJqI7bymGzIflm8JxGkSg8hoZ2r7wfAN5bD6rKTQ83m8LiYGCZ/AQKT2sTNrnHSA+tvjuqwycvxGzIyVA==", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "0.0.5", @@ -2420,6 +2495,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@expo/cli/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@expo/cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2451,6 +2534,19 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@expo/cli/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@expo/cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2459,15 +2555,38 @@ "node": ">=8" } }, - "node_modules/@expo/cli/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/@expo/cli/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@expo/cli/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/@expo/cli/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -2608,9 +2727,9 @@ } }, "node_modules/@expo/config-plugins/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -2662,9 +2781,9 @@ } }, "node_modules/@expo/config/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -2888,9 +3007,9 @@ } }, "node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -3142,6 +3261,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@expo/package-manager/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@expo/package-manager/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3181,6 +3308,18 @@ "node": ">=8" } }, + "node_modules/@expo/package-manager/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@expo/package-manager/node_modules/sudo-prompt": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", @@ -3259,9 +3398,9 @@ } }, "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -3354,11 +3493,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/xcpretty/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, "node_modules/@expo/xcpretty/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3398,17 +3532,6 @@ "node": ">=8" } }, - "node_modules/@expo/xcpretty/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@expo/xcpretty/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3420,11 +3543,90 @@ "node": ">=8" } }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz", + "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz", + "integrity": "sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.5.2.tgz", + "integrity": "sha512-zi5FNYdmKLnEc0jc0uuHH17kz/hfYTg4Uei0wMGzcoCL/4d3WM3u1VMc0iGGa31HuhV5i7ZK8ZlTCQrHqRHSGQ==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.2.tgz", + "integrity": "sha512-iabw/f5f8Uy2nTRtJ13XZTS1O5+t+anvlamJ3zJGLEVE2pKsAWhPv2lq01uQlfgCX7VaveT3EVs515cCN9jRbw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz", + "integrity": "sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-native-fontawesome": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@fortawesome/react-native-fontawesome/-/react-native-fontawesome-0.3.1.tgz", + "integrity": "sha512-fWkCW/Et+5YSV0gJffDci6zuHNtIST5/QFOhyqgxaepqod28cRZwsrKhx68PxPEnUlF/K6RVxQ7SvQyWURbDPQ==", + "dependencies": { + "humps": "^2.0.1", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react-native": ">= 0.67", + "react-native-svg": ">= 11.x" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" }, + "node_modules/@google/generative-ai": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.11.3.tgz", + "integrity": "sha512-QtQ1hz6rcybbw35uxXlFF26KNnaTVr2oWwnmDkC1M35KdzN4tVc4wakgJp8uXbY9KDCNHksyp11DbFg0HPckZQ==", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@graphql-typed-document-node/core": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", @@ -3479,6 +3681,11 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, + "node_modules/@ide/backoff": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@ide/backoff/-/backoff-1.0.0.tgz", + "integrity": "sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==" + }, "node_modules/@isaacs/ttlcache": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", @@ -3713,9 +3920,9 @@ } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -3761,20 +3968,39 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@react-native-async-storage/async-storage": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz", + "integrity": "sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA==", + "dependencies": { + "merge-options": "^3.0.4" + }, + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.60 <1.0" + } + }, + "node_modules/@react-native-community/blur": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@react-native-community/blur/-/blur-4.4.0.tgz", + "integrity": "sha512-P+xdT2LIq1ewOsF3zx7C0nu4dj7nxl2NVTsMXEzRDjM3bWMdrrEbTRA7uwPV5ngn7/BXIommBPlT/JW4SAedrw==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/@react-native-community/cli": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz", - "integrity": "sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw==", - "dependencies": { - "@react-native-community/cli-clean": "12.3.6", - "@react-native-community/cli-config": "12.3.6", - "@react-native-community/cli-debugger-ui": "12.3.6", - "@react-native-community/cli-doctor": "12.3.6", - "@react-native-community/cli-hermes": "12.3.6", - "@react-native-community/cli-plugin-metro": "12.3.6", - "@react-native-community/cli-server-api": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", - "@react-native-community/cli-types": "12.3.6", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.6.tgz", + "integrity": "sha512-IqclB7VQ84ye8Fcs89HOpOscY4284VZg2pojHNl8H0Lzd4DadXJWQoxC7zWm8v2f8eyeX2kdhxp2ETD5tceIgA==", + "dependencies": { + "@react-native-community/cli-clean": "13.6.6", + "@react-native-community/cli-config": "13.6.6", + "@react-native-community/cli-debugger-ui": "13.6.6", + "@react-native-community/cli-doctor": "13.6.6", + "@react-native-community/cli-hermes": "13.6.6", + "@react-native-community/cli-server-api": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", + "@react-native-community/cli-types": "13.6.6", "chalk": "^4.1.2", "commander": "^9.4.1", "deepmerge": "^4.3.0", @@ -3793,13 +4019,14 @@ } }, "node_modules/@react-native-community/cli-clean": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz", - "integrity": "sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.6.tgz", + "integrity": "sha512-cBwJTwl0NyeA4nyMxbhkWZhxtILYkbU3TW3k8AXLg+iGphe0zikYMGB3T+haTvTc6alTyEFwPbimk9bGIqkjAQ==", "dependencies": { - "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", - "execa": "^5.0.0" + "execa": "^5.0.0", + "fast-glob": "^3.3.2" } }, "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { @@ -3944,15 +4171,15 @@ } }, "node_modules/@react-native-community/cli-config": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.6.tgz", - "integrity": "sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.6.tgz", + "integrity": "sha512-mbG425zCKr8JZhv/j11382arezwS/70juWMsn8j2lmrGTrP1cUdW0MF15CCIFtJsqyK3Qs+FTmqttRpq81QfSg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "cosmiconfig": "^5.1.0", "deepmerge": "^4.3.0", - "glob": "^7.1.3", + "fast-glob": "^3.3.2", "joi": "^17.2.1" } }, @@ -4021,22 +4248,23 @@ } }, "node_modules/@react-native-community/cli-debugger-ui": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz", - "integrity": "sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.6.tgz", + "integrity": "sha512-Vv9u6eS4vKSDAvdhA0OiQHoA7y39fiPIgJ6biT32tN4avHDtxlc6TWZGiqv7g98SBvDWvoVAmdPLcRf3kU+c8g==", "dependencies": { "serve-static": "^1.13.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz", - "integrity": "sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ==", - "dependencies": { - "@react-native-community/cli-config": "12.3.6", - "@react-native-community/cli-platform-android": "12.3.6", - "@react-native-community/cli-platform-ios": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.6.tgz", + "integrity": "sha512-TWZb5g6EmQe2Ua2TEWNmyaEayvlWH4GmdD9ZC+p8EpKFpB1NpDGMK6sXbpb42TDvwZg5s4TDRplK0PBEA/SVDg==", + "dependencies": { + "@react-native-community/cli-config": "13.6.6", + "@react-native-community/cli-platform-android": "13.6.6", + "@react-native-community/cli-platform-apple": "13.6.6", + "@react-native-community/cli-platform-ios": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "command-exists": "^1.2.8", "deepmerge": "^4.3.0", @@ -4174,17 +4402,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli-doctor/node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -4264,12 +4481,9 @@ } }, "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -4277,29 +4491,48 @@ "node": ">=10" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { - "has-flag": "^4.0.0" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@react-native-community/cli-hermes": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz", - "integrity": "sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.6.tgz", + "integrity": "sha512-La5Ie+NGaRl3klei6WxKoOxmCUSGGxpOk6vU5pEGf0/O7ky+Ay0io+zXYUZqlNMi/cGpO7ZUijakBYOB/uyuFg==", "dependencies": { - "@react-native-community/cli-platform-android": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-platform-android": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6" } @@ -4369,15 +4602,15 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz", - "integrity": "sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.6.tgz", + "integrity": "sha512-/tMwkBeNxh84syiSwNlYtmUz/Ppc+HfKtdopL/5RB+fd3SV1/5/NPNjMlyLNgFKnpxvKCInQ7dnl6jGHJjeHjg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "execa": "^5.0.0", + "fast-glob": "^3.3.2", "fast-xml-parser": "^4.2.4", - "glob": "^7.1.3", "logkitty": "^0.7.1" } }, @@ -4522,20 +4755,20 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz", - "integrity": "sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg==", + "node_modules/@react-native-community/cli-platform-apple": { + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.6.tgz", + "integrity": "sha512-bOmSSwoqNNT3AmCRZXEMYKz1Jf1l2F86Nhs7qBcXdY/sGiJ+Flng564LOqvdAlVLTbkgz47KjNKCS2pP4Jg0Mg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-tools": "13.6.6", "chalk": "^4.1.2", "execa": "^5.0.0", + "fast-glob": "^3.3.2", "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", "ora": "^5.4.1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -4549,7 +4782,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -4564,7 +4797,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/cli-cursor": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", @@ -4575,7 +4808,7 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -4586,12 +4819,12 @@ "node": ">=7.0.0" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/execa": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", @@ -4613,7 +4846,7 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/get-stream": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", @@ -4624,7 +4857,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -4632,7 +4865,7 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/is-stream": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", @@ -4643,7 +4876,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/log-symbols": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", @@ -4658,7 +4891,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/mimic-fn": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", @@ -4666,7 +4899,7 @@ "node": ">=6" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/npm-run-path": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", @@ -4677,7 +4910,7 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/onetime": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", @@ -4691,7 +4924,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ora": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", @@ -4713,7 +4946,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/restore-cursor": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", @@ -4725,18 +4958,7 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -4747,54 +4969,46 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.6.tgz", - "integrity": "sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg==" + "node_modules/@react-native-community/cli-platform-ios": { + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.6.tgz", + "integrity": "sha512-vjDnRwhlSN5ryqKTas6/DPkxuouuyFBAqAROH4FR1cspTbn6v78JTZKDmtQy9JMMo7N5vZj1kASU5vbFep9IOQ==", + "dependencies": { + "@react-native-community/cli-platform-apple": "13.6.6" + } }, "node_modules/@react-native-community/cli-server-api": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz", - "integrity": "sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.6.tgz", + "integrity": "sha512-ZtCXxoFlM7oDv3iZ3wsrT3SamhtUJuIkX2WePLPlN5bcbq7zimbPm2lHyicNJtpcGQ5ymsgpUWPCNZsWQhXBqQ==", "dependencies": { - "@react-native-community/cli-debugger-ui": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", + "@react-native-community/cli-debugger-ui": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.1", "nocache": "^3.0.1", "pretty-format": "^26.6.2", "serve-static": "^1.13.1", - "ws": "^7.5.1" + "ws": "^6.2.2" } }, "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" } }, "node_modules/@react-native-community/cli-tools": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz", - "integrity": "sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.6.tgz", + "integrity": "sha512-ptOnn4AJczY5njvbdK91k4hcYazDnGtEPrqIwEI+k/CTBHNdb27Rsm2OZ7ye6f7otLBqF8gj/hK6QzJs8CEMgw==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", + "execa": "^5.0.0", "find-up": "^5.0.0", "mime": "^2.4.1", "node-fetch": "^2.6.0", @@ -4861,6 +5075,39 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@react-native-community/cli-tools/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4869,6 +5116,17 @@ "node": ">=8" } }, + "node_modules/@react-native-community/cli-tools/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", @@ -4892,17 +5150,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli-tools/node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -4911,6 +5158,17 @@ "node": ">=6" } }, + "node_modules/@react-native-community/cli-tools/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-tools/node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -4971,12 +5229,9 @@ } }, "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -4984,17 +5239,6 @@ "node": ">=10" } }, - "node_modules/@react-native-community/cli-tools/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@react-native-community/cli-tools/node_modules/sudo-prompt": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", @@ -5011,15 +5255,10 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@react-native-community/cli-types": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.6.tgz", - "integrity": "sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q==", + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.6.tgz", + "integrity": "sha512-733iaYzlmvNK7XYbnWlMjdE+2k0hlTBJW071af/xb6Bs+hbJqBP9c03FZuYH2hFFwDDntwj05bkri/P7VgSxug==", "dependencies": { "joi": "^17.2.1" } @@ -5152,17 +5391,6 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@react-native-community/cli/node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -5222,12 +5450,9 @@ } }, "node_modules/@react-native-community/cli/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "bin": { "semver": "bin/semver.js" }, @@ -5246,15 +5471,69 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/@react-native-community/datetimepicker": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-8.0.1.tgz", + "integrity": "sha512-4BO0t3geMNNw9cIIm9p9FNUzwMXexdzD4pAH0AaUAycs3BS71HLrX8jHbrI7nzq/+8O7cLAXn5Gudte+YpTV8Q==", + "dependencies": { + "invariant": "^2.2.4" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-windows": "*" + }, + "peerDependenciesMeta": { + "react-native-windows": { + "optional": true + } + } + }, + "node_modules/@react-native-picker/picker": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.7.5.tgz", + "integrity": "sha512-vhMaOLkXSUb+YKVbukMJToU4g+89VMhBG2U9+cLYF8X8HtFRidrHjohGqT8/OyesDuKIXeLIP+UFYI9Q9CRA9Q==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-native-vector-icons/common": { + "version": "0.0.1-alpha.6", + "resolved": "https://registry.npmjs.org/@react-native-vector-icons/common/-/common-0.0.1-alpha.6.tgz", + "integrity": "sha512-3LgnZIGyhCJz/BaOLCwqWlZkFRgxLCb9+y0maWBAkq2BYw/FzXTyMjpM6nYZ2wSE9FVuY1NfwHRZvNDxa5IYUQ==", + "dependencies": { + "@react-native-community/cli-tools": "^13.6.5", + "prop-types": "^15.8.1", + "yargs": "^17.7.2" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-native-vector-icons/fontawesome5": { + "version": "5.15.4-alpha.12", + "resolved": "https://registry.npmjs.org/@react-native-vector-icons/fontawesome5/-/fontawesome5-5.15.4-alpha.12.tgz", + "integrity": "sha512-1xg+OLgdg9lfOsFtP2RiD/Rm+XsxacfpPmyFUi2QGJWLZ3zUsjipAkd5hjVSkHtzYyt5mUsDXrR2ir0g7DHb7Q==", + "dependencies": { + "@react-native-vector-icons/common": "^0.0.1-alpha.6" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } }, "node_modules/@react-native/assets-registry": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz", - "integrity": "sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.83.tgz", + "integrity": "sha512-2vkLMVnp+YTZYTNSDIBZojSsjz8sl5PscP3j4GcV6idD8V978SZfwFlk8K0ti0BzRs11mzL0Pj17km597S/eTQ==", "engines": { "node": ">=18" } @@ -5347,20 +5626,21 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.73.17", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz", - "integrity": "sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==", - "dependencies": { - "@react-native-community/cli-server-api": "12.3.6", - "@react-native-community/cli-tools": "12.3.6", - "@react-native/dev-middleware": "0.73.8", - "@react-native/metro-babel-transformer": "0.73.15", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.83.tgz", + "integrity": "sha512-7GAFjFOg1mFSj8bnFNQS4u8u7+QtrEeflUIDVZGEfBZQ3wMNI5ycBzbBGycsZYiq00Xvoc6eKFC7kvIaqeJpUQ==", + "dependencies": { + "@react-native-community/cli-server-api": "13.6.6", + "@react-native-community/cli-tools": "13.6.6", + "@react-native/dev-middleware": "0.74.83", + "@react-native/metro-babel-transformer": "0.74.83", "chalk": "^4.0.0", "execa": "^5.1.1", "metro": "^0.80.3", "metro-config": "^0.80.3", "metro-core": "^0.80.3", "node-fetch": "^2.2.0", + "querystring": "^0.2.1", "readline": "^1.3.0" }, "engines": { @@ -5509,26 +5789,28 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.73.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz", - "integrity": "sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.83.tgz", + "integrity": "sha512-RGQlVUegBRxAUF9c1ss1ssaHZh6CO+7awgtI9sDeU0PzDZY/40ImoPD5m0o0SI6nXoVzbPtcMGzU+VO590pRfA==", "engines": { "node": ">=18" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.73.8", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz", - "integrity": "sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.83.tgz", + "integrity": "sha512-UH8iriqnf7N4Hpi20D7M2FdvSANwTVStwFCSD7VMU9agJX88Yk0D1T6Meh2RMhUu4kY2bv8sTkNRm7LmxvZqgA==", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.73.3", + "@react-native/debugger-frontend": "0.74.83", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^1.0.0", "connect": "^3.6.5", "debug": "^2.2.0", "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", "open": "^7.0.3", + "selfsigned": "^2.4.1", "serve-static": "^1.13.1", "temp-dir": "^2.0.0", "ws": "^6.2.2" @@ -5574,29 +5856,29 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz", - "integrity": "sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.83.tgz", + "integrity": "sha512-Pw2BWVyOHoBuJVKxGVYF6/GSZRf6+v1Ygc+ULGz5t20N8qzRWPa2fRZWqoxsN7TkNLPsECYY8gooOl7okOcPAQ==", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.73.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz", - "integrity": "sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.83.tgz", + "integrity": "sha512-/t74n8r6wFhw4JEoOj3bN71N1NDLqaawB75uKAsSjeCwIR9AfCxlzZG0etsXtOexkY9KMeZIQ7YwRPqUdNXuqw==", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.73.15", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz", - "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==", + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.83.tgz", + "integrity": "sha512-hGdx5N8diu8y+GW/ED39vTZa9Jx1di2ZZ0aapbhH4egN1agIAusj5jXTccfNBwwWF93aJ5oVbRzfteZgjbutKg==", "dependencies": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.73.21", - "hermes-parser": "0.15.0", + "@react-native/babel-preset": "0.74.83", + "hermes-parser": "0.19.1", "nullthrows": "^1.1.1" }, "engines": { @@ -5606,131 +5888,196 @@ "@babel/core": "*" } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", - "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", + "node_modules/@react-native/normalize-colors": { + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.83.tgz", + "integrity": "sha512-jhCY95gRDE44qYawWVvhTjTplW1g+JtKTKM3f8xYT1dJtJ8QWv+gqEtKcfmOHfDkSDaMKG0AGBaDTSK8GXLH8Q==" + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.74.83", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.83.tgz", + "integrity": "sha512-rmaLeE34rj7py4FxTod7iMTC7BAsm+HrGA8WxYmEJeyTV7WSaxAkosKoYBz8038mOiwnG9VwA/7FrB6bEQvn1A==", "dependencies": { - "@react-native/codegen": "0.73.3" + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { - "version": "0.73.21", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", - "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", + "node_modules/@react-navigation/bottom-tabs": { + "version": "6.5.20", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", + "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.73.4", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" + "@react-navigation/elements": "^1.3.30", + "color": "^4.2.3", + "warn-once": "^0.1.0" }, "peerDependencies": { - "@babel/core": "*" + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": { - "version": "0.73.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", - "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", + "node_modules/@react-navigation/core": { + "version": "6.4.16", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz", + "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==", "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" + "@react-navigation/routers": "^6.1.9", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.23", + "query-string": "^7.1.3", + "react-is": "^16.13.0", + "use-latest-callback": "^0.1.9" }, - "engines": { - "node": ">=18" + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@react-navigation/elements": { + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz", + "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==", + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/native": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.17.tgz", + "integrity": "sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ==", + "dependencies": { + "@react-navigation/core": "^6.4.16", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "^3.1.23" }, "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "react": "*", + "react-native": "*" } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", - "engines": { - "node": ">=0.4.0" + "node_modules/@react-navigation/native-stack": { + "version": "6.9.26", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.26.tgz", + "integrity": "sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw==", + "dependencies": { + "@react-navigation/elements": "^1.3.30", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", - "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" + "node_modules/@react-navigation/routers": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz", + "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==", + "dependencies": { + "nanoid": "^3.1.23" + } }, - "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", - "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", + "node_modules/@react-navigation/stack": { + "version": "6.3.29", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.3.29.tgz", + "integrity": "sha512-tzlGkoRgB6P7vgw7rHuWo3TL7Gzu6xh5LMf+zSdCuEiKp/qASzxYfnTEr9tOLbVs/gf+qeukEDheCSAJKVpBXw==", "dependencies": { - "hermes-estree": "0.15.0" + "@react-navigation/elements": "^1.3.30", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">= 1.0.0", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" } }, - "node_modules/@react-native/normalize-colors": { - "version": "0.73.2", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz", - "integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==" + "node_modules/@reduxjs/toolkit": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.5.tgz", + "integrity": "sha512-aeFA/s5NCG7NoJe/MhmwREJxRkDs0ZaSqt0MxhWUrwCf1UQXpwR87RROJEql0uAkLI6U7snBOYOcKw83ew3FPg==", + "dependencies": { + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.73.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz", - "integrity": "sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==", + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=18" + "node": ">=14.15" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" }, - "peerDependencies": { - "react-native": "*" + "engines": { + "node": ">=10" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@rnx-kit/chromium-edge-launcher": { @@ -5841,6 +6188,93 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@stripe/stripe-react-native": { + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@stripe/stripe-react-native/-/stripe-react-native-0.37.3.tgz", + "integrity": "sha512-9OReixY4bP3ogHUoAmDs+FRKxTCCDz6APep6fn8LAzs5xG5IGDetFb7UlZkigFYqtJgbe3+n4kMS5wIcxKgnLQ==", + "peerDependencies": { + "expo": ">=46.0.9", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } + } + }, + "node_modules/@supabase/auth-js": { + "version": "2.64.2", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.64.2.tgz", + "integrity": "sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.3.1.tgz", + "integrity": "sha512-QyzNle/rVzlOi4BbVqxLSH828VdGY1RElqGFAj+XeVypj6+PVtMlD21G8SDnsPQDtlqqTtoGRgdMlQZih5hTuw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/node-fetch": { + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.2.tgz", + "integrity": "sha512-9/7pUmXExvGuEK1yZhVYXPZnLEkDTwxgMQHXLrN5BwPZZm4iUCL1YEyep/Z2lIZah8d8M433mVAUEGsihUj5KQ==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.5.tgz", + "integrity": "sha512-TEHlGwNGGmKPdeMtca1lFTYCedrhTAv3nZVoSjrKQ+wkMmaERuCe57zkC5KSWFzLYkb5FVHW8Hrr+PX1DDwplQ==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14", + "@types/phoenix": "^1.5.4", + "@types/ws": "^8.5.10", + "ws": "^8.14.2" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz", + "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.43.1", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.43.1.tgz", + "integrity": "sha512-A+RV50mWNtyKo6M0u4G6AOqEifQD+MoOjZcpRkPMPpEAFgMsc2dt3kBlBlR/MgZizWQgUKhsvrwKk0efc8g6Ug==", + "dependencies": { + "@supabase/auth-js": "2.64.2", + "@supabase/functions-js": "2.3.1", + "@supabase/node-fetch": "2.6.15", + "@supabase/postgrest-js": "1.15.2", + "@supabase/realtime-js": "2.9.5", + "@supabase/storage-js": "2.5.5" + } + }, + "node_modules/@types/hammerjs": { + "version": "2.0.45", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz", + "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -5863,9 +6297,9 @@ } }, "node_modules/@types/node": { - "version": "20.12.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz", - "integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==", + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", "dependencies": { "undici-types": "~5.26.4" } @@ -5878,11 +6312,60 @@ "@types/node": "*" } }, + "node_modules/@types/phoenix": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", + "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + }, + "node_modules/@types/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", + "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-native": { + "version": "0.70.19", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.19.tgz", + "integrity": "sha512-c6WbyCgWTBgKKMESj/8b4w+zWcZSsCforson7UdXtXMecG3MxCinYi6ihhrHVPyUrVzORsvEzK8zg32z4pK6Sg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-native-vector-icons": { + "version": "6.4.18", + "resolved": "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.18.tgz", + "integrity": "sha512-YGlNWb+k5laTBHd7+uZowB9DpIK3SXUneZqAiKQaj1jnJCZM0x71GDim5JCTMi4IFkhc9m8H/Gm28T5BjyivUw==", + "dependencies": { + "@types/react": "*", + "@types/react-native": "^0.70" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", @@ -6045,6 +6528,25 @@ "strip-ansi": "^5.0.0" } }, + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6108,12 +6610,9 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", @@ -6265,6 +6764,18 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, "node_modules/ast-types": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", @@ -6316,6 +6827,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -6374,9 +6895,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.6.tgz", - "integrity": "sha512-jRi9I5/jT+dnIiNJDjDg+I/pV+AlxrIW/DNbdqYoRWPZA/LHDqD6IJnJXLxbuTcQ+llp+0LWcU7f/kC/PgGpkw==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.5.tgz", + "integrity": "sha512-IjqR4B7wnBU55pofLeLGjwUGrWJE1buamgzE9CYpYCNicZmJcNjXUcinQiurXCMuClF2hOff3QfZsLxnGj1UaA==", "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-transform-export-namespace-from": "^7.22.11", @@ -6389,11 +6910,24 @@ "react-refresh": "^0.14.2" } }, + "node_modules/badgin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/badgin/-/badgin-1.2.3.tgz", + "integrity": "sha512-NQGA7LcfCpSzIbGRbkgjgdWkjy7HI+Th5VLxTJfW5EeaAf3fnS+xWQaQOCYiny+q6QSvxqoSO04vCx+4u++EJw==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6455,6 +6989,11 @@ "node": ">= 6" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/bplist-creator": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", @@ -6691,6 +7230,14 @@ "node": ">=4" } }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/caller-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", @@ -6703,11 +7250,12 @@ } }, "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/camelcase": { @@ -6722,9 +7270,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001614", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", - "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", + "version": "1.0.30001616", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", + "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", "funding": [ { "type": "opencollective", @@ -6753,6 +7301,14 @@ "node": ">=4" } }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -6786,86 +7342,26 @@ "node": ">=12.13.0" } }, - "node_modules/chrome-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chromium-edge-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", - "integrity": "sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "node": ">=8" } }, - "node_modules/chromium-edge-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/chromium-edge-launcher/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" + "node": ">=6" } }, "node_modules/cli-cursor": { @@ -6903,17 +7399,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -6935,6 +7420,18 @@ "node": ">=6" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -6948,6 +7445,31 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -7099,6 +7621,46 @@ "node": ">=4" } }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "engines": { + "node": ">=4" + } + }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", @@ -7136,6 +7698,57 @@ "node": ">=8" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, "node_modules/dag-map": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", @@ -7218,6 +7831,14 @@ "node": ">=0.10.0" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -7367,19 +7988,6 @@ "node": ">= 0.8" } }, - "node_modules/deprecated-react-native-prop-types": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz", - "integrity": "sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==", - "dependencies": { - "@react-native/normalize-colors": "^0.73.0", - "invariant": "^2.2.4", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -7423,6 +8031,57 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -7454,9 +8113,18 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.752", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.752.tgz", - "integrity": "sha512-P3QJreYI/AUTcfBVrC4zy9KvnZWekViThgQMX/VpJ+IsOBbcX5JFpORM4qWapwWQ+agb2nYAOyn/4PMXOk0m2Q==" + "version": "1.4.759", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.759.tgz", + "integrity": "sha512-qZJc+zsuI+/5UjOSFnpkJBwwLMH1AZgyKqJ7LUNnRsB7v/cDjMu9DvXgp9kH6PTTZxjnPXGp2Uhurw+2Ll4Hjg==" + }, + "node_modules/emailjs-com": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emailjs-com/-/emailjs-com-3.2.0.tgz", + "integrity": "sha512-Prbz3E1usiAwGjMNYRv6EsJ5c373cX7/AGnZQwOfrpNJrygQJ15+E9OOq4pU8yC977Z5xMetRfc3WmDX6RcjAA==", + "deprecated": "The SDK name changed to @emailjs/browser", + "engines": { + "node": ">=12.0.0" + } }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -7479,6 +8147,17 @@ "once": "^1.4.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-editor": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", @@ -7697,11 +8376,14 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { @@ -7803,23 +8485,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -7872,12 +8537,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7912,6 +8571,7 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -7960,6 +8620,7 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -8178,23 +8839,23 @@ } }, "node_modules/expo": { - "version": "51.0.5", - "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.5.tgz", - "integrity": "sha512-i+AfkfToYPFCobX0NUT9PmDtsB3L19vhCB/XUE1Ph6FVrBF6GipkHzTADuRLMaVg5u/2sm/fdzGzBcMjXSHqmA==", + "version": "51.0.0", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.0.tgz", + "integrity": "sha512-qY4gECM+YDWgmv0rTzdlrbvGKYLMy/xQ6FtYp2/HG+yF+XpqpKTCNQ2RZN97DRIXlPmxhPd/S5IUD46kW3TQaQ==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.18.11", + "@expo/cli": "0.18.9", "@expo/config": "9.0.1", "@expo/config-plugins": "8.0.4", "@expo/metro-config": "0.18.3", "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~11.0.6", + "babel-preset-expo": "~11.0.5", "expo-asset": "~10.0.6", "expo-file-system": "~17.0.1", - "expo-font": "~12.0.5", + "expo-font": "~12.0.4", "expo-keep-awake": "~13.0.1", "expo-modules-autolinking": "1.11.1", - "expo-modules-core": "1.12.10", + "expo-modules-core": "1.12.9", "fbemitter": "^3.0.0", "whatwg-url-without-unicode": "8.0.0-3" }, @@ -8202,6 +8863,14 @@ "expo": "bin/cli" } }, + "node_modules/expo-application": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-5.9.1.tgz", + "integrity": "sha512-uAfLBNZNahnDZLRU41ZFmNSKtetHUT9Ua557/q189ua0AWV7pQjoVAx49E4953feuvqc9swtU3ScZ/hN1XO/FQ==", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-asset": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-10.0.6.tgz", @@ -8216,12 +8885,21 @@ "expo": "*" } }, - "node_modules/expo-asset/node_modules/@react-native/assets-registry": { - "version": "0.74.83", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.83.tgz", - "integrity": "sha512-2vkLMVnp+YTZYTNSDIBZojSsjz8sl5PscP3j4GcV6idD8V978SZfwFlk8K0ti0BzRs11mzL0Pj17km597S/eTQ==", - "engines": { - "node": ">=18" + "node_modules/expo-av": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/expo-av/-/expo-av-14.0.3.tgz", + "integrity": "sha512-gOsTBEUxpg6IG+IGgRPA195vAzU7bI/8CyR35/gJUZ7IMBlymn1gVFFhLjCnDxcj7IE4L+c6p8poFgim4j5pHw==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-blur": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-blur/-/expo-blur-13.0.2.tgz", + "integrity": "sha512-t2p7BChO3Reykued++QJRMZ/og6J3aXtSQ+bU31YcBeXhZLkHwjWEhiPKPnJka7J2/yTs4+jOCNDY0kCZmcE3w==", + "peerDependencies": { + "expo": "*" + } }, "node_modules/expo-constants": { @@ -8235,6 +8913,14 @@ "expo": "*" } }, + "node_modules/expo-contacts": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/expo-contacts/-/expo-contacts-13.0.3.tgz", + "integrity": "sha512-TRB3+en0u/cwmlc1ENcB9dxJY+6rxs9C8uEte1WfpzZLcyRk5ifP48LCLatYQdTlQqtuF262uFRPjrvmzrygwg==", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-file-system": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-17.0.1.tgz", @@ -8244,9 +8930,10 @@ } }, "node_modules/expo-font": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.5.tgz", - "integrity": "sha512-h/VkN4jlHYDJ6T6pPgOYTVoDEfBY0CTKQe4pxnPDGQiE6H+DFdDgk+qWVABGpRMH0+zXoHB+AEi3OoQjXIynFA==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.4.tgz", + "integrity": "sha512-VtOQB7MEeFMVwo46/9/ntqzrgraTE7gAsnfi2NukFcCpDmyAU3G1R7m287LUXltE46SmGkMgAvM6+fflXFjaJA==", + "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -8254,22 +8941,61 @@ "expo": "*" } }, - "node_modules/expo-keep-awake": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.1.tgz", - "integrity": "sha512-Kqv8Bf1f5Jp7YMUgTTyKR9GatgHJuAcC8vVWDEkgVhB3O7L3pgBy5MMSMUhkTmRRV6L8TZe/rDmjiBoVS/soFA==", + "node_modules/expo-image-loader": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-4.7.0.tgz", + "integrity": "sha512-cx+MxxsAMGl9AiWnQUzrkJMJH4eNOGlu7XkLGnAXSJrRoIiciGaKqzeaD326IyCTV+Z1fXvIliSgNW+DscvD8g==", "peerDependencies": { "expo": "*" } }, - "node_modules/expo-modules-autolinking": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", - "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", + "node_modules/expo-image-manipulator": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/expo-image-manipulator/-/expo-image-manipulator-12.0.3.tgz", + "integrity": "sha512-gosW32roHbXRKPiBVbQDFpxaZf8sjOJ9aaqbe085Qfcenvvr1lNFMx9M9BFYhAoKd23oEWlyvNHDnAayV4gAFA==", "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", + "expo-image-loader": "~4.7.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-image-picker": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/expo-image-picker/-/expo-image-picker-15.0.5.tgz", + "integrity": "sha512-Qqp16udsadx/YpNcNaWzfbmO0tbMxyX9bS1aFiDVC+Zffh8LY8S4HJJcnWqSC2TeuAl+9SxUwTloJagvPeMBBw==", + "dependencies": { + "expo-image-loader": "~4.7.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-keep-awake": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.1.tgz", + "integrity": "sha512-Kqv8Bf1f5Jp7YMUgTTyKR9GatgHJuAcC8vVWDEkgVhB3O7L3pgBy5MMSMUhkTmRRV6L8TZe/rDmjiBoVS/soFA==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-linear-gradient": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-13.0.2.tgz", + "integrity": "sha512-EDcILUjRKu4P1rtWcwciN6CSyGtH7Bq4ll3oTRV7h3h8oSzSilH1g6z7kTAMlacPBKvMnkkWOGzW6KtgMKEiTg==", + + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-modules-autolinking": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz", + "integrity": "sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw==", + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", "find-up": "^5.0.0", "fs-extra": "^9.1.0" }, @@ -8375,23 +9101,94 @@ } }, "node_modules/expo-modules-core": { - "version": "1.12.10", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.10.tgz", - "integrity": "sha512-aS4imfr7fuUtcx+j/CHuG6ohNSThyCzGRh1kKjQTDcO0/CqDO2cSFnxf7n2vpiRFgyoMFJvFFtW/zIzVXiC2Tw==", + "version": "1.12.9", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.9.tgz", + "integrity": "sha512-t0HrPwelNFqGiaa9RsDt2ttDekAbgHjcq4PBovNS0jyhRwBbDDb465xoMxG+V4eNLBYTP+BVgxMHK+TPxT2QgQ==", "dependencies": { "invariant": "^2.2.4" } }, + "node_modules/expo-notifications": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.28.1.tgz", + "integrity": "sha512-qBVcq3lc+FIvcYt/8M+JB1c60g0hVuyGY4MVGTY56ciU6nMOCiBiz4XPc3DeiZA16jVtfriooWA26wqBkQfkHg==", + "dependencies": { + "@expo/image-utils": "^0.5.0", + "@ide/backoff": "^1.0.0", + "abort-controller": "^3.0.0", + "assert": "^2.0.0", + "badgin": "^1.1.5", + "expo-application": "~5.9.0", + "expo-constants": "~16.0.0", + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-notifications/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-notifications/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/expo-notifications/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/expo-permissions": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-14.4.0.tgz", + "integrity": "sha512-oAcnJ7dlZhpBydK73cwomA2xofizayVUz+FW5REl7dMu7MYyeN/3aqhlpZ3mYddrxvG161bqu97MQr01UixUnw==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-sharing": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/expo-sharing/-/expo-sharing-12.0.1.tgz", + "integrity": "sha512-wBT+WeXwapj/9NWuLJO01vi9bdlchYu/Q/xD8slL/Ls4vVYku8CPqzkTtDFcjLrjtlJqyeHsdQXwKLvORmBIew==", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-status-bar": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.11.1.tgz", - "integrity": "sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.12.1.tgz", + "integrity": "sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA==" + }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.2", @@ -8408,6 +9205,17 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -8512,6 +9320,14 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -8626,6 +9442,25 @@ "node": ">=0.4.0" } }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/fontfaceobserver": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", @@ -8640,9 +9475,9 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -8840,14 +9675,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/globals": { @@ -9038,6 +9874,14 @@ "node": ">=8" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -9108,6 +9952,11 @@ "node": ">=10.17.0" } }, + "node_modules/humps": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", + "integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==" + }, "node_modules/husky": { "version": "9.0.11", "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", @@ -9164,22 +10013,36 @@ "node": ">=16.x" } }, + "node_modules/immer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-fresh/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } @@ -9273,6 +10136,21 @@ "node": ">= 0.10" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -9443,7 +10321,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9515,6 +10392,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -9564,6 +10456,14 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -9739,9 +10639,9 @@ } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", @@ -10160,9 +11060,9 @@ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" }, "node_modules/joi": { - "version": "17.13.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz", - "integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==", + "version": "17.13.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", + "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -10182,12 +11082,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -10669,6 +11568,11 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -10800,17 +11704,6 @@ "node": ">=8" } }, - "node_modules/logkitty/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/logkitty/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -10943,6 +11836,11 @@ "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==" }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -10953,6 +11851,17 @@ "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -10967,9 +11876,9 @@ } }, "node_modules/metro": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.8.tgz", - "integrity": "sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", + "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -10992,18 +11901,18 @@ "jest-worker": "^29.6.3", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.8", - "metro-cache": "0.80.8", - "metro-cache-key": "0.80.8", - "metro-config": "0.80.8", - "metro-core": "0.80.8", - "metro-file-map": "0.80.8", - "metro-resolver": "0.80.8", - "metro-runtime": "0.80.8", - "metro-source-map": "0.80.8", - "metro-symbolicate": "0.80.8", - "metro-transform-plugins": "0.80.8", - "metro-transform-worker": "0.80.8", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-config": "0.80.9", + "metro-core": "0.80.9", + "metro-file-map": "0.80.9", + "metro-resolver": "0.80.9", + "metro-runtime": "0.80.9", + "metro-source-map": "0.80.9", + "metro-symbolicate": "0.80.9", + "metro-transform-plugins": "0.80.9", + "metro-transform-worker": "0.80.9", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -11023,9 +11932,9 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.8.tgz", - "integrity": "sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", + "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", "dependencies": { "@babel/core": "^7.20.0", "hermes-parser": "0.20.1", @@ -11049,11 +11958,11 @@ } }, "node_modules/metro-cache": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.8.tgz", - "integrity": "sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", + "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", "dependencies": { - "metro-core": "0.80.8", + "metro-core": "0.80.9", "rimraf": "^3.0.2" }, "engines": { @@ -11061,9 +11970,9 @@ } }, "node_modules/metro-cache-key": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.8.tgz", - "integrity": "sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", + "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", "engines": { "node": ">=18" } @@ -11083,38 +11992,38 @@ } }, "node_modules/metro-config": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.8.tgz", - "integrity": "sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", + "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "jest-validate": "^29.6.3", - "metro": "0.80.8", - "metro-cache": "0.80.8", - "metro-core": "0.80.8", - "metro-runtime": "0.80.8" + "metro": "0.80.9", + "metro-cache": "0.80.9", + "metro-core": "0.80.9", + "metro-runtime": "0.80.9" }, "engines": { "node": ">=18" } }, "node_modules/metro-core": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.8.tgz", - "integrity": "sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", + "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.8" + "metro-resolver": "0.80.9" }, "engines": { "node": ">=18" } }, "node_modules/metro-file-map": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.8.tgz", - "integrity": "sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", + "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", "dependencies": { "anymatch": "^3.0.3", "debug": "^2.2.0", @@ -11148,9 +12057,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/metro-minify-terser": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.8.tgz", - "integrity": "sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", + "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", "dependencies": { "terser": "^5.15.0" }, @@ -11159,17 +12068,17 @@ } }, "node_modules/metro-resolver": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.8.tgz", - "integrity": "sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", + "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", "engines": { "node": ">=18" } }, "node_modules/metro-runtime": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.8.tgz", - "integrity": "sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", + "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", "dependencies": { "@babel/runtime": "^7.0.0" }, @@ -11178,16 +12087,16 @@ } }, "node_modules/metro-source-map": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.8.tgz", - "integrity": "sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", + "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.80.8", + "metro-symbolicate": "0.80.9", "nullthrows": "^1.1.1", - "ob1": "0.80.8", + "ob1": "0.80.9", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -11204,12 +12113,12 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.8.tgz", - "integrity": "sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", + "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.80.8", + "metro-source-map": "0.80.9", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -11231,9 +12140,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.8.tgz", - "integrity": "sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", + "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -11246,21 +12155,21 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.8.tgz", - "integrity": "sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", + "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "metro": "0.80.8", - "metro-babel-transformer": "0.80.8", - "metro-cache": "0.80.8", - "metro-cache-key": "0.80.8", - "metro-minify-terser": "0.80.8", - "metro-source-map": "0.80.8", - "metro-transform-plugins": "0.80.8", + "metro": "0.80.9", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-minify-terser": "0.80.9", + "metro-source-map": "0.80.9", + "metro-transform-plugins": "0.80.9", "nullthrows": "^1.1.1" }, "engines": { @@ -11373,17 +12282,6 @@ "node": ">=0.10.0" } }, - "node_modules/metro/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/metro/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11572,6 +12470,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -11803,15 +12709,27 @@ "node": ">=4" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.80.8", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.8.tgz", - "integrity": "sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA==", + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.9.tgz", + "integrity": "sha512-v9yOxowkZbxWhKOaaTyLjIm1aLy4ebMNcSn4NYJKOAI/Qv+SkfEfszpLr2GIxsccmb2Y2HA9qtsqiIJ80ucpVA==", "engines": { "node": ">=18" } @@ -11832,6 +12750,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -11977,9 +12910,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { @@ -12010,6 +12951,25 @@ "node": ">=6" } }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -12105,15 +13065,6 @@ "node": ">=6" } }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -12191,6 +13142,14 @@ "node": ">=8" } }, + "node_modules/paths-js": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/paths-js/-/paths-js-0.4.11.tgz", + "integrity": "sha512-3mqcLomDBXOo7Fo+UlaenG6f71bk1ZezPQy2JCmYHy2W2k5VKpP+Jbin9H0bjXynelTbglCqdFhSEkeIkKTYUA==", + "engines": { + "node": ">=0.11.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12327,6 +13286,11 @@ "node": ">=4.0.0" } }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -12551,6 +13515,11 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -12576,6 +13545,46 @@ "qrcode-terminal": "bin/qrcode-terminal.js" } }, + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "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" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", @@ -12603,145 +13612,526 @@ } ] }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.2.0.tgz", + "integrity": "sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A==", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-freeze": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", + "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=17.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-native": { + "version": "0.74.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.1.tgz", + "integrity": "sha512-0H2XpmghwOtfPpM2LKqHIN7gxy+7G/r1hwJHKLV6uoyXGC/gCojRtoo5NqyKrWpFC8cqyT6wTYCLuG7CxEKilg==", + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "13.6.6", + "@react-native-community/cli-platform-android": "13.6.6", + "@react-native-community/cli-platform-ios": "13.6.6", + "@react-native/assets-registry": "0.74.83", + "@react-native/codegen": "0.74.83", + "@react-native/community-cli-plugin": "0.74.83", + "@react-native/gradle-plugin": "0.74.83", + "@react-native/js-polyfills": "0.74.83", + "@react-native/normalize-colors": "0.74.83", + "@react-native/virtualized-lists": "0.74.83", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "^5.0.0", + "react-refresh": "^0.14.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.2", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-actionsheet": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/react-native-actionsheet/-/react-native-actionsheet-2.4.2.tgz", + "integrity": "sha512-DBoWIvVwuWXuptF4t46pBqkFxaUxS+rsIdHiA05t0n4BdTIDV2R4s9bLEUVOGzb94D7VxIamsXZPA/3mmw+SXg==", + "peerDependencies": { + "prop-types": ">=15.4.0", + "react": ">=15.4.0", + "react-native": "*" + } + }, + "node_modules/react-native-animatable": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/react-native-animatable/-/react-native-animatable-1.3.3.tgz", + "integrity": "sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==", + "dependencies": { + "prop-types": "^15.7.2" + } + }, + "node_modules/react-native-chart-kit": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/react-native-chart-kit/-/react-native-chart-kit-6.12.0.tgz", + "integrity": "sha512-nZLGyCFzZ7zmX0KjYeeSV1HKuPhl1wOMlTAqa0JhlyW62qV/1ZPXHgT8o9s8mkFaGxdqbspOeuaa6I9jUQDgnA==", + "dependencies": { + "lodash": "^4.17.13", + "paths-js": "^0.4.10", + "point-in-polygon": "^1.0.1" + }, + "peerDependencies": { + "react": "> 16.7.0", + "react-native": ">= 0.50.0", + "react-native-svg": "> 6.4.1" + } + }, + "node_modules/react-native-collapsible": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/react-native-collapsible/-/react-native-collapsible-1.6.1.tgz", + "integrity": "sha512-orF4BeiXd2hZW7fu9YcqIJXzN6TJcFcddY807D3MAOVktLuW9oQ+RIkrTJ5DR3v9ZOFfREkOjEmS79qeUTvkBQ==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-elements": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.3.tgz", + "integrity": "sha512-VtZc25EecPZyUBER85zFK9ZbY6kkUdcm1ZwJ9hdoGSCr1R/GFgxor4jngOcSYeMvQ+qimd5No44OVJW3rSJECA==", + "hasInstallScript": true, + "dependencies": { + "@types/react-native-vector-icons": "^6.4.6", + "color": "^3.1.2", + "deepmerge": "^4.2.2", + "hoist-non-react-statics": "^3.3.2", + "lodash.isequal": "^4.5.0", + "opencollective-postinstall": "^2.0.3", + "react-native-ratings": "8.0.4", + "react-native-size-matters": "^0.3.1" + }, + "peerDependencies": { + "react-native-safe-area-context": ">= 3.0.0", + "react-native-vector-icons": ">7.0.0" + } + }, + "node_modules/react-native-elements/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/react-native-gesture-handler": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.2.tgz", + "integrity": "sha512-vGFlrDKlmyI+BT+FemqVxmvO7nqxU33cgXVsn6IKAFishvlG3oV2Ds67D5nPkHMea8T+s1IcuMm0bF8ntZtAyg==", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-get-random-values": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", + "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, + "node_modules/react-native-iphone-x-helper": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", + "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", + "peerDependencies": { + "react-native": ">=0.42.0" + } + }, + "node_modules/react-native-keyboard-aware-scroll-view": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.5.tgz", + "integrity": "sha512-XwfRn+T/qBH9WjTWIBiJD2hPWg0yJvtaEw6RtPCa5/PYHabzBaWxYBOl0usXN/368BL1XktnZPh8C2lmTpOREA==", + "dependencies": { + "prop-types": "^15.6.2", + "react-native-iphone-x-helper": "^1.0.3" + }, + "peerDependencies": { + "react-native": ">=0.48.4" + } + }, + "node_modules/react-native-mime-types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/react-native-mime-types/-/react-native-mime-types-2.5.0.tgz", + "integrity": "sha512-l1NIGxa0MBFPGBFDd3yeGe2f8+Qb+U4M1FEK7l3Fob0R7kOecwgRau2CCCmu6W5QzyhKdBxRC8SOTuTIEKKAUw==", + "dependencies": { + "mime-db": "~1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react-native-modal": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/react-native-modal/-/react-native-modal-13.0.1.tgz", + "integrity": "sha512-UB+mjmUtf+miaG/sDhOikRfBOv0gJdBU2ZE1HtFWp6UixW9jCk/bhGdHUgmZljbPpp0RaO/6YiMmQSSK3kkMaw==", + "dependencies": { + "prop-types": "^15.6.2", + "react-native-animatable": "1.3.3" + }, + "peerDependencies": { + "react": "*", + "react-native": ">=0.65.0" + } + }, + "node_modules/react-native-modal-datetime-picker": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/react-native-modal-datetime-picker/-/react-native-modal-datetime-picker-17.1.0.tgz", + "integrity": "sha512-jfTwfaCLtBffYbQ+pOGFLM+J5HmUh3vb9rT0JrrQPjxzecdc8pNYreB1c96+mVuq8bDCvaCdIeuEsslTqLJL0Q==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "@react-native-community/datetimepicker": ">=6.7.0", + "react-native": ">=0.65.0" + } + }, + "node_modules/react-native-modalize": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-native-modalize/-/react-native-modalize-2.1.1.tgz", + "integrity": "sha512-4/7EZWsrUqAAkkAVEnOsSdpAPQaEBewX7TvwFuzgvGDzxKpq3O58I9SnSeU8QtG/r91XYHJNaU5dAuDrcLjUaQ==", + "peerDependencies": { + "react": "> 15.0.0", + "react-native": "> 0.50.0", + "react-native-gesture-handler": "> 1.0.0" + } + }, + "node_modules/react-native-paper": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-5.12.3.tgz", + "integrity": "sha512-nH1e1pGPE/aOE5YR2GRX7CfMHFA9cAfrAfgCtwL4amJPDZCoVjc5yt2VDiUE1rT+JUfk0qdICMP3UggxvjMgug==", + "dependencies": { + "@callstack/react-theme-provider": "^3.0.9", + "color": "^3.1.2", + "use-latest-callback": "^0.1.5" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-safe-area-context": "*", + "react-native-vector-icons": "*" + } + }, + "node_modules/react-native-paper/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/react-native-ratings": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/react-native-ratings/-/react-native-ratings-8.0.4.tgz", + "integrity": "sha512-Xczu5lskIIRD6BEdz9A0jDRpEck/SFxRqiglkXi0u67yAtI1/pcJC76P4MukCbT8K4BPVl+42w83YqXBoBRl7A==", + "dependencies": { + "lodash": "^4.17.15" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-raw-bottom-sheet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-raw-bottom-sheet/-/react-native-raw-bottom-sheet-3.0.0.tgz", + "integrity": "sha512-kHR7j2ExCLqf/AO3MECozMJXi48O1+YxUYSRgRo/5Ftm7mEcrxJEzvjqMmqUbVhhKlfk5hLCGFnEQ5Z9OHCUtg==" + }, + "node_modules/react-native-reanimated": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.11.0.tgz", + "integrity": "sha512-BNw/XDgUfs8UhfY1X6IniU8kWpnotWGyt8qmQviaHisTi5lvwnaOdXQKfN1KGONx6ekdFRHRP5EFwLi0UajwKA==", + "dependencies": { + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "invariant": "^2.2.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-safe-area-context": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.1.tgz", + "integrity": "sha512-w8tCuowDorUkPoWPXmhqosovBr33YsukkwYCDERZFHAxIkx6qBadYxfeoaJ91nCQKjkNzGrK5qhoNOeSIcYSpA==", + "peer": true, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-screens": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.31.1.tgz", + "integrity": "sha512-8fRW362pfZ9y4rS8KY5P3DFScrmwo/vu1RrRMMx0PNHbeC9TLq0Kw1ubD83591yz64gLNHFLTVkTJmWeWCXKtQ==", + "peer": true, + "dependencies": { + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-select-dropdown": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-native-select-dropdown/-/react-native-select-dropdown-4.0.1.tgz", + "integrity": "sha512-t4se17kALFcPb9wMbxig5dS1BE3pWRC6HPuFlM0J2Y6yhB1GsLqboy6an6R9rML8pRuGIJIxL29cbwEvPQwKxQ==" + }, + "node_modules/react-native-size-matters": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.3.1.tgz", + "integrity": "sha512-mKOfBLIBFBcs9br1rlZDvxD5+mAl8Gfr5CounwJtxI6Z82rGrMO+Kgl9EIg3RMVf3G855a85YVqHJL2f5EDRlw==", + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/react-native-step-indicator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-native-step-indicator/-/react-native-step-indicator-1.0.3.tgz", + "integrity": "sha512-WwTb6lpJl0T7MV59sus1utoEQuqbuWHq6V0R0iDWmlPRFjM0qirhTNTS5on1+V9Qmc9dsUCT380/mRgDF+U6zw==", + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/react-native-svg": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.3.0.tgz", + "integrity": "sha512-mBHu/fdlzUbpGX8SZFxgbKvK/sgqLfDLP8uh8G7Us+zJgdjO8OSEeqHQs+kPRdQmdLJQiqPJX2WXgCl7ToTWqw==", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "css-select": "^5.1.0", + "css-tree": "^1.1.3" }, - "bin": { - "rc": "cli.js" + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "node_modules/react-native-swipeable": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-native-swipeable/-/react-native-swipeable-0.6.0.tgz", + "integrity": "sha512-OJUmOtPAZ3s6OHdbmGdGBq3oNZaUFOV81UMQfO2fvIF2cUOMbjUKQCRU7EhijEyufiaMAlSu/VguCRAdLRLk3w==", "dependencies": { - "loose-envify": "^1.1.0" + "prop-types": "^15.5.10" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": ">=15.2.0", + "react-native": ">=0.44.0" } }, - "node_modules/react-devtools-core": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", - "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" + "node_modules/react-native-tooltip-menu": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/react-native-tooltip-menu/-/react-native-tooltip-menu-3.0.7.tgz", + "integrity": "sha512-d6+MlilDXfygwyMY3LvDPp9J6tLIIgwTwrzyz7g5zez70J4/EfaqYFZJXlxyfH6EQdQrnIz2YhS7jj8BmzsYBA==", + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, + "node_modules/react-native-typography": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-native-typography/-/react-native-typography-1.4.1.tgz", + "integrity": "sha512-dc9Zfs4jUdq4ygx4/KwO6jKTERBu6cRrfPJGntw/pA+D6BMjlWfMNuhZ/69vf4Zpsnt9s4AGe+Z/V1QFYaCXAA==", "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "react": "*", + "react-native": "*" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "node_modules/react-native-url-polyfill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-2.0.0.tgz", + "integrity": "sha512-My330Do7/DvKnEvwQc0WdcBnFPploYKp9CYlefDXzIdEaA+PAhDYllkvGeEroEzvc4Kzzj2O4yVdz8v6fjRvhA==", + "dependencies": { + "whatwg-url-without-unicode": "8.0.0-3" + }, + "peerDependencies": { + "react-native": "*" + } }, - "node_modules/react-native": { - "version": "0.73.6", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.6.tgz", - "integrity": "sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA==", + "node_modules/react-native-vector-icons": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.1.0.tgz", + "integrity": "sha512-fdQjCHIdoXmRoTZ5gvN1FmT4sGLQ2wmQiNZHKJQUYnE2tkIwjGnxNch+6Nd4lHAACvMWO7LOzBNot2u/zlOmkw==", "dependencies": { - "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "12.3.6", - "@react-native-community/cli-platform-android": "12.3.6", - "@react-native-community/cli-platform-ios": "12.3.6", - "@react-native/assets-registry": "0.73.1", - "@react-native/codegen": "0.73.3", - "@react-native/community-cli-plugin": "0.73.17", - "@react-native/gradle-plugin": "0.73.4", - "@react-native/js-polyfills": "0.73.1", - "@react-native/normalize-colors": "0.73.2", - "@react-native/virtualized-lists": "0.73.4", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "base64-js": "^1.5.1", - "chalk": "^4.0.0", - "deprecated-react-native-prop-types": "^5.0.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "jest-environment-node": "^29.6.3", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.80.3", - "metro-source-map": "^0.80.3", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^4.27.7", - "react-refresh": "^0.14.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" + "prop-types": "^15.7.2", + "yargs": "^16.1.1" }, "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "18.2.0" + "fa-upgrade.sh": "bin/fa-upgrade.sh", + "fa5-upgrade": "bin/fa5-upgrade.sh", + "fa6-upgrade": "bin/fa6-upgrade.sh", + "generate-icon": "bin/generate-icon.js" } }, - "node_modules/react-native/node_modules/@react-native/codegen": { - "version": "0.73.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", - "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", + "node_modules/react-native-vector-icons/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/react-native-vector-icons/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "node": ">=10" + } + }, + "node_modules/react-native-vector-icons/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" } }, "node_modules/react-native/node_modules/ansi-styles": { @@ -12789,14 +14179,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/react-native/node_modules/flow-parser": { - "version": "0.206.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", - "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/react-native/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -12837,6 +14219,28 @@ "async-limiter": "~1.0.0" } }, + "node_modules/react-redux": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", + "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", + "dependencies": { + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25", + "react": "^18.0", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -12871,6 +14275,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", @@ -12898,6 +14307,19 @@ "node": ">=0.10.0" } }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "peerDependencies": { + "redux": "^5.0.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", @@ -13048,10 +14470,16 @@ "path-parse": "^1.0.5" } }, + "node_modules/reselect": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.0.tgz", + "integrity": "sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg==" + }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -13151,11 +14579,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -13435,6 +14858,19 @@ "node": ">= 5.10.0" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -13513,6 +14949,14 @@ "node": "*" } }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -13588,6 +15032,14 @@ "node": ">= 0.10.0" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -13617,17 +15069,6 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -13701,22 +15142,14 @@ } }, "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/strip-eof": { @@ -13736,11 +15169,27 @@ } }, "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stripe": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-15.5.0.tgz", + "integrity": "sha512-c04ToET4ZUzoeSh2rWarXCPNa2+6YzkwNAcWaT4axYRlN/u1XMkz9+inouNsXWjeT6ttBrp1twz10x/sCbWLpQ==", + "dependencies": { + "@types/node": ">=8.1.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=12.*" } }, "node_modules/strnum": { @@ -14363,9 +15812,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.14.tgz", - "integrity": "sha512-JixKH8GR2pWYshIPUg/NujK3JO7JiqEEUiNArE86NQyrgUuZeTlZQN3xuS/yiV5Kb48ev9K6RqNkaJjXsdg7Jw==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", + "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", "funding": [ { "type": "opencollective", @@ -14405,6 +15854,34 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==" }, + "node_modules/use-latest-callback": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.9.tgz", + "integrity": "sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -14460,6 +15937,11 @@ "makeerror": "1.0.12" } }, + "node_modules/warn-once": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", + "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==" + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -14563,12 +16045,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", @@ -14670,17 +16146,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 706185b..e22ea03 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,69 @@ } }, "dependencies": { - "expo": "~51.0.5", - "expo-status-bar": "~1.11.1", + "@emailjs/react-native": "^4.2.2", + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-brands-svg-icons": "^6.5.2", + "@fortawesome/free-regular-svg-icons": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-native-fontawesome": "^0.3.1", + "@google/generative-ai": "^0.11.3", + "@react-native-async-storage/async-storage": "1.23.1", + "@react-native-community/blur": "^4.4.0", + "@react-native-community/datetimepicker": "^8.0.1", + "@react-native-picker/picker": "^2.7.5", + "@react-native-vector-icons/fontawesome5": "^5.15.4-alpha.12", + "@react-navigation/bottom-tabs": "^6.5.20", + "@react-navigation/native": "^6.1.17", + "@react-navigation/native-stack": "^6.9.26", + "@react-navigation/stack": "^6.3.29", + "@reduxjs/toolkit": "^2.2.5", + "@stripe/stripe-react-native": "^0.37.3", + "@supabase/supabase-js": "^2.43.1", + "axios": "^1.6.8", + "base64-arraybuffer": "^1.0.2", + "emailjs-com": "^3.2.0", + "expo": "^51.0.0", + "expo-av": "~14.0.3", + "expo-blur": "~13.0.2", + "expo-contacts": "~13.0.3", + "expo-file-system": "~17.0.1", + "expo-image-manipulator": "~12.0.3", + "expo-image-picker": "~15.0.5", + "expo-linear-gradient": "^13.0.2", + "expo-notifications": "~0.28.1", + "expo-permissions": "^14.4.0", + "expo-sharing": "~12.0.1", + "expo-status-bar": "~1.12.1", + "moment": "^2.30.1", + "prop-types": "^15.8.1", "react": "18.2.0", - "react-native": "0.73.6" + "react-native": "0.74.1", + "react-native-actionsheet": "^2.4.2", + "react-native-chart-kit": "^6.12.0", + "react-native-collapsible": "^1.6.1", + "react-native-elements": "^3.4.3", + "react-native-gesture-handler": "^2.16.2", + "react-native-get-random-values": "^1.11.0", + "react-native-keyboard-aware-scroll-view": "^0.9.5", + "react-native-mime-types": "^2.5.0", + "react-native-modal": "^13.0.1", + "react-native-modal-datetime-picker": "^17.1.0", + "react-native-modalize": "^2.1.1", + "react-native-paper": "^5.12.3", + "react-native-raw-bottom-sheet": "^3.0.0", + "react-native-reanimated": "^3.11.0", + "react-native-select-dropdown": "^4.0.1", + "react-native-step-indicator": "^1.0.3", + "react-native-svg": "^15.3.0", + "react-native-swipeable": "^0.6.0", + "react-native-tooltip-menu": "^3.0.7", + "react-native-typography": "^1.4.1", + "react-native-url-polyfill": "^2.0.0", + "react-native-vector-icons": "^10.1.0", + "react-redux": "^9.1.2", + "redux": "^5.0.1", + "stripe": "^15.5.0" }, "devDependencies": { "@babel/plugin-transform-numeric-separator": "^7.18.6", diff --git a/src/components/CardPost.js b/src/components/CardPost.js new file mode 100644 index 0000000..e61d0eb --- /dev/null +++ b/src/components/CardPost.js @@ -0,0 +1,405 @@ +import React, { useState, useEffect } from 'react'; +import { StyleSheet, View, Text, TouchableOpacity, Image, Alert, Modal, FlatList } from 'react-native'; +import { LinearGradient } from 'expo-linear-gradient'; +import { TapGestureHandler } from 'react-native-gesture-handler'; +import { useNavigation } from '@react-navigation/native'; +import moment from 'moment'; +import { useSelector } from 'react-redux'; +import Colors from '../../assets/styles/Colors'; +import PropTypes from 'prop-types'; +import { supabase } from '../config/supabaseClient'; + +const CardPost = (props) => { + const session = useSelector(({ user }) => user.session); + const user = session?.user; + const [showModalCardOptions, setShowModalCardOptions] = useState(false); + const [isDeletingPost, setIsDeletingPost] = useState(false); + const [successDeleting, setSuccessDeleting] = useState(false); + const isPostFromUserLoggedIn = props.postUser.id === user.id; + const navigation = useNavigation(); + const [likeFromUser, setLikeFromUser] = useState(props.likeFromUser); + const [countLikes, setCountLikes] = useState(props.countLikes); + const [showLikesModal, setShowLikesModal] = useState(false); + const [likedUsers, setLikedUsers] = useState([]); + + useEffect(() => { + if (!showModalCardOptions && successDeleting) { + Alert.alert('Success!', 'Your post was deleted!'); + props.actions.onDeletePostSuccess(props.postId); + } + }, [showModalCardOptions, successDeleting]); + + const viewUser = () => { + navigation.navigate('UserProfile', { userId: props.postUser.id }); + }; + + const renderCardTop = () => ( + + + {props.postUser?.imageUrl ? ( + + ) : ( + + )} + + + + {props.postUser?.name ?? 'Unknown User'} + + + {props.createdAt ? moment(props.createdAt).local().startOf('second').fromNow() : 'Unknown posted time'} + + + {isPostFromUserLoggedIn && ( + + {/* */} + + )} + + ); + + const fetchLikedUsers = async () => { + try { + // Get user_ids who liked the post + const { data: likeData, error: likeError } = await supabase + .from('Like') + .select('user_id') + .eq('post_id', props.postId); + + if (likeError) throw likeError; + + if (likeData.length === 0) { + setLikedUsers([]); + setShowLikesModal(true); + return; + } + + const userIds = likeData.map(like => like.user_id); + + // Get user details from User table + const { data: usersData, error: usersError } = await supabase + .from('User') + .select('user_id, username, profile_image') + .in('user_id', userIds); + + if (usersError) throw usersError; + + setLikedUsers(usersData); + setShowLikesModal(true); + } catch (error) { + Alert.alert('Error', 'Failed to fetch users who liked the post'); + } + }; + + const renderCardContent = () => ( + fetchLikeCount(), + fetchLikeStatus(), + + {props.post.habit_photo && ( + + )} + + + {countLikes} likes + + + + {props.postUser?.name ?? 'Unknown User'} + {props.postDescription} + + + ); + + const renderCardActions = () => ( + + + + {countLikes > 0 ? countLikes : null} + + + + {props.actions.countComments > 0 ? props.actions.countComments : null} + + + ); + + const onPressLike = async () => { + try { + if (!user || !user.id) { + throw new Error('User is not defined or does not have an id'); + } + + const { data: likeData, error: likeError } = await supabase + .from('Like') + .select('*') + .eq('post_id', props.postId) + .eq('user_id', user.id); + + if (likeError) throw likeError; + + if (likeData.length > 0) { + const { error: deleteError } = await supabase + .from('Like') + .delete() + .eq('post_id', props.postId) + .eq('user_id', user.id); + + if (deleteError) throw deleteError; + } else { + const { error: insertError } = await supabase + .from('Like') + .insert([{ post_id: props.postId, user_id: user.id }]); + + if (insertError) throw insertError; + } + + const { data: likeCountData, error: likeCountError } = await supabase + .from('Like') + .select('*', { count: 'exact' }) + .eq('post_id', props.postId); + + if (likeCountError) throw likeCountError; + + const updatedLikeCount = likeCountData.length; + + setCountLikes(updatedLikeCount); + setLikeFromUser(likeData.length === 0); + props.actions.onLikePostSuccess(props.postId); + } catch (error) { + Alert.alert('Error', 'Something went wrong with liking the post'); + } + }; + + const fetchLikeCount = async () => { + const { data: likeCountData, error: likeCountError } = await supabase + .from('Like') + .select('*', { count: 'exact' }) + .eq('post_id', props.postId); + + if (likeCountError) throw likeCountError; + + const updatedLikeCount = likeCountData.length; + + setCountLikes(updatedLikeCount); + }; + + const fetchLikeStatus = async () => { + if (!user || !user.id) return; + try { + const { data: likeData, error: likeError } = await supabase + .from('Like') + .select('*') + .eq('post_id', props.postId) + .eq('user_id', user.id); + + if (likeError) throw likeError; + + setLikeFromUser(likeData.length > 0); + } catch (error) { + Alert.alert('Error', 'Failed to fetch like status'); + } + }; + + const onPressComment = () => { + var userData = { id: props.postUser.id, name: props.postUser.name, imageUrl: props.postUser.imageUrl }; + var postData = { description: props.postDescription, id: props.postId }; + props.navigation.navigate('Comments', { + navigation: props.navigation, + postId: props.postId, + userData, + postData + }); + }; + + const toggleModalOptions = () => { + if (isPostFromUserLoggedIn) { + props.setBlurActive(!showModalCardOptions); + setShowModalCardOptions(!showModalCardOptions); + return; + } + onPressPost(); + }; + + const onPressPost = () => { + props.navigation.navigate('PostDetails', { postId: props.postId }); + }; + + return ( + + + {renderCardTop()} + {renderCardContent()} + + + + {countLikes > 0 ? countLikes : null} + + + + {props.actions.countComments > 0 ? props.actions.countComments : null} + + + + setShowLikesModal(false)} + > + + + Liked by + item.user_id.toString()} + renderItem={({ item }) => ( + + + {item.username} + + )} + /> + setShowLikesModal(false)} style={styles.closeButton}> + Close + + + + + + + ); +}; + +CardPost.propTypes = { + postId: PropTypes.string.isRequired, + post: PropTypes.object.isRequired, + postUser: PropTypes.object.isRequired, + createdAt: PropTypes.string.isRequired, + postDescription: PropTypes.string.isRequired, + postType: PropTypes.string.isRequired, + actions: PropTypes.object.isRequired, + navigation: PropTypes.object.isRequired, + likeFromUser: PropTypes.bool.isRequired, + countLikes: PropTypes.number.isRequired, + user: PropTypes.object.isRequired, +}; + +const styles = StyleSheet.create({ + cardPostHeaderContainer: { + flexDirection: 'row', + alignItems: 'center', + padding: 10, + }, + cardPostIconPhoto: { + width: 40, + height: 40, + borderRadius: 20, + }, + cardPostHeaderTextContainer: { + flex: 1, + flexDirection: 'column', + marginLeft: 10, + }, + textUserName: { + fontWeight: 'bold', + color: Colors.text, + }, + textSubtitle: { + color: '#FFFFFF', + }, + cardPostVerticalEllipsis: { + width: 24, + height: 24, + }, + habitImage: { + width: '100%', + height: 400, + }, + cardPostDescriptionContainer: { + flexDirection: 'row', + alignItems: 'flex-start', + padding: 10, + }, + postText: { + color: Colors.text, + }, + containerActions: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 10, + paddingHorizontal: 10, + }, + buttonActions: { + flexDirection: 'row', + alignItems: 'center', + marginRight: 20, + }, + textPostActions: { + marginLeft: 5, + color: Colors.text, + }, + icon: { + width: 29, + height: 29, + }, + modalContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'rgba(0, 0, 0, 0.5)', + }, + modalContent: { + width: '80%', + backgroundColor: 'white', + borderRadius: 10, + padding: 20, + alignItems: 'center', + }, + modalTitle: { + fontSize: 18, + fontWeight: 'bold', + marginBottom: 10, + }, + userContainer: { + flexDirection: 'row', + alignItems: 'center', + marginBottom: 10, + }, + userImage: { + width: 40, + height: 40, + borderRadius: 20, + marginRight: 10, + }, + userName: { + fontSize: 16, + }, + closeButton: { + marginTop: 20, + padding: 10, + backgroundColor: Colors.primary, + borderRadius: 5, + }, + closeButtonText: { + color: 'white', + fontWeight: 'bold', + }, +}); + +export default CardPost; diff --git a/src/components/CheckoutScreen.js b/src/components/CheckoutScreen.js new file mode 100644 index 0000000..b27d03f --- /dev/null +++ b/src/components/CheckoutScreen.js @@ -0,0 +1,64 @@ +import React, { useEffect } from 'react'; +import { Button } from 'react-native'; +import { CardField } from '@stripe/stripe-react-native'; // Import CardField from stripe-react-native to enter credit card info securely +import { + initializeStripe /*, handlePayment */, +} from '../services/PaymentService'; +import { useStripe } from '@stripe/stripe-react-native'; + +const CheckoutScreen = () => { + useEffect(() => { + initializeStripe(); + }, []); + + // const onSubmit = async () => { + // // Example usage of handlePayment + // const paymentResult = await handlePayment('pm_1Example', 'pi_1Example'); + // console.log(paymentResult); + // }; + + const handlePaymentPress = async () => { + //Example payment method ID and payment intent ID - these would be fetched or generated + const paymentMethodId = 'your_payment_method_id'; + const paymentIntentId = 'your_payment_intent_id'; + const { confirmPayment } = useStripe(); + const result = await confirmPayment(paymentIntentId, { + type: 'Card', + paymentMethodId: paymentMethodId, + }); + + if (result.error) { + console.error('Payment Confirmation Error', result.error); + } else { + console.log('Payment Successful', result.paymentIntent); + } + }; + + return ( + <> + { + console.log('Card Details: ', cardDetails); + }} + /> + {/* Commented command uses onSubmit function instead of handlePayment function */} + {/* + index.toString()} + renderItem={renderPost} + ListEmptyComponent={renderEmpty} + contentContainerStyle={styles.list} + refreshControl={ + + } + ListFooterComponent={renderFooter} + onEndReached={() => { + if (loadMore && !loading) { + fetchPosts(); + } + }} + onEndReachedThreshold={0.5} + /> + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: Colors.background, + }, + list: { + padding: 10, + }, + emptyContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + emptyText: { + fontSize: 16, + color: Colors.text, + }, +}); + +export default Timeline; diff --git a/src/services/PaymentService.js b/src/services/PaymentService.js new file mode 100644 index 0000000..ca17ce3 --- /dev/null +++ b/src/services/PaymentService.js @@ -0,0 +1,23 @@ +import { initStripe } from '@stripe/stripe-react-native'; +import { useStripe } from '@stripe/stripe-react-native'; + +const publishableKey = + 'pk_test_51PCOhVKV9eTtyARpJXFmNodQEPjtVYgDm6VyeFXmMUgWx1047bvdaDkfZeKoMHEF3hoqKBjLATDue6dF5a5JqHTs00sanjaOtO'; + +export const initializeStripe = async () => { + await initStripe({ + publishableKey, + //merchantIdentifier: 'merchant.identifier', // optional, used for Apple Pay + }); +}; + +export const handlePayment = async (paymentMethodId, paymentIntentId) => { + const { confirmPayment } = useStripe(); // uses stripe made method called confirmPayment + + const paymentResult = await confirmPayment(paymentIntentId, { + type: 'Card', + paymentMethodId: paymentMethodId, + }); + + return paymentResult; +}; diff --git a/src/store/ducks/community.js b/src/store/ducks/community.js new file mode 100644 index 0000000..7d126ea --- /dev/null +++ b/src/store/ducks/community.js @@ -0,0 +1,124 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +export const searchCommunity = (search) => { + return axios.post(`${Constants.baseUrl}/community/search`, search); +}; + +export const getByCategory = (data) => { + return axios.post(`${Constants.baseUrl}/community/getByCategory`, data); +}; + +export const listPublicCommunities = (data) => { + return axios.post( + `${Constants.baseUrl}/community/listPublicCommunities`, + data, + ); +}; + +export const get = (id) => { + return axios.get(`${Constants.baseUrl}/community/${id}`); +}; + +export const sendRequest = (data) => { + return axios.post(`${Constants.baseUrl}/community/joinCommunity`, data); +}; + +export const store = (data) => { + return axios.post(`${Constants.baseUrl}/community`, data); +}; + +export const updateAutomaticPublish = (id, data) => { + return axios.put(`${Constants.baseUrl}/community/settings/${id}`, data); +}; + +export const getSettings = (id) => { + return axios.get(`${Constants.baseUrl}/community/settings/${id}`); +}; + +export const getMembers = (data) => { + return axios.post(`${Constants.baseUrl}/community/member/getAll`, data); +}; + +export const updateMember = (data) => { + return axios.post(`${Constants.baseUrl}/community/member/update`, data); +}; + +export const answerRequest = (data) => { + return axios.post(`${Constants.baseUrl}/community/member/answer`, data); +}; + +export const removeMember = (data) => { + return axios.post(`${Constants.baseUrl}/community/member/remove`, data); +}; + +export const leaveCommunity = (data) => { + return axios.post(`${Constants.baseUrl}/community/member/leave`, data); +}; + +export const getOldestMember = (id) => { + return axios.get(`${Constants.baseUrl}/community/member/oldMember/${id}`); +}; + +export const listPosts = (data) => { + return axios.post(`${Constants.baseUrl}/community/post/list`, data); +}; + +export const storePost = (data) => { + return axios.post(`${Constants.baseUrl}/community/post`, data); +}; + +export const likePost = (id) => { + return axios.post(`${Constants.baseUrl}/community/post/like/${id}`); +}; + +export const savePost = (id) => { + return axios.post(`${Constants.baseUrl}/community/post/save/${id}`); +}; + +export const getPost = (id) => { + return axios.get(`${Constants.baseUrl}/community/post/${id}`); +}; + +export const updatePost = (id, data) => { + return axios.post( + `${Constants.baseUrl}/community/post/${id}?_method=PUT`, + data, + ); +}; + +export const storeComment = (id, data) => { + return axios.post(`${Constants.baseUrl}/community/post/comment/${id}`, data); +}; + +export const listHabits = (id) => { + return axios.get(`${Constants.baseUrl}/community/habit/list/${id}`); +}; + +export const getCommunityHabit = (id) => { + return axios.get(`${Constants.baseUrl}/community/habit/${id}`); +}; + +export const storeCommunityHabit = (data) => { + return axios.post(`${Constants.baseUrl}/community/habit`, data); +}; + +export const storeCustomCommunityHabit = (data) => { + return axios.post(`${Constants.baseUrl}/community/habit/custom`, data); +}; + +export const updateCustomCommunityHabit = (data) => { + return axios.post(`${Constants.baseUrl}/community/habit/updateCustom`, data); +}; + +export const updateCommunityHabit = (id, data) => { + return axios.put(`${Constants.baseUrl}/community/habit/${id}`, data); +}; + +export const deleteCommunityHabit = (id) => { + return axios.delete(`${Constants.baseUrl}/community/habit/${id}`); +}; + +export const deleteCommunityPost = (id) => { + return axios.delete(`${Constants.baseUrl}/community/post/${id}`); +}; diff --git a/src/store/ducks/connection.js b/src/store/ducks/connection.js new file mode 100644 index 0000000..2cfbd97 --- /dev/null +++ b/src/store/ducks/connection.js @@ -0,0 +1,73 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const listConnection = () => { + return axios.get(`${Constants.baseUrl}/userconnection/list`); +}; + +export const listConnectionByUser = (id) => { + return axios.get(`${Constants.baseUrl}/userconnection/listByUser/${id}`); +}; + +export const getPending = () => { + return axios.get(`${Constants.baseUrl}/userconnection/pending`); +}; + +export const storeConnection = (data) => { + return axios.post(`${Constants.baseUrl}/userconnection`, data); +}; + +export const searchConnection = (search) => { + return axios.post(`${Constants.baseUrl}/userconnection/search`, search); +}; + +export const getConnection = (id) => { + return axios.get(`${Constants.baseUrl}/userconnection/${id}`); +}; + +export const getUsersByEmails = (data) => { + return axios.post(`${Constants.baseUrl}/userconnection/getByEmails`, data); +}; + +export const answerConnection = (id, data) => { + return axios.put(`${Constants.baseUrl}/userconnection/answer/${id}`, data); +}; + +export const cancelConnection = (id) => { + return axios.put(`${Constants.baseUrl}/userconnection/cancel/${id}`); +}; + +export const cancelFirstInvite = (id) => { + return axios.delete( + `${Constants.baseUrl}/userconnection/cancelFirstInvite/${id}`, + ); +}; + +export const inviteAll = (data) => { + return axios.post(`${Constants.baseUrl}/userconnection/inviteAll`, data); +}; + +export const cancelAll = (data) => { + return axios.post(`${Constants.baseUrl}/userconnection/cancelAll`, data); +}; + +export const deleteConnection = (id) => { + return axios.delete(`${Constants.baseUrl}/userconnection/${id}`); +}; diff --git a/src/store/ducks/extraTip.js b/src/store/ducks/extraTip.js new file mode 100644 index 0000000..a20b489 --- /dev/null +++ b/src/store/ducks/extraTip.js @@ -0,0 +1,27 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const get = (id) => { + return axios.get(`${Constants.baseUrl}/extratip/${id}`); +}; + +export const getAll = () => { + return axios.get(`${Constants.baseUrl}/extratip/all`); +}; diff --git a/src/store/ducks/fetching.js b/src/store/ducks/fetching.js new file mode 100644 index 0000000..fd0bcfd --- /dev/null +++ b/src/store/ducks/fetching.js @@ -0,0 +1,43 @@ +// Action Types + +export const Types = { + IS_FETCHING: "IS_FETCHING", + DONE_FETCHING: "DONE_FETCHING", +}; + +// Reducer + +const initialState = { + isFetching: false, +}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + case Types.IS_FETCHING: + return { + ...state, + isFetching: true, + }; + case Types.DONE_FETCHING: + return { + ...state, + isFetching: false, + }; + default: + return state; + } +} + +// Action Creators + +export const isFetching = () => { + return { + type: Types.IS_FETCHING, + }; +}; + +export const doneFetching = () => { + return { + type: Types.DONE_FETCHING, + }; +}; diff --git a/src/store/ducks/habit.js b/src/store/ducks/habit.js new file mode 100644 index 0000000..6cab525 --- /dev/null +++ b/src/store/ducks/habit.js @@ -0,0 +1,93 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const get = (id) => { + return axios.get(`${Constants.baseUrl}/habit/${id}`); +}; + +export const storeUserHabit = (user_habit) => { + return axios.post(`${Constants.baseUrl}/userhabit`, user_habit); +}; + +export const deleteUserHabit = (id) => { + return axios.delete(`${Constants.baseUrl}/userhabit/${id}`); +}; + +export const checkUserHabit = (id, data) => { + return axios.put(`${Constants.baseUrl}/userhabit/check/${id}`, data); +}; + +export const storeCustom = (user_habit) => { + return axios.post(`${Constants.baseUrl}/userhabit/custom`, user_habit); +}; + +export const getMomentum = () => { + return axios.get(`${Constants.baseUrl}/userhabit/momentum`); +}; + +export const getAllCategory = () => { + return axios.get(`${Constants.baseUrl}/category/all`); +}; + +export const getAllCategoryUserHabits = () => { + return axios.get(`${Constants.baseUrl}/userhabit/category/all`); +}; + +export const getUserHabit = (id) => { + return axios.get(`${Constants.baseUrl}/userhabit/${id}`); +}; + +export const updateCustomUserHabit = (data) => { + return axios.post(`${Constants.baseUrl}/userhabit/updateCustom`, data); +}; + +export const updateUserHabit = (id, data) => { + return axios.put(`${Constants.baseUrl}/userhabit/${id}`, data); +}; + +export const getAllUserHabits = () => { + return axios.get(`${Constants.baseUrl}/userhabit/all`); +}; + +export const listAllHabitsByUser = (id) => { + return axios.get(`${Constants.baseUrl}/userhabit/listByUser/${id}`); +}; + +export const getUserChecklist = (data) => { + return axios.post(`${Constants.baseUrl}/userhabit/checklist`, data); +}; + +export const toggleUserHabit = (id, data) => { + return axios.put(`${Constants.baseUrl}/userhabit/toggle/${id}`, data); +}; + +export const getAllCategoryWithCheckedHabbits = (data) => { + return axios.post( + `${Constants.baseUrl}/userhabit/category/getAllCategoryWithCheckedHabbits`, + data, + ); +}; + +export const storeWithCommunityHabits = (communityHabitsId) => { + return axios.post( + `${Constants.baseUrl}/userhabit/withCommunityHabits`, + communityHabitsId, + ); +}; diff --git a/src/store/ducks/post.js b/src/store/ducks/post.js new file mode 100644 index 0000000..7e75e3d --- /dev/null +++ b/src/store/ducks/post.js @@ -0,0 +1,70 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const getMyConnectionPost = (data) => { + return axios.post(`${Constants.baseUrl}/post/connection`, data); +}; + +export const getTimelineMyPosts = (data) => { + return axios.post(`${Constants.baseUrl}/post/timeline/myPosts`, data); +}; + +export const getTimelineAllPosts = (data) => { + return axios.post(`${Constants.baseUrl}/post/timeline/all`, data); +}; + +export const getMyPost = (data) => { + return axios.post(`${Constants.baseUrl}/post/user`, data); +}; + +export const getPost = (id) => { + return axios.get(`${Constants.baseUrl}/post/${id}`); +}; + +export const updatePost = (id, data) => { + return axios.get(`${Constants.baseUrl}/post/${id}?_method=PUT`, data); +}; + +export const savePost = (id) => { + return axios.post(`${Constants.baseUrl}/post/save/${id}`); +}; + +export const storeComment = (id, data) => { + return axios.post(`${Constants.baseUrl}/post/comment/${id}`, data); +}; + +export const likePost = (id) => { + return axios.post(`${Constants.baseUrl}/post/like/${id}`); +}; + +export const deletePost = (id) => { + return axios.delete(`${Constants.baseUrl}/post/${id}`); +}; +export const deleteComment = (id) => { + return axios.delete(`${Constants.baseUrl}/post/${id}`); +}; + +export const randomHabits = () => { + return axios.post(`${Constants.baseUrl}/habit/random`); +}; + +export const listRandomHabits = (data) => { + return axios.post(`${Constants.baseUrl}/habit/list`, data); +}; diff --git a/src/store/ducks/product.js b/src/store/ducks/product.js new file mode 100644 index 0000000..1add442 --- /dev/null +++ b/src/store/ducks/product.js @@ -0,0 +1,35 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const deleteUserProduct = (id) => { + return axios.delete(`${Constants.baseUrl}/userproduct/${id}`); +}; + +export const getAllUserProduct = () => { + return axios.get(`${Constants.baseUrl}/userproduct/all`); +}; + +export const getAll = () => { + return axios.get(`${Constants.baseUrl}/product/all`); +}; + +export const storeUserProduct = (ids) => { + return axios.post(`${Constants.baseUrl}/userproduct`, ids); +}; diff --git a/src/store/ducks/ranking.js b/src/store/ducks/ranking.js new file mode 100644 index 0000000..5848b8d --- /dev/null +++ b/src/store/ducks/ranking.js @@ -0,0 +1,27 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const getRanking = (data) => { + return axios.post(`${Constants.baseUrl}/ranking/list`, data); +}; + +export const getUserRankingPosition = (data) => { + return axios.get(`${Constants.baseUrl}/ranking/position`); +}; diff --git a/src/store/ducks/report.js b/src/store/ducks/report.js new file mode 100644 index 0000000..88f3bc8 --- /dev/null +++ b/src/store/ducks/report.js @@ -0,0 +1,23 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const storeReport = (data) => { + return axios.post(`${Constants.baseUrl}/report`, data); +}; diff --git a/src/store/ducks/score.js b/src/store/ducks/score.js new file mode 100644 index 0000000..9baba27 --- /dev/null +++ b/src/store/ducks/score.js @@ -0,0 +1,31 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const getLastUserScore = (id) => { + return axios.get(`${Constants.baseUrl}/userscore/last/${id}`); +}; + +export const storeUserScore = (data) => { + return axios.post(`${Constants.baseUrl}/userscore`, data); +}; + +export const getScoreForm = (id) => { + return axios.get(`${Constants.baseUrl}/scoreform/${id}`); +}; diff --git a/src/store/ducks/team.js b/src/store/ducks/team.js new file mode 100644 index 0000000..a3eddcb --- /dev/null +++ b/src/store/ducks/team.js @@ -0,0 +1,67 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = { + TEAM_SET_CREATE_DATA: "TEAM_SET_CREATE_DATA", +}; + +// Reducer + +const initialState = { + createTeamData: {}, +}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + case Types.TEAM_SET_CREATE_DATA: + return { + ...initialState, + createTeamData: action.payload, + }; + default: + return state; + } +} + +// Action Creators + +export const setCreateTeamData = (payload) => { + return { + type: Types.TEAM_SET_CREATE_DATA, + payload, + }; +}; + +export const exitTeam = (id) => { + return axios.put(`${Constants.baseUrl}/team/exit/${id}`); +}; + +export const getAll = () => { + return axios.get(`${Constants.baseUrl}/team/all`); +}; + +export const get = (id) => { + return axios.get(`${Constants.baseUrl}/team/${id}`); +}; + +export const store = (team) => { + return axios.post(`${Constants.baseUrl}/team`, team); +}; + +export const addHabitsToUserTeam = (data) => { + return axios.post(`${Constants.baseUrl}/userteam/habits`, data); +}; + +export const removeHabitFromUserTeam = (id) => { + return axios.delete(`${Constants.baseUrl}/userteam/habits/${id}`); +}; + +export const inviteUsersToUserTeam = (data) => { + return axios.post(`${Constants.baseUrl}/userteam/invite`, data); +}; + +export const removeUserFromUserTeam = (id) => { + return axios.delete(`${Constants.baseUrl}/userteam/user/${id}`); +}; diff --git a/src/store/ducks/titan.js b/src/store/ducks/titan.js new file mode 100644 index 0000000..4b46426 --- /dev/null +++ b/src/store/ducks/titan.js @@ -0,0 +1,31 @@ +import { Constants } from "../../constants/Constants"; +import axios from "axios"; + +// Action Types + +export const Types = {}; + +// Reducer + +const initialState = {}; + +export default function reducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +// Action Creators + +export const getAllByHabit = (id) => { + return axios.get(`${Constants.baseUrl}/titan/habit/${id}`); +}; + +export const getAll = () => { + return axios.get(`${Constants.baseUrl}/titan/all`); +}; + +export const get = (id) => { + return axios.get(`${Constants.baseUrl}/titan/${id}`); +}; diff --git a/src/store/ducks/user.js b/src/store/ducks/user.js new file mode 100644 index 0000000..6fde7bf --- /dev/null +++ b/src/store/ducks/user.js @@ -0,0 +1,417 @@ +// import { Alert } from "react-native"; +// import { isFetching, doneFetching } from "./fetching"; +// import { Constants } from "../../constants/Constants"; +// import axios from "axios"; +// import AsyncStorage from "@react-native-async-storage/async-storage"; +// import * as Notifications from "expo-notifications"; +// import { supabase } from "../../config/supabaseClient"; +// import { useSelector } from "react-redux"; + +// // Action Types + +export const Types = { + USER_LOGGED_IN: 'USER_LOGGED_IN', + USER_LOGGED_OUT: 'USER_LOGGED_OUT', + USER_SET_REGISTER_DATA: 'USER_SET_REGISTER_DATA', +}; + +// // Reducer + +const initialState = {}; + +export default function users(state = initialState, action) { + switch (action.type) { + case Types.USER_LOGGED_IN: + var { session } = action.payload; + return { ...state, session: session }; + case Types.USER_LOGGED_OUT: + return { + ...initialState, + }; + // case Types.USER_SET_REGISTER_DATA: + // return action.payload; + default: + return state; + } +} + +// // Action Creators + +export function userLogin(session) { + return { + type: Types.USER_LOGGED_IN, + payload: { session }, + }; +} + +// export const getBasicInformationUser = (id) => { +// return axios.get(`${Constants.baseUrl}/user/${id}`); +// }; + +// export const getUserInfos = (id) => { +// return axios.post(`${Constants.baseUrl}/user/getInfos`); +// }; + +// export const setRegisterData = (payload) => { +// return { +// type: Types.USER_SET_REGISTER_DATA, +// payload, +// }; +// }; + +// export const userLogged = (user) => { +// return { +// type: Types.USER_LOGGED_IN, +// payload: user, +// }; +// }; + +// export const setLogout = () => { +// return { +// type: Types.USER_LOGGED_OUT, +// }; +// }; + +// export const login = (email, password) => { +// return (dispatch) => { +// dispatch(isFetching()); +// axios +// .post(`${Constants.baseUrl}/auth`, { +// email: user.email, +// password: user.password, +// facebookToken: user.facebookToken, +// googleToken: user.googleToken, +// appleCredential: user.appleCredential, +// firstLogin: user.firstLogin === undefined ? false : user.firstLogin, +// }) +// .catch((err) => { +// if (err?.response?.status === 500) { +// AsyncStorage.multiRemove([ +// "password", +// "email", +// "token", +// "facebookUser", +// "googleToken", +// ]); + +// Alert.alert( +// "Ops!", +// "Something went wrong with our servers. Please contact us.", +// ); +// } else { +// if (err.response.data?.errors?.email) { +// Alert.alert("Ops!", err.response.data.errors.email[0]); +// } else { +// Alert.alert( +// "Ops!", +// "Something went wrong with our servers. Please contact us.", +// ); +// } +// } + +// dispatch(doneFetching()); +// }) +// .then((res) => { +// if (res?.status === 200) { +// if (res.data.errors) { +// AsyncStorage.multiRemove([ +// "password", +// "email", +// "token", +// "facebookUser", +// "googleToken", +// ]); + +// Alert.alert("Ops!", res.data.errors[0]); +// } else { +// AsyncStorage.setItem("email", res.data.user.email); +// AsyncStorage.setItem("token", res.data.token); + +// user.password +// ? AsyncStorage.setItem("password", user.password) +// : null; +// user.googleToken +// ? AsyncStorage.setItem("googleToken", user.googleToken) +// : null; +// user.facebookToken +// ? AsyncStorage.setItem("facebookToken", user.facebookToken) +// : null; + +// var payload = res.data.user; +// payload.isLogged = true; +// payload.firstLogin = res.data.firstLogin; + +// axios.defaults.headers.common["Authorization"] = +// `Bearer ${res.data.token}`; + +// axios.interceptors.response.use( +// function (response) { +// return response; +// }, +// function (error) { +// if (error.response.status === 401) { +// dispatch(logout()); +// navigation.navigate("Auth"); +// } +// }, +// ); + +// dispatch(userLogged(payload)); +// } +// } + +// dispatch(doneFetching()); +// }); +// }; +// }; + +// export const update = (user, navigation) => { +// let userForm = new FormData(); + +// userForm.append("name", user.name); +// userForm.append("email", user.email); +// userForm.append("gender", user.gender); + +// user.password ? userForm.append("password", user.password) : null; +// user.profile_picture +// ? userForm.append("profile_picture", user.profile_picture) +// : null; + +// return (dispatch, getState) => { +// dispatch(isFetching()); + +// axios +// .post(`${Constants.baseUrl}/user/update`, userForm) +// .catch((err) => { +// Alert.alert( +// "Ops!", +// "Something went wrong with our servers. Please contact us.", +// ); +// }) +// .then((res) => { +// if (res?.status === 200) { +// if (res.data.errors) { +// Alert.alert("Ops!", res.data.errors[0]); +// } else { +// AsyncStorage.setItem("email", user.email); +// user.password +// ? AsyncStorage.setItem("password", user.password) +// : null; + +// let userAux = getState().user; + +// userAux.name = user.name; +// userAux.email = user.email; +// userAux.image = res.data.image; +// userAux.usr_gender = user.gender; + +// dispatch(userLogged(userAux)); + +// Alert.alert( +// "Success", +// "Your profile was successfully updated!", +// [ +// { +// text: "Ok", +// onPress: () => [navigation.pop()], +// }, +// ], +// { cancelable: false }, +// ); +// } +// } + +// dispatch(doneFetching()); +// }); +// }; +// }; + +// export const deleteAccount = () => { +// return axios.delete(`${Constants.baseUrl}/user`); +// }; + +// export const register = (user) => { +// return axios.post(`${Constants.baseUrl}/register`, user); +// }; + +// export const updateInfos = (data) => { +// return (dispatch, getState) => { +// dispatch(isFetching()); + +// axios +// .post(`${Constants.baseUrl}/user/updateInfos`, data) +// .catch((err) => { +// Alert.alert( +// "Ops!", +// "Something went wrong with our servers. Please contact us.", +// ); +// }) +// .then((res) => { +// if (res?.status === 200) { +// if (res.data.errors) { +// Alert.alert("Ops!", res.data.errors[0]); +// } else { +// let userAux = getState().user; + +// userAux.usr_quote_to_live_by = res.data.usr_quote_to_live_by; +// userAux.usr_biggest_hack = res.data.usr_biggest_hack; +// userAux.usr_biggest_challenge = res.data.usr_biggest_challenge; + +// dispatch(userLogged(userAux)); + +// Alert.alert("Success", "Your profile was successfully updated!"); +// } +// } + +// dispatch(doneFetching()); +// }); +// }; +// }; + +// export const updateFavoriteBook = (data, navigation) => { +// let userForm = new FormData(); + +// userForm.append("book_name", data.book_name); +// data.book_picture && data.image_changed +// ? userForm.append("book_picture", data.book_picture) +// : null; + +// return (dispatch, getState) => { +// dispatch(isFetching()); + +// axios +// .post(`${Constants.baseUrl}/user/updateBook`, userForm) +// .catch((err) => { +// Alert.alert( +// "Ops!", +// "Something went wrong with our servers. Please contact us.", +// ); +// }) +// .then((res) => { +// if (res?.status === 200) { +// if (res.data.errors) { +// Alert.alert("Ops!", res.data.errors[0]); +// } else { +// let userAux = getState().user; + +// userAux.usr_favorite_book = data.book_name; +// userAux.image_book = res.data.image_book; + +// dispatch(userLogged(userAux)); + +// Alert.alert( +// "Success", +// "Your profile was successfully updated!", +// [ +// { +// text: "Ok", +// onPress: () => [navigation.pop()], +// }, +// ], +// { cancelable: false }, +// ); +// } +// } + +// dispatch(doneFetching()); +// }); +// }; +// }; + +// export const updateFavoriteFood = (data, navigation) => { +// let userForm = new FormData(); + +// userForm.append("food_name", data.food_name); +// data.food_picture && data.image_changed +// ? userForm.append("food_picture", data.food_picture) +// : null; + +// return (dispatch, getState) => { +// dispatch(isFetching()); + +// axios +// .post(`${Constants.baseUrl}/user/updateFood`, userForm) +// .catch((err) => { +// Alert.alert( +// "Ops!", +// "Something went wrong with our servers. Please contact us.", +// ); +// }) +// .then((res) => { +// if (res?.status === 200) { +// if (res.data.errors) { +// Alert.alert("Ops!", res.data.errors[0]); +// } else { +// let userAux = getState().user; + +// userAux.usr_favorite_food = data.food_name; +// userAux.image_food = res.data.image_food; + +// dispatch(userLogged(userAux)); + +// Alert.alert( +// "Success", +// "Your profile was successfully updated!", +// [ +// { +// text: "Ok", +// onPress: () => [navigation.pop()], +// }, +// ], +// { cancelable: false }, +// ); +// } +// } + +// dispatch(doneFetching()); +// }); +// }; +// }; + +// export const logout = () => { +// return (dispatch) => { +// AsyncStorage.multiRemove([ +// "password", +// "email", +// "token", +// "googleToken", +// "facebookToken", +// ]); + +// dispatch(removePush()); +// dispatch(setLogout()); +// }; +// }; + +// export const sendPush = (dados) => { +// if (Platform.OS === "android") { +// Notifications.createChannelAndroidAsync("pushChannel", { +// name: "pushChannel", +// priority: "max", +// vibrate: [0, 250, 250, 250], +// }); +// } + +// return axios.post(`${Constants.baseUrl}/push`, dados); +// }; + +// export const removePush = () => { +// return (dispatch) => { +// axios.delete(`${Constants.baseUrl}/push`).catch((err) => { +// dispatch( +// setMessage({ +// title: "Erro", +// text: "Ocorreu um erro inesperado!", +// }), +// ); +// }); +// }; +// }; + +// export const getSavedPosts = (data) => { +// return axios.post(`${Constants.baseUrl}/user/savedPosts`, data); +// }; + +// export const checkEmail = (data) => { +// return axios.post(`${Constants.baseUrl}/checkEmail`, data); +// }; diff --git a/src/store/storeConfig.js b/src/store/storeConfig.js new file mode 100644 index 0000000..511d5a3 --- /dev/null +++ b/src/store/storeConfig.js @@ -0,0 +1,28 @@ +import { combineReducers } from 'redux'; +import { configureStore } from '@reduxjs/toolkit'; +import user from './ducks/user'; +// import product from "./ducks/product"; +// import fetching from "./ducks/fetching"; +import habit from './ducks/habit'; +// import titan from "./ducks/titan"; +// import extraTip from "./ducks/extraTip"; + +// const reducers = combineReducers({ +// fetching, +// user, +// product, +// habit, +// titan, +// extraTip, +// }); + +const reducers = combineReducers({ + user, + habit, +}); + +const store = configureStore({ + reducer: reducers, +}); + +export default store; diff --git a/src/utils/Utils.js b/src/utils/Utils.js new file mode 100644 index 0000000..d928dae --- /dev/null +++ b/src/utils/Utils.js @@ -0,0 +1,167 @@ +import React from "react"; +import { Image, Platform } from "react-native"; +import Default from "../../assets/styles/Default"; +import * as ImagePicker from "expo-image-picker"; +import * as mime from "react-native-mime-types"; +import { manipulateAsync } from "expo-image-manipulator"; + +export const getIcon = (hac_name, icon) => { + if (icon !== null) { + return ; + } else { + switch (hac_name) { + case "Sleep": + return ( + + ); + case "Stress": + return ( + + ); + case "Fuel": + return ( + + ); + case "Movement": + return ( + + ); + default: + return ( + + ); + } + } +}; + +export const getFrequencyTypes = () => { + return ["EVERYDAY", "WEEKDAY", "CUSTOM"]; +}; + +export function getAchievements(data) { + let achievements = []; + data.map((cat, cat_i) => { + return cat.habits.map((hab, hab_i) => { + if (hab.ush_current_streak > 29) { + hab.hac_name = cat.hac_name; + + achievements.push(hab); + } + }); + }); + return achievements; +} + +export function getIconPost(type_post) { + switch (type_post) { + case "connection": + return ( + + ); + case "community": + return ( + + ); + case "score": + return ( + + ); + case "check_habit": + return ( + + ); + default: + return ( + + ); + } +} + +export const takeCamera = async () => { + try { + let result = await ImagePicker.launchCameraAsync({ + allowsEditing: true, + base64: true, + }); + + if (!result.canceled) { + const manipulateResult = await manipulateAsync( + result.assets[0].uri, + [{ resize: { width: 756 } }], + { compress: 0.5 }, // from 0 to 1 "1 for best quality" + ); + + return { + name: manipulateResult.uri.split("\\").pop().split("/").pop(), + type: mime.lookup(manipulateResult.uri), + uri: + Platform.OS === "android" + ? manipulateResult.uri + : manipulateResult.uri.replace("file://", ""), + }; + } + } catch (err) { + return "failed"; + } +}; + +export const takeGaleria = async () => { + try { + let result = await ImagePicker.launchImageLibraryAsync({ + allowsEditing: true, + base64: true, + }); + + if (!result.canceled) { + const manipulateResult = await manipulateAsync( + result.assets[0].uri, + [{ resize: { width: 756 } }], + { compress: 0.5 }, // from 0 to 1 "1 for best quality" + ); + + return { + name: manipulateResult.uri.split("\\").pop().split("/").pop(), + type: mime.lookup(manipulateResult.uri), + uri: + Platform.OS === "android" + ? manipulateResult.uri + : manipulateResult.uri.replace("file://", ""), + }; + } + } catch (err) { + return "failed"; + } +}; + +export const percentageOfValueFromTotal = (value, total) => + Math.floor((value * 100) / total);