From 4f5c5cc6d20e9d5431fb5c8eb494bf35d1dd2d43 Mon Sep 17 00:00:00 2001 From: Diogo Tavares Date: Wed, 22 Jul 2026 09:09:26 +0100 Subject: [PATCH] first version of the cruise lovers app, build 1.0.1, ready to be published on the app store --- app.json | 50 +- app/(auth)/login/index.tsx | 28 +- app/(auth)/recover/index.tsx | 2 +- app/(tabs)/contactos/index.tsx | 59 +- app/(tabs)/home/index.tsx | 187 ++- app/(tabs)/perfil/index.tsx | 12 +- app/reserva/[referencia].tsx | 22 +- assets/components/ContactMapPreview.tsx | 76 + assets/components/ContactMapPreviewNative.tsx | 81 + assets/components/EmergencyButton.tsx | 10 +- assets/config/api.ts | 5 +- assets/icons/app-icon.png | Bin 0 -> 28228 bytes assets/icons/icon-mala.svg | 4 + assets/icons/icon-reservas-confirmadas.svg | 4 + assets/icons/icon-total-reservas.svg | 4 + assets/icons/phone-solid.svg | 1 + assets/icons/wifi-solid.svg | 1 + eas.json | 25 + package-lock.json | 1469 +++++++++-------- package.json | 22 +- styles/screens/auth/recover.styles.ts | 2 +- styles/screens/reserva/detail.styles.ts | 4 +- styles/screens/tabs/home.styles.ts | 15 +- 23 files changed, 1225 insertions(+), 858 deletions(-) create mode 100644 assets/components/ContactMapPreview.tsx create mode 100644 assets/components/ContactMapPreviewNative.tsx create mode 100644 assets/icons/app-icon.png create mode 100644 assets/icons/icon-mala.svg create mode 100644 assets/icons/icon-reservas-confirmadas.svg create mode 100644 assets/icons/icon-total-reservas.svg create mode 100644 assets/icons/phone-solid.svg create mode 100644 assets/icons/wifi-solid.svg create mode 100644 eas.json diff --git a/app.json b/app.json index 28be934..9b3e654 100644 --- a/app.json +++ b/app.json @@ -1,51 +1,69 @@ { "expo": { - "name": "cruise lovers", + "name": "Cruise Lovers", "slug": "cruiseLovers", - "version": "1.0.0", + "version": "1.0.1", "orientation": "portrait", - "icon": "./assets/icons/logo.png", + "icon": "./assets/icons/app-icon.png", "scheme": "cruiselovers", "userInterfaceStyle": "automatic", "newArchEnabled": true, "ios": { - "supportsTablet": true, + "supportsTablet": false, "infoPlist": { - "LSApplicationQueriesSchemes": ["comgooglemaps", "waze"] - } + "LSApplicationQueriesSchemes": [ + "comgooglemaps", + "waze" + ], + "ITSAppUsesNonExemptEncryption": false, + "NSLocationWhenInUseUsageDescription": "A Cruise Lovers utiliza a localização apenas para mostrar o mapa da agência e ajudar a obter direções." + }, + "bundleIdentifier": "pt.cruiselovers.app" }, "android": { "adaptiveIcon": { - "backgroundColor": "#E6F4FE", - "foregroundImage": "./assets/icons/logo.png", - "backgroundImage": "./assets/icons/logo.png", - "monochromeImage": "./assets/icons/logo.png" + "backgroundColor": "#ffffff", + "foregroundImage": "./assets/icons/app-icon.png", + "backgroundImage": "./assets/icons/app-icon.png", + "monochromeImage": "./assets/icons/app-icon.png" }, "edgeToEdgeEnabled": true, - "predictiveBackGestureEnabled": false + "predictiveBackGestureEnabled": false, + "package": "pt.cruiselovers.app" }, "web": { "output": "static", - "favicon": "./assets/icons/logo.png" + "favicon": "./assets/icons/app-icon.png" }, "plugins": [ "expo-router", [ "expo-splash-screen", { - "image": "./assets/icons/logo.png", + "image": "./assets/icons/app-icon.png", "imageWidth": 200, "resizeMode": "contain", "backgroundColor": "#ffffff", - "dark": { - "backgroundColor": "#000000" - }, + } + ], + "expo-font", + [ + "expo-maps", + { + "requestLocationPermission": true, + "locationPermission": "A Cruise Lovers utiliza a localização apenas para mostrar o mapa da agência e ajudar a obter direções." } ] ], "experiments": { "typedRoutes": true, "reactCompiler": true + }, + "extra": { + "router": {}, + "eas": { + "projectId": "28650db4-e205-490d-8d1f-5112bcd9b644" + } } } } diff --git a/app/(auth)/login/index.tsx b/app/(auth)/login/index.tsx index 4eb3fb3..affd9e1 100644 --- a/app/(auth)/login/index.tsx +++ b/app/(auth)/login/index.tsx @@ -1,20 +1,20 @@ +import { useAuth } from '@/assets/contexts/useAuth'; +import styles from '@/styles/screens/auth/login.styles'; import { Ionicons } from '@expo/vector-icons'; +import { router, type Href } from 'expo-router'; import React, { useState } from 'react'; import { - Image, - ImageBackground, - KeyboardAvoidingView, - Platform, - Pressable, - ScrollView, - Text, - TextInput, - View, - StatusBar, + Image, + ImageBackground, + KeyboardAvoidingView, + Platform, + Pressable, + ScrollView, + StatusBar, + Text, + TextInput, + View, } from 'react-native'; -import styles from '@/styles/screens/auth/login.styles'; -import { useAuth } from '@/assets/contexts/useAuth'; -import { router, type Href } from 'expo-router'; export default function Login() { const [email, setEmail] = useState(''); @@ -69,7 +69,7 @@ export default function Login() { { return raw .split('\n') @@ -114,9 +114,6 @@ export default function Contactos() { const [isLoading, setIsLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const [error, setError] = useState(null); - const [mapLoading, setMapLoading] = useState(true); - const [mapError, setMapError] = useState(false); - const fetchContacts = async () => { // 1. Mostrar cache imediatamente enquanto atualiza em fundo const cached = await getCachedContacts(); @@ -138,8 +135,6 @@ export default function Contactos() { const data: ContactResponse = await response.json(); - console.log('data', data); - if (data.status === 200 && data.contact) { const validSocials = (data.socials || []).filter((s) => s.value?.trim()); setContactData(data.contact); @@ -186,9 +181,6 @@ export default function Contactos() { const horarios = contactData?.horarios ? parseHorarios(contactData.horarios) : []; const coords = parseCoords(contactData?.coordenadas); - const mapUrl = coords - ? `https://staticmap.openstreetmap.de/staticmap.php?center=${coords.lat},${coords.lng}&zoom=15&size=600x300&markers=${coords.lat},${coords.lng},red-pushpin` - : null; return ( @@ -249,30 +241,13 @@ export default function Contactos() { Localização - {!!mapUrl && ( - openMaps(contactData.address, coords?.lat, coords?.lng)} - style={styles.mapImageWrap}> - { setMapLoading(true); setMapError(false); }} - onLoad={() => setMapLoading(false)} - onError={() => { setMapLoading(false); setMapError(true); }} - /> - {mapLoading && !mapError && ( - - - - )} - {mapError && ( - - - Mapa indisponível - - )} - + {coords && ( + openMaps(contactData.address, coords.lat, coords.lng)} + /> )} diff --git a/app/(tabs)/home/index.tsx b/app/(tabs)/home/index.tsx index 777ff32..f4fa03c 100644 --- a/app/(tabs)/home/index.tsx +++ b/app/(tabs)/home/index.tsx @@ -1,23 +1,27 @@ -import { colors } from '@/assets/styles/colors'; -import { useAuth } from '@/assets/contexts/useAuth'; -import { API_ENDPOINTS, buildApiUrl } from '@/assets/config/api'; -import { cacheReservas, getCachedReservas } from '@/assets/services/offlineStorage'; -import { downloadDocumentos, getDocumentosChecksums, verificarDocumentosParaDownload } from '@/assets/services/documentSync'; -import { Reserva, ReservasResponse } from '@/assets/types'; -import { Href, router } from 'expo-router'; -import styles from '@/styles/screens/tabs/home.styles'; -import { useEffect, useMemo, useState } from 'react'; import { LoadingSpinner } from '@/assets/components/LoadingSpinner'; -import { - Alert, - Image, - Pressable, - RefreshControl, - ScrollView, - Text, - View, -} from 'react-native'; +import { API_ENDPOINTS, buildApiUrl } from '@/assets/config/api'; +import { useAuth } from '@/assets/contexts/useAuth'; +import ConfirmadasIcon from '@/assets/icons/icon-reservas-confirmadas.svg'; +import MalaIcon from '@/assets/icons/icon-mala.svg'; +import TotalReservasIcon from '@/assets/icons/icon-total-reservas.svg'; +import WifiIcon from '@/assets/icons/wifi-solid.svg'; +import { downloadDocumentos, getDocumentosChecksums, verificarDocumentosParaDownload } from '@/assets/services/documentSync'; +import { cacheReservas, getCachedReservas } from '@/assets/services/offlineStorage'; +import { colors } from '@/assets/styles/colors'; +import { Reserva, ReservasResponse } from '@/assets/types'; +import styles from '@/styles/screens/tabs/home.styles'; import { FontAwesome } from '@expo/vector-icons'; +import { Href, router } from 'expo-router'; +import { useEffect, useMemo, useState } from 'react'; +import { + Alert, + Image, + Pressable, + RefreshControl, + ScrollView, + Text, + View, +} from 'react-native'; const getStatusPriority = (statusCode: string): number => { switch (statusCode) { @@ -40,9 +44,19 @@ const getStatusPriority = (statusCode: string): number => { } }; +type HomeFilter = 'proxima' | 'total' | 'confirmadas'; + +const sortReservas = (items: Reserva[]) => + [...items].sort((a, b) => { + const priorityDiff = getStatusPriority(a.statusCode) - getStatusPriority(b.statusCode); + if (priorityDiff !== 0) return priorityDiff; + return new Date(a.startDate).getTime() - new Date(b.startDate).getTime(); + }); + export default function Home() { const { token } = useAuth(); const [reservas, setReservas] = useState([]); + const [activeFilter, setActiveFilter] = useState('total'); const [isLoading, setIsLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const [error, setError] = useState(null); @@ -95,19 +109,14 @@ export default function Home() { body: formData, }); + const data: ReservasResponse = await response.json(); if (!response.ok || (data.status !== 200 && data.status !== '200')) { throw new Error(data.message || 'Erro ao carregar reservas'); } - const orderedReservas = [...(data.reservas || [])].sort((a, b) => { - const priorityDiff = - getStatusPriority(a.statusCode) - getStatusPriority(b.statusCode); - if (priorityDiff !== 0) return priorityDiff; - - return new Date(a.startDate).getTime() - new Date(b.startDate).getTime(); - }); + const orderedReservas = sortReservas(data.reservas || []); setReservas(orderedReservas); setIsFromCache(false); @@ -144,8 +153,10 @@ export default function Home() { const now = new Date(); const proximas = reservas.filter((reserva) => new Date(reserva.startDate) >= now); const total = reservas.length; - const confirmadas = reservas.filter((reserva) => reserva.statusCode === '1').length; - const proxima = proximas[0]; + const confirmadas = reservas.filter( + (reserva) => reserva.statusCode === '1' || reserva.statusCode === '5' + ).length; + const proxima = sortReservas(proximas)[0]; let dias = '--'; if (proxima) { @@ -161,9 +172,55 @@ export default function Home() { confirmadas, emViagem: Boolean(reservaEmViagem), destinoEmViagem: reservaEmViagem?.destino?.trim() || '—', + reservaEmViagem, + proximaReserva: proxima ?? null, }; }, [reservas]); + const filteredReservas = useMemo(() => { + const now = new Date(); + + if (activeFilter === 'total') { + return sortReservas(reservas); + } + + if (activeFilter === 'confirmadas') { + return sortReservas( + reservas.filter( + (reserva) => reserva.statusCode === '1' || reserva.statusCode === '5' + ) + ); + } + + if (stats.reservaEmViagem) { + return [stats.reservaEmViagem]; + } + + const proxima = reservas + .filter((reserva) => new Date(reserva.startDate) >= now) + .sort((a, b) => new Date(a.startDate).getTime() - new Date(b.startDate).getTime())[0]; + + return proxima ? [proxima] : []; + }, [activeFilter, reservas, stats.reservaEmViagem]); + + const sectionTitle = useMemo(() => { + if (activeFilter === 'confirmadas') return 'Reservas Confirmadas'; + if (activeFilter === 'proxima') { + return stats.emViagem ? 'Em Viagem' : 'Próxima Viagem'; + } + return 'As minhas Reservas'; + }, [activeFilter, stats.emViagem]); + + const emptyMessage = useMemo(() => { + if (activeFilter === 'confirmadas') return 'Sem reservas confirmadas.'; + if (activeFilter === 'proxima') { + return stats.emViagem + ? 'Sem viagem em curso.' + : 'Sem viagens futuras para apresentar.'; + } + return 'Sem reservas para apresentar.'; + }, [activeFilter, stats.emViagem]); + const getStatusType = (statusCode: string) => { if (statusCode === '1' || statusCode === '5') return 'verde'; if (statusCode === '-5') return 'vermelho'; @@ -217,7 +274,9 @@ export default function Home() { ); } - console.log(reservas); + const isProximaActive = activeFilter === 'proxima'; + const isTotalActive = activeFilter === 'total'; + const isConfirmadasActive = activeFilter === 'confirmadas'; return ( @@ -227,52 +286,78 @@ export default function Home() { refreshControl={}> - + setActiveFilter('proxima')}> {stats.emViagem ? ( - ) : ( + ) : isProximaActive ? ( + ) : ( + )} - + {stats.emViagem ? 'Em viagem' : 'Proxima Viagem'} - + {stats.emViagem ? stats.destinoEmViagem : `${stats.dias} dias`} - + - - - Total Reservas - {stats.total} - + setActiveFilter('total')}> + {isTotalActive ? ( + + ) : ( + + )} + + Total Reservas + + + {stats.total} + + - - - Confirmadas - {stats.confirmadas} - + setActiveFilter('confirmadas')}> + {isConfirmadasActive ? ( + + ) : ( + + )} + + Confirmadas + + + {stats.confirmadas} + + {isFromCache && ( - + Sem ligação — a mostrar dados guardados )} - As minhas Reservas + {sectionTitle} {!!error && {error}} - {!error && reservas.length === 0 && ( - Sem reservas para apresentar. + {!error && filteredReservas.length === 0 && ( + {emptyMessage} )} {!error && - reservas.map((reserva, index) => { + filteredReservas.map((reserva, index) => { const statusType = getStatusType(reserva.statusCode); const statusConfig = getStatusConfig(reserva.statusCode); const statusColor = getStatusColor(statusType); @@ -305,6 +390,8 @@ export default function Home() { - {reserva.destino} + + {reserva.destino} + {reserva.pais} diff --git a/app/(tabs)/perfil/index.tsx b/app/(tabs)/perfil/index.tsx index 3864a96..afa9ac2 100644 --- a/app/(tabs)/perfil/index.tsx +++ b/app/(tabs)/perfil/index.tsx @@ -1,15 +1,15 @@ +import { LoadingSpinner } from '@/assets/components/LoadingSpinner'; import { API_ENDPOINTS, buildApiUrl } from '@/assets/config/api'; import { useAuth } from '@/assets/contexts/useAuth'; import ChevronRightIcon from '@/assets/icons/chevron-right.svg'; -import UserDeleteIcon from '@/assets/icons/user-xmark-solid-full.svg'; import LogoutIcon from '@/assets/icons/right-from-bracket-solid-full.svg'; import UserIcon from '@/assets/icons/user-solid-full.svg'; +import UserDeleteIcon from '@/assets/icons/user-xmark-solid-full.svg'; import { colors } from '@/assets/styles/colors'; import { UserInfoResponse } from '@/assets/types'; import styles from '@/styles/screens/tabs/perfil.styles'; import { type Href, router } from 'expo-router'; import { useEffect, useMemo, useState } from 'react'; -import { LoadingSpinner } from '@/assets/components/LoadingSpinner'; import { Alert, Image, @@ -24,10 +24,10 @@ import { View, } from 'react-native'; import Animated, { - Easing, - useAnimatedStyle, - useSharedValue, - withTiming, + Easing, + useAnimatedStyle, + useSharedValue, + withTiming, } from 'react-native-reanimated'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; diff --git a/app/reserva/[referencia].tsx b/app/reserva/[referencia].tsx index 76946a4..df5559a 100644 --- a/app/reserva/[referencia].tsx +++ b/app/reserva/[referencia].tsx @@ -15,6 +15,8 @@ import { ValorReservaCard } from '@/assets/components/reserva/ValorReservaCard'; import { VooCard } from '@/assets/components/reserva/VooCard'; import { API_ENDPOINTS, buildApiUrl } from '@/assets/config/api'; import { useAuth } from '@/assets/contexts/useAuth'; +import WifiIcon from '@/assets/icons/wifi-solid.svg'; +import { colors } from '@/assets/styles/colors'; import { cacheReservaFull, getCachedReservaFull } from '@/assets/services/offlineStorage'; import { Documento, @@ -27,7 +29,6 @@ import { VooSegment, } from '@/assets/types'; import styles from '@/styles/screens/reserva/detail.styles'; -import { FontAwesome } from '@expo/vector-icons'; import { Stack, useLocalSearchParams } from 'expo-router'; import React, { useEffect, useMemo, useState } from 'react'; import { @@ -118,6 +119,21 @@ export default function ReservaDetalheScreen() { } }; + function metodosPagamento($metodo: string) { + switch ($metodo) { + case 'mb': + return 'Multibanco'; + case 'mbway': + return 'MB Way'; + case 'cc': + return 'Cartão de Crédito'; + case 'tb': + return 'Transferência Bancária'; + default: + return $metodo; + } + } + useEffect(() => { fetchReserva(); }, [referencia, token]); @@ -196,7 +212,7 @@ export default function ReservaDetalheScreen() { <> {isFromCache && ( - + Sem ligação — a mostrar dados guardados )} @@ -350,7 +366,7 @@ export default function ReservaDetalheScreen() { - {pagamento.metodoPagamento} + {metodosPagamento(pagamento.metodoPagamento)} diff --git a/assets/components/ContactMapPreview.tsx b/assets/components/ContactMapPreview.tsx new file mode 100644 index 0000000..2ad5ed6 --- /dev/null +++ b/assets/components/ContactMapPreview.tsx @@ -0,0 +1,76 @@ +import { LoadingSpinner } from '@/assets/components/LoadingSpinner'; +import { colors } from '@/assets/styles/colors'; +import styles from '@/styles/screens/tabs/contactos.styles'; +import { FontAwesome } from '@expo/vector-icons'; +import Constants, { ExecutionEnvironment } from 'expo-constants'; +import { lazy, Suspense, useMemo, useState } from 'react'; +import { Image, Platform, Pressable, Text, View } from 'react-native'; + +const MAP_ZOOM = 15; +const isExpoGo = Constants.executionEnvironment === ExecutionEnvironment.StoreClient; +const useNativeMaps = !isExpoGo && (Platform.OS === 'ios' || Platform.OS === 'android'); + +const NativeMapPreview = useNativeMaps + ? lazy(() => import('./ContactMapPreviewNative')) + : null; + +const buildStaticMapUrl = (lat: number, lng: number): string => { + const delta = 0.012; + const bbox = [lng - delta, lat - delta, lng + delta, lat + delta].join(','); + return `https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/export?bbox=${bbox}&bboxSR=4326&size=600,300&format=png&f=image`; +}; + +type Props = { + lat: number; + lng: number; + title?: string; + onPress: () => void; +}; + +function StaticMapFallback({ lat, lng, onPress }: Props) { + const [loading, setLoading] = useState(true); + const [error, setError] = useState(false); + const mapUrl = useMemo(() => buildStaticMapUrl(lat, lng), [lat, lng]); + + return ( + + { + setLoading(true); + setError(false); + }} + onLoad={() => setLoading(false)} + onError={() => { + setLoading(false); + setError(true); + }} + /> + {loading && !error && ( + + + + )} + {error && ( + + + Mapa indisponível + + )} + + ); +} + +export function ContactMapPreview(props: Props) { + if (NativeMapPreview) { + return ( + }> + + + ); + } + + return ; +} diff --git a/assets/components/ContactMapPreviewNative.tsx b/assets/components/ContactMapPreviewNative.tsx new file mode 100644 index 0000000..75c4fb8 --- /dev/null +++ b/assets/components/ContactMapPreviewNative.tsx @@ -0,0 +1,81 @@ +import { colors } from '@/assets/styles/colors'; +import styles from '@/styles/screens/tabs/contactos.styles'; +import { AppleMaps, GoogleMaps } from 'expo-maps'; +import { useMemo } from 'react'; +import { Platform, Pressable, View } from 'react-native'; + +const MAP_ZOOM = 15; + +const disabledGoogleUi = { + scrollGesturesEnabled: false, + zoomGesturesEnabled: false, + rotationGesturesEnabled: false, + tiltGesturesEnabled: false, + zoomControlsEnabled: false, + mapToolbarEnabled: false, + compassEnabled: false, + scaleBarEnabled: false, +}; + +const disabledAppleUi = { + compassEnabled: false, + scaleBarEnabled: false, + myLocationButtonEnabled: false, + togglePitchEnabled: false, +}; + +type Props = { + lat: number; + lng: number; + title?: string; + onPress: () => void; +}; + +export default function ContactMapPreviewNative({ lat, lng, title, onPress }: Props) { + const cameraPosition = useMemo( + () => ({ + coordinates: { latitude: lat, longitude: lng }, + zoom: MAP_ZOOM, + }), + [lat, lng] + ); + + const marker = useMemo( + () => ({ + id: 'agency', + coordinates: { latitude: lat, longitude: lng }, + title, + }), + [lat, lng, title] + ); + + return ( + + + {Platform.OS === 'ios' ? ( + + ) : ( + + )} + + + ); +} diff --git a/assets/components/EmergencyButton.tsx b/assets/components/EmergencyButton.tsx index ca26a07..c2d583f 100644 --- a/assets/components/EmergencyButton.tsx +++ b/assets/components/EmergencyButton.tsx @@ -1,8 +1,8 @@ import { useAuth } from '@/assets/contexts/useAuth'; import { getCachedContacts } from '@/assets/services/offlineStorage'; +import PhoneIcon from '@/assets/icons/phone-solid.svg'; import { colors } from '@/assets/styles/colors'; import { fonts } from '@/assets/styles/fonts'; -import { FontAwesome } from '@expo/vector-icons'; import { useEffect, useState } from 'react'; import { Alert, Linking, Platform, StyleSheet, Text, useWindowDimensions } from 'react-native'; import { Gesture, GestureDetector } from 'react-native-gesture-handler'; @@ -27,7 +27,7 @@ export function EmergencyButton() { const tabBarHeight = (Platform.OS === 'ios' ? 54 : 64) + insets.bottom; const maxX = screenWidth - BTN_SIZE - MARGIN; const minY = insets.top + MARGIN; - const maxY = screenHeight - tabBarHeight - BTN_SIZE - MARGIN; + const maxY = screenHeight - tabBarHeight - BTN_SIZE + MARGIN; const x = useSharedValue(screenWidth - BTN_SIZE - MARGIN); const y = useSharedValue(screenHeight - tabBarHeight - BTN_SIZE - MARGIN); @@ -49,7 +49,7 @@ export function EmergencyButton() { if (!emergencyPhone) return; const url = `tel:${emergencyPhone.replace(/\s/g, '')}`; Alert.alert( - 'Linha de Emergência 24h', + 'Ajuda ao viajante 24h', `Ligar para ${emergencyPhone}?`, [ { text: 'Cancelar', style: 'cancel' }, @@ -116,8 +116,8 @@ export function EmergencyButton() { return ( - - SOS + + Ajuda ); diff --git a/assets/config/api.ts b/assets/config/api.ts index 1ff2051..336c56d 100644 --- a/assets/config/api.ts +++ b/assets/config/api.ts @@ -6,8 +6,8 @@ */ // Endpoint base da API -export const API_BASE_URL = "https://apmtests.webclientes.com/pt/app"; -export const API_BASE_URL_DEV = "https://apmtests.webclientes.com/pt/app"; +export const API_BASE_URL = "https://cruiselovers.webclientes.com/pt/app"; +export const API_BASE_URL_DEV = "https://cruiselovers.webclientes.com/pt/app"; /** * Endpoints da aplicação @@ -47,7 +47,6 @@ export const API_ENDPOINTS = { * * @example * buildApiUrl(API_ENDPOINTS.USER_LOGIN) - * // Retorna: "https://finalguru.webclientes.com/pt/app/UserLogin" */ export function buildApiUrl(endpoint: string): string { // Remove barras duplicadas e garante que há apenas uma barra entre base e endpoint diff --git a/assets/icons/app-icon.png b/assets/icons/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..089f30b269cc88246a2fc9237f5e6694b8a282a3 GIT binary patch literal 28228 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 + + + diff --git a/assets/icons/icon-reservas-confirmadas.svg b/assets/icons/icon-reservas-confirmadas.svg new file mode 100644 index 0000000..90e2c95 --- /dev/null +++ b/assets/icons/icon-reservas-confirmadas.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/icon-total-reservas.svg b/assets/icons/icon-total-reservas.svg new file mode 100644 index 0000000..63c9a96 --- /dev/null +++ b/assets/icons/icon-total-reservas.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/phone-solid.svg b/assets/icons/phone-solid.svg new file mode 100644 index 0000000..d2fcb9e --- /dev/null +++ b/assets/icons/phone-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/wifi-solid.svg b/assets/icons/wifi-solid.svg new file mode 100644 index 0000000..246d44b --- /dev/null +++ b/assets/icons/wifi-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/eas.json b/eas.json new file mode 100644 index 0000000..f5ea6f3 --- /dev/null +++ b/eas.json @@ -0,0 +1,25 @@ +{ + "cli": { + "version": ">= 16.31.0", + "appVersionSource": "remote" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal" + }, + "production": { + "autoIncrement": true + } + }, + "submit": { + "production": { + "ios": { + "companyName": "Famatour - Viagens e Turismo, Lda" + } + } + } +} diff --git a/package-lock.json b/package-lock.json index e069358..72c53d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,18 +13,20 @@ "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/elements": "^2.6.3", "@react-navigation/native": "^7.1.8", + "babel-preset-expo": "~54.0.10", "crypto-js": "^4.2.0", - "expo": "~54.0.33", - "expo-clipboard": "^56.0.3", + "expo": "~54.0.35", + "expo-clipboard": "~8.0.8", "expo-constants": "~18.0.13", - "expo-file-system": "^56.0.7", - "expo-font": "~14.0.11", + "expo-dev-client": "~6.0.21", + "expo-file-system": "~19.0.23", + "expo-font": "~14.0.12", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", "expo-linking": "~8.0.12", - "expo-maps": "^56.0.6", - "expo-router": "~6.0.23", - "expo-sharing": "^56.0.13", + "expo-maps": "~0.12.10", + "expo-router": "~6.0.24", + "expo-sharing": "~14.0.8", "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", "expo-symbols": "~1.0.8", @@ -39,7 +41,7 @@ "react-native-screens": "~4.16.0", "react-native-svg": "15.12.1", "react-native-web": "~0.21.0", - "react-native-webview": "^13.16.1", + "react-native-webview": "13.15.0", "react-native-worklets": "0.5.1" }, "devDependencies": { @@ -52,9 +54,9 @@ } }, "node_modules/@0no-co/graphql.web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz", - "integrity": "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.3.2.tgz", + "integrity": "sha512-Q1+pRlLhE31GOY/2c9BAEnFTNxO7Awtc6fhhEDlxyCBQ2N0IhD32cPVvPChrK9mwBNSgRdW/sF1kd2e0ojHj1Q==", "license": "MIT", "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" @@ -66,12 +68,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -80,30 +82,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -120,13 +122,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -136,25 +138,25 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -164,17 +166,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", - "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.6", + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "engines": { @@ -185,12 +187,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", - "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-annotate-as-pure": "^7.29.7", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, @@ -239,49 +241,49 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", - "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -291,35 +293,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -329,14 +331,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", - "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -346,67 +348,67 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", - "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -499,12 +501,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -514,14 +516,14 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.0.tgz", - "integrity": "sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.7.tgz", + "integrity": "sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-syntax-decorators": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-decorators": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -531,12 +533,12 @@ } }, "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz", - "integrity": "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.29.7.tgz", + "integrity": "sha512-p+G5BNXDcy3bOXplhY4HybQ1GxH3i2Tppmdm/3epyRu2VgJJZuUlZ61MqRTg582Q7ZLBdP7fePYvsumSEkMxcQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -597,12 +599,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.28.6.tgz", - "integrity": "sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.29.7.tgz", + "integrity": "sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -624,12 +626,12 @@ } }, "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.28.6.tgz", - "integrity": "sha512-Svlx1fjJFnNz0LZeUaybRukSxZI3KkpApUmIRzEdXC5k8ErTOz0OD0kNrICi5Vc3GlpP5ZCeRyRO+mfWTSz+iQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.29.7.tgz", + "integrity": "sha512-foag0BB37ROhdeIX9O8G0jX7hw0UekJc04cHMrYLOnrErsnBKqJGHJ8eDRpoCFZBvEPPygmmtw4qyU97qa4oOw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -639,12 +641,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.28.6.tgz", - "integrity": "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.29.7.tgz", + "integrity": "sha512-ajMX6QPcyomotqwpzhkYGxcK2i/us0rs1Qo9QvUpa+Fca0FTmqrzKrctoIYLMxcOhGZldGT/BAVkRGTWBiR8gQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -693,12 +695,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -840,14 +842,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", - "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.29.0" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -857,14 +859,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", - "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-remap-async-to-generator": "^7.27.1" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -874,12 +876,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", - "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -905,13 +907,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", - "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -941,13 +943,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", - "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/template": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -957,13 +959,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", - "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -973,12 +975,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -988,13 +990,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", - "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.29.7.tgz", + "integrity": "sha512-wRHeUjUjCZnMHmiO5bRgjFLcoEh7JyTdByOW11ahhwNa4V0bmeGEaIvt51yq0zQp2yWIpqfxXXPyUP6GFJZHOQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-flow": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-flow": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1004,13 +1006,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1020,14 +1022,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1037,12 +1039,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1052,12 +1054,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", - "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1083,13 +1085,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", - "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1114,12 +1116,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", - "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1129,16 +1131,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", - "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.6" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1148,12 +1150,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", - "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1179,12 +1181,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1194,13 +1196,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", - "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1210,14 +1212,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", - "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1227,12 +1229,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", - "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.29.7.tgz", + "integrity": "sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1242,16 +1244,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", - "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz", + "integrity": "sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-syntax-jsx": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1261,12 +1263,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz", + "integrity": "sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==", "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" + "@babel/plugin-transform-react-jsx": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1276,12 +1278,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1291,12 +1293,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1306,13 +1308,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.29.7.tgz", + "integrity": "sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1322,12 +1324,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", - "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", + "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1337,13 +1339,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", - "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.7.tgz", + "integrity": "sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -1372,13 +1374,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", - "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", + "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1388,12 +1390,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1453,17 +1455,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", - "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.29.7.tgz", + "integrity": "sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.28.0", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-transform-react-display-name": "^7.29.7", + "@babel/plugin-transform-react-jsx": "^7.29.7", + "@babel/plugin-transform-react-jsx-development": "^7.29.7", + "@babel/plugin-transform-react-pure-annotations": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1496,36 +1498,37 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -1552,13 +1555,13 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1754,6 +1757,196 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@expo/cli": { + "version": "54.0.25", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.25.tgz", + "integrity": "sha512-WnUqIb8oMBhtwSfIqdCHCzcaDIpLNXItRVd5miuvWi4GO0SGo89PSsAkbVJ+LJgcaY+v5rbgMELJS9I/CqOulA==", + "license": "MIT", + "dependencies": { + "@0no-co/graphql.web": "^1.0.8", + "@expo/code-signing-certificates": "^0.0.6", + "@expo/config": "~12.0.13", + "@expo/config-plugins": "~54.0.4", + "@expo/devcert": "^1.2.1", + "@expo/env": "~2.0.8", + "@expo/image-utils": "^0.8.8", + "@expo/json-file": "^10.0.16", + "@expo/metro": "~54.2.0", + "@expo/metro-config": "~54.0.16", + "@expo/osascript": "^2.3.8", + "@expo/package-manager": "^1.9.10", + "@expo/plist": "^0.4.9", + "@expo/prebuild-config": "^54.0.8", + "@expo/schema-utils": "^0.1.8", + "@expo/spawn-async": "^1.7.2", + "@expo/ws-tunnel": "^1.0.1", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "0.81.5", + "@urql/core": "^5.0.6", + "@urql/exchange-retry": "^1.3.0", + "accepts": "^1.3.8", + "arg": "^5.0.2", + "better-opn": "~3.0.2", + "bplist-creator": "0.1.0", + "bplist-parser": "^0.3.1", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "compression": "^1.7.4", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "expo-server": "^1.0.7", + "freeport-async": "^2.0.0", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "lan-network": "^0.2.1", + "minimatch": "^9.0.0", + "node-forge": "^1.3.3", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "picomatch": "^4.0.3", + "pretty-bytes": "^5.6.0", + "pretty-format": "^29.7.0", + "progress": "^2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.3", + "semver": "^7.6.0", + "send": "^0.19.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", + "structured-headers": "^0.4.1", + "tar": "^7.5.2", + "terminal-link": "^2.1.1", + "undici": "^6.18.2", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "bin": { + "expo-internal": "build/bin/cli" + }, + "peerDependencies": { + "expo": "*", + "expo-router": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "expo-router": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@expo/cli/node_modules/@expo/json-file": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.2.0.tgz", + "integrity": "sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.20.0", + "json5": "^2.2.3" + } + }, + "node_modules/@expo/cli/node_modules/brace-expansion": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@expo/cli/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/cli/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/cli/node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@expo/code-signing-certificates": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz", @@ -1930,9 +2123,9 @@ } }, "node_modules/@expo/fingerprint/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -1996,15 +2189,24 @@ } }, "node_modules/@expo/json-file": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.13.tgz", - "integrity": "sha512-pX/XjQn7tgNw6zuuV2ikmegmwe/S7uiwhrs2wXrANMkq7ozrA+JcZwgW9Q/8WZgciBzfAhNp5hnackHcrmapQA==", + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.16.tgz", + "integrity": "sha512-fcVkWEj+hLuP2yt5W0aw6LmDRqSPWDLUSxOMcmFeV+algmIF59sQVKCwB9btjQLd4V6x9N0pISkQEkBubUHrCw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.20.0", + "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, "node_modules/@expo/metro": { "version": "54.2.0", "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.2.0.tgz", @@ -2028,9 +2230,9 @@ } }, "node_modules/@expo/metro-config": { - "version": "54.0.15", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.15.tgz", - "integrity": "sha512-SqIya4VZ9KHM1S9g+xR0A+QKw1Tfs7Gacx6bQNJ98vs4+O7I5+QP5mHZIB0QSZLUV8opiXebHYTiTu+0OAsIUw==", + "version": "54.0.16", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.16.tgz", + "integrity": "sha512-3LLb9ZQl0VlqSlsalJ7+CYjfz60PBoSDHvpE1UF71aTM1Nx0Vb4LhXo7bCCC+PYP9q/GPB58LLbIROQ8PjKX2w==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.20.0", @@ -2038,7 +2240,7 @@ "@babel/generator": "^7.20.5", "@expo/config": "~12.0.13", "@expo/env": "~2.0.8", - "@expo/json-file": "~10.0.8", + "@expo/json-file": "~10.0.16", "@expo/metro": "~54.2.0", "@expo/spawn-async": "^1.7.2", "browserslist": "^4.25.0", @@ -2088,35 +2290,45 @@ } }, "node_modules/@expo/osascript": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.4.2.tgz", - "integrity": "sha512-/XP7PSYF2hzOZzqfjgkoWtllyeTN8dW3aM4P6YgKcmmPikKL5FdoyQhti4eh6RK5a5VrUXJTOlTNIpIHsfB5Iw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.7.0.tgz", + "integrity": "sha512-wKIXL8UtbuX4KwavPasIW3CUcgTbYfjzLcgUhjyKUAYDEqMaf6gmU1bqz3ffBPTokmX+G8/vFG1ZuI9etQWukA==", "license": "MIT", "dependencies": { - "@expo/spawn-async": "^1.7.2" + "@expo/spawn-async": "^1.8.0" }, "engines": { "node": ">=12" } }, "node_modules/@expo/package-manager": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.10.4.tgz", - "integrity": "sha512-y9Mr4Kmpk4abAVZrNNPCdzOZr8nLLyi18p1SXr0RCVA8IfzqZX/eY4H+50a0HTmXqIsPZrQdcdb4I3ekMS9GvQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.13.0.tgz", + "integrity": "sha512-s3W3eZafJDEyVL7W/jxj2Nz3eONKxSCU604S5xj8ijrVaRz83x0DnZznLf/UXQEI1w+FyibH68nHeQyk767b1A==", "license": "MIT", "dependencies": { - "@expo/json-file": "^10.0.13", - "@expo/spawn-async": "^1.7.2", + "@expo/json-file": "^11.0.0", + "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "resolve-workspace-root": "^2.0.0" } }, + "node_modules/@expo/package-manager/node_modules/@expo/json-file": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-11.0.0.tgz", + "integrity": "sha512-pHJCETqFL5x5BzNV6cEPwjwuECgGmnl0bNmfHIJ6LM1tlh2eVXi5HEdit3zby/JO/B8Otk5cgcqtJXgvvUat3A==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.20.0", + "json5": "^2.2.3" + } + }, "node_modules/@expo/plist": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", - "integrity": "sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.9.tgz", + "integrity": "sha512-MPVpmKGfnQEnrCzgxuXcmPP/y/t6AVm+DcSb2Myp21LKWv1N3l8uFxMggesfF4ixAxkRlGmMMx9GyDC9M+XklQ==", "license": "MIT", "dependencies": { "@xmldom/xmldom": "^0.8.8", @@ -2189,12 +2401,12 @@ "license": "MIT" }, "node_modules/@expo/spawn-async": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", - "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.8.0.tgz", + "integrity": "sha512-eb9xxd/LbuEGSdua4NumCu/McVB9EM+F/JxB9pWgnERw4HQ9XyTNH1KapG6oqLWR8TuRK2LQfzJlmNi94CVobw==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3" + "cross-spawn": "^7.0.6" }, "engines": { "node": ">=12" @@ -2224,9 +2436,9 @@ "license": "MIT" }, "node_modules/@expo/xcpretty": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.3.tgz", - "integrity": "sha512-wC562eD3gS6vO2tWHToFhlFnmHKfKHgF1oyvojeSkLK/ZYop1bMU+7cOMiF9Sq70CzcsLy/EMRy/uRc76QmNRw==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.4.tgz", + "integrity": "sha512-4aQzz9vgxcNXFfo/iyNgDDYfsU5XGKKxWxZopw0cVotHiW+U8IJbIxMaxsINs6bHhtkG3StKNPcOrn3eBuxKPw==", "license": "BSD-3-Clause", "dependencies": { "@babel/code-frame": "^7.20.0", @@ -2372,9 +2584,9 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -3005,9 +3217,9 @@ } }, "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.4.tgz", + "integrity": "sha512-PNIUUyLI5YpkJZj60YBzX1o0ByQ4ovvfmq9N/Kig/PAYbVlGyz4R6G0SEWrD0O9acc0sT2+IdMBVLFv8FSi0Nw==", "license": "MIT", "dependencies": { "async-limiter": "~1.0.0" @@ -3782,9 +3994,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "dev": true, "license": "MIT", "dependencies": { @@ -4720,9 +4932,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "54.0.10", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.10.tgz", - "integrity": "sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw==", + "version": "54.0.11", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.11.tgz", + "integrity": "sha512-dEpeFDtYEFzmWtWVwvt7sUCZH0fxXPfbJlgXd7XNZSQDa/Ki/hTOj9exMTzqR2oyPHDNcE9VxYCJ4oS6xw4Pjg==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", @@ -6518,29 +6730,29 @@ } }, "node_modules/expo": { - "version": "54.0.34", - "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.34.tgz", - "integrity": "sha512-XkVHguZZDC8BcTQxHAd14/TQFbDp1Wt0Z/KApO9t68Ll5A127hLCPzU+a9gytfCIiyL/V1IpF1vIcOLKEVAoNQ==", + "version": "54.0.35", + "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.35.tgz", + "integrity": "sha512-E+tXpQwjGm5fK/uwa55p0Xx/kuo5dXDKfVJ95IargTNa5KiFt26lSTXXa9KnHbI4EDLwFD38/xTKZvzPTlGTdg==", "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.24", + "@expo/cli": "54.0.25", "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/devtools": "0.1.8", "@expo/fingerprint": "0.15.5", "@expo/metro": "~54.2.0", - "@expo/metro-config": "54.0.15", + "@expo/metro-config": "54.0.16", "@expo/vector-icons": "^15.0.3", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~54.0.10", + "babel-preset-expo": "~54.0.11", "expo-asset": "~12.0.13", "expo-constants": "~18.0.13", - "expo-file-system": "~19.0.22", - "expo-font": "~14.0.11", + "expo-file-system": "~19.0.23", + "expo-font": "~14.0.12", "expo-keep-awake": "~15.0.8", - "expo-modules-autolinking": "3.0.25", + "expo-modules-autolinking": "3.0.26", "expo-modules-core": "3.0.30", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", @@ -6586,9 +6798,9 @@ } }, "node_modules/expo-clipboard": { - "version": "56.0.3", - "resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-56.0.3.tgz", - "integrity": "sha512-8mCdhmAomm0yBIonJFjAhKUXvSkc2avdNh4+rBwoe7DSWF2AC4w3uy+pa419rvVFbTyVxOBmh83UHAbUwD6qAg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-8.0.8.tgz", + "integrity": "sha512-VKoBkHIpZZDJTB0jRO4/PZskHdMNOEz3P/41tmM6fDuODMpqhvyWK053X0ebspkxiawJX9lX33JXHBCvVsTTOA==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -6611,10 +6823,83 @@ "react-native": "*" } }, + "node_modules/expo-dev-client": { + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-6.0.21.tgz", + "integrity": "sha512-SWI6HD0pa4eJujkYFkvvpezUE1zmJXGLu+34azpu7+QJgO+FLutDYDj8BSTdeH/NYDEClDFjCGqVMcWETvmsCQ==", + "license": "MIT", + "dependencies": { + "expo-dev-launcher": "6.0.21", + "expo-dev-menu": "7.0.19", + "expo-dev-menu-interface": "2.0.0", + "expo-manifests": "~1.0.11", + "expo-updates-interface": "~2.0.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-launcher": { + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-6.0.21.tgz", + "integrity": "sha512-QZ9gcKMZbp6EsIhzS0QoGB8Cf4xeVJhjbNgWUwcoBIk8gshoFz8CkCQOnX+HNv2sSY3rdCaNpx3Xo0Rflyq7rA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.11.0", + "expo-dev-menu": "7.0.19", + "expo-manifests": "~1.0.11" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-launcher/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/expo-dev-launcher/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/expo-dev-menu": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-7.0.19.tgz", + "integrity": "sha512-ju5MZiBCPhUKKvHy0ElZdnlhq01mkEEiR8jfrgQVvW26aWjzjLiOhppNAyXtvGbhk7WxJim3wYMiqFFrjGdfKA==", + "license": "MIT", + "dependencies": { + "expo-dev-menu-interface": "2.0.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-menu-interface": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/expo-dev-menu-interface/-/expo-dev-menu-interface-2.0.0.tgz", + "integrity": "sha512-BvAMPt6x+vyXpThsyjjOYyjwfjREV4OOpQkZ0tNl+nGpsPfcY9mc6DRACoWnH9KpLzyIt3BOgh3cuy/h/OxQjw==", + "license": "MIT", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-file-system": { - "version": "56.0.7", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-56.0.7.tgz", - "integrity": "sha512-dcKzo8ShPloM7jgfnMcJStgQebhP8owVjCkNI/aX6NMFV1CYB8bxKGMdnzJ3mXk5nfaiW+F/lSKr2UIJ02WAUA==", + "version": "19.0.23", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.23.tgz", + "integrity": "sha512-MeGkid9OeNILfT/qonaXHp4f2c15xaB28U/bcN7pqZej0Kx0+6+V7e9ZIXpPHm07zVatxA+QkMTPQEGfmvVOxA==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -6622,9 +6907,9 @@ } }, "node_modules/expo-font": { - "version": "14.0.11", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.11.tgz", - "integrity": "sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==", + "version": "14.0.12", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.12.tgz", + "integrity": "sha512-QQzunE2Mxk45AsCWm3tK7OpVljbtVnKD58q4/qliev+cbye1IOduUnRIdD+P7DyButw17G9MTX795kgaQiz5hQ==", "license": "MIT", "peer": true, "dependencies": { @@ -6662,6 +6947,12 @@ } } }, + "node_modules/expo-json-utils": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.15.0.tgz", + "integrity": "sha512-duRT6oGl80IDzH2LD2yEFWNwGIC2WkozsB6HF3cDYNoNNdUvFk6uN3YiwsTsqVM/D0z6LEAQ01/SlYvN+Fw0JQ==", + "license": "MIT" + }, "node_modules/expo-keep-awake": { "version": "15.0.8", "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-15.0.8.tgz", @@ -6687,10 +6978,23 @@ "react-native": "*" } }, + "node_modules/expo-manifests": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-1.0.11.tgz", + "integrity": "sha512-6zItytTewN37Cjhp3glUg0ozrgW2GwB8x9wtfzUNoJIMmxO38nnGdTLMaotYhRqdf5PP2Dzdmej1HDHXVNUpRw==", + "license": "MIT", + "dependencies": { + "@expo/config": "~12.0.13", + "expo-json-utils": "~0.15.0" + }, + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-maps": { - "version": "56.0.6", - "resolved": "https://registry.npmjs.org/expo-maps/-/expo-maps-56.0.6.tgz", - "integrity": "sha512-oCivL/WGeNzhDb6vGoAHbzL9QkaqiBh6GMtgvHdlwiOx6kS6YE+/bUeg7D1072qsPIT6+UYz1yt90+MM1eXJRA==", + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/expo-maps/-/expo-maps-0.12.10.tgz", + "integrity": "sha512-GmfWoUqhV7MIj6vYiK/JoH9jaVHB3ktJprDLIL/5WhDbR7lxJLLMzH7dGjaUJx+gyMaBnzRRGzF0WJbY+1RYOw==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -6699,9 +7003,9 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.25.tgz", - "integrity": "sha512-YmHWctJlwvOuLZccg3cOXvSiXVJrPMKl7g2YR0YHWoGL9v2RvcmgaPJWPSLVW+voNEgEPsbo5UmUrAqbnYcBeg==", + "version": "3.0.26", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.26.tgz", + "integrity": "sha512-WOaud6UKg16ciCOj8raKcMOoKFMHLXKI29U29yhgu1lf+Y7VxJyCktUcYo6AM+ccZ7zLD1uWZdMtgnpf+95OXA==", "license": "MIT", "dependencies": { "@expo/spawn-async": "^1.7.2", @@ -6728,9 +7032,9 @@ } }, "node_modules/expo-router": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.23.tgz", - "integrity": "sha512-qCxVAiCrCyu0npky6azEZ6dJDMt77OmCzEbpF6RbUTlfkaCA417LvY14SBkk0xyGruSxy/7pvJOI6tuThaUVCA==", + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.24.tgz", + "integrity": "sha512-KIssKXnwjrdCxPWC8GsMTfKTwng40VrCsO16O9x6fKlfUwBW8itxY9PpCGyQeMJkiEADa+DUhtrDgl+uHg4/DA==", "license": "MIT", "dependencies": { "@expo/metro-runtime": "^6.1.2", @@ -6743,7 +7047,7 @@ "client-only": "^0.0.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", - "expo-server": "^1.0.5", + "expo-server": "^1.0.7", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", @@ -6763,7 +7067,7 @@ "@testing-library/react-native": ">= 12.0.0", "expo": "*", "expo-constants": "^18.0.13", - "expo-linking": "^8.0.11", + "expo-linking": "^8.0.12", "react": "*", "react-dom": "*", "react-native": "*", @@ -6981,107 +7285,21 @@ } }, "node_modules/expo-server": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.6.tgz", - "integrity": "sha512-vb5TBtskvEdzYuW79lATXutOEBfW5m6U4EFpNjCVZTnI7S//SAsLQkYEpn+EDfn84m6VQfzSGkIVR6YPaScKFA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.7.tgz", + "integrity": "sha512-mcmyML3oXcqFUXUxtdtCL1O00ztNI2v76d+MdniXRUgHNxIcHZ05zo+DqBaOOT6LQnPk4vA4YHqQl7iGUfRb3g==", "license": "MIT", "engines": { "node": ">=20.16.0" } }, "node_modules/expo-sharing": { - "version": "56.0.13", - "resolved": "https://registry.npmjs.org/expo-sharing/-/expo-sharing-56.0.13.tgz", - "integrity": "sha512-Yz6mBSqbU5dM6UzCjkKr1+B0JKADRuGj4Dokgs2fLysRTyjvO4mbmSTyY7AGQx3VYz0IUMoyPg4zqvsWPEFeDg==", + "version": "14.0.8", + "resolved": "https://registry.npmjs.org/expo-sharing/-/expo-sharing-14.0.8.tgz", + "integrity": "sha512-A1pPr2iBrxypFDCWVAESk532HK+db7MFXbvO2sCV9ienaFXAk7lIBm6bkqgE6vzRd9O3RGdEGzYx80cYlc089Q==", "license": "MIT", - "dependencies": { - "@expo/config-plugins": "^56.0.8", - "@expo/config-types": "^56.0.5", - "@expo/plist": "^0.7.0" - }, "peerDependencies": { - "expo": "*", - "react": "*", - "react-native": "*" - } - }, - "node_modules/expo-sharing/node_modules/@expo/config-plugins": { - "version": "56.0.8", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-56.0.8.tgz", - "integrity": "sha512-phTuyBhgVLfqUHMjQkAfRtbyoY6yTxoKja1awtpVnEkoJDxPJuXx1KX5uvq1eZtt4bJQ08OBJ6P95INqRSHpRg==", - "license": "MIT", - "dependencies": { - "@expo/config-types": "^56.0.5", - "@expo/json-file": "~10.2.0", - "@expo/plist": "^0.7.0", - "@expo/require-utils": "^56.1.3", - "@expo/sdk-runtime-versions": "^1.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.5", - "getenv": "^2.0.0", - "glob": "^13.0.0", - "semver": "^7.5.4", - "slugify": "^1.6.6", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - } - }, - "node_modules/expo-sharing/node_modules/@expo/config-types": { - "version": "56.0.5", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-56.0.5.tgz", - "integrity": "sha512-GsAHO/MwW9ZRdgnmyfRXqVGLCP/zejD6rWnp5OROp8mBGRObKm4HfrjlUyT1skjMwCj1OrURx9ZfIc6yeBAkIA==", - "license": "MIT" - }, - "node_modules/expo-sharing/node_modules/@expo/json-file": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.2.0.tgz", - "integrity": "sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.20.0", - "json5": "^2.2.3" - } - }, - "node_modules/expo-sharing/node_modules/@expo/plist": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.7.0.tgz", - "integrity": "sha512-vrpryU1GoqSIRNqRB2D3IjXDmzNYfiQpEF6AH/xknlD7eiYmEDt3mb26V7cLcedcPG8PY/1xWHdBXVQJfEAh6Q==", - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - } - }, - "node_modules/expo-sharing/node_modules/@expo/require-utils": { - "version": "56.1.3", - "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-56.1.3.tgz", - "integrity": "sha512-KyLeOn/zzQSvuPpV5YhB/FPKnpQytno4luN918bGdPDssLBoS3N/0UbC3W0rJAn9kSFu+XpfR81eABRVsSdfgQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.20.0", - "@babel/core": "^7.25.2", - "@babel/plugin-transform-modules-commonjs": "^7.24.8" - }, - "peerDependencies": { - "typescript": "^5.0.0 || ^5.0.0-0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/expo-sharing/node_modules/semver": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", - "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "expo": "*" } }, "node_modules/expo-splash-screen": { @@ -7142,6 +7360,15 @@ } } }, + "node_modules/expo-updates-interface": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-2.0.0.tgz", + "integrity": "sha512-pTzAIufEZdVPKql6iMi5ylVSPqV1qbEopz9G6TSECQmnNde2nwq42PxdFBaUEd8IZJ/fdJLQnOT3m6+XJ5s7jg==", + "license": "MIT", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-web-browser": { "version": "15.0.11", "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-15.0.11.tgz", @@ -7152,196 +7379,6 @@ "react-native": "*" } }, - "node_modules/expo/node_modules/@expo/cli": { - "version": "54.0.24", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.24.tgz", - "integrity": "sha512-5xse1bEgnVUBhOrtttc6xTNJVvjyTRavpzuF0/0nuj+312vfSbk7EiRbG+xJ2pW/iZxnhLPJkFCrPYG0nmheAQ==", - "license": "MIT", - "dependencies": { - "@0no-co/graphql.web": "^1.0.8", - "@expo/code-signing-certificates": "^0.0.6", - "@expo/config": "~12.0.13", - "@expo/config-plugins": "~54.0.4", - "@expo/devcert": "^1.2.1", - "@expo/env": "~2.0.8", - "@expo/image-utils": "^0.8.8", - "@expo/json-file": "^10.0.8", - "@expo/metro": "~54.2.0", - "@expo/metro-config": "~54.0.15", - "@expo/osascript": "^2.3.8", - "@expo/package-manager": "^1.9.10", - "@expo/plist": "^0.4.8", - "@expo/prebuild-config": "^54.0.8", - "@expo/schema-utils": "^0.1.8", - "@expo/spawn-async": "^1.7.2", - "@expo/ws-tunnel": "^1.0.1", - "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "0.81.5", - "@urql/core": "^5.0.6", - "@urql/exchange-retry": "^1.3.0", - "accepts": "^1.3.8", - "arg": "^5.0.2", - "better-opn": "~3.0.2", - "bplist-creator": "0.1.0", - "bplist-parser": "^0.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "compression": "^1.7.4", - "connect": "^3.7.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "expo-server": "^1.0.6", - "freeport-async": "^2.0.0", - "getenv": "^2.0.0", - "glob": "^13.0.0", - "lan-network": "^0.2.1", - "minimatch": "^9.0.0", - "node-forge": "^1.3.3", - "npm-package-arg": "^11.0.0", - "ora": "^3.4.0", - "picomatch": "^4.0.3", - "pretty-bytes": "^5.6.0", - "pretty-format": "^29.7.0", - "progress": "^2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve": "^1.22.2", - "resolve-from": "^5.0.0", - "resolve.exports": "^2.0.3", - "semver": "^7.6.0", - "send": "^0.19.0", - "slugify": "^1.3.4", - "source-map-support": "~0.5.21", - "stacktrace-parser": "^0.1.10", - "structured-headers": "^0.4.1", - "tar": "^7.5.2", - "terminal-link": "^2.1.1", - "undici": "^6.18.2", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" - }, - "bin": { - "expo-internal": "build/bin/cli" - }, - "peerDependencies": { - "expo": "*", - "expo-router": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "expo-router": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/expo/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/expo/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/expo/node_modules/expo-file-system": { - "version": "19.0.22", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.22.tgz", - "integrity": "sha512-l9pgahSc7sJD0bP9vBNeXvZjy8QKDpVHVxWmei/ESQOrzmoj5BidziqLVsyZdxsi+PfdbTtttLTAmddH/JafYA==", - "license": "MIT", - "peerDependencies": { - "expo": "*", - "react-native": "*" - } - }, - "node_modules/expo/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/expo/node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/expo/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo/node_modules/ws": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", - "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/exponential-backoff": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", @@ -7367,6 +7404,22 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz", + "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -7799,9 +7852,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -8916,9 +8969,19 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -10125,9 +10188,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -11098,6 +11161,7 @@ "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.7.tgz", "integrity": "sha512-Q4H6xA3Tn7QL0/E/KjI86I1KK4tcf+ErRE04LH34Etka2oVQhW6oXQ+Q8ZcDCVxiWp5vgbBH6XcH8BOo4w/Rhg==", "license": "MIT", + "peer": true, "dependencies": { "react-native-is-edge-to-edge": "^1.2.1", "semver": "^7.7.2" @@ -11214,9 +11278,9 @@ "license": "MIT" }, "node_modules/react-native-webview": { - "version": "13.16.1", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.16.1.tgz", - "integrity": "sha512-If0eHhoEdOYDcHsX+xBFwHMbWBGK1BvGDQDQdVkwtSIXiq1uiqjkpWVP2uQ1as94J0CzvFE9PUNDuhiX0Z6ubw==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.15.0.tgz", + "integrity": "sha512-Vzjgy8mmxa/JO6l5KZrsTC7YemSdq+qB01diA0FqjUTaWGAGwuykpJ73MDj3+mzBSlaDxAEugHzTtkUQkQEQeQ==", "license": "MIT", "peer": true, "dependencies": { @@ -11233,6 +11297,7 @@ "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz", "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==", "license": "MIT", + "peer": true, "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", "@babel/plugin-transform-class-properties": "^7.0.0-0", @@ -11330,9 +11395,9 @@ } }, "node_modules/react-native/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.4.tgz", + "integrity": "sha512-PNIUUyLI5YpkJZj60YBzX1o0ByQ4ovvfmq9N/Kig/PAYbVlGyz4R6G0SEWrD0O9acc0sT2+IdMBVLFv8FSi0Nw==", "license": "MIT", "dependencies": { "async-limiter": "~1.0.0" @@ -11973,9 +12038,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -12542,9 +12607,9 @@ "license": "CC0-1.0" }, "node_modules/tar": { - "version": "7.5.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", - "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -12938,9 +13003,9 @@ } }, "node_modules/undici": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", - "integrity": "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz", + "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==", "license": "MIT", "engines": { "node": ">=18.17" @@ -13595,9 +13660,9 @@ } }, "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", + "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", "license": "MIT", "engines": { "node": ">=8.3.0" diff --git a/package.json b/package.json index 8b5111c..93cc9d9 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "scripts": { "start": "expo start", "reset-project": "node ./scripts/reset-project.js", - "android": "expo start --android", - "ios": "expo start --ios", + "android": "expo run:android", + "ios": "expo run:ios", "web": "expo start --web", "lint": "expo lint" }, @@ -16,18 +16,20 @@ "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/elements": "^2.6.3", "@react-navigation/native": "^7.1.8", + "babel-preset-expo": "~54.0.10", "crypto-js": "^4.2.0", - "expo": "~54.0.33", - "expo-clipboard": "^56.0.3", + "expo": "~54.0.35", + "expo-clipboard": "~8.0.8", "expo-constants": "~18.0.13", - "expo-file-system": "^56.0.7", - "expo-font": "~14.0.11", + "expo-dev-client": "~6.0.21", + "expo-file-system": "~19.0.23", + "expo-font": "~14.0.12", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", "expo-linking": "~8.0.12", - "expo-maps": "^56.0.6", - "expo-router": "~6.0.23", - "expo-sharing": "^56.0.13", + "expo-maps": "~0.12.10", + "expo-router": "~6.0.24", + "expo-sharing": "~14.0.8", "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", "expo-symbols": "~1.0.8", @@ -42,7 +44,7 @@ "react-native-screens": "~4.16.0", "react-native-svg": "15.12.1", "react-native-web": "~0.21.0", - "react-native-webview": "^13.16.1", + "react-native-webview": "13.15.0", "react-native-worklets": "0.5.1" }, "devDependencies": { diff --git a/styles/screens/auth/recover.styles.ts b/styles/screens/auth/recover.styles.ts index f7ac8ce..5a57679 100644 --- a/styles/screens/auth/recover.styles.ts +++ b/styles/screens/auth/recover.styles.ts @@ -36,7 +36,7 @@ export default StyleSheet.create({ }, title: { color: colors.branco, - fontSize: 36, + fontSize: 32, fontFamily: fonts.bold, marginBottom: 6, }, diff --git a/styles/screens/reserva/detail.styles.ts b/styles/screens/reserva/detail.styles.ts index eb5b7e7..8a8b0fd 100644 --- a/styles/screens/reserva/detail.styles.ts +++ b/styles/screens/reserva/detail.styles.ts @@ -22,8 +22,8 @@ export default StyleSheet.create({ justifyContent: 'center', }, logo: { - width: 150, - height: 34, + width: 180, + height: 60, }, centered: { flex: 1, diff --git a/styles/screens/tabs/home.styles.ts b/styles/screens/tabs/home.styles.ts index f56007a..10fa67a 100644 --- a/styles/screens/tabs/home.styles.ts +++ b/styles/screens/tabs/home.styles.ts @@ -56,6 +56,9 @@ export default StyleSheet.create({ height: 38, marginBottom: 5, }, + statIconSvg: { + marginBottom: 5, + }, statLabel: { fontSize: 14, color: colors.azul, @@ -64,10 +67,11 @@ export default StyleSheet.create({ textAlign: 'center', }, statValue: { - fontSize: 24, + fontSize: 18, color: colors.azul, fontFamily: fonts.medium, - lineHeight: 32, + lineHeight: 24, + textAlign: 'center', }, statLabelPrimary: { fontSize: 14, @@ -77,10 +81,11 @@ export default StyleSheet.create({ textAlign: 'center', }, statValuePrimary: { - fontSize: 24, + fontSize: 18, color: colors.branco, fontFamily: fonts.medium, - lineHeight: 32, + lineHeight: 24, + textAlign: 'center', }, sectionTitle: { fontSize: 24, @@ -165,9 +170,11 @@ export default StyleSheet.create({ justifyContent: 'center', gap: 4, flexShrink: 1, + minWidth: 0, }, statusText: { flexShrink: 1, + minWidth: 0, fontSize: 12, fontFamily: fonts.medium, textAlign: 'center',