Update icons with pointerEvents="none" and upgrade lucide-react-native to v0.563.0
This commit is contained in:
1
.vscode/extensions.json
vendored
1
.vscode/extensions.json
vendored
@@ -1 +0,0 @@
|
|||||||
{ "recommendations": ["expo.vscode-expo-tools"] }
|
|
||||||
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"editor.codeActionsOnSave": {
|
|
||||||
"source.fixAll": "explicit",
|
|
||||||
"source.organizeImports": "explicit",
|
|
||||||
"source.sortMembers": "explicit"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
4
app.json
4
app.json
@@ -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",
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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}"`}
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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 */}
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 */}
|
||||||
|
|||||||
@@ -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>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -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 */}
|
||||||
|
|||||||
@@ -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={{
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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" />;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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
52
package-lock.json
generated
@@ -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"
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user