Update icons with pointerEvents="none" and upgrade lucide-react-native to v0.563.0

This commit is contained in:
2026-02-17 10:22:18 +01:00
parent cded5e8f00
commit 68e25fac71
27 changed files with 106 additions and 128 deletions

View File

@@ -1 +0,0 @@
{ "recommendations": ["expo.vscode-expo-tools"] }

View File

@@ -1,7 +0,0 @@
{
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit",
"source.sortMembers": "explicit"
}
}

View File

@@ -1,7 +1,7 @@
{ {
"expo": { "expo": {
"name": "Mariani", "name": "Mariani",
"slug": "mariani-app", "slug": "mariani_app",
"version": "1.0.0", "version": "1.0.0",
"orientation": "portrait", "orientation": "portrait",
"icon": "./assets/images/mariani-icon.png", "icon": "./assets/images/mariani-icon.png",
@@ -25,7 +25,7 @@
"android.permission.CAMERA", "android.permission.CAMERA",
"android.permission.RECORD_AUDIO" "android.permission.RECORD_AUDIO"
], ],
"package": "com.pcrt.mariani-app" "package": "com.pcrt.mariani_app"
}, },
"web": { "web": {
"output": "static", "output": "static",

View File

@@ -2,12 +2,12 @@ import { Redirect, Tabs } from 'expo-router';
import { Home, Clock, Zap, CalendarIcon, Building } from 'lucide-react-native'; import { Home, Clock, Zap, CalendarIcon, Building } from 'lucide-react-native';
import { useContext } from 'react'; import { useContext } from 'react';
import { AuthContext } from '@/utils/authContext'; import { AuthContext } from '@/utils/authContext';
import { useSafeAreaInsets } from 'react-native-safe-area-context'; import {useSafeAreaInsets} from "react-native-safe-area-context";
export default function ProtectedLayout() { export default function ProtectedLayout() {
const authState = useContext(AuthContext); const authState = useContext(AuthContext);
const insets = useSafeAreaInsets(); const insets = useSafeAreaInsets();
if (!authState.isReady) { if (!authState.isReady) {
return null; return null;
} }
@@ -24,7 +24,7 @@ export default function ProtectedLayout() {
backgroundColor: '#ffffff', backgroundColor: '#ffffff',
borderTopWidth: 1, borderTopWidth: 1,
borderTopColor: '#f3f4f6', borderTopColor: '#f3f4f6',
height: 90, height: 70 + insets.bottom,
paddingBottom: insets.bottom, paddingBottom: insets.bottom,
paddingTop: 10, paddingTop: 10,
paddingHorizontal: 10, paddingHorizontal: 10,
@@ -43,28 +43,28 @@ export default function ProtectedLayout() {
name="index" name="index"
options={{ options={{
title: 'Home', title: 'Home',
tabBarIcon: ({ color, size }) => <Home color={color} size={24} />, tabBarIcon: ({ color, size }) => <Home pointerEvents="none" color={color} size={24} />,
}} }}
/> />
<Tabs.Screen <Tabs.Screen
name="attendance/index" name="attendance/index"
options={{ options={{
title: 'Presenze', title: 'Presenze',
tabBarIcon: ({ color, size }) => <Clock color={color} size={24} />, tabBarIcon: ({ color, size }) => <Clock pointerEvents="none" color={color} size={24} />,
}} }}
/> />
<Tabs.Screen <Tabs.Screen
name="permits/index" name="permits/index"
options={{ options={{
title: 'Permessi', title: 'Permessi',
tabBarIcon: ({ color, size }) => <CalendarIcon color={color} size={24} />, tabBarIcon: ({ color, size }) => <CalendarIcon pointerEvents="none" color={color} size={24} />,
}} }}
/> />
<Tabs.Screen <Tabs.Screen
name="sites" name="sites"
options={{ options={{
title: 'Cantieri', title: 'Cantieri',
tabBarIcon: ({ color, size }) => <Building color={color} size={24} />, tabBarIcon: ({ color, size }) => <Building pointerEvents="none" color={color} size={24} />,
}} }}
/> />
{/* // TODO: Probably needs to be restricted to admin */} {/* // TODO: Probably needs to be restricted to admin */}
@@ -72,7 +72,7 @@ export default function ProtectedLayout() {
name="automation" name="automation"
options={{ options={{
title: 'Domotica', title: 'Domotica',
tabBarIcon: ({ color, size }) => <Zap color={color} size={24} />, tabBarIcon: ({ color, size }) => <Zap pointerEvents="none" color={color} size={24} />,
}} }}
/> />
{/* TODO: Should be removed - move tabs inside (tabs) and refactor _layout */} {/* TODO: Should be removed - move tabs inside (tabs) and refactor _layout */}
@@ -85,4 +85,4 @@ export default function ProtectedLayout() {
/> />
</Tabs> </Tabs>
); );
} }

View File

@@ -139,7 +139,7 @@ export default function AttendanceScreen() {
{lastScan ? ( {lastScan ? (
<View className="w-full bg-green-50 border border-green-200 rounded-3xl p-5 mb-8 flex-row items-center gap-4 shadow-sm"> <View className="w-full bg-green-50 border border-green-200 rounded-3xl p-5 mb-8 flex-row items-center gap-4 shadow-sm">
<View className="bg-green-500 rounded-full p-3 shadow-lg shadow-green-500/40 flex-shrink-0"> <View className="bg-green-500 rounded-full p-3 shadow-lg shadow-green-500/40 flex-shrink-0">
<CheckCircle2 size={32} color="white" /> <CheckCircle2 size={32} color="white" pointerEvents="none" />
</View> </View>
<View className="flex-1"> <View className="flex-1">
<Text <Text
@@ -171,7 +171,7 @@ export default function AttendanceScreen() {
onPress={handleStartScan} onPress={handleStartScan}
className="bg-[#099499] rounded-2xl py-6 flex-row items-center justify-center active:bg-[#077d82] shadow-lg shadow-teal-900/20 active:scale-[0.98]" className="bg-[#099499] rounded-2xl py-6 flex-row items-center justify-center active:bg-[#077d82] shadow-lg shadow-teal-900/20 active:scale-[0.98]"
> >
{scannerType === 'qr' ? <QrCode color="white" size={32} /> : <Nfc color="white" size={32} />} {scannerType === 'qr' ? <QrCode color="white" size={32} pointerEvents="none" /> : <Nfc color="white" size={32} pointerEvents="none" />}
<Text className="text-white text-xl font-bold ml-3">Scansiona Codice</Text> <Text className="text-white text-xl font-bold ml-3">Scansiona Codice</Text>
</TouchableOpacity> </TouchableOpacity>

View File

@@ -84,7 +84,7 @@ export default function AutomationDetailScreen() {
if (!area) { if (!area) {
return ( return (
<View className="flex-1 items-center justify-center"> <View className="flex-1 items-center justify-center">
<WifiOff size={48} color="#9ca3af" /> <WifiOff size={48} color="#9ca3af" pointerEvents="none" />
<Text className="text-xl text-gray-600 font-bold mt-4">Area non trovata</Text> <Text className="text-xl text-gray-600 font-bold mt-4">Area non trovata</Text>
<Text className="text-gray-400 text-center mt-2 mb-4">L'area che stai cercando non esiste o è stata rimossa.</Text> <Text className="text-gray-400 text-center mt-2 mb-4">L'area che stai cercando non esiste o è stata rimossa.</Text>
<TouchableOpacity onPress={() => router.back()} className="mt-4 bg-[#099499] px-6 py-3 rounded-xl active:scale-95"> <TouchableOpacity onPress={() => router.back()} className="mt-4 bg-[#099499] px-6 py-3 rounded-xl active:scale-95">
@@ -101,7 +101,7 @@ export default function AutomationDetailScreen() {
<View className="flex-row justify-between items-center"> <View className="flex-row justify-between items-center">
<View className='flex-row items-center gap-4'> <View className='flex-row items-center gap-4'>
<TouchableOpacity onPress={() => router.back()} className='rounded-full active:bg-gray-100'> <TouchableOpacity onPress={() => router.back()} className='rounded-full active:bg-gray-100'>
<ChevronLeft size={28} color="#4b5563" /> <ChevronLeft size={28} color="#4b5563" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
<Text className="text-2xl font-bold text-gray-800">{area.name}</Text> <Text className="text-2xl font-bold text-gray-800">{area.name}</Text>
</View> </View>
@@ -122,7 +122,7 @@ export default function AutomationDetailScreen() {
</View> </View>
) : ( ) : (
<View className="items-center"> <View className="items-center">
<ServerOff size={48} color="#9ca3af" /> <ServerOff size={48} color="#9ca3af" pointerEvents="none" />
<Text className="text-lg text-gray-500 font-medium mt-4">Nessun dispositivo</Text> <Text className="text-lg text-gray-500 font-medium mt-4">Nessun dispositivo</Text>
<Text className="text-center text-gray-400 mt-2"> <Text className="text-center text-gray-400 mt-2">
Non ci sono dispositivi in quest'area. Non ci sono dispositivi in quest'area.

View File

@@ -95,7 +95,7 @@ export default function AutomationScreen() {
contentContainerClassName="flex-grow items-center justify-center pb-[100px]" contentContainerClassName="flex-grow items-center justify-center pb-[100px]"
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onRefresh} colors={['#099499']} tintColor={'#099499'} />} refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onRefresh} colors={['#099499']} tintColor={'#099499'} />}
> >
<WifiOff size={48} color="#9ca3af" /> <WifiOff size={48} color="#9ca3af" pointerEvents="none" />
<Text className="text-lg text-gray-500 font-medium mt-4">Errore di connessione</Text> <Text className="text-lg text-gray-500 font-medium mt-4">Errore di connessione</Text>
<Text className="text-center text-gray-400 mt-2 px-10"> <Text className="text-center text-gray-400 mt-2 px-10">
{connectionStatus.message} {connectionStatus.message}
@@ -162,7 +162,7 @@ export default function AutomationScreen() {
> >
<View className="flex-1 justify-between"> <View className="flex-1 justify-between">
<View className={`${bgColor} w-14 h-14 items-center justify-center rounded-2xl`}> <View className={`${bgColor} w-14 h-14 items-center justify-center rounded-2xl`}>
<IconComponent size={32} /> <IconComponent size={32} pointerEvents="none" />
</View> </View>
<View> <View>
<Text <Text
@@ -182,7 +182,7 @@ export default function AutomationScreen() {
</View> </View>
) : ( ) : (
<View className="mt-20 items-center justify-center"> <View className="mt-20 items-center justify-center">
<WifiOff size={48} color="#9ca3af" /> <WifiOff size={48} color="#9ca3af" pointerEvents="none" />
<Text className="text-lg text-gray-500 font-medium mt-4">Nessuna area trovata</Text> <Text className="text-lg text-gray-500 font-medium mt-4">Nessuna area trovata</Text>
<Text className="text-center text-gray-400 mt-2"> <Text className="text-center text-gray-400 mt-2">
{`Nessuna area per il piano "${selectedFloor}"`} {`Nessuna area per il piano "${selectedFloor}"`}

View File

@@ -79,7 +79,7 @@ export default function HomeScreen() {
</View> </View>
<View className="flex-row gap-4 flex-shrink-0"> <View className="flex-row gap-4 flex-shrink-0">
<TouchableOpacity className="p-3 bg-white/10 rounded-full active:bg-white/20" onPress={() => router.push('/profile')}> <TouchableOpacity className="p-3 bg-white/10 rounded-full active:bg-white/20" onPress={() => router.push('/profile')}>
<User size={28} color="white" /> <User size={28} color="white" pointerEvents="none"/>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
@@ -104,7 +104,7 @@ export default function HomeScreen() {
> >
<View className="flex-row items-center gap-5"> <View className="flex-row items-center gap-5">
<View className="bg-orange-100 p-4 rounded-full"> <View className="bg-orange-100 p-4 rounded-full">
<AlertTriangle size={32} color="#f97316" /> <AlertTriangle size={32} color="#f97316" pointerEvents="none"/>
</View> </View>
<View className="flex-1"> <View className="flex-1">
<Text className="font-bold text-gray-800 text-lg">Presenza incompleta</Text> <Text className="font-bold text-gray-800 text-lg">Presenza incompleta</Text>
@@ -123,7 +123,7 @@ export default function HomeScreen() {
className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-gray-100 active:scale-[0.98]" className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-gray-100 active:scale-[0.98]"
> >
<View className="w-20 h-20 rounded-full bg-teal-50 items-center justify-center mb-1"> <View className="w-20 h-20 rounded-full bg-teal-50 items-center justify-center mb-1">
<QrCode size={40} color="#099499" /> <QrCode size={40} color="#099499" pointerEvents="none"/>
</View> </View>
<Text className="text-lg font-bold text-gray-700 text-center">Nuova Presenza</Text> <Text className="text-lg font-bold text-gray-700 text-center">Nuova Presenza</Text>
</TouchableOpacity> </TouchableOpacity>
@@ -133,7 +133,7 @@ export default function HomeScreen() {
className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-gray-100 active:scale-[0.98]" className="flex-1 bg-white p-6 rounded-3xl shadow-sm items-center justify-center gap-4 border border-gray-100 active:scale-[0.98]"
> >
<View className="w-20 h-20 rounded-full bg-blue-50 items-center justify-center mb-1"> <View className="w-20 h-20 rounded-full bg-blue-50 items-center justify-center mb-1">
<CalendarDays size={40} color="#2563eb" /> <CalendarDays size={40} color="#2563eb" pointerEvents="none"/>
</View> </View>
<Text className="text-lg font-bold text-gray-700 text-center">Gestisci Permessi</Text> <Text className="text-lg font-bold text-gray-700 text-center">Gestisci Permessi</Text>
</TouchableOpacity> </TouchableOpacity>
@@ -159,7 +159,7 @@ export default function HomeScreen() {
{/* Icon */} {/* Icon */}
<View className={`${config.bg} p-4 rounded-2xl flex-shrink-0`}> <View className={`${config.bg} p-4 rounded-2xl flex-shrink-0`}>
<IconComponent size={24} color={config.color} /> <IconComponent size={24} color={config.color} pointerEvents="none"/>
</View> </View>
{/* Title and Subtitle */} {/* Title and Subtitle */}
@@ -206,4 +206,4 @@ export default function HomeScreen() {
</ScrollView> </ScrollView>
</View> </View>
); );
} }

View File

@@ -12,10 +12,10 @@ import { SafeAreaView } from 'react-native-safe-area-context';
// Icon Mapping // Icon Mapping
const typeIcons: Record<string, (color: string) => JSX.Element> = { const typeIcons: Record<string, (color: string) => JSX.Element> = {
Ferie: (color) => <CalendarIcon size={24} color={color} />, Ferie: (color) => <CalendarIcon size={24} color={color} pointerEvents="none" />,
Permesso: (color) => <Clock size={24} color={color} />, Permesso: (color) => <Clock size={24} color={color} pointerEvents="none" />,
Malattia: (color) => <Thermometer size={24} color={color} />, Malattia: (color) => <Thermometer size={24} color={color} pointerEvents="none" />,
Assenza: (color) => <CalendarX size={24} color={color} />, Assenza: (color) => <CalendarX size={24} color={color} pointerEvents="none" />,
}; };
export default function PermitsScreen() { export default function PermitsScreen() {
@@ -155,7 +155,7 @@ export default function PermitsScreen() {
onPress={() => setShowModal(true)} onPress={() => setShowModal(true)}
className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90" className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90"
> >
<Plus size={32} color="white" /> <Plus size={32} color="white" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
); );

View File

@@ -110,7 +110,7 @@ export default function DocumentsScreen() {
<SafeAreaView edges={['top']} className='pt-5'> <SafeAreaView edges={['top']} className='pt-5'>
<View className='flex-row items-center gap-4'> <View className='flex-row items-center gap-4'>
<TouchableOpacity onPress={() => router.back()} className="p-2 rounded-full active:bg-gray-100"> <TouchableOpacity onPress={() => router.back()} className="p-2 rounded-full active:bg-gray-100">
<ChevronLeft size={28} color="#4b5563" /> <ChevronLeft size={28} color="#4b5563" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
<View className="flex-1"> <View className="flex-1">
<Text className="text-3xl font-bold text-gray-800">Documenti</Text> <Text className="text-3xl font-bold text-gray-800">Documenti</Text>
@@ -126,7 +126,7 @@ export default function DocumentsScreen() {
{/* Search Bar */} {/* Search Bar */}
<View className={`flex-1 relative justify-center`}> <View className={`flex-1 relative justify-center`}>
<View className="absolute left-4 z-10"> <View className="absolute left-4 z-10">
<Search size={24} color="#9ca3af" /> <Search size={24} color="#9ca3af" pointerEvents="none" />
</View> </View>
<TextInput <TextInput
placeholder="Cerca nome del documento..." placeholder="Cerca nome del documento..."
@@ -142,7 +142,7 @@ export default function DocumentsScreen() {
onPress={() => setShowRangePicker(true)} onPress={() => setShowRangePicker(true)}
className={`p-4 bg-white rounded-2xl shadow-sm border ${range.startDate ? 'border-[#099499]' : 'border-gray-200'}`} className={`p-4 bg-white rounded-2xl shadow-sm border ${range.startDate ? 'border-[#099499]' : 'border-gray-200'}`}
> >
<CalendarIcon size={24} color={range.startDate ? "#099499" : "#9ca3af"} /> <CalendarIcon size={24} color={range.startDate ? "#099499" : "#9ca3af"} pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@@ -166,12 +166,12 @@ export default function DocumentsScreen() {
<View key={doc.id} className="bg-white p-5 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100"> <View key={doc.id} className="bg-white p-5 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100">
<View className="flex-row items-center gap-5 flex-1"> <View className="flex-row items-center gap-5 flex-1">
<View className="bg-red-50 p-4 rounded-2xl"> <View className="bg-red-50 p-4 rounded-2xl">
<FileText size={32} color="#ef4444" /> <FileText size={32} color="#ef4444" pointerEvents="none" />
</View> </View>
<View className="flex-1"> <View className="flex-1">
<Text className="font-bold text-gray-800 text-lg mb-1">{doc.title}</Text> <Text className="font-bold text-gray-800 text-lg mb-1">{doc.title}</Text>
<View className="flex-row items-center mt-1"> <View className="flex-row items-center mt-1">
<MapPin size={16} color="#9ca3af" /> <MapPin size={16} color="#9ca3af" pointerEvents="none" />
<Text className="text-sm text-gray-400 ml-1 font-medium">{formatTimestamp(doc.updated_at)}</Text> <Text className="text-sm text-gray-400 ml-1 font-medium">{formatTimestamp(doc.updated_at)}</Text>
</View> </View>
</View> </View>
@@ -179,7 +179,7 @@ export default function DocumentsScreen() {
<TouchableOpacity <TouchableOpacity
onPress={() => downloadAndShareDocument(doc.mimetype, doc.title, doc.url)} onPress={() => downloadAndShareDocument(doc.mimetype, doc.title, doc.url)}
className="p-4 bg-gray-50 rounded-2xl active:bg-gray-100"> className="p-4 bg-gray-50 rounded-2xl active:bg-gray-100">
<Download size={24} color="#6b7280" /> <Download size={24} color="#6b7280" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
))} ))}
@@ -195,7 +195,7 @@ export default function DocumentsScreen() {
onPress={() => setShowUploadModal(true)} onPress={() => setShowUploadModal(true)}
className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90" className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90"
> >
<Plus size={32} color="white" /> <Plus size={32} color="white" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
{/* Document Upload Modal */} {/* Document Upload Modal */}

View File

@@ -22,7 +22,7 @@ export default function ProfileScreen() {
<TouchableOpacity <TouchableOpacity
onPress={() => router.back()} onPress={() => router.back()}
> >
<ChevronLeft size={28} color="white" /> <ChevronLeft size={28} color="white" pointerEvents="none"/>
</TouchableOpacity> </TouchableOpacity>
<View className="flex-row items-center gap-4"> <View className="flex-row items-center gap-4">
<View className="w-16 h-16 rounded-full bg-white/20 items-center justify-center"> <View className="w-16 h-16 rounded-full bg-white/20 items-center justify-center">
@@ -50,7 +50,7 @@ export default function ProfileScreen() {
<View className="mt-6 gap-5"> <View className="mt-6 gap-5">
<View className="flex-row items-center gap-5"> <View className="flex-row items-center gap-5">
<View className="w-14 h-14 bg-gray-100 rounded-2xl items-center justify-center"> <View className="w-14 h-14 bg-gray-100 rounded-2xl items-center justify-center">
<Mail size={24} color="#374151" /> <Mail size={24} color="#374151" pointerEvents="none" />
</View> </View>
<View> <View>
<Text className="text-lg text-gray-700 font-bold">Email</Text> <Text className="text-lg text-gray-700 font-bold">Email</Text>
@@ -60,7 +60,7 @@ export default function ProfileScreen() {
<View className="flex-row items-center gap-5"> <View className="flex-row items-center gap-5">
<View className="w-14 h-14 bg-gray-100 rounded-2xl items-center justify-center"> <View className="w-14 h-14 bg-gray-100 rounded-2xl items-center justify-center">
<User size={24} color="#374151" /> <User size={24} color="#374151" pointerEvents="none" />
</View> </View>
<View> <View>
<Text className="text-lg text-gray-700 font-bold">Ruolo</Text> <Text className="text-lg text-gray-700 font-bold">Ruolo</Text>
@@ -77,7 +77,7 @@ export default function ProfileScreen() {
<TouchableOpacity onPress={() => router.push('/profile/documents')} className="bg-white p-4 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100 mb-4"> <TouchableOpacity onPress={() => router.push('/profile/documents')} className="bg-white p-4 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100 mb-4">
<View className="flex-row items-center gap-5"> <View className="flex-row items-center gap-5">
<View className="bg-[#099499]/10 p-3.5 rounded-2xl"> <View className="bg-[#099499]/10 p-3.5 rounded-2xl">
<FileText size={26} color="#099499" /> <FileText size={26} color="#099499" pointerEvents="none" />
</View> </View>
<View> <View>
<Text className="text-lg text-gray-800 font-bold">I miei documenti</Text> <Text className="text-lg text-gray-800 font-bold">I miei documenti</Text>
@@ -104,7 +104,7 @@ export default function ProfileScreen() {
<TouchableOpacity onPress={authContext.logOut} className="bg-white p-4 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100"> <TouchableOpacity onPress={authContext.logOut} className="bg-white p-4 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100">
<View className="flex-row items-center gap-5"> <View className="flex-row items-center gap-5">
<View className="bg-red-50 p-3.5 rounded-2xl"> <View className="bg-red-50 p-3.5 rounded-2xl">
<LogOut size={26} color="#ef4444" /> <LogOut size={26} color="#ef4444" pointerEvents="none" />
</View> </View>
<View> <View>
<Text className="text-lg text-gray-800 font-bold">Esci</Text> <Text className="text-lg text-gray-800 font-bold">Esci</Text>
@@ -117,4 +117,4 @@ export default function ProfileScreen() {
</ScrollView> </ScrollView>
</View> </View>
); );
} }

View File

@@ -135,7 +135,7 @@ export default function SiteDocumentsScreen() {
<SafeAreaView edges={['top']} className='pt-5'> <SafeAreaView edges={['top']} className='pt-5'>
<View className='flex-row items-center gap-4'> <View className='flex-row items-center gap-4'>
<TouchableOpacity onPress={() => router.back()} className="p-2 -ml-2 rounded-full active:bg-gray-100"> <TouchableOpacity onPress={() => router.back()} className="p-2 -ml-2 rounded-full active:bg-gray-100">
<ChevronLeft size={28} color="#4b5563" /> <ChevronLeft size={28} color="#4b5563" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
<View className="flex-1"> <View className="flex-1">
@@ -168,7 +168,7 @@ export default function SiteDocumentsScreen() {
<View className="flex-row gap-2"> <View className="flex-row gap-2">
<View className="flex-1 relative justify-center"> <View className="flex-1 relative justify-center">
<View className="absolute left-4 z-10"> <View className="absolute left-4 z-10">
<Search size={24} color="#9ca3af" /> <Search size={24} color="#9ca3af" pointerEvents="none" />
</View> </View>
<TextInput <TextInput
placeholder="Cerca documento..." placeholder="Cerca documento..."
@@ -183,7 +183,7 @@ export default function SiteDocumentsScreen() {
onPress={() => setShowRangePicker(true)} onPress={() => setShowRangePicker(true)}
className={`p-4 bg-white rounded-2xl shadow-sm border ${range.startDate ? 'border-[#099499]' : 'border-gray-200'}`} className={`p-4 bg-white rounded-2xl shadow-sm border ${range.startDate ? 'border-[#099499]' : 'border-gray-200'}`}
> >
<CalendarIcon size={24} color={range.startDate ? "#099499" : "#9ca3af"} /> <CalendarIcon size={24} color={range.startDate ? "#099499" : "#9ca3af"} pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@@ -206,7 +206,7 @@ export default function SiteDocumentsScreen() {
<View key={doc.id} className="bg-white p-5 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100"> <View key={doc.id} className="bg-white p-5 rounded-3xl shadow-sm flex-row items-center justify-between border border-gray-100">
<View className="flex-row items-center gap-5 flex-1"> <View className="flex-row items-center gap-5 flex-1">
<View className="bg-red-50 p-4 rounded-2xl"> <View className="bg-red-50 p-4 rounded-2xl">
<FileText size={32} color="#ef4444" /> <FileText size={32} color="#ef4444" pointerEvents="none" />
</View> </View>
<View className="flex-1"> <View className="flex-1">
<Text className="font-bold text-gray-800 text-lg mb-1">{doc.title}</Text> <Text className="font-bold text-gray-800 text-lg mb-1">{doc.title}</Text>
@@ -216,7 +216,7 @@ export default function SiteDocumentsScreen() {
<TouchableOpacity <TouchableOpacity
onPress={() => handleDownloadAndShare(doc.mimetype, doc.title, doc.url)} onPress={() => handleDownloadAndShare(doc.mimetype, doc.title, doc.url)}
className="p-4 bg-gray-50 rounded-2xl active:bg-gray-100"> className="p-4 bg-gray-50 rounded-2xl active:bg-gray-100">
<Download size={24} color="#6b7280" /> <Download size={24} color="#6b7280" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
))} ))}
@@ -232,7 +232,7 @@ export default function SiteDocumentsScreen() {
onPress={() => setShowUploadModal(true)} onPress={() => setShowUploadModal(true)}
className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90" className="absolute bottom-8 right-6 w-16 h-16 bg-[#099499] rounded-full shadow-lg items-center justify-center active:scale-90"
> >
<Plus size={32} color="white" /> <Plus size={32} color="white" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
{/* Upload Document Modal */} {/* Upload Document Modal */}

View File

@@ -66,7 +66,7 @@ export default function SitesScreen() {
{/* Search Bar */} {/* Search Bar */}
<View className={`relative justify-center`}> <View className={`relative justify-center`}>
<View className="absolute left-4 z-10"> <View className="absolute left-4 z-10">
<Search size={24} color="#9ca3af" /> <Search size={24} color="#9ca3af" pointerEvents="none" />
</View> </View>
<TextInput <TextInput
placeholder="Cerca per codice o nome cantiere..." placeholder="Cerca per codice o nome cantiere..."
@@ -99,13 +99,13 @@ export default function SitesScreen() {
> >
<View className="flex-row items-center gap-5 flex-1"> <View className="flex-row items-center gap-5 flex-1">
<View className="bg-blue-50 p-4 rounded-2xl"> <View className="bg-blue-50 p-4 rounded-2xl">
<Building2 size={32} color="#2563eb" /> <Building2 size={32} color="#2563eb" pointerEvents="none" />
</View> </View>
<View className="flex-1"> <View className="flex-1">
<Text className="text-base font-medium text-gray-400 mb-0.5">{site.code}</Text> <Text className="text-base font-medium text-gray-400 mb-0.5">{site.code}</Text>
<Text className="font-bold text-gray-800 text-lg mb-1">{site.name}</Text> <Text className="font-bold text-gray-800 text-lg mb-1">{site.name}</Text>
<View className="flex-row items-center mt-1"> <View className="flex-row items-center mt-1">
<MapPin size={16} color="#9ca3af" /> <MapPin size={16} color="#9ca3af" pointerEvents="none" />
<Text className="text-sm text-gray-400 ml-1 font-medium"> <Text className="text-sm text-gray-400 ml-1 font-medium">
{site.attachments_count} Documenti disponibili {site.attachments_count} Documenti disponibili
</Text> </Text>
@@ -113,7 +113,7 @@ export default function SitesScreen() {
</View> </View>
</View> </View>
<ChevronRight size={24} color="#9ca3af" /> <ChevronRight size={24} color="#9ca3af" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
))} ))}

View File

@@ -85,7 +85,7 @@ export default function LoginScreen() {
<View> <View>
<Text className="text-gray-700 text-lg font-bold mb-3 ml-1">Username o Email</Text> <Text className="text-gray-700 text-lg font-bold mb-3 ml-1">Username o Email</Text>
<View className="flex-row items-center bg-gray-50 border border-gray-100 rounded-2xl h-16 px-4 flex"> <View className="flex-row items-center bg-gray-50 border border-gray-100 rounded-2xl h-16 px-4 flex">
<Mail size={24} color="#9ca3af" /> <Mail size={24} color="#9ca3af" pointerEvents="none" />
<TextInput <TextInput
className="flex-1 ml-4 text-gray-800 text-lg font-medium h-full w-full" className="flex-1 ml-4 text-gray-800 text-lg font-medium h-full w-full"
placeholder="mario.rossi@esempio.com" placeholder="mario.rossi@esempio.com"
@@ -102,7 +102,7 @@ export default function LoginScreen() {
<View> <View>
<Text className="text-gray-700 text-lg font-bold mb-3 ml-1">Password</Text> <Text className="text-gray-700 text-lg font-bold mb-3 ml-1">Password</Text>
<View className="flex-row items-center bg-gray-50 border border-gray-100 rounded-2xl h-16 px-4 flex"> <View className="flex-row items-center bg-gray-50 border border-gray-100 rounded-2xl h-16 px-4 flex">
<Lock size={24} color="#9ca3af" /> <Lock size={24} color="#9ca3af" pointerEvents="none" />
<TextInput <TextInput
className="flex-1 ml-4 text-gray-800 text-lg font-medium h-full w-full" className="flex-1 ml-4 text-gray-800 text-lg font-medium h-full w-full"
placeholder="••••••••" placeholder="••••••••"
@@ -113,9 +113,9 @@ export default function LoginScreen() {
/> />
<TouchableOpacity onPress={() => setShowPassword(!showPassword)}> <TouchableOpacity onPress={() => setShowPassword(!showPassword)}>
{showPassword ? ( {showPassword ? (
<EyeOff size={24} color="#6b7280" /> <EyeOff size={24} color="#6b7280" pointerEvents="none" />
) : ( ) : (
<Eye size={24} color="#6b7280" /> <Eye size={24} color="#6b7280" pointerEvents="none" />
)} )}
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@@ -135,7 +135,7 @@ export default function LoginScreen() {
<Text className="text-white text-xl font-bold mr-2"> <Text className="text-white text-xl font-bold mr-2">
{isLoading ? 'Accesso in corso...' : 'Accedi'} {isLoading ? 'Accesso in corso...' : 'Accedi'}
</Text> </Text>
{!isLoading && <LogIn size={24} color="white" />} {!isLoading && <LogIn size={24} color="white" pointerEvents="none" />}
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</ScrollView> </ScrollView>

View File

@@ -88,7 +88,7 @@ export default function AddDocumentModal({ visible, onClose, onUpload, isUploadi
<View className="flex-row justify-between items-center mb-6"> <View className="flex-row justify-between items-center mb-6">
<Text className="text-xl font-bold text-gray-800">Carica Documento</Text> <Text className="text-xl font-bold text-gray-800">Carica Documento</Text>
<TouchableOpacity onPress={onClose} className="p-2 bg-gray-50 rounded-full"> <TouchableOpacity onPress={onClose} className="p-2 bg-gray-50 rounded-full">
<X size={20} color="#374151" /> <X size={20} color="#374151" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@@ -100,7 +100,7 @@ export default function AddDocumentModal({ visible, onClose, onUpload, isUploadi
className="h-64 border-2 border-dashed border-gray-300 rounded-2xl items-center justify-center bg-gray-50 active:bg-gray-100" className="h-64 border-2 border-dashed border-gray-300 rounded-2xl items-center justify-center bg-gray-50 active:bg-gray-100"
> >
<View className="bg-white p-4 rounded-full shadow-sm mb-3"> <View className="bg-white p-4 rounded-full shadow-sm mb-3">
<Upload size={32} color="#099499" /> <Upload size={32} color="#099499" pointerEvents="none" />
</View> </View>
<Text className="text-lg text-gray-600 font-medium">Tocca per selezionare un file</Text> <Text className="text-lg text-gray-600 font-medium">Tocca per selezionare un file</Text>
<Text className="text-gray-400 text-sm mt-1">PDF, Immagini, Word</Text> <Text className="text-gray-400 text-sm mt-1">PDF, Immagini, Word</Text>
@@ -109,7 +109,7 @@ export default function AddDocumentModal({ visible, onClose, onUpload, isUploadi
// Selected File View // Selected File View
<View className="bg-[#E6F4F4] p-4 rounded-2xl border border-[#099499]/20 flex-row items-center gap-4"> <View className="bg-[#E6F4F4] p-4 rounded-2xl border border-[#099499]/20 flex-row items-center gap-4">
<View className="bg-white p-3 rounded-xl"> <View className="bg-white p-3 rounded-xl">
<FileText size={24} color="#099499" /> <FileText size={24} color="#099499" pointerEvents="none" />
</View> </View>
<View className="flex-1"> <View className="flex-1">
<Text className="text-gray-800 font-bold text-base" numberOfLines={1}> <Text className="text-gray-800 font-bold text-base" numberOfLines={1}>
@@ -120,7 +120,7 @@ export default function AddDocumentModal({ visible, onClose, onUpload, isUploadi
</Text> </Text>
</View> </View>
<TouchableOpacity onPress={removeFile} className="p-2 bg-white rounded-lg"> <TouchableOpacity onPress={removeFile} className="p-2 bg-white rounded-lg">
<Trash2 size={18} color="#ef4444" /> <Trash2 size={18} color="#ef4444" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
)} )}
@@ -163,7 +163,7 @@ export default function AddDocumentModal({ visible, onClose, onUpload, isUploadi
<ActivityIndicator color="white" /> <ActivityIndicator color="white" />
) : ( ) : (
<> <>
<Upload size={20} color="white" /> <Upload size={20} color="white" pointerEvents="none" />
<Text className="text-white font-bold text-base">Carica</Text> <Text className="text-white font-bold text-base">Carica</Text>
</> </>
)} )}

View File

@@ -81,7 +81,7 @@ export const AlertProvider = ({ children }: { children: ReactNode }) => {
{/* Icon Circle */} {/* Icon Circle */}
<View className={`${bgColor} p-4 rounded-full mb-4`}> <View className={`${bgColor} p-4 rounded-full mb-4`}>
<Icon size={32} className={color} strokeWidth={2.5} /> <Icon size={32} className={color} strokeWidth={2.5} pointerEvents="none" />
</View> </View>
{/* Texts */} {/* Texts */}

View File

@@ -12,8 +12,8 @@ export const AppDatePicker = (props: AppDatePickerProps) => {
{...props} {...props}
locale="it" locale="it"
components={{ components={{
IconPrev: <ChevronLeft size={24} color="#1f2937" />, IconPrev: <ChevronLeft size={24} color="#1f2937" pointerEvents="none" />,
IconNext: <ChevronRight size={24} color="#1f2937" />, IconNext: <ChevronRight size={24} color="#1f2937" pointerEvents="none" />,
...props.components, ...props.components,
}} }}
styles={{ styles={{

View File

@@ -57,7 +57,7 @@ export default function CalendarWidget({ events, types, onMonthChange }: Calenda
onPress={() => changeMonth(-1)} onPress={() => changeMonth(-1)}
className="p-2 bg-gray-50 rounded-full" className="p-2 bg-gray-50 rounded-full"
> >
<ChevronLeft size={24} color="#374151" /> <ChevronLeft size={24} color="#374151" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
<Text className="text-xl font-bold text-gray-800 capitalize"> <Text className="text-xl font-bold text-gray-800 capitalize">
{currentDate.toLocaleString('it-IT', { month: 'long', year: 'numeric' })} {currentDate.toLocaleString('it-IT', { month: 'long', year: 'numeric' })}
@@ -66,7 +66,7 @@ export default function CalendarWidget({ events, types, onMonthChange }: Calenda
onPress={() => changeMonth(1)} onPress={() => changeMonth(1)}
className="p-2 bg-gray-50 rounded-full" className="p-2 bg-gray-50 rounded-full"
> >
<ChevronRight size={24} color="#374151" /> <ChevronRight size={24} color="#374151" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>

View File

@@ -10,21 +10,21 @@ const DeviceCard = ({ device, onToggle }: { device: HaEntity; onToggle: (entityI
switch (domain) { switch (domain) {
case 'light': case 'light':
return <Lightbulb size={32} color="#f59e0b" />; return <Lightbulb size={32} color="#f59e0b" pointerEvents="none" />;
case 'switch': case 'switch':
return <Power size={32} color="#3b82f6" />; return <Power size={32} color="#3b82f6" pointerEvents="none" />;
case 'sensor': case 'sensor':
return <Cpu size={32} color="#ef4444" />; return <Cpu size={32} color="#ef4444" pointerEvents="none" />;
case 'lock': case 'lock':
return <Lock size={32} color="#10b981" />; return <Lock size={32} color="#10b981" pointerEvents="none" />;
case 'fan': case 'fan':
return <Fan size={32} color="#6b7280" />; return <Fan size={32} color="#6b7280" pointerEvents="none" />;
case 'camera': case 'camera':
return <Cctv size={32} color="#8b5cf6" />; return <Cctv size={32} color="#8b5cf6" pointerEvents="none" />;
case 'weather': case 'weather':
return <CloudSun size={32} color="#3b82f6" />; return <CloudSun size={32} color="#3b82f6" pointerEvents="none" />;
default: default:
return <Zap size={32} color="#8b5cf6" />; return <Zap size={32} color="#8b5cf6" pointerEvents="none" />;
} }
}; };

View File

@@ -112,7 +112,7 @@ export default function NfcScanModal({ visible, onClose, onScan }: NfcScanModalP
onPress={onClose} onPress={onClose}
className="absolute top-6 right-6 z-10 p-2 bg-gray-50 rounded-full" className="absolute top-6 right-6 z-10 p-2 bg-gray-50 rounded-full"
> >
<X size={20} color="#9ca3af" /> <X size={20} color="#9ca3af" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
{/* NFC Animated Area */} {/* NFC Animated Area */}
@@ -132,7 +132,7 @@ export default function NfcScanModal({ visible, onClose, onScan }: NfcScanModalP
{/* Fixed Circle (Foreground) */} {/* Fixed Circle (Foreground) */}
<View className="bg-[#E6F4F4] p-6 rounded-full border-4 border-white shadow-sm z-10"> <View className="bg-[#E6F4F4] p-6 rounded-full border-4 border-white shadow-sm z-10">
<SmartphoneNfc size={64} color="#099499" /> <SmartphoneNfc size={64} color="#099499" pointerEvents="none" />
</View> </View>
</View> </View>
@@ -147,7 +147,7 @@ export default function NfcScanModal({ visible, onClose, onScan }: NfcScanModalP
{/* Indicator (Wave Simulation) */} {/* Indicator (Wave Simulation) */}
<View className="flex-row gap-2 mt-8 items-center opacity-60"> <View className="flex-row gap-2 mt-8 items-center opacity-60">
<Radio size={20} color="#099499" /> <Radio size={20} color="#099499" pointerEvents="none" />
<Text className="text-[#099499] font-medium text-sm uppercase tracking-widest"> <Text className="text-[#099499] font-medium text-sm uppercase tracking-widest">
Ricerca in corso... Ricerca in corso...
</Text> </Text>

View File

@@ -14,7 +14,7 @@ export default function OfflineScreen({ onRetry, isRetrying = false }: OfflineSc
<View className="flex-1 items-center justify-center px-8"> <View className="flex-1 items-center justify-center px-8">
{/* Icon */} {/* Icon */}
<View className="bg-gray-100 p-6 rounded-full mb-6"> <View className="bg-gray-100 p-6 rounded-full mb-6">
<WifiOff size={64} className="text-gray-400" /> <WifiOff size={64} className="text-gray-400" pointerEvents="none" />
</View> </View>
<Text className="text-2xl font-bold text-gray-800 mb-2 text-center"> <Text className="text-2xl font-bold text-gray-800 mb-2 text-center">

View File

@@ -80,14 +80,14 @@ export default function QrScanModal({ visible, onClose, onScan }: QrScanModalPro
<View className="absolute bottom-0 right-0 w-6 h-6 border-r-4 border-b-4 border-[#099499]" /> <View className="absolute bottom-0 right-0 w-6 h-6 border-r-4 border-b-4 border-[#099499]" />
{/* Animated Scan Line or Icon */} {/* Animated Scan Line or Icon */}
{!scanned && <ScanLine color="#099499" size={40} className="opacity-50" />} {!scanned && <ScanLine color="#099499" size={40} className="opacity-50" pointerEvents="none" />}
</View> </View>
</View> </View>
{/* Footer Overlay */} {/* Footer Overlay */}
<View className="items-center justify-end pb-12"> <View className="items-center justify-end pb-12">
<TouchableOpacity onPress={onClose} className="bg-white/20 p-4 rounded-full"> <TouchableOpacity onPress={onClose} className="bg-white/20 p-4 rounded-full">
<X color="white" size={32} /> <X color="white" size={32} pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
<Text className="text-white mt-4 font-medium">Chiudi</Text> <Text className="text-white mt-4 font-medium">Chiudi</Text>
</View> </View>

View File

@@ -28,7 +28,7 @@ export const RangePickerModal = ({ visible, onClose, onApply }: any) => {
<View className="flex-row justify-between items-center mb-4"> <View className="flex-row justify-between items-center mb-4">
<Text className="text-xl font-bold text-gray-800">Seleziona Periodo</Text> <Text className="text-xl font-bold text-gray-800">Seleziona Periodo</Text>
<TouchableOpacity onPress={onClose} className="p-2 bg-gray-50 rounded-full"> <TouchableOpacity onPress={onClose} className="p-2 bg-gray-50 rounded-full">
<X size={20} color="#4b5563" /> <X size={20} color="#4b5563" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@@ -49,7 +49,7 @@ export const RangePickerModal = ({ visible, onClose, onApply }: any) => {
}} }}
className="mt-6 bg-[#099499] rounded-xl py-4 flex-row justify-center items-center active:bg-[#077d82]" className="mt-6 bg-[#099499] rounded-xl py-4 flex-row justify-center items-center active:bg-[#077d82]"
> >
<Check size={20} color="white" className="mr-2" /> <Check size={20} color="white" className="mr-2" pointerEvents="none" />
<Text className="text-white font-bold text-lg ml-2">Applica Filtro</Text> <Text className="text-white font-bold text-lg ml-2">Applica Filtro</Text>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity <TouchableOpacity

View File

@@ -112,7 +112,7 @@ export default function RequestPermitModal({ visible, types, onClose, onSubmit }
<View className="flex-row justify-between items-center mb-6"> <View className="flex-row justify-between items-center mb-6">
<Text className="text-2xl font-bold text-gray-800">Nuova Richiesta</Text> <Text className="text-2xl font-bold text-gray-800">Nuova Richiesta</Text>
<TouchableOpacity onPress={onClose} className="p-2 bg-gray-100 rounded-full"> <TouchableOpacity onPress={onClose} className="p-2 bg-gray-100 rounded-full">
<X size={24} color="#4b5563" /> <X size={24} color="#4b5563" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>

View File

@@ -40,7 +40,7 @@ export const TimePickerModal = ({ visible, initialDate, title, onConfirm, onClos
<View className="flex-row justify-between items-center mb-4"> <View className="flex-row justify-between items-center mb-4">
<Text className="text-lg font-bold text-gray-800">{title}</Text> <Text className="text-lg font-bold text-gray-800">{title}</Text>
<TouchableOpacity onPress={onClose} className="p-2 bg-gray-100 rounded-full"> <TouchableOpacity onPress={onClose} className="p-2 bg-gray-100 rounded-full">
<X size={20} color="#4b5563" /> <X size={20} color="#4b5563" pointerEvents="none" />
</TouchableOpacity> </TouchableOpacity>
</View> </View>

52
package-lock.json generated
View File

@@ -33,7 +33,7 @@
"expo-symbols": "~1.0.7", "expo-symbols": "~1.0.7",
"expo-system-ui": "~6.0.8", "expo-system-ui": "~6.0.8",
"expo-web-browser": "~15.0.9", "expo-web-browser": "~15.0.9",
"lucide-react-native": "^0.555.0", "lucide-react-native": "^0.563.0",
"nativewind": "^4.2.1", "nativewind": "^4.2.1",
"prettier-plugin-tailwindcss": "^0.5.14", "prettier-plugin-tailwindcss": "^0.5.14",
"react": "19.1.0", "react": "19.1.0",
@@ -111,7 +111,6 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5", "@babel/generator": "^7.28.5",
@@ -1493,7 +1492,6 @@
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
"integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
@@ -3166,7 +3164,6 @@
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.25.tgz", "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.25.tgz",
"integrity": "sha512-zQeWK9txDePWbYfqTs0C6jeRdJTm/7VhQtW/1IbJNDi9/rFIRzZule8bdQPAnf8QWUsNujRmi1J9OG/hhfbalg==", "integrity": "sha512-zQeWK9txDePWbYfqTs0C6jeRdJTm/7VhQtW/1IbJNDi9/rFIRzZule8bdQPAnf8QWUsNujRmi1J9OG/hhfbalg==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@react-navigation/core": "^7.13.6", "@react-navigation/core": "^7.13.6",
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
@@ -3365,7 +3362,6 @@
"integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==", "integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==",
"devOptional": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
@@ -3436,7 +3432,6 @@
"integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "8.49.0", "@typescript-eslint/scope-manager": "8.49.0",
"@typescript-eslint/types": "8.49.0", "@typescript-eslint/types": "8.49.0",
@@ -3998,7 +3993,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT", "license": "MIT",
"peer": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@@ -4661,7 +4655,8 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"license": "ISC" "license": "ISC",
"peer": true
}, },
"node_modules/bplist-creator": { "node_modules/bplist-creator": {
"version": "0.1.0", "version": "0.1.0",
@@ -4725,7 +4720,6 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"baseline-browser-mapping": "^2.9.0", "baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759", "caniuse-lite": "^1.0.30001759",
@@ -5286,6 +5280,7 @@
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
"integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"peer": true,
"dependencies": { "dependencies": {
"boolbase": "^1.0.0", "boolbase": "^1.0.0",
"css-what": "^6.1.0", "css-what": "^6.1.0",
@@ -5302,6 +5297,7 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
"integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"mdn-data": "2.0.14", "mdn-data": "2.0.14",
"source-map": "^0.6.1" "source-map": "^0.6.1"
@@ -5315,6 +5311,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"peer": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@@ -5324,6 +5321,7 @@
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
"integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"peer": true,
"engines": { "engines": {
"node": ">= 6" "node": ">= 6"
}, },
@@ -5591,6 +5589,7 @@
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
"domhandler": "^5.0.2", "domhandler": "^5.0.2",
@@ -5610,13 +5609,15 @@
"url": "https://github.com/sponsors/fb55" "url": "https://github.com/sponsors/fb55"
} }
], ],
"license": "BSD-2-Clause" "license": "BSD-2-Clause",
"peer": true
}, },
"node_modules/domhandler": { "node_modules/domhandler": {
"version": "5.0.3", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"peer": true,
"dependencies": { "dependencies": {
"domelementtype": "^2.3.0" "domelementtype": "^2.3.0"
}, },
@@ -5632,6 +5633,7 @@
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"peer": true,
"dependencies": { "dependencies": {
"dom-serializer": "^2.0.0", "dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
@@ -5714,6 +5716,7 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"peer": true,
"engines": { "engines": {
"node": ">=0.12" "node": ">=0.12"
}, },
@@ -5945,7 +5948,6 @@
"integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1", "@eslint-community/regexpp": "^4.12.1",
@@ -6142,7 +6144,6 @@
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@rtsao/scc": "^1.1.0", "@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.9", "array-includes": "^3.1.9",
@@ -6381,7 +6382,6 @@
"resolved": "https://registry.npmjs.org/expo/-/expo-54.0.27.tgz", "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.27.tgz",
"integrity": "sha512-50BcJs8eqGwRiMUoWwphkRGYtKFS2bBnemxLzy0lrGVA1E6F4Q7L5h3WT6w1ehEZybtOVkfJu4Z6GWo2IJcpEA==", "integrity": "sha512-50BcJs8eqGwRiMUoWwphkRGYtKFS2bBnemxLzy0lrGVA1E6F4Q7L5h3WT6w1ehEZybtOVkfJu4Z6GWo2IJcpEA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.0", "@babel/runtime": "^7.20.0",
"@expo/cli": "54.0.18", "@expo/cli": "54.0.18",
@@ -6469,7 +6469,6 @@
"resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.11.tgz", "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.11.tgz",
"integrity": "sha512-xnfrfZ7lHjb+03skhmDSYeFF7OU2K3Xn/lAeP+7RhkV2xp2f5RCKtOUYajCnYeZesvMrsUxOsbGOP2JXSOH3NA==", "integrity": "sha512-xnfrfZ7lHjb+03skhmDSYeFF7OU2K3Xn/lAeP+7RhkV2xp2f5RCKtOUYajCnYeZesvMrsUxOsbGOP2JXSOH3NA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@expo/config": "~12.0.11", "@expo/config": "~12.0.11",
"@expo/env": "~2.0.8" "@expo/env": "~2.0.8"
@@ -6576,7 +6575,6 @@
"resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.10.tgz", "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.10.tgz",
"integrity": "sha512-UqyNaaLKRpj4pKAP4HZSLnuDQqueaO5tB1c/NWu5vh1/LF9ulItyyg2kF/IpeOp0DeOLk0GY0HrIXaKUMrwB+Q==", "integrity": "sha512-UqyNaaLKRpj4pKAP4HZSLnuDQqueaO5tB1c/NWu5vh1/LF9ulItyyg2kF/IpeOp0DeOLk0GY0HrIXaKUMrwB+Q==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"fontfaceobserver": "^2.1.0" "fontfaceobserver": "^2.1.0"
}, },
@@ -8854,7 +8852,6 @@
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"license": "MIT", "license": "MIT",
"peer": true,
"bin": { "bin": {
"jiti": "bin/jiti.js" "jiti": "bin/jiti.js"
} }
@@ -9432,9 +9429,9 @@
} }
}, },
"node_modules/lucide-react-native": { "node_modules/lucide-react-native": {
"version": "0.555.0", "version": "0.563.0",
"resolved": "https://registry.npmjs.org/lucide-react-native/-/lucide-react-native-0.555.0.tgz", "resolved": "https://registry.npmjs.org/lucide-react-native/-/lucide-react-native-0.563.0.tgz",
"integrity": "sha512-AXEUJdu6e572a2ompVcX/yZDW9z3sulIcVFSdE+sIZltqlw2ltGwtvQ7ODjotn4jh+EXsNfPASCxCd4G8wuF4A==", "integrity": "sha512-q4tYoAMorTqv+UXRYc0MyiEAOF+4Bu73zxD63EDrnGCFL+xuj+imBm3E2rIKRmME0heVHlK+98fsi8wbL92LNQ==",
"license": "ISC", "license": "ISC",
"peerDependencies": { "peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0",
@@ -9470,7 +9467,8 @@
"version": "2.0.14", "version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
"integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
"license": "CC0-1.0" "license": "CC0-1.0",
"peer": true
}, },
"node_modules/memoize-one": { "node_modules/memoize-one": {
"version": "5.2.1", "version": "5.2.1",
@@ -10085,6 +10083,7 @@
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"peer": true,
"dependencies": { "dependencies": {
"boolbase": "^1.0.0" "boolbase": "^1.0.0"
}, },
@@ -10663,7 +10662,6 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"nanoid": "^3.3.7", "nanoid": "^3.3.7",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@@ -11112,7 +11110,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@@ -11132,7 +11129,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"scheduler": "^0.26.0" "scheduler": "^0.26.0"
}, },
@@ -11169,7 +11165,6 @@
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.5.tgz", "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.5.tgz",
"integrity": "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==", "integrity": "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@jest/create-cache-key-function": "^29.7.0", "@jest/create-cache-key-function": "^29.7.0",
"@react-native/assets-registry": "0.81.5", "@react-native/assets-registry": "0.81.5",
@@ -11510,7 +11505,6 @@
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.28.0.tgz", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.28.0.tgz",
"integrity": "sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==", "integrity": "sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@egjs/hammerjs": "^2.0.17", "@egjs/hammerjs": "^2.0.17",
"hoist-non-react-statics": "^3.3.0", "hoist-non-react-statics": "^3.3.0",
@@ -11564,7 +11558,6 @@
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.6.tgz", "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.6.tgz",
"integrity": "sha512-F+ZJBYiok/6Jzp1re75F/9aLzkgoQCOh4yxrnwATa8392RvM3kx+fiXXFvwcgE59v48lMwd9q0nzF1oJLXpfxQ==", "integrity": "sha512-F+ZJBYiok/6Jzp1re75F/9aLzkgoQCOh4yxrnwATa8392RvM3kx+fiXXFvwcgE59v48lMwd9q0nzF1oJLXpfxQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"react-native-is-edge-to-edge": "^1.2.1", "react-native-is-edge-to-edge": "^1.2.1",
"semver": "7.7.2" "semver": "7.7.2"
@@ -11593,7 +11586,6 @@
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.2.tgz", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.2.tgz",
"integrity": "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==", "integrity": "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==",
"license": "MIT", "license": "MIT",
"peer": true,
"peerDependencies": { "peerDependencies": {
"react": "*", "react": "*",
"react-native": "*" "react-native": "*"
@@ -11604,7 +11596,6 @@
"resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.16.0.tgz", "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.16.0.tgz",
"integrity": "sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q==", "integrity": "sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"react-freeze": "^1.0.0", "react-freeze": "^1.0.0",
"react-native-is-edge-to-edge": "^1.2.1", "react-native-is-edge-to-edge": "^1.2.1",
@@ -11656,7 +11647,6 @@
"resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.21.2.tgz", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.21.2.tgz",
"integrity": "sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==", "integrity": "sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.6", "@babel/runtime": "^7.18.6",
"@react-native/normalize-colors": "^0.74.1", "@react-native/normalize-colors": "^0.74.1",
@@ -11799,7 +11789,6 @@
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@@ -12997,7 +12986,6 @@
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz",
"integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2", "arg": "^5.0.2",
@@ -13204,7 +13192,6 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
@@ -13411,7 +13398,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"peer": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"

View File

@@ -36,7 +36,7 @@
"expo-symbols": "~1.0.7", "expo-symbols": "~1.0.7",
"expo-system-ui": "~6.0.8", "expo-system-ui": "~6.0.8",
"expo-web-browser": "~15.0.9", "expo-web-browser": "~15.0.9",
"lucide-react-native": "^0.555.0", "lucide-react-native": "^0.563.0",
"nativewind": "^4.2.1", "nativewind": "^4.2.1",
"prettier-plugin-tailwindcss": "^0.5.14", "prettier-plugin-tailwindcss": "^0.5.14",
"react": "19.1.0", "react": "19.1.0",