diff --git a/app/CodeSentPage.tsx b/app/CodeSentPage.tsx
new file mode 100644
index 0000000..ceebb33
--- /dev/null
+++ b/app/CodeSentPage.tsx
@@ -0,0 +1,58 @@
+import BackButton from "./components/BackButton";
+import React from "react";
+import { Card } from "./components/ui/card";
+import Screen from "./components/Screen";
+import { Heading } from "./components/ui/heading";
+import { AntDesign } from "@expo/vector-icons";
+import { VStack } from "./components/ui/vstack";
+import { Text } from "./components/ui/text";
+import { Button, ButtonIcon, ButtonText } from "./components/ui/button";
+import { LockIcon } from "./components/ui/icon";
+
+function truncateEmail(email: string) {
+ const splitedEmail = email.split("@");
+ let hiddenPart = splitedEmail[0][0];
+ for (let i = 1; i < splitedEmail[0].length - 1; i++) {
+ hiddenPart += "⋆";
+ }
+ return hiddenPart + splitedEmail[0].slice(-1) + "@" + splitedEmail[1];
+}
+
+type props = { email?: string };
+
+export default function CodeSentPage({ email }: props) {
+ return (
+
+
+
+
+
+
+ Code envoyé !
+
+
+
+ Nous t'avons envoyé le code de vérification à
+
+
+ {truncateEmail(email ?? "test@Optifit.com")}
+
+
+ Clique sur renvoyer si tu n'as pas reçu d’ici quelques secondes !
+ 🔥
+
+
+
+
+
+
+ );
+}
diff --git a/app/LoginPage.tsx b/app/LoginPage.tsx
new file mode 100644
index 0000000..ce63e6f
--- /dev/null
+++ b/app/LoginPage.tsx
@@ -0,0 +1,67 @@
+import { Text } from "./components/ui/text";
+import { VStack } from "./components/ui/vstack";
+import { Button, ButtonGroup } from "./components/ui/button";
+import { Feather } from "@expo/vector-icons";
+import { HStack } from "./components/ui/hstack";
+import React from "react";
+import { FeatherIconNames } from "@expo/vector-icons/build/Feather";
+import { Box } from "./components/ui/box";
+import { Heading } from "./components/ui/heading";
+import { Link } from "expo-router";
+import { LinkText } from "./components/ui/link";
+import LoginForm from "./components/form/LoginForm";
+import Screen from "./components/Screen";
+
+const socialNetworkButtons: ISocialNetworkButtons[] = [
+ { icon: "instagram" },
+ { icon: "facebook" },
+ { icon: "linkedin" },
+];
+
+interface ISocialNetworkButtons {
+ icon: FeatherIconNames;
+}
+
+export default function LoginPage() {
+ return (
+
+
+
+
+
+ Connexion à Optifit
+
+
+ Personnalise ton expérience du sport avec Optifit, ton nouveau
+ coach IA.
+
+
+
+
+ {socialNetworkButtons.map((socialNetworkButton) => (
+
+ ))}
+
+
+
+ Tu n'as pas encore de compte ?
+
+ Inscris-toi !
+
+
+
+ Mot de passe oublié ?
+
+
+
+
+
+ );
+}
diff --git a/app/ResetPasswordPage.tsx b/app/ResetPasswordPage.tsx
new file mode 100644
index 0000000..b738793
--- /dev/null
+++ b/app/ResetPasswordPage.tsx
@@ -0,0 +1,65 @@
+import { Text } from "./components/ui/text";
+import {
+ Button,
+ ButtonGroup,
+ ButtonIcon,
+ ButtonText,
+} from "./components/ui/button";
+import { VStack } from "./components/ui/vstack";
+import React from "react";
+import {
+ ArrowRightIcon,
+ LockIcon,
+ MailIcon,
+ MessageCircleIcon,
+} from "./components/ui/icon";
+import BackButton from "./components/BackButton";
+import Screen from "./components/Screen";
+import { Heading } from "./components/ui/heading";
+import { Link } from "expo-router";
+
+const resetButtons: IResetButton[] = [
+ { icon: MailIcon, text: "Envoyer par email" },
+ { icon: LockIcon, text: "Envoyer par 2FA" },
+ { icon: MessageCircleIcon, text: "Envoyer par SMS" },
+];
+
+interface IResetButton {
+ icon: React.ElementType;
+ text: string;
+}
+
+export default function ResetPasswordPage() {
+ return (
+
+
+
+
+
+ Réinitialisation de ton mot de passe
+
+
+ Selectionne une méthode pour recevoir ton code temporaire
+
+
+
+ {resetButtons.map((resetButton) => (
+
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/app/SigninPage.tsx b/app/SigninPage.tsx
new file mode 100644
index 0000000..cce647c
--- /dev/null
+++ b/app/SigninPage.tsx
@@ -0,0 +1,36 @@
+import { Text } from "./components/ui/text";
+import { VStack } from "./components/ui/vstack";
+import { Box } from "./components/ui/box";
+import { HStack } from "./components/ui/hstack";
+import React from "react";
+import SigninForm from "./components/form/SigninForm";
+import Screen from "./components/Screen";
+import { Heading } from "./components/ui/heading";
+import { Link } from "expo-router";
+import { LinkText } from "./components/ui/link";
+
+export default function SigninPage() {
+ return (
+
+
+
+
+
+ Inscris-toi gratuitement
+
+
+ Génère un programme personnalisé en quelques clics et 1 minute !
+
+
+
+
+ Tu as déjà un compte ?
+
+ Connectes-toi !
+
+
+
+
+
+ );
+}
diff --git a/app/_layout.tsx b/app/_layout.tsx
index a361ea0..c84ef90 100644
--- a/app/_layout.tsx
+++ b/app/_layout.tsx
@@ -1,13 +1,14 @@
+import { Slot } from "expo-router";
import "../global.css";
-import {GluestackUIProvider} from "@/app/components/ui/gluestack-ui-provider";
+import { GluestackUIProvider } from "./components/ui/gluestack-ui-provider";
import React from "react";
import NavBar from "@/app/components/NavBar";
export default function RootLayout() {
- return (
-
-
-
-
- );
+ return (
+
+
+
+
+ );
}
diff --git a/app/components/BackButton.tsx b/app/components/BackButton.tsx
new file mode 100644
index 0000000..a01fba2
--- /dev/null
+++ b/app/components/BackButton.tsx
@@ -0,0 +1,24 @@
+import { AntDesign } from "@expo/vector-icons";
+import { Button, ButtonActions } from "./ui/button";
+import { AntDesignIconNames } from "@expo/vector-icons/build/AntDesign";
+import { Href, Link } from "expo-router";
+
+type props = {
+ icon?: AntDesignIconNames;
+ link: Href;
+ action?: ButtonActions;
+};
+
+export default function BackButton({ icon, link, action }: props) {
+ return (
+
+ );
+}
diff --git a/app/components/Screen.tsx b/app/components/Screen.tsx
new file mode 100644
index 0000000..b42d519
--- /dev/null
+++ b/app/components/Screen.tsx
@@ -0,0 +1,8 @@
+import { PropsWithChildren } from "react";
+import { Box } from "./ui/box";
+
+type props = PropsWithChildren;
+
+export default function Screen({ children }: props) {
+ return {children};
+}
diff --git a/app/components/form/FormError.tsx b/app/components/form/FormError.tsx
new file mode 100644
index 0000000..f1b3058
--- /dev/null
+++ b/app/components/form/FormError.tsx
@@ -0,0 +1,19 @@
+import {
+ FormControlError,
+ FormControlErrorIcon,
+ FormControlErrorText,
+} from "../ui/form-control";
+import { AlertCircleIcon } from "../ui/icon";
+
+type props = { text: string };
+
+export default function FormError({ text }: props) {
+ return (
+
+
+
+ {text}
+
+
+ );
+}
diff --git a/app/components/form/LoginForm.tsx b/app/components/form/LoginForm.tsx
new file mode 100644
index 0000000..c6cb0c2
--- /dev/null
+++ b/app/components/form/LoginForm.tsx
@@ -0,0 +1,58 @@
+import { Button, ButtonText, ButtonIcon } from "../ui/button";
+import {
+ FormControl,
+ FormControlLabel,
+ FormControlLabelText,
+} from "../ui/form-control";
+import { MailIcon, ArrowRightIcon } from "../ui/icon";
+import { Input, InputIcon, InputField } from "../ui/input";
+import { VStack } from "../ui/vstack";
+import React from "react";
+import PasswordField from "./PasswordField";
+import FormError from "./FormError";
+
+export default function LoginForm() {
+ const REQUIRED_ERROR = "Au moins un des champs requis est vide !";
+ const [emailValue, setEmailValue] = React.useState("");
+ const [isEmailInvalid, setIsEmailInvalid] = React.useState(false);
+ const [passwordValue, setPasswordValue] = React.useState("");
+ const [isPasswordInvalid, setIsPasswordInvalid] = React.useState(false);
+ const [isFormInvalid, setIsFormInvalid] = React.useState(false);
+ const handleSubmit = () => {
+ //check for empty fields
+ setIsEmailInvalid(emailValue == "");
+ setIsPasswordInvalid(passwordValue == "");
+ setIsFormInvalid(isEmailInvalid || isPasswordInvalid);
+ };
+
+ return (
+
+
+
+ Adresse mail
+
+
+
+
+
+
+
+
+ Mot de passe
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/components/form/PasswordField.tsx b/app/components/form/PasswordField.tsx
new file mode 100644
index 0000000..4f8c518
--- /dev/null
+++ b/app/components/form/PasswordField.tsx
@@ -0,0 +1,31 @@
+import React from "react";
+import { LockIcon, EyeIcon, EyeOffIcon } from "../ui/icon";
+import { Input, InputIcon, InputField, InputSlot } from "../ui/input";
+import { VariantProps } from "@gluestack-ui/nativewind-utils";
+
+type props = React.ComponentProps &
+ VariantProps;
+
+export default function PasswordField({ value, onChangeText }: props) {
+ const [showPassword, setShowPassword] = React.useState(false);
+ const handleState = () => {
+ setShowPassword((showState) => {
+ return !showState;
+ });
+ };
+
+ return (
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/components/form/SigninForm.tsx b/app/components/form/SigninForm.tsx
new file mode 100644
index 0000000..83ec102
--- /dev/null
+++ b/app/components/form/SigninForm.tsx
@@ -0,0 +1,125 @@
+import { Button, ButtonText, ButtonIcon } from "../ui/button";
+import {
+ FormControl,
+ FormControlLabel,
+ FormControlLabelText,
+} from "../ui/form-control";
+import { MailIcon, ArrowRightIcon } from "../ui/icon";
+import { Input, InputIcon, InputField } from "../ui/input";
+import { VStack } from "../ui/vstack";
+import React from "react";
+import FormError from "./FormError";
+import PasswordField from "./PasswordField";
+
+export default function SigninForm() {
+ const REQUIRED = "Au moins un des champs requis est vide !";
+ const INVALID_EMAIL = "Adresse mail invalide !";
+ // TODO Définir ce qu'est un mdp valide
+ const INVALID_PASSWORD = "Mot de passe invalide !";
+ const NOT_MATCHING_PASSWORD = "Les mots de passe ne correspondent pas !";
+ const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
+
+ const [emailValue, setEmailValue] = React.useState("");
+ const [isEmailInvalid, setIsEmailInvalid] = React.useState(false);
+ const [passwordValue, setPasswordValue] = React.useState("");
+ const [isPasswordInvalid, setIsPasswordInvalid] = React.useState(false);
+ const [passwordConfirmValue, setPasswordConfirmValue] = React.useState("");
+ const [isPasswordConfirmInvalid, setIsPasswordConfirmInvalid] =
+ React.useState(false);
+ const [isFormInvalid, setIsFormInvalid] = React.useState(false);
+ const [formError, setFormError] = React.useState("");
+
+ function validateForm() {
+ setFormError("");
+ setIsFormInvalid(false);
+ }
+
+ function invalidateForm(error: string) {
+ setFormError(error);
+ setIsFormInvalid(true);
+ }
+
+ const handleSubmit = () => {
+ //check for valid email block
+ if (emailValue != "") {
+ if (emailRegex.test(emailValue)) {
+ setIsEmailInvalid(false);
+ } else {
+ setIsEmailInvalid(true);
+ invalidateForm(INVALID_EMAIL);
+ return;
+ }
+ } else {
+ setIsEmailInvalid(true);
+ invalidateForm(REQUIRED);
+ return;
+ }
+
+ //TODO : check for valid password block
+ if (passwordValue != "") {
+ setIsPasswordInvalid(false);
+ } else {
+ setIsPasswordInvalid(true);
+ invalidateForm(REQUIRED);
+ return;
+ }
+
+ //check for valid password confirmation
+ if (passwordConfirmValue != "") {
+ if (passwordConfirmValue == passwordValue) {
+ setIsPasswordConfirmInvalid(false);
+ validateForm();
+ } else {
+ setIsPasswordConfirmInvalid(true);
+ invalidateForm(NOT_MATCHING_PASSWORD);
+ return;
+ }
+ } else {
+ setIsPasswordConfirmInvalid(true);
+ invalidateForm(REQUIRED);
+ return;
+ }
+ };
+
+ return (
+
+
+
+ Adresse mail
+
+
+
+
+
+
+
+
+ Mot de passe
+
+
+
+
+
+
+ Confirmation du mot de passe
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/components/ui/box/index.tsx b/app/components/ui/box/index.tsx
index 766266f..5b8e8d1 100644
--- a/app/components/ui/box/index.tsx
+++ b/app/components/ui/box/index.tsx
@@ -1,8 +1,8 @@
-import React from 'react';
-import { View, ViewProps } from 'react-native';
+import React from "react";
+import { View, ViewProps } from "react-native";
-import type { VariantProps } from '@gluestack-ui/nativewind-utils';
-import { boxStyle } from './styles';
+import type { VariantProps } from "@gluestack-ui/nativewind-utils";
+import { boxStyle } from "./styles";
type IBoxProps = ViewProps &
VariantProps & { className?: string };
@@ -15,5 +15,5 @@ const Box = React.forwardRef, IBoxProps>(
}
);
-Box.displayName = 'Box';
+Box.displayName = "Box";
export { Box };
diff --git a/app/components/ui/button/index.tsx b/app/components/ui/button/index.tsx
index 0efc1a0..4676544 100644
--- a/app/components/ui/button/index.tsx
+++ b/app/components/ui/button/index.tsx
@@ -1,17 +1,17 @@
-'use client';
-import React from 'react';
-import { createButton } from '@gluestack-ui/button';
-import { tva } from '@gluestack-ui/nativewind-utils/tva';
+"use client";
+import React from "react";
+import { createButton } from "@gluestack-ui/button";
+import { tva } from "@gluestack-ui/nativewind-utils/tva";
import {
withStyleContext,
useStyleContext,
-} from '@gluestack-ui/nativewind-utils/withStyleContext';
-import { cssInterop } from 'nativewind';
-import { ActivityIndicator, Pressable, Text, View } from 'react-native';
-import type { VariantProps } from '@gluestack-ui/nativewind-utils';
-import { PrimitiveIcon, UIIcon } from '@gluestack-ui/icon';
+} from "@gluestack-ui/nativewind-utils/withStyleContext";
+import { cssInterop } from "nativewind";
+import { ActivityIndicator, Pressable, Text, View } from "react-native";
+import type { VariantProps } from "@gluestack-ui/nativewind-utils";
+import { PrimitiveIcon, UIIcon } from "@gluestack-ui/icon";
-const SCOPE = 'BUTTON';
+const SCOPE = "BUTTON";
const Root = withStyleContext(Pressable, SCOPE);
@@ -25,262 +25,268 @@ const UIButton = createButton({
cssInterop(PrimitiveIcon, {
className: {
- target: 'style',
+ target: "style",
nativeStyleToProp: {
height: true,
width: true,
fill: true,
- color: 'classNameColor',
+ color: "classNameColor",
stroke: true,
},
},
});
const buttonStyle = tva({
- base: 'group/button rounded bg-primary-500 flex-row items-center justify-center data-[focus-visible=true]:web:outline-none data-[focus-visible=true]:web:ring-2 data-[disabled=true]:opacity-40 gap-2',
+ base: "group/button rounded-3xl bg-primary-500 flex-row items-center justify-center data-[focus-visible=true]:web:outline-none data-[focus-visible=true]:web:ring-2 data-[disabled=true]:opacity-40 gap-2",
variants: {
action: {
primary:
- 'bg-primary-500 data-[hover=true]:bg-primary-600 data-[active=true]:bg-primary-700 border-primary-300 data-[hover=true]:border-primary-400 data-[active=true]:border-primary-500 data-[focus-visible=true]:web:ring-indicator-info',
+ "bg-primary-500 data-[hover=true]:bg-primary-600 data-[active=true]:bg-primary-700 border-primary-300 data-[hover=true]:border-primary-400 data-[active=true]:border-primary-500 data-[focus-visible=true]:web:ring-indicator-info",
secondary:
- 'bg-secondary-500 border-secondary-300 data-[hover=true]:bg-secondary-600 data-[hover=true]:border-secondary-400 data-[active=true]:bg-secondary-700 data-[active=true]:border-secondary-700 data-[focus-visible=true]:web:ring-indicator-info',
+ "bg-secondary-500 border-secondary-300 data-[hover=true]:bg-secondary-600 data-[hover=true]:border-secondary-400 data-[active=true]:bg-secondary-700 data-[active=true]:border-secondary-700 data-[focus-visible=true]:web:ring-indicator-info",
positive:
- 'bg-success-500 border-success-300 data-[hover=true]:bg-success-600 data-[hover=true]:border-success-400 data-[active=true]:bg-success-700 data-[active=true]:border-success-500 data-[focus-visible=true]:web:ring-indicator-info',
+ "bg-success-500 border-success-300 data-[hover=true]:bg-success-600 data-[hover=true]:border-success-400 data-[active=true]:bg-success-700 data-[active=true]:border-success-500 data-[focus-visible=true]:web:ring-indicator-info",
negative:
- 'bg-error-500 border-error-300 data-[hover=true]:bg-error-600 data-[hover=true]:border-error-400 data-[active=true]:bg-error-700 data-[active=true]:border-error-500 data-[focus-visible=true]:web:ring-indicator-info',
+ "bg-error-500 border-error-300 data-[hover=true]:bg-error-600 data-[hover=true]:border-error-400 data-[active=true]:bg-error-700 data-[active=true]:border-error-500 data-[focus-visible=true]:web:ring-indicator-info",
default:
- 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent',
+ "bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent",
},
variant: {
- link: 'px-0',
+ link: "px-0",
outline:
- 'bg-transparent border data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent',
- solid: '',
+ "bg-transparent border data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent",
+ solid: "",
},
size: {
- xs: 'px-3.5 h-8',
- sm: 'px-4 h-9',
- md: 'px-5 h-10',
- lg: 'px-6 h-11',
- xl: 'px-7 h-12',
+ xs: "h-8",
+ sm: "h-9",
+ md: "h-10",
+ lg: "h-11",
+ xl: "p-4 h-16",
+ "2xl": "p-6 h-20",
+ "3xl": "p-8 h-24",
},
},
compoundVariants: [
{
- action: 'primary',
- variant: 'link',
+ action: "primary",
+ variant: "link",
class:
- 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent',
+ "px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent",
},
{
- action: 'secondary',
- variant: 'link',
+ action: "secondary",
+ variant: "link",
class:
- 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent',
+ "px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent",
},
{
- action: 'positive',
- variant: 'link',
+ action: "positive",
+ variant: "link",
class:
- 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent',
+ "px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent",
},
{
- action: 'negative',
- variant: 'link',
+ action: "negative",
+ variant: "link",
class:
- 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent',
+ "px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent",
},
{
- action: 'primary',
- variant: 'outline',
+ action: "primary",
+ variant: "outline",
class:
- 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent',
+ "bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent",
},
{
- action: 'secondary',
- variant: 'outline',
+ action: "secondary",
+ variant: "outline",
class:
- 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent',
+ "bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent",
},
{
- action: 'positive',
- variant: 'outline',
+ action: "positive",
+ variant: "outline",
class:
- 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent',
+ "bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent",
},
{
- action: 'negative',
- variant: 'outline',
+ action: "negative",
+ variant: "outline",
class:
- 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent',
+ "bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent",
},
],
});
const buttonTextStyle = tva({
- base: 'text-typography-0 font-semibold web:select-none',
+ base: "text-typography-0 font-semibold web:select-none",
parentVariants: {
action: {
primary:
- 'text-primary-600 data-[hover=true]:text-primary-600 data-[active=true]:text-primary-700',
+ "text-primary-600 data-[hover=true]:text-primary-600 data-[active=true]:text-primary-700",
secondary:
- 'text-typography-500 data-[hover=true]:text-typography-600 data-[active=true]:text-typography-700',
+ "text-typography-500 data-[hover=true]:text-typography-600 data-[active=true]:text-typography-700",
positive:
- 'text-success-600 data-[hover=true]:text-success-600 data-[active=true]:text-success-700',
+ "text-success-600 data-[hover=true]:text-success-600 data-[active=true]:text-success-700",
negative:
- 'text-error-600 data-[hover=true]:text-error-600 data-[active=true]:text-error-700',
+ "text-error-600 data-[hover=true]:text-error-600 data-[active=true]:text-error-700",
},
variant: {
- link: 'data-[hover=true]:underline data-[active=true]:underline',
- outline: '',
+ link: "underline data-[hover=true]:underline data-[active=true]:underline text-orange-400",
+ outline: "",
solid:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
size: {
- xs: 'text-xs',
- sm: 'text-sm',
- md: 'text-base',
- lg: 'text-lg',
- xl: 'text-xl',
+ xs: "text-xs",
+ sm: "text-sm",
+ md: "text-base",
+ lg: "text-lg",
+ xl: "text-xl",
+ "2xl": "text-2xl",
+ "3xl": "text-3xl",
},
},
parentCompoundVariants: [
{
- variant: 'solid',
- action: 'primary',
+ variant: "solid",
+ action: "primary",
class:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
{
- variant: 'solid',
- action: 'secondary',
+ variant: "solid",
+ action: "secondary",
class:
- 'text-typography-800 data-[hover=true]:text-typography-800 data-[active=true]:text-typography-800',
+ "text-typography-800 data-[hover=true]:text-typography-800 data-[active=true]:text-typography-800",
},
{
- variant: 'solid',
- action: 'positive',
+ variant: "solid",
+ action: "positive",
class:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
{
- variant: 'solid',
- action: 'negative',
+ variant: "solid",
+ action: "negative",
class:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
{
- variant: 'outline',
- action: 'primary',
+ variant: "outline",
+ action: "primary",
class:
- 'text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500',
+ "text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500",
},
{
- variant: 'outline',
- action: 'secondary',
+ variant: "outline",
+ action: "secondary",
class:
- 'text-typography-500 data-[hover=true]:text-primary-600 data-[active=true]:text-typography-700',
+ "text-typography-500 data-[hover=true]:text-primary-600 data-[active=true]:text-typography-700",
},
{
- variant: 'outline',
- action: 'positive',
+ variant: "outline",
+ action: "positive",
class:
- 'text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500',
+ "text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500",
},
{
- variant: 'outline',
- action: 'negative',
+ variant: "outline",
+ action: "negative",
class:
- 'text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500',
+ "text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500",
},
],
});
const buttonIconStyle = tva({
- base: 'fill-none',
+ base: "fill-none",
parentVariants: {
variant: {
- link: 'data-[hover=true]:underline data-[active=true]:underline',
- outline: '',
+ link: "data-[hover=true]:underline data-[active=true]:underline",
+ outline: "",
solid:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
size: {
- xs: 'h-3.5 w-3.5',
- sm: 'h-4 w-4',
- md: 'h-[18px] w-[18px]',
- lg: 'h-[18px] w-[18px]',
- xl: 'h-5 w-5',
+ xs: "h-3.5 w-3.5",
+ sm: "h-4 w-4",
+ md: "h-[18px] w-[18px]",
+ lg: "h-[18px] w-[18px]",
+ xl: "h-5 w-5",
+ "2xl": "h-8 w-8",
+ "3xl": "h-10 w-10",
},
action: {
primary:
- 'text-primary-600 data-[hover=true]:text-primary-600 data-[active=true]:text-primary-700',
+ "text-primary-600 data-[hover=true]:text-primary-600 data-[active=true]:text-primary-700",
secondary:
- 'text-typography-500 data-[hover=true]:text-typography-600 data-[active=true]:text-typography-700',
+ "text-typography-500 data-[hover=true]:text-typography-600 data-[active=true]:text-typography-700",
positive:
- 'text-success-600 data-[hover=true]:text-success-600 data-[active=true]:text-success-700',
+ "text-success-600 data-[hover=true]:text-success-600 data-[active=true]:text-success-700",
negative:
- 'text-error-600 data-[hover=true]:text-error-600 data-[active=true]:text-error-700',
+ "text-error-600 data-[hover=true]:text-error-600 data-[active=true]:text-error-700",
},
},
parentCompoundVariants: [
{
- variant: 'solid',
- action: 'primary',
+ variant: "solid",
+ action: "primary",
class:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
{
- variant: 'solid',
- action: 'secondary',
+ variant: "solid",
+ action: "secondary",
class:
- 'text-typography-800 data-[hover=true]:text-typography-800 data-[active=true]:text-typography-800',
+ "text-typography-800 data-[hover=true]:text-typography-800 data-[active=true]:text-typography-800",
},
{
- variant: 'solid',
- action: 'positive',
+ variant: "solid",
+ action: "positive",
class:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
{
- variant: 'solid',
- action: 'negative',
+ variant: "solid",
+ action: "negative",
class:
- 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0',
+ "text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0",
},
],
});
const buttonGroupStyle = tva({
- base: '',
+ base: "",
variants: {
space: {
- 'xs': 'gap-1',
- 'sm': 'gap-2',
- 'md': 'gap-3',
- 'lg': 'gap-4',
- 'xl': 'gap-5',
- '2xl': 'gap-6',
- '3xl': 'gap-7',
- '4xl': 'gap-8',
+ xs: "gap-1",
+ sm: "gap-2",
+ md: "gap-3",
+ lg: "gap-4",
+ xl: "gap-5",
+ "2xl": "gap-6",
+ "3xl": "gap-7",
+ "4xl": "gap-8",
},
isAttached: {
- true: 'gap-0',
+ true: "gap-0",
},
flexDirection: {
- 'row': 'flex-row',
- 'column': 'flex-col',
- 'row-reverse': 'flex-row-reverse',
- 'column-reverse': 'flex-col-reverse',
+ row: "flex-row",
+ column: "flex-col",
+ "row-reverse": "flex-row-reverse",
+ "column-reverse": "flex-col-reverse",
},
},
});
type IButtonProps = Omit<
React.ComponentPropsWithoutRef,
- 'context'
+ "context"
> &
VariantProps & { className?: string };
@@ -289,7 +295,7 @@ const Button = React.forwardRef<
IButtonProps
>(
(
- { className, variant = 'solid', size = 'md', action = 'primary', ...props },
+ { className, variant = "solid", size = "md", action = "primary", ...props },
ref
) => {
return (
@@ -355,7 +361,7 @@ const ButtonIcon = React.forwardRef<
action: parentAction,
} = useStyleContext(SCOPE);
- if (typeof size === 'number') {
+ if (typeof size === "number") {
return (
& { className?: string };
+
+const Card = React.forwardRef, ICardProps>(
+ ({ className, size = 'md', variant = 'elevated', ...props }, ref) => {
+ return (
+
+ );
+ }
+);
+
+Card.displayName = 'Card';
+
+export { Card };
diff --git a/app/components/ui/card/index.web.tsx b/app/components/ui/card/index.web.tsx
new file mode 100644
index 0000000..f521d08
--- /dev/null
+++ b/app/components/ui/card/index.web.tsx
@@ -0,0 +1,22 @@
+import React from 'react';
+import { cardStyle } from './styles';
+import type { VariantProps } from '@gluestack-ui/nativewind-utils';
+
+type ICardProps = React.ComponentPropsWithoutRef<'div'> &
+ VariantProps;
+
+const Card = React.forwardRef(
+ ({ className, size = 'md', variant = 'elevated', ...props }, ref) => {
+ return (
+
+ );
+ }
+);
+
+Card.displayName = 'Card';
+
+export { Card };
diff --git a/app/components/ui/card/styles.tsx b/app/components/ui/card/styles.tsx
new file mode 100644
index 0000000..59de8b7
--- /dev/null
+++ b/app/components/ui/card/styles.tsx
@@ -0,0 +1,20 @@
+import { tva } from '@gluestack-ui/nativewind-utils/tva';
+import { isWeb } from '@gluestack-ui/nativewind-utils/IsWeb';
+const baseStyle = isWeb ? 'flex flex-col relative z-0' : '';
+
+export const cardStyle = tva({
+ base: baseStyle,
+ variants: {
+ size: {
+ sm: 'p-3 rounded',
+ md: 'p-4 rounded-md',
+ lg: 'p-6 rounded-xl',
+ },
+ variant: {
+ elevated: 'bg-background-0',
+ outline: 'border border-outline-200 ',
+ ghost: 'rounded-none',
+ filled: 'bg-background-50',
+ },
+ },
+});
diff --git a/app/components/ui/form-control/index.tsx b/app/components/ui/form-control/index.tsx
new file mode 100644
index 0000000..b982f4c
--- /dev/null
+++ b/app/components/ui/form-control/index.tsx
@@ -0,0 +1,468 @@
+'use client';
+import { Text, View } from 'react-native';
+import React from 'react';
+import { createFormControl } from '@gluestack-ui/form-control';
+import { tva } from '@gluestack-ui/nativewind-utils/tva';
+import {
+ withStyleContext,
+ useStyleContext,
+} from '@gluestack-ui/nativewind-utils/withStyleContext';
+import { cssInterop } from 'nativewind';
+import type { VariantProps } from '@gluestack-ui/nativewind-utils';
+import { PrimitiveIcon, UIIcon } from '@gluestack-ui/icon';
+
+const SCOPE = 'FORM_CONTROL';
+
+const formControlStyle = tva({
+ base: 'flex flex-col',
+ variants: {
+ size: {
+ sm: '',
+ md: '',
+ lg: '',
+ },
+ },
+});
+
+const formControlErrorIconStyle = tva({
+ base: 'text-error-700 fill-none',
+ variants: {
+ size: {
+ '2xs': 'h-3 w-3',
+ 'xs': 'h-3.5 w-3.5',
+ 'sm': 'h-4 w-4',
+ 'md': 'h-[18px] w-[18px]',
+ 'lg': 'h-5 w-5',
+ 'xl': 'h-6 w-6',
+ },
+ },
+});
+
+const formControlErrorStyle = tva({
+ base: 'flex flex-row justify-start items-center mt-1 gap-1',
+});
+
+const formControlErrorTextStyle = tva({
+ base: 'text-error-700',
+ variants: {
+ isTruncated: {
+ true: 'web:truncate',
+ },
+ bold: {
+ true: 'font-bold',
+ },
+ underline: {
+ true: 'underline',
+ },
+ strikeThrough: {
+ true: 'line-through',
+ },
+ size: {
+ '2xs': 'text-2xs',
+ 'xs': 'text-xs',
+ 'sm': 'text-sm',
+ 'md': 'text-base',
+ 'lg': 'text-lg',
+ 'xl': 'text-xl',
+ '2xl': 'text-2xl',
+ '3xl': 'text-3xl',
+ '4xl': 'text-4xl',
+ '5xl': 'text-5xl',
+ '6xl': 'text-6xl',
+ },
+ sub: {
+ true: 'text-xs',
+ },
+ italic: {
+ true: 'italic',
+ },
+ highlight: {
+ true: 'bg-yellow-500',
+ },
+ },
+});
+
+const formControlHelperStyle = tva({
+ base: 'flex flex-row justify-start items-center mt-1',
+});
+
+const formControlHelperTextStyle = tva({
+ base: 'text-typography-500',
+ variants: {
+ isTruncated: {
+ true: 'web:truncate',
+ },
+ bold: {
+ true: 'font-bold',
+ },
+ underline: {
+ true: 'underline',
+ },
+ strikeThrough: {
+ true: 'line-through',
+ },
+ size: {
+ '2xs': 'text-2xs',
+ 'xs': 'text-xs',
+ 'sm': 'text-xs',
+ 'md': 'text-sm',
+ 'lg': 'text-base',
+ 'xl': 'text-xl',
+ '2xl': 'text-2xl',
+ '3xl': 'text-3xl',
+ '4xl': 'text-4xl',
+ '5xl': 'text-5xl',
+ '6xl': 'text-6xl',
+ },
+ sub: {
+ true: 'text-xs',
+ },
+ italic: {
+ true: 'italic',
+ },
+ highlight: {
+ true: 'bg-yellow-500',
+ },
+ },
+});
+
+const formControlLabelStyle = tva({
+ base: 'flex flex-row justify-start items-center mb-1',
+});
+
+const formControlLabelTextStyle = tva({
+ base: 'font-medium text-typography-900',
+ variants: {
+ isTruncated: {
+ true: 'web:truncate',
+ },
+ bold: {
+ true: 'font-bold',
+ },
+ underline: {
+ true: 'underline',
+ },
+ strikeThrough: {
+ true: 'line-through',
+ },
+ size: {
+ '2xs': 'text-2xs',
+ 'xs': 'text-xs',
+ 'sm': 'text-sm',
+ 'md': 'text-base',
+ 'lg': 'text-lg',
+ 'xl': 'text-xl',
+ '2xl': 'text-2xl',
+ '3xl': 'text-3xl',
+ '4xl': 'text-4xl',
+ '5xl': 'text-5xl',
+ '6xl': 'text-6xl',
+ },
+ sub: {
+ true: 'text-xs',
+ },
+ italic: {
+ true: 'italic',
+ },
+ highlight: {
+ true: 'bg-yellow-500',
+ },
+ },
+});
+
+const formControlLabelAstrickStyle = tva({
+ base: 'font-medium text-typography-900',
+ variants: {
+ isTruncated: {
+ true: 'web:truncate',
+ },
+ bold: {
+ true: 'font-bold',
+ },
+ underline: {
+ true: 'underline',
+ },
+ strikeThrough: {
+ true: 'line-through',
+ },
+ size: {
+ '2xs': 'text-2xs',
+ 'xs': 'text-xs',
+ 'sm': 'text-sm',
+ 'md': 'text-base',
+ 'lg': 'text-lg',
+ 'xl': 'text-xl',
+ '2xl': 'text-2xl',
+ '3xl': 'text-3xl',
+ '4xl': 'text-4xl',
+ '5xl': 'text-5xl',
+ '6xl': 'text-6xl',
+ },
+ sub: {
+ true: 'text-xs',
+ },
+ italic: {
+ true: 'italic',
+ },
+ highlight: {
+ true: 'bg-yellow-500',
+ },
+ },
+});
+
+type IFormControlLabelAstrickProps = React.ComponentPropsWithoutRef<
+ typeof Text
+> &
+ VariantProps;
+
+const FormControlLabelAstrick = React.forwardRef<
+ React.ElementRef,
+ IFormControlLabelAstrickProps
+>(({ className, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE);
+
+ return (
+
+ );
+});
+
+export const UIFormControl = createFormControl({
+ Root: withStyleContext(View, SCOPE),
+ Error: View,
+ ErrorText: Text,
+ ErrorIcon: UIIcon,
+ Label: View,
+ LabelText: Text,
+ LabelAstrick: FormControlLabelAstrick,
+ Helper: View,
+ HelperText: Text,
+});
+
+cssInterop(PrimitiveIcon, {
+ className: {
+ target: 'style',
+ nativeStyleToProp: {
+ height: true,
+ width: true,
+ fill: true,
+ color: true,
+ stroke: true,
+ },
+ },
+});
+
+type IFormControlProps = React.ComponentProps &
+ VariantProps;
+
+const FormControl = React.forwardRef<
+ React.ElementRef,
+ IFormControlProps
+>(({ className, size = 'md', ...props }, ref) => {
+ return (
+
+ );
+});
+
+type IFormControlErrorProps = React.ComponentProps &
+ VariantProps;
+
+const FormControlError = React.forwardRef<
+ React.ElementRef,
+ IFormControlErrorProps
+>(({ className, ...props }, ref) => {
+ return (
+
+ );
+});
+
+type IFormControlErrorTextProps = React.ComponentProps<
+ typeof UIFormControl.Error.Text
+> &
+ VariantProps;
+
+const FormControlErrorText = React.forwardRef<
+ React.ElementRef,
+ IFormControlErrorTextProps
+>(({ className, size, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE);
+ return (
+
+ );
+});
+
+type IFormControlErrorIconProps = React.ComponentProps<
+ typeof UIFormControl.Error.Icon
+> &
+ VariantProps & {
+ height?: number;
+ width?: number;
+ };
+
+const FormControlErrorIcon = React.forwardRef<
+ React.ElementRef,
+ IFormControlErrorIconProps
+>(({ className, size, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE);
+
+ if (typeof size === 'number') {
+ return (
+
+ );
+ } else if (
+ (props.height !== undefined || props.width !== undefined) &&
+ size === undefined
+ ) {
+ return (
+
+ );
+ }
+ return (
+
+ );
+});
+
+type IFormControlLabelProps = React.ComponentProps &
+ VariantProps;
+
+const FormControlLabel = React.forwardRef<
+ React.ElementRef,
+ IFormControlLabelProps
+>(({ className, ...props }, ref) => {
+ return (
+
+ );
+});
+
+type IFormControlLabelTextProps = React.ComponentProps<
+ typeof UIFormControl.Label.Text
+> &
+ VariantProps;
+
+const FormControlLabelText = React.forwardRef<
+ React.ElementRef,
+ IFormControlLabelTextProps
+>(({ className, size, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE);
+
+ return (
+
+ );
+});
+
+type IFormControlHelperProps = React.ComponentProps<
+ typeof UIFormControl.Helper
+> &
+ VariantProps;
+
+const FormControlHelper = React.forwardRef<
+ React.ElementRef,
+ IFormControlHelperProps
+>(({ className, ...props }, ref) => {
+ return (
+
+ );
+});
+
+type IFormControlHelperTextProps = React.ComponentProps<
+ typeof UIFormControl.Helper.Text
+> &
+ VariantProps;
+
+const FormControlHelperText = React.forwardRef<
+ React.ElementRef,
+ IFormControlHelperTextProps
+>(({ className, size, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE);
+
+ return (
+
+ );
+});
+
+FormControl.displayName = 'FormControl';
+FormControlError.displayName = 'FormControlError';
+FormControlErrorText.displayName = 'FormControlErrorText';
+FormControlErrorIcon.displayName = 'FormControlErrorIcon';
+FormControlLabel.displayName = 'FormControlLabel';
+FormControlLabelText.displayName = 'FormControlLabelText';
+FormControlLabelAstrick.displayName = 'FormControlLabelAstrick';
+FormControlHelper.displayName = 'FormControlHelper';
+FormControlHelperText.displayName = 'FormControlHelperText';
+
+export {
+ FormControl,
+ FormControlError,
+ FormControlErrorText,
+ FormControlErrorIcon,
+ FormControlLabel,
+ FormControlLabelText,
+ FormControlLabelAstrick,
+ FormControlHelper,
+ FormControlHelperText,
+};
diff --git a/app/components/ui/heading/index.tsx b/app/components/ui/heading/index.tsx
new file mode 100644
index 0000000..be876d4
--- /dev/null
+++ b/app/components/ui/heading/index.tsx
@@ -0,0 +1,219 @@
+import React, { forwardRef, memo } from 'react';
+import { H1, H2, H3, H4, H5, H6 } from '@expo/html-elements';
+import { headingStyle } from './styles';
+import type { VariantProps } from '@gluestack-ui/nativewind-utils';
+import { cssInterop } from 'nativewind';
+
+type IHeadingProps = VariantProps &
+ React.ComponentPropsWithoutRef & {
+ as?: React.ElementType;
+ };
+
+cssInterop(H1, { className: 'style' });
+cssInterop(H2, { className: 'style' });
+cssInterop(H3, { className: 'style' });
+cssInterop(H4, { className: 'style' });
+cssInterop(H5, { className: 'style' });
+cssInterop(H6, { className: 'style' });
+
+const MappedHeading = memo(
+ forwardRef, IHeadingProps>(
+ (
+ {
+ size,
+ className,
+ isTruncated,
+ bold,
+ underline,
+ strikeThrough,
+ sub,
+ italic,
+ highlight,
+ ...props
+ },
+ ref
+ ) => {
+ switch (size) {
+ case '5xl':
+ case '4xl':
+ case '3xl':
+ return (
+
+ );
+ case '2xl':
+ return (
+
+ );
+ case 'xl':
+ return (
+
+ );
+ case 'lg':
+ return (
+
+ );
+ case 'md':
+ return (
+
+ );
+ case 'sm':
+ case 'xs':
+ return (
+
+ );
+ default:
+ return (
+
+ );
+ }
+ }
+ )
+);
+
+const Heading = memo(
+ forwardRef, IHeadingProps>(
+ ({ className, size = 'lg', as: AsComp, ...props }, ref) => {
+ const {
+ isTruncated,
+ bold,
+ underline,
+ strikeThrough,
+ sub,
+ italic,
+ highlight,
+ } = props;
+
+ if (AsComp) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+ }
+ )
+);
+
+Heading.displayName = 'Heading';
+
+export { Heading };
diff --git a/app/components/ui/heading/index.web.tsx b/app/components/ui/heading/index.web.tsx
new file mode 100644
index 0000000..2806c70
--- /dev/null
+++ b/app/components/ui/heading/index.web.tsx
@@ -0,0 +1,203 @@
+import React, { forwardRef, memo } from 'react';
+import { headingStyle } from './styles';
+import type { VariantProps } from '@gluestack-ui/nativewind-utils';
+type IHeadingProps = VariantProps &
+ React.ComponentPropsWithoutRef<'h1'> & {
+ as?: React.ElementType;
+ };
+
+const MappedHeading = memo(
+ forwardRef(
+ (
+ {
+ size,
+ className,
+ isTruncated,
+ bold,
+ underline,
+ strikeThrough,
+ sub,
+ italic,
+ highlight,
+ ...props
+ },
+ ref
+ ) => {
+ switch (size) {
+ case '5xl':
+ case '4xl':
+ case '3xl':
+ return (
+
+ );
+ case '2xl':
+ return (
+
+ );
+ case 'xl':
+ return (
+
+ );
+ case 'lg':
+ return (
+
+ );
+ case 'md':
+ return (
+
+ );
+ case 'sm':
+ case 'xs':
+ return (
+
+ );
+ default:
+ return (
+
+ );
+ }
+ }
+ )
+);
+
+const Heading = memo(
+ forwardRef(
+ ({ className, size = 'lg', as: AsComp, ...props }, ref) => {
+ const {
+ isTruncated,
+ bold,
+ underline,
+ strikeThrough,
+ sub,
+ italic,
+ highlight,
+ } = props;
+
+ if (AsComp) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+ }
+ )
+);
+
+Heading.displayName = 'Heading';
+
+export { Heading };
diff --git a/app/components/ui/heading/styles.tsx b/app/components/ui/heading/styles.tsx
new file mode 100644
index 0000000..e695159
--- /dev/null
+++ b/app/components/ui/heading/styles.tsx
@@ -0,0 +1,43 @@
+import { tva } from "@gluestack-ui/nativewind-utils/tva";
+import { isWeb } from "@gluestack-ui/nativewind-utils/IsWeb";
+const baseStyle = isWeb
+ ? "font-sans tracking-sm bg-transparent border-0 box-border display-inline list-none margin-0 padding-0 position-relative text-start no-underline whitespace-pre-wrap word-wrap-break-word"
+ : "";
+
+export const headingStyle = tva({
+ base: `text-typography-900 font-bold font-heading tracking-sm my-0 ${baseStyle}`,
+ variants: {
+ isTruncated: {
+ true: "truncate",
+ },
+ bold: {
+ true: "font-bold",
+ },
+ underline: {
+ true: "underline",
+ },
+ strikeThrough: {
+ true: "line-through",
+ },
+ sub: {
+ true: "text-xs",
+ },
+ italic: {
+ true: "italic",
+ },
+ highlight: {
+ true: "bg-yellow-500",
+ },
+ size: {
+ "5xl": "text-6xl",
+ "4xl": "text-5xl",
+ "3xl": "text-4xl",
+ "2xl": "text-3xl",
+ xl: "text-2xl",
+ lg: "text-xl",
+ md: "text-lg",
+ sm: "text-base",
+ xs: "text-sm",
+ },
+ },
+});
diff --git a/app/components/ui/input/index.tsx b/app/components/ui/input/index.tsx
new file mode 100644
index 0000000..ed6ee27
--- /dev/null
+++ b/app/components/ui/input/index.tsx
@@ -0,0 +1,214 @@
+"use client";
+import React from "react";
+import { createInput } from "@gluestack-ui/input";
+import { View, Pressable, TextInput } from "react-native";
+import { tva } from "@gluestack-ui/nativewind-utils/tva";
+import {
+ withStyleContext,
+ useStyleContext,
+} from "@gluestack-ui/nativewind-utils/withStyleContext";
+import { cssInterop } from "nativewind";
+import type { VariantProps } from "@gluestack-ui/nativewind-utils";
+import { PrimitiveIcon, UIIcon } from "@gluestack-ui/icon";
+
+const SCOPE = "INPUT";
+
+const UIInput = createInput({
+ Root: withStyleContext(View, SCOPE),
+ Icon: UIIcon,
+ Slot: Pressable,
+ Input: TextInput,
+});
+
+cssInterop(PrimitiveIcon, {
+ className: {
+ target: "style",
+ nativeStyleToProp: {
+ height: true,
+ width: true,
+ fill: true,
+ color: "classNameColor",
+ stroke: true,
+ },
+ },
+});
+
+const inputStyle = tva({
+ base: "border-background-300 flex-row overflow-hidden content-center data-[hover=true]:border-outline-400 data-[focus=true]:border-orange-400 data-[focus=true]:hover:border-primary-700 data-[disabled=true]:opacity-40 data-[disabled=true]:hover:border-background-300 items-center",
+
+ variants: {
+ size: {
+ xl: "px-4 h-16",
+ lg: "px-4 h-11",
+ md: "px-4 h-10",
+ sm: "px-4 h-9",
+ },
+
+ variant: {
+ underlined:
+ "rounded-none border-b data-[invalid=true]:border-b-2 data-[invalid=true]:border-error-700 data-[invalid=true]:hover:border-error-700 data-[invalid=true]:data-[focus=true]:border-error-700 data-[invalid=true]:data-[focus=true]:hover:border-error-700 data-[invalid=true]:data-[disabled=true]:hover:border-error-700",
+
+ outline:
+ "rounded-3xl border data-[invalid=true]:border-error-700 data-[invalid=true]:hover:border-error-700 data-[invalid=true]:data-[focus=true]:border-error-700 data-[invalid=true]:data-[focus=true]:hover:border-error-700 data-[invalid=true]:data-[disabled=true]:hover:border-error-700 data-[focus=true]:web:ring-1 data-[focus=true]:web:ring-inset data-[focus=true]:web:ring-indicator-primary data-[invalid=true]:web:ring-1 data-[invalid=true]:web:ring-inset data-[invalid=true]:web:ring-indicator-error data-[invalid=true]:data-[focus=true]:hover:web:ring-1 data-[invalid=true]:data-[focus=true]:hover:web:ring-inset data-[invalid=true]:data-[focus=true]:hover:web:ring-indicator-error data-[invalid=true]:data-[disabled=true]:hover:web:ring-1 data-[invalid=true]:data-[disabled=true]:hover:web:ring-inset data-[invalid=true]:data-[disabled=true]:hover:web:ring-indicator-error",
+
+ rounded:
+ "rounded-full border data-[invalid=true]:border-error-700 data-[invalid=true]:hover:border-error-700 data-[invalid=true]:data-[focus=true]:border-error-700 data-[invalid=true]:data-[focus=true]:hover:border-error-700 data-[invalid=true]:data-[disabled=true]:hover:border-error-700 data-[focus=true]:web:ring-1 data-[focus=true]:web:ring-inset data-[focus=true]:web:ring-indicator-primary data-[invalid=true]:web:ring-1 data-[invalid=true]:web:ring-inset data-[invalid=true]:web:ring-indicator-error data-[invalid=true]:data-[focus=true]:hover:web:ring-1 data-[invalid=true]:data-[focus=true]:hover:web:ring-inset data-[invalid=true]:data-[focus=true]:hover:web:ring-indicator-error data-[invalid=true]:data-[disabled=true]:hover:web:ring-1 data-[invalid=true]:data-[disabled=true]:hover:web:ring-inset data-[invalid=true]:data-[disabled=true]:hover:web:ring-indicator-error",
+ },
+ },
+});
+
+const inputIconStyle = tva({
+ base: "justify-center items-center text-typography-400 fill-none",
+ parentVariants: {
+ size: {
+ "2xs": "h-3 w-3",
+ xs: "h-3.5 w-3.5",
+ sm: "h-4 w-4",
+ md: "h-[18px] w-[18px]",
+ lg: "h-5 w-5",
+ xl: "h-6 w-6",
+ },
+ },
+});
+
+const inputSlotStyle = tva({
+ base: "justify-center items-center web:disabled:cursor-not-allowed",
+});
+
+const inputFieldStyle = tva({
+ base: "flex-1 text-typography-900 py-0 px-3 placeholder:text-typography-500 h-full ios:leading-[0px] web:cursor-text web:data-[disabled=true]:cursor-not-allowed",
+
+ parentVariants: {
+ variant: {
+ underlined: "web:outline-0 web:outline-none px-0",
+ outline: "web:outline-0 web:outline-none",
+ rounded: "web:outline-0 web:outline-none px-4",
+ },
+
+ size: {
+ "2xs": "text-2xs",
+ xs: "text-xs",
+ sm: "text-sm",
+ md: "text-base",
+ lg: "text-lg",
+ xl: "text-xl",
+ "2xl": "text-2xl",
+ "3xl": "text-3xl",
+ "4xl": "text-4xl",
+ "5xl": "text-5xl",
+ "6xl": "text-6xl",
+ },
+ },
+});
+
+type IInputProps = React.ComponentProps &
+ VariantProps & { className?: string };
+const Input = React.forwardRef, IInputProps>(
+ ({ className, variant = "outline", size = "md", ...props }, ref) => {
+ return (
+
+ );
+ }
+);
+
+type IInputIconProps = React.ComponentProps &
+ VariantProps & {
+ className?: string;
+ height?: number;
+ width?: number;
+ };
+
+const InputIcon = React.forwardRef<
+ React.ElementRef,
+ IInputIconProps
+>(({ className, size, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE);
+
+ if (typeof size === "number") {
+ return (
+
+ );
+ } else if (
+ (props.height !== undefined || props.width !== undefined) &&
+ size === undefined
+ ) {
+ return (
+
+ );
+ }
+ return (
+
+ );
+});
+
+type IInputSlotProps = React.ComponentProps &
+ VariantProps & { className?: string };
+
+const InputSlot = React.forwardRef<
+ React.ElementRef,
+ IInputSlotProps
+>(({ className, ...props }, ref) => {
+ return (
+
+ );
+});
+
+type IInputFieldProps = React.ComponentProps &
+ VariantProps & { className?: string };
+
+const InputField = React.forwardRef<
+ React.ElementRef,
+ IInputFieldProps
+>(({ className, ...props }, ref) => {
+ const { variant: parentVariant, size: parentSize } = useStyleContext(SCOPE);
+
+ return (
+
+ );
+});
+
+Input.displayName = "Input";
+InputIcon.displayName = "InputIcon";
+InputSlot.displayName = "InputSlot";
+InputField.displayName = "InputField";
+
+export { Input, InputField, InputIcon, InputSlot };
diff --git a/app/components/ui/link/index.tsx b/app/components/ui/link/index.tsx
new file mode 100644
index 0000000..635b23c
--- /dev/null
+++ b/app/components/ui/link/index.tsx
@@ -0,0 +1,102 @@
+"use client";
+import { createLink } from "@gluestack-ui/link";
+import { Pressable } from "react-native";
+import { Text } from "react-native";
+
+import { tva } from "@gluestack-ui/nativewind-utils/tva";
+import { withStyleContext } from "@gluestack-ui/nativewind-utils/withStyleContext";
+import { cssInterop } from "nativewind";
+import type { VariantProps } from "@gluestack-ui/nativewind-utils";
+
+import React from "react";
+export const UILink = createLink({
+ Root: withStyleContext(Pressable),
+ Text: Text,
+});
+
+cssInterop(UILink, { className: "style" });
+cssInterop(UILink.Text, { className: "style" });
+
+const linkStyle = tva({
+ base: "group/link web:outline-0 data-[disabled=true]:web:cursor-not-allowed data-[focus-visible=true]:web:ring-2 data-[focus-visible=true]:web:ring-indicator-primary data-[focus-visible=true]:web:outline-0 data-[disabled=true]:opacity-4 ",
+});
+
+const linkTextStyle = tva({
+ base: "underline text-orange-400 data-[hover=true]:text-orange-400 data-[hover=true]:no-underline data-[active=true]:text-orange-400 font-normal font-body web:font-sans web:tracking-sm web:my-0 web:bg-transparent web:border-0 web:box-border web:display-inline web:list-none web:margin-0 web:padding-0 web:position-relative web:text-start web:whitespace-pre-wrap web:word-wrap-break-word",
+
+ variants: {
+ isTruncated: {
+ true: "web:truncate",
+ },
+ bold: {
+ true: "font-bold",
+ },
+ underline: {
+ true: "underline",
+ },
+ strikeThrough: {
+ true: "line-through",
+ },
+ size: {
+ "2xs": "text-2xs",
+ xs: "text-xs",
+ sm: "text-sm",
+ md: "text-base",
+ lg: "text-lg",
+ xl: "text-xl",
+ "2xl": "text-2xl",
+ "3xl": "text-3xl",
+ "4xl": "text-4xl",
+ "5xl": "text-5xl",
+ "6xl": "text-6xl",
+ },
+ sub: {
+ true: "text-xs",
+ },
+ italic: {
+ true: "italic",
+ },
+ highlight: {
+ true: "bg-yellow-500",
+ },
+ },
+});
+
+type ILinkProps = React.ComponentProps &
+ VariantProps & { className?: string };
+
+const Link = React.forwardRef, ILinkProps>(
+ ({ className, ...props }, ref) => {
+ return (
+
+ );
+ }
+);
+
+type ILinkTextProps = React.ComponentProps &
+ VariantProps & { className?: string };
+
+const LinkText = React.forwardRef<
+ React.ElementRef,
+ ILinkTextProps
+>(({ className, size = "md", ...props }, ref) => {
+ return (
+
+ );
+});
+
+Link.displayName = "Link";
+LinkText.displayName = "LinkText";
+
+export { Link, LinkText };
diff --git a/app/index.tsx b/app/index.tsx
index 92ad8e8..7e0c92c 100644
--- a/app/index.tsx
+++ b/app/index.tsx
@@ -1,21 +1,12 @@
-import {SafeAreaView, Text, View} from "react-native";
-import Navigation from "@/src/navigation/navigation";
-import HomeScreen from "@/app/HomeScreen";
+import { SafeAreaView, View } from "react-native";
+import LoginPage from "./LoginPage";
export default function Index() {
return (
-
+
+
+
);
}
-
-
-function App() {
- return (
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/assets/images/icon.png b/assets/images/icon.png
index a0b1526..53fd2f6 100644
Binary files a/assets/images/icon.png and b/assets/images/icon.png differ
diff --git a/assets/images/partial-react-logo.png b/assets/images/partial-react-logo.png
deleted file mode 100644
index 66fd957..0000000
Binary files a/assets/images/partial-react-logo.png and /dev/null differ
diff --git a/assets/images/react-logo.png b/assets/images/react-logo.png
deleted file mode 100644
index 9d72a9f..0000000
Binary files a/assets/images/react-logo.png and /dev/null differ
diff --git a/assets/images/react-logo@2x.png b/assets/images/react-logo@2x.png
deleted file mode 100644
index 2229b13..0000000
Binary files a/assets/images/react-logo@2x.png and /dev/null differ
diff --git a/assets/images/react-logo@3x.png b/assets/images/react-logo@3x.png
deleted file mode 100644
index a99b203..0000000
Binary files a/assets/images/react-logo@3x.png and /dev/null differ
diff --git a/assets/svg/Muscle.tsx b/assets/svg/Muscle.tsx
new file mode 100644
index 0000000..25b7e8f
--- /dev/null
+++ b/assets/svg/Muscle.tsx
@@ -0,0 +1,8 @@
+import * as React from "react";
+import Svg, { Path, SvgProps } from "react-native-svg";
+const Muscle = (props: SvgProps) => (
+
+);
+export default Muscle;
diff --git a/package-lock.json b/package-lock.json
index 100ddab..9d91d59 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,11 +8,15 @@
"name": "optifit",
"version": "1.0.0",
"dependencies": {
+ "@expo/html-elements": "^0.4.2",
"@expo/vector-icons": "^14.0.2",
"@gluestack-ui/avatar": "^0.1.18",
"@gluestack-ui/button": "^1.0.8",
"@gluestack-ui/checkbox": "^0.1.33",
+ "@gluestack-ui/form-control": "^0.1.19",
"@gluestack-ui/icon": "^0.1.25",
+ "@gluestack-ui/input": "^0.1.32",
+ "@gluestack-ui/link": "^0.1.23",
"@gluestack-ui/nativewind-utils": "^1.0.26",
"@gluestack-ui/overlay": "^0.1.16",
"@gluestack-ui/toast": "^1.0.8",
@@ -20,40 +24,43 @@
"@react-navigation/native": "^7.0.14",
"@react-navigation/native-stack": "^7.2.0",
"@react-navigation/stack": "^7.1.1",
- "expo": "~52.0.24",
- "expo-blur": "~14.0.1",
- "expo-constants": "~17.0.3",
- "expo-font": "~13.0.2",
- "expo-haptics": "~14.0.0",
- "expo-linking": "~7.0.3",
+ "expo": "^52.0.24",
+ "expo-asset": "^11.0.2",
+ "expo-blur": "^14.0.1",
+ "expo-constants": "^17.0.3",
+ "expo-font": "^13.0.2",
+ "expo-haptics": "^14.0.0",
+ "expo-linking": "^7.0.3",
"expo-router": "~4.0.16",
- "expo-splash-screen": "~0.29.19",
- "expo-status-bar": "~2.0.0",
- "expo-symbols": "~0.2.0",
- "expo-system-ui": "~4.0.6",
- "expo-web-browser": "~14.0.1",
+ "expo-splash-screen": "^0.29.19",
+ "expo-status-bar": "^2.0.0",
+ "expo-symbols": "^0.2.0",
+ "expo-system-ui": "^4.0.6",
+ "expo-web-browser": "^14.0.1",
"nativewind": "^4.1.23",
"react": "18.3.1",
"react-dom": "18.3.1",
- "react-native": "0.76.5",
- "react-native-gesture-handler": "~2.20.2",
- "react-native-reanimated": "~3.16.1",
- "react-native-safe-area-context": "^4.14.1",
- "react-native-screens": "~4.4.0",
- "react-native-svg": "^15.11.0",
+ "react-native": "0.76.6",
+ "react-native-gesture-handler": "^2.20.2",
+ "react-native-reanimated": "^3.16.1",
+ "react-native-safe-area-context": "^4.12.0",
+ "react-native-screens": "^4.4.0",
+ "react-native-svg": "^15.8.0",
"react-native-vector-icons": "^10.2.0",
- "react-native-web": "~0.19.13",
+ "react-native-web": "^0.19.13",
"react-native-webview": "13.12.5",
"tailwindcss": "^3.4.17"
},
"devDependencies": {
"@babel/core": "^7.25.2",
"@types/jest": "^29.5.12",
- "@types/react": "~18.3.12",
- "@types/react-test-renderer": "^18.3.0",
+ "@types/react": "^18.3.12",
+ "@types/react-test-renderer": "^19.0.0",
+ "@types/validator": "^13.12.2",
"jest": "^29.2.1",
- "jest-expo": "~52.0.2",
- "react-test-renderer": "18.3.1",
+ "jest-expo": "^52.0.2",
+ "react-native-svg-transformer": "^1.5.0",
+ "react-test-renderer": "19.0.0",
"typescript": "^5.3.3"
}
},
@@ -111,9 +118,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz",
- "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
+ "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -150,13 +157,13 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
- "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
+ "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.26.3",
- "@babel/types": "^7.26.3",
+ "@babel/parser": "^7.26.5",
+ "@babel/types": "^7.26.5",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@@ -178,12 +185,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
- "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
+ "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.25.9",
+ "@babel/compat-data": "^7.26.5",
"@babel/helper-validator-option": "^7.25.9",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
@@ -303,9 +310,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
- "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -329,14 +336,14 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
- "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
+ "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
"license": "MIT",
"dependencies": {
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/traverse": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -499,12 +506,12 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
- "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz",
+ "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.3"
+ "@babel/types": "^7.26.5"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1023,13 +1030,13 @@
}
},
"node_modules/@babel/plugin-transform-flow-strip-types": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz",
- "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.26.5.tgz",
+ "integrity": "sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/plugin-syntax-flow": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/plugin-syntax-flow": "^7.26.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1134,12 +1141,12 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz",
- "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.5.tgz",
+ "integrity": "sha512-OHqczNm4NTQlW1ghrVY43FPoiRzbmzNVbcgVnMKZN/RQYezHUSdjACjaX50CD3B7UIAjv39+MlsrVDb3v741FA==",
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1452,14 +1459,14 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz",
- "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz",
+ "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==",
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.26.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/plugin-syntax-typescript": "^7.25.9"
},
@@ -1574,6 +1581,15 @@
"node": ">=6"
}
},
+ "node_modules/@babel/register/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/@babel/register/node_modules/semver": {
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
@@ -1610,16 +1626,16 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.26.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz",
- "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz",
+ "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.3",
- "@babel/parser": "^7.26.3",
+ "@babel/generator": "^7.26.5",
+ "@babel/parser": "^7.26.5",
"@babel/template": "^7.25.9",
- "@babel/types": "^7.26.3",
+ "@babel/types": "^7.26.5",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1629,16 +1645,16 @@
},
"node_modules/@babel/traverse--for-generate-function-map": {
"name": "@babel/traverse",
- "version": "7.26.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz",
- "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz",
+ "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.3",
- "@babel/parser": "^7.26.3",
+ "@babel/generator": "^7.26.5",
+ "@babel/parser": "^7.26.5",
"@babel/template": "^7.25.9",
- "@babel/types": "^7.26.3",
+ "@babel/types": "^7.26.5",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1647,9 +1663,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
- "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz",
+ "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
@@ -1691,29 +1707,29 @@
}
},
"node_modules/@expo/cli": {
- "version": "0.22.8",
- "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.8.tgz",
- "integrity": "sha512-MpHrfPKcHL+b1wwx+WiniEL5n33tl964tN8EW1K4okW3/tAPgbu3R00NZs6OExH9PZGQP8OKhCXhZttbK2jUnA==",
+ "version": "0.22.9",
+ "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.9.tgz",
+ "integrity": "sha512-GFW1+InbgTz0+10qWfoo5fyBU2DhhPuJkL4TUnG7GTq8lDlim88JLghJVbq0uAX/xDLcd326QnI0XONsUGSWrw==",
"license": "MIT",
"dependencies": {
"@0no-co/graphql.web": "^1.0.8",
"@babel/runtime": "^7.20.0",
"@expo/code-signing-certificates": "^0.0.5",
- "@expo/config": "~10.0.7",
- "@expo/config-plugins": "~9.0.13",
+ "@expo/config": "~10.0.8",
+ "@expo/config-plugins": "~9.0.14",
"@expo/devcert": "^1.1.2",
- "@expo/env": "~0.4.0",
- "@expo/image-utils": "^0.6.0",
- "@expo/json-file": "^9.0.0",
- "@expo/metro-config": "~0.19.8",
- "@expo/osascript": "^2.0.31",
- "@expo/package-manager": "^1.7.0",
- "@expo/plist": "^0.2.0",
- "@expo/prebuild-config": "^8.0.24",
+ "@expo/env": "~0.4.1",
+ "@expo/image-utils": "^0.6.4",
+ "@expo/json-file": "^9.0.1",
+ "@expo/metro-config": "~0.19.9",
+ "@expo/osascript": "^2.1.5",
+ "@expo/package-manager": "^1.7.1",
+ "@expo/plist": "^0.2.1",
+ "@expo/prebuild-config": "^8.0.25",
"@expo/rudder-sdk-node": "^1.1.1",
"@expo/spawn-async": "^1.7.2",
"@expo/xcpretty": "^4.3.0",
- "@react-native/dev-middleware": "0.76.5",
+ "@react-native/dev-middleware": "0.76.6",
"@urql/core": "^5.0.6",
"@urql/exchange-retry": "^1.3.0",
"accepts": "^1.3.8",
@@ -1795,15 +1811,15 @@
}
},
"node_modules/@expo/config": {
- "version": "10.0.7",
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.7.tgz",
- "integrity": "sha512-fS9xuxH3U9tuiXofwxrmsan8TfzlDXgPiX38SDMkq/AQctmRtWllD8GNHRIk9Bdz3vODeBv7vRVGKXPBYG72cQ==",
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.8.tgz",
+ "integrity": "sha512-RaKwi8e6PbkMilRexdsxObLMdQwxhY6mlgel+l/eW+IfIw8HEydSU0ERlzYUjlGJxHLHUXe4rC2vw8FEvaowyQ==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "~7.10.4",
- "@expo/config-plugins": "~9.0.13",
- "@expo/config-types": "^52.0.2",
- "@expo/json-file": "^9.0.0",
+ "@expo/config-plugins": "~9.0.14",
+ "@expo/config-types": "^52.0.3",
+ "@expo/json-file": "^9.0.1",
"deepmerge": "^4.3.1",
"getenv": "^1.0.0",
"glob": "^10.4.2",
@@ -1816,14 +1832,14 @@
}
},
"node_modules/@expo/config-plugins": {
- "version": "9.0.13",
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.13.tgz",
- "integrity": "sha512-9mSjuMoCijA0O4JONJwWXg+xaD4tVeVv7pXWQovnQGxorgMNgygOGEzGi9GXFMki8FJ1Zlt2gyXrcPFXiId7Hw==",
+ "version": "9.0.14",
+ "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.14.tgz",
+ "integrity": "sha512-Lx1ebV95rTFKKQmbu4wMPLz65rKn7mqSpfANdCx+KwRxuLY2JQls8V4h3lQjG6dW8NWf9qV5QaEFAgNB6VMyOQ==",
"license": "MIT",
"dependencies": {
- "@expo/config-types": "^52.0.2",
- "@expo/json-file": "~9.0.0",
- "@expo/plist": "^0.2.0",
+ "@expo/config-types": "^52.0.3",
+ "@expo/json-file": "~9.0.1",
+ "@expo/plist": "^0.2.1",
"@expo/sdk-runtime-versions": "^1.0.0",
"chalk": "^4.1.2",
"debug": "^4.3.5",
@@ -1850,9 +1866,9 @@
}
},
"node_modules/@expo/config-types": {
- "version": "52.0.2",
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.2.tgz",
- "integrity": "sha512-4hYwnaCxOLlXXF1TE17RY+GU1CyBqzRx7s13VUDhU1PQ8Zr9/kzGoJI0McmfayncO9RIeSqeDWO6dELZWk/0uw==",
+ "version": "52.0.3",
+ "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.3.tgz",
+ "integrity": "sha512-muxvuARmbysH5OGaiBRlh1Y6vfdmL56JtpXxB+y2Hfhu0ezG1U4FjZYBIacthckZPvnDCcP3xIu1R+eTo7/QFA==",
"license": "MIT"
},
"node_modules/@expo/config/node_modules/@babel/code-frame": {
@@ -1906,9 +1922,9 @@
}
},
"node_modules/@expo/env": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.4.0.tgz",
- "integrity": "sha512-g2JYFqck3xKIwJyK+8LxZ2ENZPWtRgjFWpeht9abnKgzXVXBeSNECFBkg+WQjQocSIdxXhEWM6hz4ZAe7Tc4ng==",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.4.1.tgz",
+ "integrity": "sha512-oDtbO3i9yXD1nx93acWiPTWGljJ3vABn35x1NAbqtQ2JL6mFOcRcArt1dwi4imZyLnG4VCcjabT9irj+LgYntw==",
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
@@ -1919,9 +1935,9 @@
}
},
"node_modules/@expo/fingerprint": {
- "version": "0.11.6",
- "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.6.tgz",
- "integrity": "sha512-hlVIfMEJYZIqIFMjeGRN5GhK/h6vJ3M4QVc1ZD8F0Bh7gMeI+jZkEyZdL5XT29jergQrksP638e2qFwgrGTw/w==",
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.7.tgz",
+ "integrity": "sha512-2rfYVS4nqWmOPQk+AL5GPfPSawbqqmI5mL++bxAhWADt+d+fjoQYfIrGtjZxQ30f9o/a1PrRPVSuh2j09+diVg==",
"license": "MIT",
"dependencies": {
"@expo/spawn-async": "^1.7.2",
@@ -1951,10 +1967,16 @@
"node": ">=10"
}
},
+ "node_modules/@expo/html-elements": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@expo/html-elements/-/html-elements-0.4.2.tgz",
+ "integrity": "sha512-lNioCgdtOrCMMqzHY+PCTdyuWBTU4yMBlOzPSkS4YFIWt9bq0zexM2ZJkpybTXmowNdE3zHO93xxAmiA2yDi2w==",
+ "license": "MIT"
+ },
"node_modules/@expo/image-utils": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.3.tgz",
- "integrity": "sha512-v/JbCKBrHeudxn1gN1TgfPE/pWJSlLPrl29uXJBgrJFQVkViQvUHQNDhaS+UEa9wYI5HHh7XYmtzAehyG4L+GA==",
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.4.tgz",
+ "integrity": "sha512-L++1PBzSvf5iYc6UHJ8Db8GcYNkfLDw+a+zqEFBQ3xqRXP/muxb/O7wuiMFlXrj/cfkx4e0U+z1a4ceV0A7S7Q==",
"license": "MIT",
"dependencies": {
"@expo/spawn-async": "^1.7.2",
@@ -2027,9 +2049,9 @@
}
},
"node_modules/@expo/json-file": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.0.tgz",
- "integrity": "sha512-M+55xFVrFzDcgMDf+52lPDLjKB5xwRfStWlv/b/Vu2OLgxGZLWpxoPYjlRoHqxjPbCQIi2ZCbobK+0KuNhsELg==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.1.tgz",
+ "integrity": "sha512-ZVPhbbEBEwafPCJ0+kI25O2Iivt3XKHEKAADCml1q2cmOIbQnKgLyn8DpOJXqWEyRQr/VWS+hflBh8DU2YFSqg==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "~7.10.4",
@@ -2047,18 +2069,18 @@
}
},
"node_modules/@expo/metro-config": {
- "version": "0.19.8",
- "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.8.tgz",
- "integrity": "sha512-dVAOetouQYuOTEJ2zR0OTLNPOH6zPkeEt5fY53TK0Wxi1QmtsmH6vEWg05U4zkSJ6f1aXmQ0Za77R8QxuukESA==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.9.tgz",
+ "integrity": "sha512-JAsLWhFQqwLH0KsI4OMbPXsKFji5KJEmsi+/02Sz1GCT17YrjRmv1fZ91regUS/FUH2Y/PDAE/+2ulrTgMeG7A==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.5",
"@babel/parser": "^7.20.0",
"@babel/types": "^7.20.0",
- "@expo/config": "~10.0.4",
- "@expo/env": "~0.4.0",
- "@expo/json-file": "~9.0.0",
+ "@expo/config": "~10.0.8",
+ "@expo/env": "~0.4.1",
+ "@expo/json-file": "~9.0.1",
"@expo/spawn-async": "^1.7.2",
"chalk": "^4.1.0",
"debug": "^4.3.2",
@@ -2118,9 +2140,9 @@
}
},
"node_modules/@expo/osascript": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.4.tgz",
- "integrity": "sha512-LcPjxJ5FOFpqPORm+5MRLV0CuYWMthJYV6eerF+lQVXKlvgSn3EOqaHC3Vf3H+vmB0f6G4kdvvFtg40vG4bIhA==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.5.tgz",
+ "integrity": "sha512-Cp7YF7msGiTAIbFdzNovwHBfecdMLVL5XzSqq4xQz72ALFCQ3uSIUXRph1QV2r61ugH7Yem0gY8yi7RcDlI4qg==",
"license": "MIT",
"dependencies": {
"@expo/spawn-async": "^1.7.2",
@@ -2131,12 +2153,12 @@
}
},
"node_modules/@expo/package-manager": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.7.0.tgz",
- "integrity": "sha512-yWn5TIjd42wLHZjNtdZkvCkcxqUGxlI4YHb+bQmgm3tWZ8aBHnLhPb0rgU8+hVHCofmRvVUXfVZv8Uh+kkLXgw==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.7.1.tgz",
+ "integrity": "sha512-DKbELrTOdl7U3KT0C07Aka9P+sUP3LL+1UTKf1KmLx2x2gPH1IC+c68N7iQlwNt+yA37qIw6/vKoqyTGu5EL9g==",
"license": "MIT",
"dependencies": {
- "@expo/json-file": "^9.0.0",
+ "@expo/json-file": "^9.0.1",
"@expo/spawn-async": "^1.7.2",
"ansi-regex": "^5.0.0",
"chalk": "^4.0.0",
@@ -2158,9 +2180,9 @@
"license": "MIT"
},
"node_modules/@expo/plist": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.0.tgz",
- "integrity": "sha512-F/IZJQaf8OIVnVA6XWUeMPC3OH6MV00Wxf0WC0JhTQht2QgjyHUa3U5Gs3vRtDq8tXNsZneOQRDVwpaOnd4zTQ==",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.1.tgz",
+ "integrity": "sha512-9TaXGuNxa0LQwHQn4rYiU6YaERv6dPnQgsdKWq2rKKTr6LWOtGNQCi/yOk/HBLeZSxBm59APT5/6x60uRvr0Mg==",
"license": "MIT",
"dependencies": {
"@xmldom/xmldom": "~0.7.7",
@@ -2169,17 +2191,17 @@
}
},
"node_modules/@expo/prebuild-config": {
- "version": "8.0.24",
- "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.24.tgz",
- "integrity": "sha512-zxbKW+oHn0/QwKaShjbxD7tv+5WtK2+C5ZJTHztyXJXrBP6BOL5dK4lP2djQVzpHYU1p6ZzKFvp9d1bW/+S32Q==",
+ "version": "8.0.25",
+ "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.25.tgz",
+ "integrity": "sha512-xYHV8eiydZEDedf2AGaOFRFwcGlaSzrqQH94dwX42urNCU03FO0RUb7yPp4nkb7WNFg5Ov6PDsV7ES+YwzNgYQ==",
"license": "MIT",
"dependencies": {
- "@expo/config": "~10.0.7",
- "@expo/config-plugins": "~9.0.13",
- "@expo/config-types": "^52.0.2",
- "@expo/image-utils": "^0.6.0",
- "@expo/json-file": "^9.0.0",
- "@react-native/normalize-colors": "0.76.5",
+ "@expo/config": "~10.0.8",
+ "@expo/config-plugins": "~9.0.14",
+ "@expo/config-types": "^52.0.3",
+ "@expo/image-utils": "^0.6.4",
+ "@expo/json-file": "^9.0.1",
+ "@react-native/normalize-colors": "0.76.6",
"debug": "^4.3.1",
"fs-extra": "^9.0.0",
"resolve-from": "^5.0.0",
@@ -2466,6 +2488,35 @@
"react-dom": ">=16"
}
},
+ "node_modules/@gluestack-ui/input": {
+ "version": "0.1.32",
+ "resolved": "https://registry.npmjs.org/@gluestack-ui/input/-/input-0.1.32.tgz",
+ "integrity": "sha512-RWtqpo0p37GYjwBTiMf4fpvKYe32OMa6lxFbDqPqEX1m994D9QwP7iWnDWA/9nr/Mf3eET6dMWbH4/eL4oZr8Q==",
+ "dependencies": {
+ "@gluestack-ui/form-control": "^0.1.19",
+ "@gluestack-ui/utils": "^0.1.14",
+ "@react-native-aria/focus": "^0.2.9",
+ "@react-native-aria/interactions": "0.2.13"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
+ "node_modules/@gluestack-ui/link": {
+ "version": "0.1.23",
+ "resolved": "https://registry.npmjs.org/@gluestack-ui/link/-/link-0.1.23.tgz",
+ "integrity": "sha512-j/YIdlq6V+Ad8c6X1EVL4jUI/Zo/L9S6WLZYPKNArlidRxjEME7d2maIl2O20ZcRSOHvee2VAf7HHNem+Jn+AA==",
+ "dependencies": {
+ "@gluestack-ui/utils": "^0.1.14",
+ "@react-native-aria/focus": "^0.2.9",
+ "@react-native-aria/interactions": "0.2.13"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
"node_modules/@gluestack-ui/nativewind-utils": {
"version": "1.0.26",
"resolved": "https://registry.npmjs.org/@gluestack-ui/nativewind-utils/-/nativewind-utils-1.0.26.tgz",
@@ -3516,30 +3567,30 @@
}
},
"node_modules/@react-native/assets-registry": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.5.tgz",
- "integrity": "sha512-MN5dasWo37MirVcKWuysRkRr4BjNc81SXwUtJYstwbn8oEkfnwR9DaqdDTo/hHOnTdhafffLIa2xOOHcjDIGEw==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.6.tgz",
+ "integrity": "sha512-YI8HoReYiIwdFQs+k9Q9qpFTnsyYikZxgs/UVtVbhKixXDQF6F9LLvj2naOx4cfV+RGybNKxwmDl1vUok/dRFQ==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@react-native/babel-plugin-codegen": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.5.tgz",
- "integrity": "sha512-xe7HSQGop4bnOLMaXt0aU+rIatMNEQbz242SDl8V9vx5oOTI0VbZV9yLy6yBc6poUlYbcboF20YVjoRsxX4yww==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.6.tgz",
+ "integrity": "sha512-yFC9I/aDBOBz3ZMlqKn2NY/mDUtCksUNZ7AQmBiTAeVTUP0ujEjE0hTOx5Qd+kok7A7hwZEX87HdSgjiJZfr5g==",
"license": "MIT",
"dependencies": {
- "@react-native/codegen": "0.76.5"
+ "@react-native/codegen": "0.76.6"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@react-native/babel-preset": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.5.tgz",
- "integrity": "sha512-1Nu5Um4EogOdppBLI4pfupkteTjWfmI0hqW8ezWTg7Bezw0FtBj8yS8UYVd3wTnDFT9A5mA2VNoNUqomJnvj2A==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.6.tgz",
+ "integrity": "sha512-ojlVWY6S/VE/nb9hIRetPMTsW9ZmGb2R3dnToEXAtQQDz41eHMHXbkw/k2h0THp6qhas25ruNvn3N5n2o+lBzg==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.25.2",
@@ -3583,7 +3634,7 @@
"@babel/plugin-transform-typescript": "^7.25.2",
"@babel/plugin-transform-unicode-regex": "^7.24.7",
"@babel/template": "^7.25.0",
- "@react-native/babel-plugin-codegen": "0.76.5",
+ "@react-native/babel-plugin-codegen": "0.76.6",
"babel-plugin-syntax-hermes-parser": "^0.25.1",
"babel-plugin-transform-flow-enums": "^0.0.2",
"react-refresh": "^0.14.0"
@@ -3596,9 +3647,9 @@
}
},
"node_modules/@react-native/codegen": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.5.tgz",
- "integrity": "sha512-FoZ9VRQ5MpgtDAnVo1rT9nNRfjnWpE40o1GeJSDlpUMttd36bVXvsDm8W/NhX8BKTWXSX+CPQJsRcvN1UPYGKg==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.6.tgz",
+ "integrity": "sha512-BABb3e5G/+hyQYEYi0AODWh2km2d8ERoASZr6Hv90pVXdUHRYR+yxCatX7vSd9rnDUYndqRTzD0hZWAucPNAKg==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
@@ -3639,13 +3690,13 @@
}
},
"node_modules/@react-native/community-cli-plugin": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.5.tgz",
- "integrity": "sha512-3MKMnlU0cZOWlMhz5UG6WqACJiWUrE3XwBEumzbMmZw3Iw3h+fIsn+7kLLE5EhzqLt0hg5Y4cgYFi4kOaNgq+g==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.6.tgz",
+ "integrity": "sha512-nETlc/+U5cESVluzzgN0OcVfcoMijGBaDWzOaJhoYUodcuqnqtu75XsSEc7yzlYjwNQG+vF83mu9CQGezruNMA==",
"license": "MIT",
"dependencies": {
- "@react-native/dev-middleware": "0.76.5",
- "@react-native/metro-babel-transformer": "0.76.5",
+ "@react-native/dev-middleware": "0.76.6",
+ "@react-native/metro-babel-transformer": "0.76.6",
"chalk": "^4.0.0",
"execa": "^5.1.1",
"invariant": "^2.2.4",
@@ -3770,22 +3821,22 @@
"license": "ISC"
},
"node_modules/@react-native/debugger-frontend": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.5.tgz",
- "integrity": "sha512-5gtsLfBaSoa9WP8ToDb/8NnDBLZjv4sybQQj7rDKytKOdsXm3Pr2y4D7x7GQQtP1ZQRqzU0X0OZrhRz9xNnOqA==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.6.tgz",
+ "integrity": "sha512-kP97xMQjiANi5/lmf8MakS7d8FTJl+BqYHQMqyvNiY+eeWyKnhqW2GL2v3eEUBAuyPBgJGivuuO4RvjZujduJg==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=18"
}
},
"node_modules/@react-native/dev-middleware": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.5.tgz",
- "integrity": "sha512-f8eimsxpkvMgJia7POKoUu9uqjGF6KgkxX4zqr/a6eoR1qdEAWUd6PonSAqtag3PAqvEaJpB99gLH2ZJI1nDGg==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.6.tgz",
+ "integrity": "sha512-1bAyd2/X48Nzb45s5l2omM75vy764odx/UnDs4sJfFCuK+cupU4nRPgl0XWIqgdM/2+fbQ3E4QsVS/WIKTFxvQ==",
"license": "MIT",
"dependencies": {
"@isaacs/ttlcache": "^1.4.1",
- "@react-native/debugger-frontend": "0.76.5",
+ "@react-native/debugger-frontend": "0.76.6",
"chrome-launcher": "^0.15.2",
"chromium-edge-launcher": "^0.2.0",
"connect": "^3.6.5",
@@ -3825,31 +3876,31 @@
}
},
"node_modules/@react-native/gradle-plugin": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.5.tgz",
- "integrity": "sha512-7KSyD0g0KhbngITduC8OABn0MAlJfwjIdze7nA4Oe1q3R7qmAv+wQzW+UEXvPah8m1WqFjYTkQwz/4mK3XrQGw==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.6.tgz",
+ "integrity": "sha512-sDzpf4eiynryoS6bpYCweGoxSmWgCSx9lzBoxIIW+S6siyGiTaffzZHWCm8mIn9UZsSPlEO37q62ggnR9Zu/OA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@react-native/js-polyfills": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.5.tgz",
- "integrity": "sha512-ggM8tcKTcaqyKQcXMIvcB0vVfqr9ZRhWVxWIdiFO1mPvJyS6n+a+lLGkgQAyO8pfH0R1qw6K9D0nqbbDo865WQ==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.6.tgz",
+ "integrity": "sha512-cDD7FynxWYxHkErZzAJtzPGhJ13JdOgL+R0riTh0hCovOfIUz9ItffdLQv2nx48lnvMTQ+HZXMnGOZnsFCNzQw==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@react-native/metro-babel-transformer": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.5.tgz",
- "integrity": "sha512-Cm9G5Sg5BDty3/MKa3vbCAJtT3YHhlEaPlQALLykju7qBS+pHZV9bE9hocfyyvc5N/osTIGWxG5YOfqTeMu1oQ==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.6.tgz",
+ "integrity": "sha512-xSBi9jPliThu5HRSJvluqUlDOLLEmf34zY/U7RDDjEbZqC0ufPcPS7c5XsSg0GDPiXc7lgjBVesPZsKFkoIBgA==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.25.2",
- "@react-native/babel-preset": "0.76.5",
+ "@react-native/babel-preset": "0.76.6",
"hermes-parser": "0.23.1",
"nullthrows": "^1.1.1"
},
@@ -3861,15 +3912,15 @@
}
},
"node_modules/@react-native/normalize-colors": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.5.tgz",
- "integrity": "sha512-6QRLEok1r55gLqj+94mEWUENuU5A6wsr2OoXpyq/CgQ7THWowbHtru/kRGRr6o3AQXrVnZheR60JNgFcpNYIug==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.6.tgz",
+ "integrity": "sha512-1n4udXH2Cla31iA/8eLRdhFHpYUYK1NKWCn4m1Sr9L4SarWKAYuRFliK1fcLvPPALCFoFlWvn8I0ekdUOHMzDQ==",
"license": "MIT"
},
"node_modules/@react-native/virtualized-lists": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.5.tgz",
- "integrity": "sha512-M/fW1fTwxrHbcx0OiVOIxzG6rKC0j9cR9Csf80o77y1Xry0yrNPpAlf8D1ev3LvHsiAUiRNFlauoPtodrs2J1A==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.6.tgz",
+ "integrity": "sha512-0HUWVwJbRq1BWFOu11eOWGTSmK9nMHhoMPyoI27wyWcl/nqUx7HOxMbRVq0DsTCyATSMPeF+vZ6o1REapcNWKw==",
"license": "MIT",
"dependencies": {
"invariant": "^2.2.4",
@@ -4247,28 +4298,436 @@
"join-component": "^1.1.0"
}
},
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "license": "MIT"
- },
- "node_modules/@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "license": "BSD-3-Clause",
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "license": "MIT"
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
+ "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
+ "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
+ "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
+ "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz",
+ "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-svg-component": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
+ "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-preset": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz",
+ "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "8.1.0",
+ "@svgr/babel-plugin-transform-svg-component": "8.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/core": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
+ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
+ "camelcase": "^6.2.0",
+ "cosmiconfig": "^8.1.3",
+ "snake-case": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/core/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,
+ "license": "Python-2.0"
+ },
+ "node_modules/@svgr/core/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@svgr/core/node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@svgr/core/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,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@svgr/core/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,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@svgr/core/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@svgr/hast-util-to-babel-ast": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
+ "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.21.3",
+ "entities": "^4.4.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/plugin-jsx": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz",
+ "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
+ "@svgr/hast-util-to-babel-ast": "8.0.0",
+ "svg-parser": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@svgr/plugin-svgo": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz",
+ "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cosmiconfig": "^8.1.3",
+ "deepmerge": "^4.3.1",
+ "svgo": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@svgr/plugin-svgo/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,
+ "license": "Python-2.0"
+ },
+ "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@svgr/plugin-svgo/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,
+ "license": "MIT",
"dependencies": {
- "type-detect": "4.0.8"
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "license": "BSD-3-Clause",
+ "node_modules/@svgr/plugin-svgo/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,
+ "license": "MIT",
"dependencies": {
- "@sinonjs/commons": "^3.0.0"
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@svgr/plugin-svgo/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/@swc/helpers": {
@@ -4290,6 +4749,16 @@
"node": ">= 10"
}
},
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -4442,13 +4911,13 @@
}
},
"node_modules/@types/react-test-renderer": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.1.tgz",
- "integrity": "sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-19.0.0.tgz",
+ "integrity": "sha512-qDVnNybqFm2eZKJ4jD34EvRd6VHD67KjgnWaEMM0Id9L22EpWe3nOSVKHWL1XWRCxUWe3lhXwlEeCKD1BlJCQA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/react": "^18"
+ "@types/react": "*"
}
},
"node_modules/@types/stack-utils": {
@@ -4476,6 +4945,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/validator": {
+ "version": "13.12.2",
+ "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz",
+ "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/yargs": {
"version": "17.0.33",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
@@ -5044,9 +5520,9 @@
}
},
"node_modules/babel-preset-expo": {
- "version": "12.0.5",
- "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.5.tgz",
- "integrity": "sha512-rEFjN1CoMYEWSRpE+Hvw+zv+nLbDXyRM8vGAoYJtFPJovHupX2VRWPVaqtHlnMTrzsGFQDf4WfQJrjAQ9e2hAQ==",
+ "version": "12.0.6",
+ "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.6.tgz",
+ "integrity": "sha512-az3H7gDVo0wxNBAFES8h5vLLWE8NPGkD9g5P962hDEOqZUdyPacb9MOzicypeLmcq9zQWr6E3iVtEHoNagCTTQ==",
"license": "MIT",
"dependencies": {
"@babel/plugin-proposal-decorators": "^7.12.9",
@@ -5055,7 +5531,7 @@
"@babel/plugin-transform-parameters": "^7.22.15",
"@babel/preset-react": "^7.22.15",
"@babel/preset-typescript": "^7.23.0",
- "@react-native/babel-preset": "0.76.5",
+ "@react-native/babel-preset": "0.76.6",
"babel-plugin-react-native-web": "~0.19.13",
"react-refresh": "^0.14.2"
},
@@ -6135,6 +6611,42 @@
"node": ">=4"
}
},
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
"node_modules/cssom": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
@@ -6499,6 +7011,17 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/dotenv": {
"version": "16.4.7",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
@@ -6905,26 +7428,26 @@
}
},
"node_modules/expo": {
- "version": "52.0.24",
- "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.24.tgz",
- "integrity": "sha512-g9o7Hi1Zqr5MHNR76sMVm3oEwBFWgAozx4CMbVIgJE+wq8Gu0WZyOFOL6NswR5aZs+Cx0CK5hZEXwDtLQql8WQ==",
+ "version": "52.0.25",
+ "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.25.tgz",
+ "integrity": "sha512-BWHveMyDSST7vuGNn8zbrSGboJdvXDE9auUEkFa14ETAWRtsghYnZ0KmjOEQNxNmrBHzct/JgZ8efh5sJGd0xA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "0.22.8",
- "@expo/config": "~10.0.7",
- "@expo/config-plugins": "~9.0.13",
- "@expo/fingerprint": "0.11.6",
- "@expo/metro-config": "0.19.8",
+ "@expo/cli": "0.22.9",
+ "@expo/config": "~10.0.8",
+ "@expo/config-plugins": "~9.0.14",
+ "@expo/fingerprint": "0.11.7",
+ "@expo/metro-config": "0.19.9",
"@expo/vector-icons": "^14.0.0",
- "babel-preset-expo": "~12.0.5",
- "expo-asset": "~11.0.1",
- "expo-constants": "~17.0.3",
- "expo-file-system": "~18.0.6",
- "expo-font": "~13.0.2",
- "expo-keep-awake": "~14.0.1",
- "expo-modules-autolinking": "2.0.4",
- "expo-modules-core": "2.1.2",
+ "babel-preset-expo": "~12.0.6",
+ "expo-asset": "~11.0.2",
+ "expo-constants": "~17.0.4",
+ "expo-file-system": "~18.0.7",
+ "expo-font": "~13.0.3",
+ "expo-keep-awake": "~14.0.2",
+ "expo-modules-autolinking": "2.0.5",
+ "expo-modules-core": "2.1.3",
"fbemitter": "^3.0.0",
"web-streams-polyfill": "^3.3.2",
"whatwg-url-without-unicode": "8.0.0-3"
@@ -6952,13 +7475,13 @@
}
},
"node_modules/expo-asset": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.1.tgz",
- "integrity": "sha512-WatvD7JVC89EsllXFYcS/rji3ajVzE2B/USo0TqedsETixwyVCQfrrvCdCPQyuKghrxVNEj8bQ/Qbea/RZLYjg==",
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.2.tgz",
+ "integrity": "sha512-We3Td5WsNsNQyXoheLnuwic6JCOt/pqXqIIyWaZ3z/PeHrA+SwoQdI18MjDhkudLK08tbIVyDSUW8IJHXa04eg==",
"license": "MIT",
"dependencies": {
- "@expo/image-utils": "^0.6.0",
- "expo-constants": "~17.0.0",
+ "@expo/image-utils": "^0.6.4",
+ "expo-constants": "~17.0.4",
"invariant": "^2.2.4",
"md5-file": "^3.2.3"
},
@@ -6969,9 +7492,9 @@
}
},
"node_modules/expo-blur": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/expo-blur/-/expo-blur-14.0.1.tgz",
- "integrity": "sha512-3Q6jFBLbY8n2vwk28ycUC+eIlVhnlqwkXUKk/Lfaj+SGV3AZMQyrixe7OYwJdUfwqETBrnYYMB6uNrJzOSbG+g==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/expo-blur/-/expo-blur-14.0.2.tgz",
+ "integrity": "sha512-6ZStKz/7F3nWfmfdeAzhJeNAtxPQAetU1FQ742XHX9uEfZjhq00CrAjyZNx2+nXpE3tGFQtXyhEE5hQJwug8yQ==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
@@ -6980,13 +7503,13 @@
}
},
"node_modules/expo-constants": {
- "version": "17.0.3",
- "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.3.tgz",
- "integrity": "sha512-lnbcX2sAu8SucHXEXxSkhiEpqH+jGrf+TF+MO6sHWIESjwOUVVYlT8qYdjR9xbxWmqFtrI4KV44FkeJf2DaFjQ==",
+ "version": "17.0.4",
+ "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.4.tgz",
+ "integrity": "sha512-5c0VlZycmDyQUCMCr3Na3cpHAsVJJ+5o6KkkD4rmATQZ0++Xp/S2gpnjWyEo2riRmO91vxoyHwmAySXuktJddQ==",
"license": "MIT",
"dependencies": {
- "@expo/config": "~10.0.4",
- "@expo/env": "~0.4.0"
+ "@expo/config": "~10.0.8",
+ "@expo/env": "~0.4.1"
},
"peerDependencies": {
"expo": "*",
@@ -6994,9 +7517,9 @@
}
},
"node_modules/expo-file-system": {
- "version": "18.0.6",
- "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.6.tgz",
- "integrity": "sha512-gGEwIJCXV3/wpIJ/wRyhmieLOSAY7HeFFjb+wEfHs04aE63JYR+rXXV4b7rBpEh1ZgNV9U91zfet/iQG7J8HBQ==",
+ "version": "18.0.7",
+ "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.7.tgz",
+ "integrity": "sha512-6PpbQfogMXdzOsJzlJayy5qf40IfIHhudtAOzr32RlRYL4Hkmk3YcR9jG0PWQ0rklJfAhbAdP63yOcN+wDgzaA==",
"license": "MIT",
"dependencies": {
"web-streams-polyfill": "^3.3.2"
@@ -7007,9 +7530,9 @@
}
},
"node_modules/expo-font": {
- "version": "13.0.2",
- "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.0.2.tgz",
- "integrity": "sha512-H9FaXM7ZW5+EfV38w80BgJG3H17kB7CuVXwHoiszIYyoPfWz9bWesFe4QwNZjTq3pzKes28sSd8irFuflIrSIA==",
+ "version": "13.0.3",
+ "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.0.3.tgz",
+ "integrity": "sha512-9IdYz+A+b3KvuCYP7DUUXF4VMZjPU+IsvAnLSVJ2TfP6zUD2JjZFx3jeo/cxWRkYk/aLj5+53Te7elTAScNl4Q==",
"license": "MIT",
"dependencies": {
"fontfaceobserver": "^2.1.0"
@@ -7020,18 +7543,18 @@
}
},
"node_modules/expo-haptics": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-14.0.0.tgz",
- "integrity": "sha512-5tYJN+2axYF22BtG1elBQAV1aZPUOCtr9sItClfm4jDoekGiPCxZG/nylcA3DVh2bUHMSll4Y98qjFFFhwZ1Cw==",
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-14.0.1.tgz",
+ "integrity": "sha512-V81FZ7xRUfqM6uSI6FA1KnZ+QpEKnISqafob/xEfcx1ymwhm4V3snuLWWFjmAz+XaZQTqlYa8z3QbqEXz7G63w==",
"license": "MIT",
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-keep-awake": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.0.1.tgz",
- "integrity": "sha512-c5mGCAIk2YM+Vsdy90BlEJ4ZX+KG5Au9EkJUIxXWlpnuKmDAJ3N+5nEZ7EUO1ZTheqoSBeAo4jJ8rTWPU+JXdw==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.0.2.tgz",
+ "integrity": "sha512-71XAMnoWjKZrN8J7Q3+u0l9Ytp4OfhNAYz8BCWF1/9aFUw09J3I7Z5DuI3MUsVMa/KWi+XhG+eDUFP8cVA19Uw==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
@@ -7039,12 +7562,12 @@
}
},
"node_modules/expo-linking": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-7.0.3.tgz",
- "integrity": "sha512-YiDacNzeQZd/bdOwGyi+YlawM4GGbcSRkuFCpDGIK7D1KUGqLinBHwJvxUMb9Zert2Ois5IHtmZaZ1et6g229g==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-7.0.4.tgz",
+ "integrity": "sha512-i+QaFc2zwOoq/ajePVWC+op3cOKC6nd6Wj/BJtukU71byTAbxDhbi+3m0ZFbh2i1/v/iIXRqrl3PvQcKNklPkw==",
"license": "MIT",
"dependencies": {
- "expo-constants": "~17.0.0",
+ "expo-constants": "~17.0.4",
"invariant": "^2.2.4"
},
"peerDependencies": {
@@ -7053,9 +7576,9 @@
}
},
"node_modules/expo-modules-autolinking": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.0.4.tgz",
- "integrity": "sha512-e0p+19NhmD50U7s7BV7kWIypWmTNC9n/VlJKlXS05hM/zX7pe6JKmXyb+BFnXJq3SLBalLCUY0tu2gEUF3XeVg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.0.5.tgz",
+ "integrity": "sha512-z1aAa7OtnAXZRFwn/CSgr9qSclW0mepGRJzcjZjyHL49u3VWmAHaPLl6S5vVGSX3sTYsFjKJ7ioCCye3tNdeUg==",
"license": "MIT",
"dependencies": {
"@expo/spawn-async": "^1.7.2",
@@ -7108,9 +7631,9 @@
}
},
"node_modules/expo-modules-core": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.1.2.tgz",
- "integrity": "sha512-0OhMU5S8zf9c/CRh1MwiXfOInI9wzz6yiIh5RuR/9J7N6xHRum68hInsPbaSc1UQpo08ZZLM4MPsbpoNRUoqIg==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.1.3.tgz",
+ "integrity": "sha512-DkSEr7q/SobjmCAo70833+xl0liShEFDHuC/YzXmHoDRxYHJaZCNc9uVBqjMeRfPVWp+4Rj9hF/gNvfad7vy0g==",
"license": "MIT",
"dependencies": {
"invariant": "^2.2.4"
@@ -7170,21 +7693,21 @@
}
},
"node_modules/expo-splash-screen": {
- "version": "0.29.19",
- "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.29.19.tgz",
- "integrity": "sha512-tknx8oWl8c8VO8zXYYwF38oKjuLHvWwxK61pDyr73I6lflJ0/p81LSb5x53OEsyzr+H69y/RHvVQnWKu+RFfBg==",
+ "version": "0.29.20",
+ "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.29.20.tgz",
+ "integrity": "sha512-6CkKHyfPREhTL4/NcAI1BQqAMo+qv8K5Kt1s+jQCE8LCweX203BWMDYPu5padBnlYfVDAs7O4CFAe3cyaEDSjA==",
"license": "MIT",
"dependencies": {
- "@expo/prebuild-config": "^8.0.24"
+ "@expo/prebuild-config": "^8.0.25"
},
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-status-bar": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-2.0.0.tgz",
- "integrity": "sha512-vxxdpvpNDMTEc5uTiIrbTvySKKUsOACmfl8OZuUdjNle05oGqwtq3v5YObwym/njSByjoyuZX8UpXBZnxvarwQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-2.0.1.tgz",
+ "integrity": "sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==",
"license": "MIT",
"peerDependencies": {
"react": "*",
@@ -7192,9 +7715,9 @@
}
},
"node_modules/expo-symbols": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/expo-symbols/-/expo-symbols-0.2.0.tgz",
- "integrity": "sha512-9ci+JBc03e3UvRcdal219FYg5ot7oFWMuyrUwIqI47IoIDUijKn10iuT7T6RjpLtBwHgGvKUK4tue/CiJ+8KeQ==",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/expo-symbols/-/expo-symbols-0.2.1.tgz",
+ "integrity": "sha512-7MchQEfEYq+BDGM4r7bBh0GbgoAemnW+TEiFb3QQc/D1nYuNMIBzK7KKhjgWzi1pRiPX4TIJgAcj2R+WN23s5w==",
"license": "MIT",
"dependencies": {
"sf-symbols-typescript": "^2.0.0"
@@ -7204,12 +7727,12 @@
}
},
"node_modules/expo-system-ui": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-4.0.6.tgz",
- "integrity": "sha512-JWmw0aaNIB8YxA6bXgH6nClyledZaAG5VNzoRvmXT4+j3MY4waAHSSSdVV71bUgjchT/2KOAcibZ/EeosJONug==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-4.0.7.tgz",
+ "integrity": "sha512-x1VDoE7J8m4wxTgWyUBEYqsf1KabIg64dOLzYiZjg0cWOE6o6kX2Mg6n3abVWEEC01WhZBoo9+Urcce/6ZJ3tg==",
"license": "MIT",
"dependencies": {
- "@react-native/normalize-colors": "0.76.5",
+ "@react-native/normalize-colors": "0.76.6",
"debug": "^4.3.2"
},
"peerDependencies": {
@@ -7224,9 +7747,9 @@
}
},
"node_modules/expo-web-browser": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-14.0.1.tgz",
- "integrity": "sha512-QM9F3ie+UyIOoBvqFmT6CZojb1vMc2H+7ZlMT5dEu1PL2jtYyOeK2hLfbt/EMt7CBm/w+P29H9W9Y9gdebOkuQ==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-14.0.2.tgz",
+ "integrity": "sha512-Hncv2yojhTpHbP6SGWARBFdl7P6wBHc1O8IKaNsH0a/IEakq887o1eRhLxZ5IwztPQyRDhpqHdgJ+BjWolOnwA==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
@@ -7485,6 +8008,15 @@
"node": ">=4"
}
},
+ "node_modules/find-cache-dir/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/find-cache-dir/node_modules/pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -8519,9 +9051,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==",
"license": "MIT"
},
"node_modules/isexe": {
@@ -9011,14 +9543,14 @@
}
},
"node_modules/jest-expo": {
- "version": "52.0.2",
- "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-52.0.2.tgz",
- "integrity": "sha512-6xV/+IRw93Org1UlgIqu89Ex3vuPRozD5VqTS95AonHMgjb0XTHHhMmn+TdR1d3i3ziy7JFbWAMoBLwminIalw==",
+ "version": "52.0.3",
+ "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-52.0.3.tgz",
+ "integrity": "sha512-z2gptekrQ0FIichvRhrES31X9twtCCTzu00sWnPyFaQuWQdoyZiCj2WFPqVrpgIgNYLFIEGhc0VP9rUT9johJw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@expo/config": "~10.0.4",
- "@expo/json-file": "^9.0.0",
+ "@expo/config": "~10.0.8",
+ "@expo/json-file": "^9.0.1",
"@jest/create-cache-key-function": "^29.2.1",
"@jest/globals": "^29.2.1",
"babel-jest": "^29.2.1",
@@ -9043,23 +9575,19 @@
"react-native": "*"
}
},
- "node_modules/jest-expo/node_modules/react-server-dom-webpack": {
- "version": "19.0.0-rc-6230622a1a-20240610",
- "resolved": "https://registry.npmjs.org/react-server-dom-webpack/-/react-server-dom-webpack-19.0.0-rc-6230622a1a-20240610.tgz",
- "integrity": "sha512-nr+IsOVD07QdeCr4BLvR5TALfLaZLi9AIaoa6vXymBc051iDPWedJujYYrjRJy5+9jp9oCx3G8Tt/Bs//TckJw==",
+ "node_modules/jest-expo/node_modules/react-test-renderer": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.3.1.tgz",
+ "integrity": "sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "acorn-loose": "^8.3.0",
- "neo-async": "^2.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
+ "react-is": "^18.3.1",
+ "react-shallow-renderer": "^16.15.0",
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "19.0.0-rc-6230622a1a-20240610",
- "react-dom": "19.0.0-rc-6230622a1a-20240610",
- "webpack": "^5.59.0"
+ "react": "^18.3.1"
}
},
"node_modules/jest-get-type": {
@@ -9782,12 +10310,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/json-stable-stringify/node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "license": "MIT"
- },
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -10253,6 +10775,16 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -11086,6 +11618,17 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"license": "MIT"
},
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/node-abort-controller": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
@@ -11533,6 +12076,19 @@
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
"license": "BlueOak-1.0.0"
},
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -11717,6 +12273,13 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -11800,12 +12363,12 @@
}
},
"node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
}
},
"node_modules/pirates": {
@@ -12422,19 +12985,19 @@
"license": "MIT"
},
"node_modules/react-native": {
- "version": "0.76.5",
- "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.5.tgz",
- "integrity": "sha512-op2p2kB+lqMF1D7AdX4+wvaR0OPFbvWYs+VBE7bwsb99Cn9xISrLRLAgFflZedQsa5HvnOGrULhtnmItbIKVVw==",
+ "version": "0.76.6",
+ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.6.tgz",
+ "integrity": "sha512-AsRi+ud6v6ADH7ZtSOY42kRB4nbM0KtSu450pGO4pDudl4AEK/AF96ai88snb2/VJJSGGa/49QyJVFXxz/qoFg==",
"license": "MIT",
"dependencies": {
"@jest/create-cache-key-function": "^29.6.3",
- "@react-native/assets-registry": "0.76.5",
- "@react-native/codegen": "0.76.5",
- "@react-native/community-cli-plugin": "0.76.5",
- "@react-native/gradle-plugin": "0.76.5",
- "@react-native/js-polyfills": "0.76.5",
- "@react-native/normalize-colors": "0.76.5",
- "@react-native/virtualized-lists": "0.76.5",
+ "@react-native/assets-registry": "0.76.6",
+ "@react-native/codegen": "0.76.6",
+ "@react-native/community-cli-plugin": "0.76.6",
+ "@react-native/gradle-plugin": "0.76.6",
+ "@react-native/js-polyfills": "0.76.6",
+ "@react-native/normalize-colors": "0.76.6",
+ "@react-native/virtualized-lists": "0.76.6",
"abort-controller": "^3.0.0",
"anser": "^1.4.9",
"ansi-regex": "^5.0.0",
@@ -12590,9 +13153,9 @@
}
},
"node_modules/react-native-safe-area-context": {
- "version": "4.14.1",
- "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.14.1.tgz",
- "integrity": "sha512-+tUhT5WBl8nh5+P+chYhAjR470iCByf9z5EYdCEbPaAK3Yfzw+o8VRPnUgmPAKlSccOgQBxx3NOl/Wzckn9ujg==",
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.12.0.tgz",
+ "integrity": "sha512-ukk5PxcF4p3yu6qMZcmeiZgowhb5AsKRnil54YFUUAXVIS7PJcMHGGC+q44fCiBg44/1AJk5njGMez1m9H0BVQ==",
"license": "MIT",
"peerDependencies": {
"react": "*",
@@ -12614,9 +13177,9 @@
}
},
"node_modules/react-native-svg": {
- "version": "15.11.0",
- "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.11.0.tgz",
- "integrity": "sha512-IJN0wcGHXpCbi7+TUgnjrPJTmk70t2IsEgyqCp/6x4Sy/PXz0+dB75jyUnPC0JZ1oTN1FsxnJEZChDMmhs6tzw==",
+ "version": "15.8.0",
+ "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.8.0.tgz",
+ "integrity": "sha512-KHJzKpgOjwj1qeZzsBjxNdoIgv2zNCO9fVcoq2TEhTRsVV5DGTZ9JzUZwybd7q4giT/H3RdtqC3u44dWdO0Ffw==",
"license": "MIT",
"dependencies": {
"css-select": "^5.1.0",
@@ -12628,6 +13191,23 @@
"react-native": "*"
}
},
+ "node_modules/react-native-svg-transformer": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/react-native-svg-transformer/-/react-native-svg-transformer-1.5.0.tgz",
+ "integrity": "sha512-RG5fSWJT7mjCQYocgYFUo1KYPLOoypPVG5LQab+pZZO7m4ciGaQIe0mhok3W4R5jLQsEXKo0u+aQGkZV/bZG7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@svgr/core": "^8.1.0",
+ "@svgr/plugin-jsx": "^8.1.0",
+ "@svgr/plugin-svgo": "^8.1.0",
+ "path-dirname": "^1.0.2"
+ },
+ "peerDependencies": {
+ "react-native": ">=0.59.0",
+ "react-native-svg": ">=12.0.0"
+ }
+ },
"node_modules/react-native-vector-icons": {
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.2.0.tgz",
@@ -12853,6 +13433,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-server-dom-webpack": {
+ "version": "19.0.0-rc-6230622a1a-20240610",
+ "resolved": "https://registry.npmjs.org/react-server-dom-webpack/-/react-server-dom-webpack-19.0.0-rc-6230622a1a-20240610.tgz",
+ "integrity": "sha512-nr+IsOVD07QdeCr4BLvR5TALfLaZLi9AIaoa6vXymBc051iDPWedJujYYrjRJy5+9jp9oCx3G8Tt/Bs//TckJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn-loose": "^8.3.0",
+ "neo-async": "^2.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "peerDependencies": {
+ "react": "19.0.0-rc-6230622a1a-20240610",
+ "react-dom": "19.0.0-rc-6230622a1a-20240610",
+ "webpack": "^5.59.0"
+ }
+ },
"node_modules/react-shallow-renderer": {
"version": "16.15.0",
"resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz",
@@ -12868,20 +13467,33 @@
}
},
"node_modules/react-test-renderer": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.3.1.tgz",
- "integrity": "sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-19.0.0.tgz",
+ "integrity": "sha512-oX5u9rOQlHzqrE/64CNr0HB0uWxkCQmZNSfozlYvwE71TLVgeZxVf0IjouGEr1v7r1kcDifdAJBeOhdhxsG/DA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "react-is": "^18.3.1",
- "react-shallow-renderer": "^16.15.0",
- "scheduler": "^0.23.2"
+ "react-is": "^19.0.0",
+ "scheduler": "^0.25.0"
},
"peerDependencies": {
- "react": "^18.3.1"
+ "react": "^19.0.0"
}
},
+ "node_modules/react-test-renderer/node_modules/react-is": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz",
+ "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/react-test-renderer/node_modules/scheduler": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
+ "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -12891,15 +13503,6 @@
"pify": "^2.3.0"
}
},
- "node_modules/read-cache/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
@@ -12915,6 +13518,12 @@
"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==",
+ "license": "MIT"
+ },
"node_modules/readable-stream/node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -13731,6 +14340,17 @@
"node": ">=8.0.0"
}
},
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/source-map": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
@@ -14191,6 +14811,60 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/svgo": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
+ "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/svgo/node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/svgo/node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
"node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
diff --git a/package.json b/package.json
index 62a8801..e6b314f 100644
--- a/package.json
+++ b/package.json
@@ -15,11 +15,15 @@
"preset": "jest-expo"
},
"dependencies": {
+ "@expo/html-elements": "^0.4.2",
"@expo/vector-icons": "^14.0.2",
"@gluestack-ui/avatar": "^0.1.18",
"@gluestack-ui/button": "^1.0.8",
"@gluestack-ui/checkbox": "^0.1.33",
+ "@gluestack-ui/form-control": "^0.1.19",
"@gluestack-ui/icon": "^0.1.25",
+ "@gluestack-ui/input": "^0.1.32",
+ "@gluestack-ui/link": "^0.1.23",
"@gluestack-ui/nativewind-utils": "^1.0.26",
"@gluestack-ui/overlay": "^0.1.16",
"@gluestack-ui/toast": "^1.0.8",
@@ -27,40 +31,43 @@
"@react-navigation/native": "^7.0.14",
"@react-navigation/native-stack": "^7.2.0",
"@react-navigation/stack": "^7.1.1",
- "expo": "~52.0.24",
- "expo-blur": "~14.0.1",
- "expo-constants": "~17.0.3",
- "expo-font": "~13.0.2",
- "expo-haptics": "~14.0.0",
- "expo-linking": "~7.0.3",
+ "expo": "^52.0.24",
+ "expo-asset": "^11.0.2",
+ "expo-blur": "^14.0.1",
+ "expo-constants": "^17.0.3",
+ "expo-font": "^13.0.2",
+ "expo-haptics": "^14.0.0",
+ "expo-linking": "^7.0.3",
"expo-router": "~4.0.16",
- "expo-splash-screen": "~0.29.19",
- "expo-status-bar": "~2.0.0",
- "expo-symbols": "~0.2.0",
- "expo-system-ui": "~4.0.6",
- "expo-web-browser": "~14.0.1",
+ "expo-splash-screen": "^0.29.19",
+ "expo-status-bar": "^2.0.0",
+ "expo-symbols": "^0.2.0",
+ "expo-system-ui": "^4.0.6",
+ "expo-web-browser": "^14.0.1",
"nativewind": "^4.1.23",
"react": "18.3.1",
"react-dom": "18.3.1",
- "react-native": "0.76.5",
- "react-native-gesture-handler": "~2.20.2",
- "react-native-reanimated": "~3.16.1",
- "react-native-safe-area-context": "^4.14.1",
- "react-native-screens": "~4.4.0",
- "react-native-svg": "^15.11.0",
+ "react-native": "0.76.6",
+ "react-native-gesture-handler": "^2.20.2",
+ "react-native-reanimated": "^3.16.1",
+ "react-native-safe-area-context": "^4.12.0",
+ "react-native-screens": "^4.4.0",
+ "react-native-svg": "^15.8.0",
"react-native-vector-icons": "^10.2.0",
- "react-native-web": "~0.19.13",
+ "react-native-web": "^0.19.13",
"react-native-webview": "13.12.5",
"tailwindcss": "^3.4.17"
},
"devDependencies": {
"@babel/core": "^7.25.2",
"@types/jest": "^29.5.12",
- "@types/react": "~18.3.12",
- "@types/react-test-renderer": "^18.3.0",
+ "@types/react": "^18.3.12",
+ "@types/react-test-renderer": "^19.0.0",
+ "@types/validator": "^13.12.2",
"jest": "^29.2.1",
- "jest-expo": "~52.0.2",
- "react-test-renderer": "18.3.1",
+ "jest-expo": "^52.0.2",
+ "react-native-svg-transformer": "^1.5.0",
+ "react-test-renderer": "19.0.0",
"typescript": "^5.3.3"
},
"private": true
diff --git a/tsconfig.json b/tsconfig.json
index c417704..e844cb8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -11,6 +11,7 @@
"**/*.tsx",
".expo/types/**/*.ts",
"expo-env.d.ts",
- "nativewind-env.d.ts"
+ "nativewind-env.d.ts",
+ "app/index.tsx"
]
}