Your music, beautifully tracked. All yours. (coming soon) teal.fm
teal-fm atproto

Merge branch 'main' of https://github.com/teal-fm/teal into teal-24

+1654 -652
+1
.npmrc
···
··· 1 + node-linker=hoisted
+41 -39
apps/amethyst/app.config.js
··· 1 - 2 - import pkg from './package.json'; 3 4 export default () => { 5 const VERSION = pkg.version; 6 7 return { 8 /** @type {import('@expo/config-types').ExpoConfig} */ 9 - "expo": { 10 - "name": "amethyst", 11 - "slug": "amethyst", 12 - "version": VERSION, 13 - "orientation": "portrait", 14 - "icon": "./assets/images/icon.png", 15 - "scheme": "fm.teal.amethyst", 16 - "userInterfaceStyle": "automatic", 17 - "newArchEnabled": true, 18 - "splash": { 19 - "image": "./assets/images/splash-icon.png", 20 - "resizeMode": "contain", 21 - "backgroundColor": "#ffffff" 22 }, 23 - "ios": { 24 - "supportsTablet": true, 25 - "bundleIdentifier": "fm.teal.amethyst" 26 }, 27 - "android": { 28 - "package": "fm.teal.amethyst", 29 - "adaptiveIcon": { 30 - "foregroundImage": "./assets/images/adaptive-icon.png", 31 - "backgroundColor": "#ffffff" 32 - } 33 }, 34 - "web": { 35 - "bundler": "metro", 36 - "favicon": "./assets/images/favicon.png" 37 }, 38 - plugins: ['expo-font', [ 39 - "expo-sqlite", 40 - { 41 - "useSQLCipher": true 42 - } 43 - ]], 44 - "experiments": { 45 - "reactCompiler": true 46 - } 47 - 48 }, 49 - } 50 - }
··· 1 + import pkg from "./package.json"; 2 3 export default () => { 4 const VERSION = pkg.version; 5 6 return { 7 /** @type {import('@expo/config-types').ExpoConfig} */ 8 + expo: { 9 + name: "amethyst", 10 + slug: "amethyst", 11 + version: VERSION, 12 + orientation: "portrait", 13 + icon: "./assets/images/icon.png", 14 + scheme: "fm.teal.amethyst", 15 + userInterfaceStyle: "automatic", 16 + newArchEnabled: true, 17 + splash: { 18 + image: "./assets/images/splash-icon.png", 19 + resizeMode: "contain", 20 + backgroundColor: "#ffffff", 21 }, 22 + ios: { 23 + supportsTablet: true, 24 + bundleIdentifier: "fm.teal.amethyst", 25 }, 26 + android: { 27 + package: "fm.teal.amethyst", 28 + adaptiveIcon: { 29 + foregroundImage: "./assets/images/adaptive-icon.png", 30 + backgroundColor: "#ffffff", 31 + }, 32 }, 33 + web: { 34 + bundler: "metro", 35 + output: "single", 36 + favicon: "./assets/images/favicon.png", 37 }, 38 + plugins: [ 39 + "expo-font", 40 + [ 41 + "expo-sqlite", 42 + { 43 + useSQLCipher: true, 44 + }, 45 + ], 46 + ], 47 + experiments: { 48 + reactCompiler: true, 49 + }, 50 }, 51 + }; 52 + };
+27
apps/amethyst/app/(tabs)/(stamp)/_layout.tsx
···
··· 1 + import { Stack } from "expo-router"; 2 + import { useMemo } from "react"; 3 + 4 + const Layout = ({ segment }: { segment: string }) => { 5 + const rootScreen = useMemo(() => { 6 + switch (segment) { 7 + case "(home)": 8 + return ( 9 + <Stack.Screen 10 + name="index" 11 + options={{ title: "Home", headerShown: false }} 12 + /> 13 + ); 14 + case "(explore)": 15 + return ( 16 + <Stack.Screen 17 + name="explore" 18 + options={{ title: "Explore", headerShown: false }} 19 + /> 20 + ); 21 + } 22 + }, [segment]); 23 + 24 + return <Stack>{rootScreen}</Stack>; 25 + }; 26 + 27 + export default Layout;
+296
apps/amethyst/app/(tabs)/(stamp)/stamp/index.tsx
···
··· 1 + import { Button } from "@/components/ui/button"; 2 + import { Icon } from "@/lib/icons/iconWithClassName"; 3 + import { Stack, useRouter } from "expo-router"; 4 + import { Check, ChevronDown, ChevronRight } from "lucide-react-native"; 5 + import React, { useState } from "react"; 6 + import { 7 + FlatList, 8 + Image, 9 + Modal, 10 + ScrollView, 11 + Text, 12 + TextInput, 13 + TouchableOpacity, 14 + View, 15 + } from "react-native"; 16 + import { 17 + MusicBrainzRecording, 18 + ReleaseSelections, 19 + searchMusicbrainz, 20 + SearchParams, 21 + SearchResultProps, 22 + } from "../../../../lib/oldStamp"; 23 + 24 + export default function StepOne() { 25 + const router = useRouter(); 26 + const [selectedTrack, setSelectedTrack] = 27 + useState<MusicBrainzRecording | null>(null); 28 + 29 + const [searchFields, setSearchFields] = useState<SearchParams>({ 30 + track: "", 31 + artist: "", 32 + release: "", 33 + }); 34 + const [searchResults, setSearchResults] = useState<MusicBrainzRecording[]>( 35 + [] 36 + ); 37 + const [isLoading, setIsLoading] = useState<boolean>(false); 38 + const [releaseSelections, setReleaseSelections] = useState<ReleaseSelections>( 39 + {} 40 + ); 41 + 42 + const handleSearch = async (): Promise<void> => { 43 + if (!searchFields.track && !searchFields.artist && !searchFields.release) { 44 + return; 45 + } 46 + 47 + setIsLoading(true); 48 + setSelectedTrack(null); 49 + const results = await searchMusicbrainz(searchFields); 50 + setSearchResults(results); 51 + setIsLoading(false); 52 + }; 53 + 54 + const clearSearch = () => { 55 + setSearchFields({ track: "", artist: "", release: "" }); 56 + setSearchResults([]); 57 + setSelectedTrack(null); 58 + }; 59 + 60 + return ( 61 + <ScrollView className="flex-1 p-4 bg-background items-center"> 62 + <Stack.Screen 63 + options={{ 64 + title: "Stamp a play manually", 65 + headerBackButtonDisplayMode: "generic", 66 + }} 67 + /> 68 + {/* Search Form */} 69 + <View className="flex gap-4 max-w-screen-md w-screen px-4"> 70 + <Text className="font-bold text-lg">Search for a track</Text> 71 + <TextInput 72 + className="p-2 border rounded-lg border-gray-300 bg-white" 73 + placeholder="Track name..." 74 + value={searchFields.track} 75 + onChangeText={(text) => 76 + setSearchFields((prev) => ({ ...prev, track: text })) 77 + } 78 + /> 79 + <TextInput 80 + className="p-2 border rounded-lg border-gray-300 bg-white" 81 + placeholder="Artist name..." 82 + value={searchFields.artist} 83 + onChangeText={(text) => 84 + setSearchFields((prev) => ({ ...prev, artist: text })) 85 + } 86 + /> 87 + <View className="flex-row gap-2"> 88 + <Button 89 + className="flex-1" 90 + onPress={handleSearch} 91 + disabled={ 92 + isLoading || 93 + (!searchFields.track && 94 + !searchFields.artist && 95 + !searchFields.release) 96 + } 97 + > 98 + <Text>{isLoading ? "Searching..." : "Search"}</Text> 99 + </Button> 100 + <Button className="flex-1" onPress={clearSearch} variant="outline"> 101 + <Text>Clear</Text> 102 + </Button> 103 + </View> 104 + </View> 105 + 106 + {/* Search Results */} 107 + <View className="flex gap-4 max-w-screen-md w-screen px-4"> 108 + {searchResults.length > 0 && ( 109 + <View className="mt-4"> 110 + <Text className="text-lg font-bold mb-2"> 111 + Search Results ({searchResults.length}) 112 + </Text> 113 + <FlatList 114 + data={searchResults} 115 + renderItem={({ item }) => ( 116 + <SearchResult 117 + result={item} 118 + onSelectTrack={setSelectedTrack} 119 + selectedRelease={releaseSelections[item.id]} 120 + isSelected={selectedTrack?.id === item.id} 121 + onReleaseSelect={(trackId, release) => { 122 + setReleaseSelections((prev) => ({ 123 + ...prev, 124 + [trackId]: release, 125 + })); 126 + }} 127 + /> 128 + )} 129 + keyExtractor={(item) => item.id} 130 + /> 131 + </View> 132 + )} 133 + 134 + {/* Submit Button */} 135 + {selectedTrack && ( 136 + <View className="mt-4 sticky bottom-0"> 137 + <Button 138 + onPress={() => 139 + router.push({ 140 + pathname: "/stamp/submit", 141 + params: { track: JSON.stringify(selectedTrack) }, 142 + }) 143 + } 144 + className="w-full flex flex-row align-middle" 145 + > 146 + <Text>{`Submit "${selectedTrack.title}" as Play`}</Text> 147 + <ChevronRight className="ml-2 inline" /> 148 + </Button> 149 + </View> 150 + )} 151 + </View> 152 + </ScrollView> 153 + ); 154 + } 155 + 156 + export function SearchResult({ 157 + result, 158 + onSelectTrack, 159 + isSelected, 160 + selectedRelease, 161 + onReleaseSelect, 162 + }: SearchResultProps) { 163 + const [showReleaseModal, setShowReleaseModal] = useState<boolean>(false); 164 + 165 + const currentRelease = selectedRelease || result.releases?.[0]; 166 + 167 + return ( 168 + <TouchableOpacity 169 + onPress={() => { 170 + onSelectTrack( 171 + isSelected 172 + ? null 173 + : { 174 + ...result, 175 + selectedRelease: currentRelease, // Pass the selected release with the track 176 + } 177 + ); 178 + }} 179 + className={`p-4 mb-2 rounded-lg ${ 180 + isSelected ? "bg-primary/20" : "bg-secondary/10" 181 + }`} 182 + > 183 + <View className="flex-row justify-between items-center gap-2"> 184 + <Image 185 + className="w-16 h-16 rounded-lg bg-gray-500/50" 186 + source={{ 187 + uri: `https://coverartarchive.org/release/${currentRelease?.id}/front-250`, 188 + }} 189 + /> 190 + <View className="flex-1"> 191 + <Text className="font-bold text-sm">{result.title}</Text> 192 + <Text className="text-sm text-gray-600"> 193 + {result["artist-credit"]?.[0]?.artist?.name ?? "Unknown Artist"} 194 + </Text> 195 + 196 + {/* Release Selector Button */} 197 + {result.releases && result.releases?.length > 0 && ( 198 + <TouchableOpacity 199 + onPress={() => setShowReleaseModal(true)} 200 + className="p-1 bg-secondary/10 rounded-lg flex md:flex-row items-start md:items-center justify-between md:gap-1" 201 + > 202 + <View className="flex md:flex-row items-start gap-1"> 203 + <Text className="text-sm text-gray-500">Release:</Text> 204 + <Text className="text-sm" numberOfLines={1}> 205 + {currentRelease?.title} 206 + {currentRelease?.date ? ` (${currentRelease.date})` : ""} 207 + {currentRelease?.country 208 + ? ` - ${currentRelease.country}` 209 + : ""} 210 + </Text> 211 + </View> 212 + {/* the chevron looks odd in the other layout so I'm just hiding it for now. -mm */} 213 + <ChevronDown className="md:ml-1 md:block hidden w-6 h-6" /> 214 + </TouchableOpacity> 215 + )} 216 + </View> 217 + {/* Existing icons */} 218 + {/* <Link href={`https://musicbrainz.org/recording/${result.id}`}> 219 + <View className="bg-primary/40 rounded-full p-1"> 220 + <Icon icon={Brain} size={20} /> 221 + </View> 222 + </Link> */} 223 + {isSelected ? ( 224 + <View className="bg-primary rounded-full p-1"> 225 + <Icon icon={Check} size={20} /> 226 + </View> 227 + ) : ( 228 + <View className="border-2 border-secondary rounded-full p-3"></View> 229 + )} 230 + </View> 231 + 232 + {/* Release Selection Modal */} 233 + <Modal 234 + visible={showReleaseModal} 235 + transparent={true} 236 + animationType="slide" 237 + onRequestClose={() => setShowReleaseModal(false)} 238 + > 239 + <View className="flex-1 justify-end bg-black/50"> 240 + <View className="bg-background rounded-t-3xl"> 241 + <View className="p-4 border-b border-gray-200"> 242 + <Text className="text-lg font-bold text-center"> 243 + Select Release 244 + </Text> 245 + <TouchableOpacity 246 + className="absolute right-4 top-4" 247 + onPress={() => setShowReleaseModal(false)} 248 + > 249 + <Text className="text-primary">Done</Text> 250 + </TouchableOpacity> 251 + </View> 252 + 253 + <ScrollView className="max-h-[50vh]"> 254 + {result.releases?.map((release) => ( 255 + <TouchableOpacity 256 + key={release.id} 257 + className={`p-4 border-b border-gray-100 ${ 258 + selectedRelease?.id === release.id ? "bg-primary/10" : "" 259 + }`} 260 + onPress={() => { 261 + onReleaseSelect(result.id, release); 262 + setShowReleaseModal(false); 263 + }} 264 + > 265 + <Text className="font-medium">{release.title}</Text> 266 + <View className="flex-row gap-2"> 267 + {release.date && ( 268 + <Text className="text-sm text-gray-500"> 269 + {release.date} 270 + </Text> 271 + )} 272 + {release.country && ( 273 + <Text className="text-sm text-gray-500"> 274 + {release.country} 275 + </Text> 276 + )} 277 + {release.status && ( 278 + <Text className="text-sm text-gray-500"> 279 + {release.status} 280 + </Text> 281 + )} 282 + </View> 283 + {release.disambiguation && ( 284 + <Text className="text-sm text-gray-400 italic"> 285 + {release.disambiguation} 286 + </Text> 287 + )} 288 + </TouchableOpacity> 289 + ))} 290 + </ScrollView> 291 + </View> 292 + </View> 293 + </Modal> 294 + </TouchableOpacity> 295 + ); 296 + }
+141
apps/amethyst/app/(tabs)/(stamp)/stamp/submit.tsx
···
··· 1 + import VerticalPlayView from "@/components/play/verticalPlayView"; 2 + import { Button } from "@/components/ui/button"; 3 + import { useStore } from "@/stores/mainStore"; 4 + import { ComAtprotoRepoCreateRecord } from "@atproto/api"; 5 + import { 6 + Record as PlayRecord, 7 + validateRecord, 8 + } from "@teal/lexicons/src/types/fm/teal/alpha/feed/play"; 9 + import { Stack, useLocalSearchParams, useRouter } from "expo-router"; 10 + import { useState } from "react"; 11 + import { Switch, Text, View } from "react-native"; 12 + import { 13 + MusicBrainzRecording, 14 + PlaySubmittedData, 15 + } from "../../../../lib/oldStamp"; 16 + 17 + const createPlayRecord = (result: MusicBrainzRecording): PlayRecord => { 18 + let artistNames: string[] = []; 19 + if (result["artist-credit"]) { 20 + artistNames = result["artist-credit"].map((a) => a.artist.name); 21 + } else { 22 + throw new Error("Artist must be specified!"); 23 + } 24 + 25 + return { 26 + trackName: result.title ?? "Unknown Title", 27 + recordingMbId: result.id ?? undefined, 28 + duration: result.length ? Math.floor(result.length / 1000) : undefined, 29 + artistNames, // result["artist-credit"]?.[0]?.artist?.name ?? "Unknown Artist", 30 + artistMbIds: result["artist-credit"]?.map((a) => a.artist.id) ?? undefined, 31 + releaseName: result.selectedRelease?.title ?? undefined, 32 + releaseMbId: result.selectedRelease?.id ?? undefined, 33 + isrc: result.isrcs?.[0] ?? undefined, 34 + // not providing unless we have a way to map to tidal/odesli/etc 35 + //originUrl: `https://tidal.com/browse/track/274816578?u`, 36 + musicServiceBaseDomain: "tidal.com", 37 + submissionClientAgent: "tealtracker/0.0.1b", 38 + playedTime: new Date().toISOString(), 39 + }; 40 + }; 41 + 42 + export default function Submit() { 43 + const router = useRouter(); 44 + const agent = useStore((state) => state.pdsAgent); 45 + // awful awful awful! 46 + // I don't wanna use global state for something like this though! 47 + const { track } = useLocalSearchParams(); 48 + 49 + const selectedTrack: MusicBrainzRecording | null = JSON.parse( 50 + track as string 51 + ); 52 + 53 + const [isSubmitting, setIsSubmitting] = useState<boolean>(false); 54 + const [shareWithBluesky, setShareWithBluesky] = useState<boolean>(false); 55 + 56 + if (selectedTrack === null) { 57 + return <Text>No track selected</Text>; 58 + } 59 + 60 + const handleSubmit = async () => { 61 + setIsSubmitting(true); 62 + try { 63 + let record = createPlayRecord(selectedTrack); 64 + let result = validateRecord(record); 65 + if (result.success === false) { 66 + throw new Error("Failed to validate play: " + result.error); 67 + } 68 + console.log("Validated play:", result); 69 + const res = await agent?.call( 70 + "com.atproto.repo.createRecord", 71 + {}, 72 + { 73 + repo: agent.did, 74 + collection: "fm.teal.alpha.feed.play", 75 + rkey: undefined, 76 + record, 77 + } 78 + ); 79 + if (!res || res.success === false) { 80 + throw new Error("Failed to submit play!"); 81 + } 82 + const typed: ComAtprotoRepoCreateRecord.Response = res; 83 + console.log("Play submitted successfully:", res); 84 + let submittedData: PlaySubmittedData = { 85 + playAtUrl: typed.data.uri, 86 + playRecord: record, 87 + blueskyPostUrl: null, 88 + }; 89 + router.push({ 90 + pathname: "/stamp/success", 91 + params: { submittedData: JSON.stringify(submittedData) }, 92 + }); 93 + } catch (error) { 94 + console.error("Failed to submit play:", error); 95 + } 96 + setIsSubmitting(false); 97 + }; 98 + 99 + return ( 100 + <View className="flex-1 p-4 bg-background items-center h-screen-safe"> 101 + <Stack.Screen 102 + options={{ 103 + title: "Submit Stamp", 104 + }} 105 + /> 106 + <View className="flex justify-between align-middle gap-4 max-w-screen-md w-screen min-h-full px-4"> 107 + <Text className="font-bold text-lg">Submit Play</Text> 108 + <VerticalPlayView 109 + releaseMbid={selectedTrack?.selectedRelease?.id || ""} 110 + trackTitle={ 111 + selectedTrack?.title || 112 + "No track selected! This should never happen!" 113 + } 114 + artistName={selectedTrack?.["artist-credit"]?.[0]?.artist?.name} 115 + releaseTitle={selectedTrack?.selectedRelease?.title} 116 + /> 117 + 118 + <View className="flex-col gap-2 items-center"> 119 + <View className="flex-row gap-2 items-center"> 120 + <Switch 121 + value={shareWithBluesky} 122 + onValueChange={setShareWithBluesky} 123 + /> 124 + <Text className="text-lg text-gray-500 text-center"> 125 + Share with Bluesky? 126 + </Text> 127 + </View> 128 + <View className="flex-row gap-2 w-full"> 129 + <Button 130 + className="flex-1" 131 + onPress={handleSubmit} 132 + disabled={isSubmitting || selectedTrack === null} 133 + > 134 + <Text>{isSubmitting ? "Submitting..." : "Submit"}</Text> 135 + </Button> 136 + </View> 137 + </View> 138 + </View> 139 + </View> 140 + ); 141 + }
+44
apps/amethyst/app/(tabs)/(stamp)/stamp/success.tsx
···
··· 1 + import { ExternalLink } from "@/components/ExternalLink"; 2 + import { PlaySubmittedData } from "@/lib/oldStamp"; 3 + import { Stack, useLocalSearchParams } from "expo-router"; 4 + import { Check, ExternalLinkIcon } from "lucide-react-native"; 5 + import { Text, View } from "react-native"; 6 + 7 + export default function StepThree() { 8 + const { submittedData } = useLocalSearchParams(); 9 + const responseData: PlaySubmittedData = JSON.parse(submittedData as string); 10 + return ( 11 + <View className="flex-1 p-4 bg-background items-center h-screen-safe"> 12 + <Stack.Screen 13 + options={{ 14 + title: "Play Successfully Submitted", 15 + }} 16 + /> 17 + <View className="flex justify-center items-center gap-2 max-w-screen-md w-screen min-h-full px-4"> 18 + <Check size={48} className="text-green-600 dark:text-green-400" /> 19 + <Text className="text-xl">Play Submitted!</Text> 20 + <Text> 21 + You can view your play{" "} 22 + <ExternalLink 23 + className="text-blue-600 dark:text-blue-400" 24 + href={`https://pdsls.dev/${responseData.playAtUrl}`} 25 + > 26 + on PDSls 27 + </ExternalLink> 28 + <ExternalLinkIcon className="inline mb-0.5 ml-0.5" size="1rem" /> 29 + </Text> 30 + {responseData.blueskyPostUrl && ( 31 + <Text> 32 + Or you can{" "} 33 + <ExternalLink 34 + className="text-blue-600 dark:text-blue-400" 35 + href={`https://pdsls.dev/`} 36 + > 37 + view your Bluesky post. 38 + </ExternalLink> 39 + </Text> 40 + )} 41 + </View> 42 + </View> 43 + ); 44 + }
+21 -16
apps/amethyst/app/(tabs)/_layout.tsx
··· 1 import React from "react"; 2 - import { CodeXml, Home, Info, type LucideIcon } from "lucide-react-native"; 3 - import { Link, Stack, Tabs } from "expo-router"; 4 import { Pressable } from "react-native"; 5 6 import Colors from "../../constants/Colors"; 7 import { useColorScheme } from "../../components/useColorScheme"; 8 - import { useClientOnlyValue } from "../../components/useClientOnlyValue"; 9 - import { iconWithClassName } from "../../lib/icons/iconWithClassName"; 10 11 function TabBarIcon(props: { name: LucideIcon; color: string }) { 12 const Name = props.name; 13 iconWithClassName(Name); 14 - return <Name size={28} className="mt-4" {...props} />; 15 } 16 17 export default function TabLayout() { 18 const colorScheme = useColorScheme(); 19 20 return ( 21 <Tabs ··· 24 tabBarActiveTintColor: Colors[colorScheme ?? "light"].tint, 25 // Disable the static render of the header on web 26 // to prevent a hydration error in React Navigation v6. 27 - headerShown: useClientOnlyValue(false, true), 28 - tabBarShowLabel: false, 29 tabBarStyle: { 30 - height: 75, 31 }, 32 }} 33 > ··· 37 title: "Tab One", 38 tabBarIcon: ({ color }) => <TabBarIcon name={Home} color={color} />, 39 headerRight: () => ( 40 - <Link href="/modal" asChild> 41 <Pressable> 42 {({ pressed }) => ( 43 - <Info 44 - size={25} 45 - color={Colors[colorScheme ?? "light"].text} 46 - style={{ marginRight: 15, opacity: pressed ? 0.5 : 1 }} 47 /> 48 )} 49 </Pressable> ··· 52 }} 53 /> 54 <Tabs.Screen 55 - name="two" 56 options={{ 57 - title: "Tab Two", 58 tabBarIcon: ({ color }) => ( 59 - <TabBarIcon name={CodeXml} color={color} /> 60 ), 61 }} 62 />
··· 1 import React from "react"; 2 + import { FilePen, Home, LogOut, type LucideIcon } from "lucide-react-native"; 3 + import { Link, Tabs } from "expo-router"; 4 import { Pressable } from "react-native"; 5 6 import Colors from "../../constants/Colors"; 7 import { useColorScheme } from "../../components/useColorScheme"; 8 + import { Icon, iconWithClassName } from "../../lib/icons/iconWithClassName"; 9 + import useIsMobile from "@/hooks/useIsMobile"; 10 + import { useStore } from "@/stores/mainStore"; 11 12 function TabBarIcon(props: { name: LucideIcon; color: string }) { 13 const Name = props.name; 14 iconWithClassName(Name); 15 + return <Name size={28} className="" {...props} />; 16 } 17 18 export default function TabLayout() { 19 const colorScheme = useColorScheme(); 20 + const authStatus = useStore((state) => state.status); 21 + // if we are on web but not native and web width is greater than 1024px 22 + const hideTabBar = useIsMobile() || authStatus !== "loggedIn"; 23 24 return ( 25 <Tabs ··· 28 tabBarActiveTintColor: Colors[colorScheme ?? "light"].tint, 29 // Disable the static render of the header on web 30 // to prevent a hydration error in React Navigation v6. 31 + headerShown: false, // useClientOnlyValue(false, true), 32 + tabBarShowLabel: true, 33 tabBarStyle: { 34 + //height: 75, 35 + display: hideTabBar ? "none" : "flex", 36 }, 37 }} 38 > ··· 42 title: "Tab One", 43 tabBarIcon: ({ color }) => <TabBarIcon name={Home} color={color} />, 44 headerRight: () => ( 45 + <Link href="/auth/logoutModal" asChild> 46 <Pressable> 47 {({ pressed }) => ( 48 + <Icon 49 + icon={LogOut} 50 + className="text-2xl mr-4" 51 + name="log-out" 52 /> 53 )} 54 </Pressable> ··· 57 }} 58 /> 59 <Tabs.Screen 60 + name="(stamp)" 61 options={{ 62 + title: "Stamp", 63 tabBarIcon: ({ color }) => ( 64 + <TabBarIcon name={FilePen} color={color} /> 65 ), 66 }} 67 />
+20 -9
apps/amethyst/app/(tabs)/index.tsx
··· 16 import AuthOptions from "../auth/options"; 17 18 import { Response } from "@atproto/api/src/client/types/app/bsky/actor/getProfile"; 19 20 const GITHUB_AVATAR_URI = 21 "https://i.pinimg.com/originals/ef/a2/8d/efa28d18a04e7fa40ed49eeb0ab660db.jpg"; 22 23 export default function Screen() { 24 - const [progress, setProgress] = React.useState(78); 25 const [profile, setProfile] = React.useState<Response | null>(null); 26 const j = useStore((state) => state.status); 27 // @me ··· 41 } else { 42 console.log("No agent"); 43 } 44 - }, [isReady]); 45 46 if (j !== "loggedIn") { 47 - //router.replace("/auth/options"); 48 return <AuthOptions />; 49 } 50 51 - function updateProgressValue() { 52 - setProgress(Math.floor(Math.random() * 100)); 53 - } 54 return ( 55 <View className="flex-1 justify-center items-center gap-5 p-6 bg-background"> 56 - <Card className="w-full max-w-full p-6 rounded-2xl"> 57 - <CardHeader className="items-center"> 58 <Avatar alt="Rick Sanchez's Avatar" className="w-24 h-24"> 59 <AvatarImage 60 source={{ uri: profile?.data.avatar ?? GITHUB_AVATAR_URI }} ··· 65 </Text> 66 </AvatarFallback> 67 </Avatar> 68 - <View className="p-3" /> 69 <CardTitle className="text-center"> 70 {profile?.data.displayName ?? " Richard"} 71 </CardTitle> ··· 79 : "Loading..."} 80 </CardContent> 81 </CardHeader> 82 </Card> 83 </View> 84 );
··· 16 import AuthOptions from "../auth/options"; 17 18 import { Response } from "@atproto/api/src/client/types/app/bsky/actor/getProfile"; 19 + import { Link, Stack } from "expo-router"; 20 + import { Button } from "@/components/ui/button"; 21 22 const GITHUB_AVATAR_URI = 23 "https://i.pinimg.com/originals/ef/a2/8d/efa28d18a04e7fa40ed49eeb0ab660db.jpg"; 24 25 export default function Screen() { 26 const [profile, setProfile] = React.useState<Response | null>(null); 27 const j = useStore((state) => state.status); 28 // @me ··· 42 } else { 43 console.log("No agent"); 44 } 45 + }, [isReady, agent]); 46 47 if (j !== "loggedIn") { 48 return <AuthOptions />; 49 } 50 51 return ( 52 <View className="flex-1 justify-center items-center gap-5 p-6 bg-background"> 53 + <Stack.Screen 54 + options={{ 55 + title: "Home", 56 + headerBackButtonDisplayMode: "minimal", 57 + headerShown: false, 58 + }} 59 + /> 60 + <Card className="py-6 rounded-2xl border-2 border-foreground"> 61 + <CardHeader className="items-center pb-0"> 62 <Avatar alt="Rick Sanchez's Avatar" className="w-24 h-24"> 63 <AvatarImage 64 source={{ uri: profile?.data.avatar ?? GITHUB_AVATAR_URI }} ··· 69 </Text> 70 </AvatarFallback> 71 </Avatar> 72 + <View className="px-3" /> 73 <CardTitle className="text-center"> 74 {profile?.data.displayName ?? " Richard"} 75 </CardTitle> ··· 83 : "Loading..."} 84 </CardContent> 85 </CardHeader> 86 + <CardContent className="flex flex-row justify-center items-center p-0"> 87 + <Link href="/stamp"> 88 + <Button> 89 + <Text className="text-center">Ready to stamp!</Text>{" "} 90 + </Button> 91 + </Link> 92 + </CardContent> 93 </Card> 94 </View> 95 );
-86
apps/amethyst/app/(tabs)/two.tsx
··· 1 - import { View } from "react-native"; 2 - 3 - import { useStore } from "../../stores/mainStore"; 4 - import { Button } from "../../components/ui/button"; 5 - import { Text } from "../../components/ui/text"; 6 - 7 - import { 8 - Record as Play, 9 - validateRecord, 10 - } from "@teal/lexicons/src/types/fm/teal/alpha/feed/play"; 11 - 12 - async function searchMusicbrainz(query: string) { 13 - try { 14 - const res = await fetch( 15 - `https://musicbrainz.org/ws/2/recording?query=${encodeURIComponent(query)}&fmt=json`, 16 - ); 17 - const data = await res.json(); 18 - return data.recordings?.[0]; // Get the first recording result 19 - } catch (error) { 20 - console.error("Failed to fetch MusicBrainz data:", error); 21 - return null; 22 - } 23 - } 24 - 25 - export default function TabTwoScreen() { 26 - const agent = useStore((state) => state.pdsAgent); 27 - 28 - const submitPlay = async () => { 29 - const query = "release title:this is why AND artist:Paramore"; 30 - const result = await searchMusicbrainz(query); 31 - 32 - if (result) { 33 - console.log(result); 34 - const play: Play = { 35 - trackName: result.title ?? "Unknown Title", 36 - recordingMbId: result.id ?? undefined, 37 - duration: result.length ? Math.floor(result.length / 1000) : undefined, // Convert ms to seconds 38 - artistName: 39 - result["artist-credit"]?.[0]?.artist?.name ?? "Unknown Artist", 40 - artistMbIds: result["artist-credit"]?.[0]?.artist?.id 41 - ? [result["artist-credit"][0].artist.id] 42 - : undefined, 43 - releaseName: result["releases"]?.[0]?.title ?? undefined, 44 - releaseMbId: result["releases"]?.[0]?.id ?? undefined, 45 - isrc: result.isrcs?.[0] ?? undefined, 46 - originUrl: `https://tidal.com/browse/track/274816578?u`, 47 - musicServiceBaseDomain: "tidal.com", 48 - submissionClientAgent: "tealtracker/0.0.1b", 49 - playedTime: new Date().toISOString(), 50 - }; 51 - 52 - try { 53 - let result = validateRecord(play); 54 - console.log("Validated play:", result); 55 - console.log("Submitting play:", play); 56 - // const res = await agent?.call( 57 - // "com.atproto.repo.createRecord", 58 - // {}, 59 - // { 60 - // repo: agent.did, 61 - // collection: "fm.teal.alpha.play", 62 - // rkey: undefined, 63 - // record: play, 64 - // } 65 - // ); 66 - // console.log("Play submitted successfully:", res); 67 - } catch (error) { 68 - console.error("Failed to submit play:", error); 69 - } 70 - } else { 71 - console.error("No results found for the query."); 72 - } 73 - }; 74 - 75 - return ( 76 - <View className="flex-1 flex gap-2 items-center justify-center align-center w-full h-full bg-background"> 77 - {agent ? ( 78 - <Button onPress={() => submitPlay()}> 79 - <Text>Get Profile</Text> 80 - </Button> 81 - ) : ( 82 - <Text>Loading...</Text> 83 - )} 84 - </View> 85 - ); 86 - }
···
+8 -1
apps/amethyst/app/_layout.tsx
··· 91 <GlobalTextClassContext.Provider value="font-sans"> 92 <Stack> 93 <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> 94 - <Stack.Screen name="modal" options={{ presentation: "modal" }} /> 95 </Stack> 96 <PortalHost /> 97 </GlobalTextClassContext.Provider>
··· 91 <GlobalTextClassContext.Provider value="font-sans"> 92 <Stack> 93 <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> 94 + <Stack.Screen 95 + name="auth/logoutModal" 96 + options={{ 97 + presentation: "transparentModal", 98 + animation: "fade", 99 + headerShown: false, 100 + }} 101 + /> 102 </Stack> 103 <PortalHost /> 104 </GlobalTextClassContext.Provider>
+16 -8
apps/amethyst/app/auth/callback.tsx
··· 16 export default function AuthOptions() { 17 const { oauthCallback, status } = useStore((state) => state); 18 19 - const params = useLocalSearchParams<'iss' | 'state' | 'code'>(); 20 - const {state} = params; 21 useEffect(() => { 22 - // exchange the tokens for jwt 23 const searchParams = new URLSearchParams(params); 24 oauthCallback(searchParams); 25 - }, []); 26 27 useEffect(() => { 28 if (status === "loggedIn") { 29 - router.replace("/"); 30 } 31 - }, [state]) 32 // if no state then redirect to error page 33 if (!params) { 34 return ( ··· 50 {status === "loggedIn" ? "Success!" : "Fetching your data..."} 51 </Text> 52 <Text className="text-sm text-muted-foreground"> 53 - This may take a few seconds {status} 54 </Text> 55 - <Text className="text-sm text-muted-foreground font-mono bg-muted-foreground/30 py-1 px-2 rounded-full">{state}</Text> 56 </View> 57 ); 58 }
··· 16 export default function AuthOptions() { 17 const { oauthCallback, status } = useStore((state) => state); 18 19 + const params = useLocalSearchParams<"iss" | "state" | "code">(); 20 + const { state } = params; 21 useEffect(() => { 22 + // Only proceed if params exist 23 + if (params) { 24 const searchParams = new URLSearchParams(params); 25 oauthCallback(searchParams); 26 + } 27 + }, [params, oauthCallback]); 28 29 useEffect(() => { 30 + // Wrap navigation in requestAnimationFrame to ensure root layout is mounted 31 if (status === "loggedIn") { 32 + requestAnimationFrame(() => { 33 + router.replace("/"); 34 + }); 35 } 36 + }, [status]); 37 + 38 // if no state then redirect to error page 39 if (!params) { 40 return ( ··· 56 {status === "loggedIn" ? "Success!" : "Fetching your data..."} 57 </Text> 58 <Text className="text-sm text-muted-foreground"> 59 + This may take a few seconds {status} 60 </Text> 61 + <Text className="text-sm text-muted-foreground font-mono bg-muted-foreground/30 py-1 px-2 rounded-full"> 62 + {state} 63 + </Text> 64 </View> 65 ); 66 }
+136
apps/amethyst/app/auth/login.tsx
···
··· 1 + import React, { useState } from "react"; 2 + import { View, Platform } from "react-native"; 3 + import { SafeAreaView } from "react-native-safe-area-context"; 4 + import { Text } from "@/components/ui/text"; 5 + import { Button } from "@/components/ui/button"; 6 + import { Icon } from "@/lib/icons/iconWithClassName"; 7 + import { Check, ChevronRight, AtSign, AlertCircle } from "lucide-react-native"; 8 + import { Input } from "@/components/ui/input"; 9 + import { cn } from "@/lib/utils"; 10 + import { Link, Stack, router } from "expo-router"; 11 + import { useStore } from "@/stores/mainStore"; 12 + import { openAuthSessionAsync } from "expo-web-browser"; 13 + 14 + const LoginScreen = () => { 15 + const [handle, setHandle] = useState(""); 16 + const [err, setErr] = useState<string | undefined>(); 17 + const [isRedirecting, setIsRedirecting] = useState(false); 18 + const [isLoading, setIsLoading] = useState(false); 19 + 20 + const { getLoginUrl, oauthCallback } = useStore((state) => state); 21 + 22 + const handleLogin = async () => { 23 + if (!handle) { 24 + setErr("Please enter a handle"); 25 + return; 26 + } 27 + 28 + setIsLoading(true); 29 + 30 + try { 31 + let redirUrl = await getLoginUrl(handle.replace("@", "")); 32 + if (!redirUrl) { 33 + // TODO: better error handling lulw 34 + throw new Error("Could not get login url. "); 35 + } 36 + setIsRedirecting(true); 37 + if (Platform.OS === "web") { 38 + // redirect to redir url page without authsession 39 + // shyould! redirect to /auth/callback 40 + router.navigate(redirUrl.toString()); 41 + } else { 42 + const res = await openAuthSessionAsync( 43 + redirUrl.toString(), 44 + "http://127.0.0.1:8081/login", 45 + ); 46 + if (res.type === "success") { 47 + const params = new URLSearchParams(res.url.split("?")[1]); 48 + await oauthCallback(params); 49 + } 50 + } 51 + } catch (e: any) { 52 + console.error(e); 53 + setErr(e.message); 54 + setIsLoading(false); 55 + setIsRedirecting(false); 56 + return; 57 + } 58 + }; 59 + 60 + return ( 61 + <SafeAreaView className="flex-1 flex items-center justify-center w-full"> 62 + <Stack.Screen 63 + options={{ 64 + title: "Sign in", 65 + headerBackButtonDisplayMode: "minimal", 66 + headerShown: false, 67 + }} 68 + /> 69 + <View className="justify-center align-center p-8 gap-4 pb-32 max-w-screen-sm w-screen"> 70 + <View className="flex items-center"> 71 + <Icon icon={AtSign} className="color-bsky" name="at" size={64} /> 72 + </View> 73 + <Text className="text-3xl font-semibold text-center text-foreground"> 74 + Sign in with your PDS 75 + </Text> 76 + <View> 77 + <Text className="text-sm text-muted-foreground">Handle</Text> 78 + <Input 79 + className={err && `border-red-500 border-2`} 80 + placeholder="alice.bsky.social" 81 + value={handle} 82 + onChangeText={setHandle} 83 + autoCapitalize="none" 84 + autoCorrect={false} 85 + onKeyPress={(e) => { 86 + if (e.nativeEvent.key === "Enter") { 87 + handleLogin(); 88 + } 89 + }} 90 + /> 91 + {err ? ( 92 + <Text className="text-red-500 justify-baseline mt-1 text-xs"> 93 + <Icon 94 + icon={AlertCircle} 95 + className="mr-1 inline -mt-0.5 text-xs" 96 + size={20} 97 + /> 98 + {err} 99 + </Text> 100 + ) : ( 101 + <View className="h-6" /> 102 + )} 103 + </View> 104 + <View className="flex flex-row justify-between items-center"> 105 + <Link href="https://bsky.app/signup"> 106 + <Text className="text-md ml-2 text-secondary"> 107 + Sign up for Bluesky 108 + </Text> 109 + </Link> 110 + <Button 111 + className={cn( 112 + "flex flex-row justify-end duration-500", 113 + isRedirecting ? "bg-green-500" : "bg-bsky", 114 + )} 115 + onPress={handleLogin} 116 + disabled={isLoading} 117 + > 118 + {isRedirecting ? ( 119 + <> 120 + <Text className="font-semibold text-lg">Redirecting</Text> 121 + <Icon icon={Check} /> 122 + </> 123 + ) : ( 124 + <> 125 + <Text className="font-semibold text-lg">Login</Text> 126 + <Icon icon={ChevronRight} /> 127 + </> 128 + )} 129 + </Button> 130 + </View> 131 + </View> 132 + </SafeAreaView> 133 + ); 134 + }; 135 + 136 + export default LoginScreen;
+43
apps/amethyst/app/auth/logoutModal.tsx
···
··· 1 + import { StatusBar } from "expo-status-bar"; 2 + import { Platform, StyleSheet, TouchableOpacity } from "react-native"; 3 + 4 + import { View } from "react-native"; 5 + import { Text } from "../../components/ui/text"; 6 + import { useStore } from "@/stores/mainStore"; 7 + import { Button } from "@/components/ui/button"; 8 + import { router } from "expo-router"; 9 + import { X } from "lucide-react-native"; 10 + import { Icon } from "@/lib/icons/iconWithClassName"; 11 + 12 + // should probably be a WebModal component or something? 13 + export default function ModalScreen() { 14 + // handle log out 15 + const { logOut } = useStore((state) => state); 16 + const handleGoBack = () => { 17 + router.back(); 18 + }; 19 + return ( 20 + <TouchableOpacity 21 + className="flex relative justify-center items-center bg-muted-foreground/60 w-screen h-screen backdrop-blur-sm" 22 + onPress={() => handleGoBack()} 23 + > 24 + <Icon icon={X} className="top-2 right-2 absolute" name="x" /> 25 + <View className="flex-1 items-center justify-center gap-2 bg-background w-full max-w-96 max-h-80 shadow-xl rounded-xl"> 26 + <Text className="text-4xl">Surprise!</Text> 27 + <Text className="text-xl">You can sign out here!</Text> 28 + <Button 29 + onPress={() => { 30 + logOut(); 31 + // redirect to home 32 + router.navigate("/"); 33 + }} 34 + > 35 + <Text className="font-semibold text-lg">Sign out</Text> 36 + </Button> 37 + 38 + {/* Use a light status bar on iOS to account for the black space above the modal */} 39 + <StatusBar style={Platform.OS === "ios" ? "light" : "auto"} /> 40 + </View> 41 + </TouchableOpacity> 42 + ); 43 + }
+3 -5
apps/amethyst/app/auth/options.tsx
··· 3 import { Text } from "../../components/ui/text"; 4 import { Button } from "../../components/ui/button"; 5 import React from "react"; 6 - import { FontAwesome6 } from "@expo/vector-icons"; 7 8 export default function AuthOptions() { 9 return ( ··· 25 <Text className="text-5xl font-serif-old-italic">.fm</Text> 26 </Text> 27 </View> 28 - <Link href="/login" className="text-secondary"> 29 <Button 30 className="flex flex-row justify-center items-center rounded-full dark-blue-800 dark:bg-blue-400 gap-2" 31 size="lg" 32 onTouchStart={() => { 33 - router.push("/login"); 34 }} 35 > 36 - 37 <Text>Sign in with ATProto</Text> 38 </Button> 39 </Link> ··· 42 className="flex flex-row justify-center items-center rounded-full" 43 size="lg" 44 onTouchStart={() => { 45 - router.push("/signup"); 46 }} 47 > 48 <Text>Sign up</Text>
··· 3 import { Text } from "../../components/ui/text"; 4 import { Button } from "../../components/ui/button"; 5 import React from "react"; 6 7 export default function AuthOptions() { 8 return ( ··· 24 <Text className="text-5xl font-serif-old-italic">.fm</Text> 25 </Text> 26 </View> 27 + <Link href="/auth/login" className="text-secondary"> 28 <Button 29 className="flex flex-row justify-center items-center rounded-full dark-blue-800 dark:bg-blue-400 gap-2" 30 size="lg" 31 onTouchStart={() => { 32 + router.push("/auth/login"); 33 }} 34 > 35 <Text>Sign in with ATProto</Text> 36 </Button> 37 </Link> ··· 40 className="flex flex-row justify-center items-center rounded-full" 41 size="lg" 42 onTouchStart={() => { 43 + router.push("/auth/signup"); 44 }} 45 > 46 <Text>Sign up</Text>
-184
apps/amethyst/app/login.tsx
··· 1 - import { Link, Stack, router } from "expo-router"; 2 - import { AlertCircle, AtSign, Check, ChevronRight } from "lucide-react-native"; 3 - import React, { useState } from "react"; 4 - import { Platform, View } from "react-native"; 5 - import { SafeAreaView } from "react-native-safe-area-context"; 6 - import { Button } from "../components/ui/button"; 7 - import { Input } from "../components/ui/input"; 8 - import { Text } from "../components/ui/text"; 9 - import { Icon } from "../lib/icons/iconWithClassName"; 10 - import { cn } from "../lib/utils"; 11 - 12 - import { openAuthSessionAsync } from "expo-web-browser"; 13 - import { useStore } from "../stores/mainStore"; 14 - 15 - const LoginScreen = () => { 16 - const [handle, setHandle] = useState(""); 17 - const [err, setErr] = useState<string | undefined>(); 18 - const [isRedirecting, setIsRedirecting] = useState(false); 19 - const [isLoading, setIsLoading] = useState(false); 20 - 21 - const { getLoginUrl, oauthCallback, status } = useStore((state) => state); 22 - 23 - const handleLogin = async () => { 24 - if (!handle) { 25 - setErr("Please enter a handle"); 26 - return; 27 - } 28 - 29 - setIsLoading(true); 30 - 31 - try { 32 - let redirUrl = await getLoginUrl(handle.replace("@", "")); 33 - if (!redirUrl) { 34 - // TODO: better error handling lulw 35 - throw new Error("Does not resolve to a DID"); 36 - } 37 - setIsRedirecting(true); 38 - if (Platform.OS === "web") { 39 - // redirect to redir url page without authsession 40 - // shyould! redirect to /auth/callback 41 - router.navigate(redirUrl.toString()); 42 - } else { 43 - const res = await openAuthSessionAsync( 44 - redirUrl.toString(), 45 - "http://127.0.0.1:8081/login" 46 - ); 47 - if (res.type === "success") { 48 - const params = new URLSearchParams(res.url.split("?")[1]); 49 - await oauthCallback(params); 50 - } 51 - } 52 - } catch (e: any) { 53 - console.error(e); 54 - setErr(e.message); 55 - setIsLoading(false); 56 - setIsRedirecting(false); 57 - return; 58 - } 59 - 60 - // try { 61 - // const response = await fetch( 62 - // "https://natshare.z.teal.fm/oauth/login?spa="+ "web" + "&handle="+ 63 - // handle.replace("@", ""), 64 - // { 65 - // method: "GET", 66 - // }, 67 - // ); 68 - 69 - // if (response.ok) { 70 - // // Handle redirect URL (json url param) 71 - // const j = await response.json(); 72 - // const redirectUrl = j.url; 73 - // setIsRedirecting(true); 74 - // if (!j.state) { 75 - // console.log("No state in response, redirecting to error page"); 76 - // router.replace("/error"); 77 - // return; 78 - // } 79 - // setAuthCode(j.state); 80 - // // Open the OAuth URL in the device's browser 81 - // await Linking.openURL(redirectUrl); 82 - 83 - // // Handle the callback URL when the user is redirected back 84 - // console.log("Setting up deep link subscription"); 85 - // const subscription = Linking.addEventListener("url", async (event) => { 86 - // console.log("Got a deep link event:", event); 87 - // if (event.url.includes("/oauth/callback") && j.state) { 88 - // console.log("Balls! state:", j.state); 89 - // // redirect to callback page, add state to url 90 - // router.navigate( 91 - // `/auth/callback?state=${encodeURIComponent(j.state)}`, 92 - // ); 93 - // subscription.remove(); 94 - // } 95 - // }); 96 - // } else { 97 - // const error = await response.json(); 98 - // Alert.alert("Error", error.error || "Failed to login"); 99 - // } 100 - // } catch (error: any) { 101 - // console.error("Network error!", error); 102 - // Alert.alert("Error", "Network error occurred:", error.message); 103 - // } finally { 104 - // setIsLoading(false); 105 - // } 106 - }; 107 - 108 - return ( 109 - <SafeAreaView className="flex-1 flex items-center justify-center w-full"> 110 - <Stack.Screen 111 - options={{ 112 - title: "Sign in", 113 - headerBackButtonDisplayMode: "minimal", 114 - headerShown: false, 115 - }} 116 - /> 117 - <View className="flex-1 justify-center align-center p-8 gap-4 pb-32 max-w-screen-sm min-w-full"> 118 - <View className="flex items-center"> 119 - <Icon icon={AtSign} className="color-bsky" name="at" size={64} /> 120 - </View> 121 - <Text className="text-3xl font-semibold text-center text-foreground"> 122 - Sign in with your PDS 123 - </Text> 124 - <View> 125 - <Text className="text-sm text-muted-foreground">Handle</Text> 126 - <Input 127 - className={err && `border-red-500 border-2`} 128 - placeholder="alice.bsky.social" 129 - value={handle} 130 - onChangeText={setHandle} 131 - autoCapitalize="none" 132 - autoCorrect={false} 133 - onKeyPress={(e) => { 134 - if (e.nativeEvent.key === "Enter") { 135 - handleLogin(); 136 - } 137 - }} 138 - /> 139 - {err ? ( 140 - <Text className="text-red-500 justify-baseline mt-1 text-xs"> 141 - <Icon 142 - icon={AlertCircle} 143 - className="mr-1 inline -mt-0.5 text-xs" 144 - size={20} 145 - /> 146 - {err} 147 - </Text> 148 - ) : ( 149 - <View className="h-6" /> 150 - )} 151 - </View> 152 - <View className="flex flex-row justify-between items-center"> 153 - <Link href="https://bsky.app/signup"> 154 - <Text className="text-md ml-2 text-secondary"> 155 - Sign up for Bluesky 156 - </Text> 157 - </Link> 158 - <Button 159 - className={cn( 160 - "flex flex-row justify-end duration-500", 161 - isRedirecting ? "bg-green-500" : "bg-bsky" 162 - )} 163 - onPress={handleLogin} 164 - disabled={isLoading} 165 - > 166 - {isRedirecting ? ( 167 - <> 168 - <Text className="font-semibold text-lg">Redirecting</Text> 169 - <Icon icon={Check} /> 170 - </> 171 - ) : ( 172 - <> 173 - <Text className="font-semibold text-lg">Login</Text> 174 - <Icon icon={ChevronRight} /> 175 - </> 176 - )} 177 - </Button> 178 - </View> 179 - </View> 180 - </SafeAreaView> 181 - ); 182 - }; 183 - 184 - export default LoginScreen;
···
-17
apps/amethyst/app/modal.tsx
··· 1 - import { StatusBar } from "expo-status-bar"; 2 - import { Platform, StyleSheet } from "react-native"; 3 - 4 - import { View } from "react-native"; 5 - import { Text } from "../components/ui/text"; 6 - 7 - export default function ModalScreen() { 8 - return ( 9 - <View className="flex-1 items-center justify-center dark:bg-neutral-800 bg-neutral-100"> 10 - <Text className="text-neutral-200 text-4xl">HELLO WORLD !!!!</Text> 11 - <Text className="text-neutral-200 text-4xl">./app/modal.tsx</Text> 12 - 13 - {/* Use a light status bar on iOS to account for the black space above the modal */} 14 - <StatusBar style={Platform.OS === "ios" ? "light" : "auto"} /> 15 - </View> 16 - ); 17 - }
···
+8 -16
apps/amethyst/app/signup.tsx apps/amethyst/app/auth/signup.tsx
··· 1 - import React, { useEffect, useState } from "react"; 2 - import { 3 - View, 4 - TextInput, 5 - TouchableOpacity, 6 - Alert, 7 - Linking, 8 - } from "react-native"; 9 import { SafeAreaView } from "react-native-safe-area-context"; 10 - import { Text } from "../components/ui/text"; 11 - import { Button } from "../components/ui/button"; 12 - import { Card } from "../components/ui/card"; 13 - import { Icon } from "../lib/icons/iconWithClassName"; 14 - import { ArrowRight, Check, ChevronRight, Disc } from "lucide-react-native"; 15 - import { Input } from "../components/ui/input"; 16 - import { cn } from "../lib/utils"; 17 import { Link, Stack, router } from "expo-router"; 18 import { FontAwesome6 } from "@expo/vector-icons"; 19 ··· 27 headerShown: false, 28 }} 29 /> 30 - <View className="flex-1 justify-center p-8 gap-4 pb-32 max-w-screen-sm"> 31 <Text className="text-4xl font-semibold text-center text-foreground"> 32 Sign up with{" "} 33 <Icon
··· 1 + import React from "react"; 2 + import { View } from "react-native"; 3 import { SafeAreaView } from "react-native-safe-area-context"; 4 + import { Text } from "../../components/ui/text"; 5 + import { Button } from "../../components/ui/button"; 6 + import { Icon } from "../../lib/icons/iconWithClassName"; 7 + import { ArrowRight } from "lucide-react-native"; 8 + 9 import { Link, Stack, router } from "expo-router"; 10 import { FontAwesome6 } from "@expo/vector-icons"; 11 ··· 19 headerShown: false, 20 }} 21 /> 22 + <View className="flex-1 justify-center p-8 gap-4 pb-32 w-screen max-w-screen-md"> 23 <Text className="text-4xl font-semibold text-center text-foreground"> 24 Sign up with{" "} 25 <Icon
+12
apps/amethyst/assets/client-metadata.json
···
··· 1 + { 2 + "redirect_uris": ["https://alpha.teal.fm/auth/callback"], 3 + "response_types": ["code"], 4 + "grant_types": ["authorization_code", "refresh_token"], 5 + "scope": "atproto transition:generic", 6 + "token_endpoint_auth_method": "none", 7 + "application_type": "web", 8 + "client_id": "https://alpha.teal.fm/client-metadata.json", 9 + "client_name": "teal", 10 + "client_uri": "https://alpha.teal.fm", 11 + "dpop_bound_access_tokens": true 12 + }
+33
apps/amethyst/components/play/verticalPlayView.tsx
···
··· 1 + import { View, Image, Text } from "react-native"; 2 + 3 + export default function VerticalPlayView({ 4 + releaseMbid, 5 + trackTitle, 6 + artistName, 7 + releaseTitle, 8 + }: { 9 + releaseMbid: string; 10 + trackTitle: string; 11 + artistName?: string; 12 + releaseTitle?: string; 13 + }) { 14 + return ( 15 + <View className="flex flex-col items-center"> 16 + <Image 17 + className="w-48 h-48 rounded-lg bg-gray-500/50 mb-2" 18 + source={{ 19 + uri: `https://coverartarchive.org/release/${releaseMbid}/front-250`, 20 + }} 21 + /> 22 + <Text className="text-xl text-center">{trackTitle}</Text> 23 + {artistName && ( 24 + <Text className="text-lg text-gray-500 text-center">{artistName}</Text> 25 + )} 26 + {releaseTitle && ( 27 + <Text className="text-lg text-gray-500 text-center"> 28 + {releaseTitle} 29 + </Text> 30 + )} 31 + </View> 32 + ); 33 + }
+54 -47
apps/amethyst/global.css
··· 3 @tailwind utilities; 4 5 @layer base { 6 - :root { 7 - --base-font-family: "EBGaramond"; 8 - --background: 313 35% 98%; 9 - --foreground: 313 79% 4%; 10 - --muted: 283 24% 92%; 11 - --muted-foreground: 283 11% 39%; 12 - --popover: 313 35% 97%; 13 - --popover-foreground: 313 79% 3%; 14 - --card: 313 35% 97%; 15 - --card-foreground: 313 79% 3%; 16 - --border: 313 8% 92%; 17 - --input: 313 8% 92%; 18 - --primary: 313 99% 74%; 19 - --primary-foreground: 313 99% 14%; 20 - --secondary: 283 99% 74%; 21 - --secondary-foreground: 283 99% 14%; 22 - --accent: 343 99% 74%; 23 - --accent-foreground: 343 99% 14%; 24 - --destructive: 5 91% 37%; 25 - --destructive-foreground: 5 91% 97%; 26 - --bsky: 211.08 99.11% 60.08%; 27 - --ring: 313 99% 74%; 28 - --radius: 1rem; 29 - } 30 31 - .dark:root { 32 - --background: 313 60% 1%; 33 - --foreground: 313 14% 97%; 34 - --muted: 283 24% 8%; 35 - --muted-foreground: 283 11% 61%; 36 - --popover: 313 60% 2%; 37 - --popover-foreground: 313 14% 98%; 38 - --card: 313 60% 2%; 39 - --card-foreground: 313 14% 98%; 40 - --border: 313 8% 14%; 41 - --input: 313 8% 14%; 42 - --primary: 313 99% 74%; 43 - --primary-foreground: 313 99% 14%; 44 - --secondary: 283 99% 74%; 45 - --secondary-foreground: 283 99% 14%; 46 - --accent: 343 99% 74%; 47 - --accent-foreground: 343 99% 14%; 48 - --destructive: 5 91% 60%; 49 - --destructive-foreground: 0 0% 100%; 50 - --bsky: 211.08 99.11% 60.08%; 51 - --ring: 313 99% 74%; 52 - } 53 } 54 55 .var-font-soft { 56 - font-variation-settings: "SOFT" 100; 57 }
··· 3 @tailwind utilities; 4 5 @layer base { 6 + :root { 7 + font-variation-settings: "opsz" 10; 8 + --base-font-family: "EBGaramond"; 9 + --background: 313 35% 98%; 10 + --foreground: 313 79% 4%; 11 + --muted: 283 24% 92%; 12 + --muted-foreground: 283 11% 39%; 13 + --popover: 313 35% 97%; 14 + --popover-foreground: 313 79% 3%; 15 + --card: 313 35% 97%; 16 + --card-foreground: 313 79% 3%; 17 + --border: 313 8% 92%; 18 + --input: 313 8% 92%; 19 + --primary: 313 99% 74%; 20 + --primary-foreground: 313 99% 14%; 21 + --secondary: 283 99% 74%; 22 + --secondary-foreground: 283 99% 14%; 23 + --accent: 343 99% 74%; 24 + --accent-foreground: 343 99% 14%; 25 + --destructive: 5 91% 37%; 26 + --destructive-foreground: 5 91% 97%; 27 + --bsky: 211.08 99.11% 60.08%; 28 + --ring: 313 99% 74%; 29 + --radius: 1rem; 30 + } 31 + 32 + .dark:root { 33 + --background: 313 60% 1%; 34 + --foreground: 313 14% 97%; 35 + --muted: 283 24% 8%; 36 + --muted-foreground: 283 11% 61%; 37 + --popover: 313 60% 2%; 38 + --popover-foreground: 313 14% 98%; 39 + --card: 313 60% 2%; 40 + --card-foreground: 313 14% 98%; 41 + --border: 313 8% 14%; 42 + --input: 313 8% 14%; 43 + --primary: 313 99% 74%; 44 + --primary-foreground: 313 99% 14%; 45 + --secondary: 283 99% 74%; 46 + --secondary-foreground: 283 99% 14%; 47 + --accent: 343 99% 74%; 48 + --accent-foreground: 343 99% 14%; 49 + --destructive: 5 91% 60%; 50 + --destructive-foreground: 0 0% 100%; 51 + --bsky: 211.08 99.11% 60.08%; 52 + --ring: 313 99% 74%; 53 + } 54 + } 55 56 + * { 57 + -webkit-font-smoothing: antialiased; 58 + -moz-osx-font-smoothing: grayscale; 59 + text-rendering: optimizeLegibility; 60 } 61 62 .var-font-soft { 63 + font-variation-settings: "SOFT" 100; 64 }
+23
apps/amethyst/hooks/useIsMobile.tsx
···
··· 1 + import { useEffect, useState } from "react"; 2 + import { Platform } from "react-native"; 3 + 4 + export const isMobileInner = () => 5 + Platform.OS === "web" && window.innerWidth > 1024; 6 + 7 + export default function useIsMobile() { 8 + const [isMobile, setIsMobile] = useState(isMobileInner()); 9 + 10 + useEffect(() => { 11 + const handleResize = () => { 12 + setIsMobile(isMobileInner()); 13 + }; 14 + 15 + window.addEventListener("resize", handleResize); 16 + 17 + return () => { 18 + window.removeEventListener("resize", handleResize); 19 + }; 20 + }, []); 21 + 22 + return isMobile; 23 + }
+40 -36
apps/amethyst/lib/atp/oauth.tsx
··· 12 >; 13 14 export default function createOAuthClient( 15 - baseUrl: string, 16 ): AquareumOAuthClient { 17 if (!baseUrl) { 18 throw new Error("baseUrl is required"); 19 } 20 let meta: ClientMetadata; 21 22 - const isWeb = Platform.OS === "web"; 23 - const u = new URL(baseUrl); 24 - let hostname = u.hostname; 25 - if (hostname == "localhost") { 26 - hostname = "127.0.0.1"; 27 - } 28 - let redirect = `${u.protocol}//${hostname}`; 29 - if (u.port !== "") { 30 - redirect = `${redirect}:${u.port}`; 31 - } 32 - if (isWeb) { 33 - redirect = `${redirect}/auth/callback`; 34 - } else { 35 - const scheme = Constants.expoConfig?.scheme; 36 - if (!scheme) { 37 - throw new Error("unable to resolve scheme for oauth redirect"); 38 - } 39 - redirect = `${redirect}/app-return/${scheme}`; 40 } 41 - const queryParams = new URLSearchParams(); 42 - queryParams.set("scope", "atproto transition:generic"); 43 - queryParams.set("redirect_uri", redirect); 44 - meta = { 45 - client_id: `http://localhost?${queryParams.toString()}`, 46 - redirect_uris: [redirect as any], 47 - scope: "atproto transition:generic", 48 - token_endpoint_auth_method: "none", 49 - client_name: "Loopback client", 50 - response_types: ["code"], 51 - grant_types: ["authorization_code", "refresh_token"], 52 - // > There is a special exception for the localhost development workflow [ ... ] 53 - // > These clients use web URLs, but have application_type set to native in the generated client metadata. 54 - application_type: "native", 55 - dpop_bound_access_tokens: true, 56 - }; 57 clientMetadataSchema.parse(meta); 58 return new ReactNativeOAuthClient({ 59 handleResolver: "https://bsky.social", // backend instances should use a DNS based resolver ··· 63 // "client_id" endpoint (except when using a loopback client) 64 clientMetadata: meta, 65 }); 66 - }
··· 12 >; 13 14 export default function createOAuthClient( 15 + baseUrl: string 16 ): AquareumOAuthClient { 17 if (!baseUrl) { 18 throw new Error("baseUrl is required"); 19 } 20 let meta: ClientMetadata; 21 22 + const isWeb = Platform.OS === "web"; 23 + const u = new URL(baseUrl); 24 + let hostname = u.hostname; 25 + if (hostname === "localhost") { 26 + hostname = "127.0.0.1"; 27 + } 28 + let redirect = `${u.protocol}//${hostname}`; 29 + if (u.port !== "") { 30 + redirect = `${redirect}:${u.port}`; 31 + } 32 + if (isWeb) { 33 + redirect = `${redirect}/auth/callback`; 34 + } else { 35 + const scheme = Constants.expoConfig?.scheme; 36 + if (!scheme) { 37 + throw new Error("unable to resolve scheme for oauth redirect"); 38 } 39 + redirect = `${redirect}/app-return/${scheme}`; 40 + } 41 + const queryParams = new URLSearchParams(); 42 + queryParams.set("scope", "atproto transition:generic"); 43 + queryParams.set("redirect_uri", redirect); 44 + console.log("Our client base uri is ", hostname); 45 + meta = { 46 + client_id: 47 + hostname === "127.0.0.1" 48 + ? `http://localhost?${queryParams.toString()}` 49 + : `https://${hostname}/client-metadata.json`, 50 + redirect_uris: [redirect as any], 51 + scope: "atproto transition:generic", 52 + token_endpoint_auth_method: "none", 53 + client_name: "Amethyst", 54 + response_types: ["code"], 55 + grant_types: ["authorization_code", "refresh_token"], 56 + // > There is a special exception for the localhost development workflow [ ... ] 57 + // > These clients use web URLs, but have application_type set to native in the generated client metadata. 58 + application_type: hostname === "localhost" ? "native" : "web", 59 + dpop_bound_access_tokens: true, 60 + }; 61 clientMetadataSchema.parse(meta); 62 return new ReactNativeOAuthClient({ 63 handleResolver: "https://bsky.social", // backend instances should use a DNS based resolver ··· 67 // "client_id" endpoint (except when using a loopback client) 68 clientMetadata: meta, 69 }); 70 + }
+81
apps/amethyst/lib/oldStamp.tsx
···
··· 1 + import { Record as PlayRecord } from "@teal/lexicons/src/types/fm/teal/alpha/feed/play"; 2 + 3 + // MusicBrainz API Types 4 + export interface MusicBrainzArtistCredit { 5 + artist: { 6 + id: string; 7 + name: string; 8 + "sort-name"?: string; 9 + }; 10 + joinphrase?: string; 11 + name: string; 12 + } 13 + 14 + export interface MusicBrainzRelease { 15 + id: string; 16 + title: string; 17 + status?: string; 18 + date?: string; 19 + country?: string; 20 + disambiguation?: string; 21 + "track-count"?: number; 22 + } 23 + 24 + export interface MusicBrainzRecording { 25 + id: string; 26 + title: string; 27 + length?: number; 28 + isrcs?: string[]; 29 + "artist-credit"?: MusicBrainzArtistCredit[]; 30 + releases?: MusicBrainzRelease[]; 31 + selectedRelease?: MusicBrainzRelease; // Added for UI state 32 + } 33 + 34 + export interface SearchParams { 35 + track?: string; 36 + artist?: string; 37 + release?: string; 38 + } 39 + 40 + export interface SearchResultProps { 41 + result: MusicBrainzRecording; 42 + onSelectTrack: (track: MusicBrainzRecording | null) => void; 43 + isSelected: boolean; 44 + selectedRelease: MusicBrainzRelease | null; 45 + onReleaseSelect: (trackId: string, release: MusicBrainzRelease) => void; 46 + } 47 + 48 + export interface ReleaseSelections { 49 + [key: string]: MusicBrainzRelease; 50 + } 51 + 52 + export interface PlaySubmittedData { 53 + playRecord: PlayRecord | null; 54 + playAtUrl: string | null; 55 + blueskyPostUrl: string | null; 56 + } 57 + 58 + export async function searchMusicbrainz( 59 + searchParams: SearchParams, 60 + ): Promise<MusicBrainzRecording[]> { 61 + try { 62 + const queryParts: string[] = []; 63 + if (searchParams.track) 64 + queryParts.push(`release title:"${searchParams.track}"`); 65 + if (searchParams.artist) 66 + queryParts.push(`AND artist:"${searchParams.artist}"`); 67 + 68 + const query = queryParts.join(" AND "); 69 + 70 + const res = await fetch( 71 + `https://musicbrainz.org/ws/2/recording?query=${encodeURIComponent( 72 + query, 73 + )}&fmt=json`, 74 + ); 75 + const data = await res.json(); 76 + return data.recordings || []; 77 + } catch (error) { 78 + console.error("Failed to fetch MusicBrainz data:", error); 79 + return []; 80 + } 81 + }
+10 -2
apps/amethyst/metro.config.js
··· 1 // Learn more https://docs.expo.io/guides/customizing-metro 2 - const { getDefaultConfig } = require('expo/metro-config'); 3 const { withNativeWind } = require("nativewind/metro"); 4 5 /** @type {import('expo/metro-config').MetroConfig} */ 6 const config = getDefaultConfig(__dirname); 7 8 - module.exports = withNativeWind(config, { input: './global.css' });
··· 1 // Learn more https://docs.expo.io/guides/customizing-metro 2 + const { getDefaultConfig } = require("expo/metro-config"); 3 + const { FileStore } = require("metro-cache"); 4 + const path = require("path"); 5 const { withNativeWind } = require("nativewind/metro"); 6 7 /** @type {import('expo/metro-config').MetroConfig} */ 8 const config = getDefaultConfig(__dirname); 9 10 + config.cacheStores = [ 11 + new FileStore({ 12 + root: path.join(__dirname, "node_modules", ".cache", "metro"), 13 + }), 14 + ]; 15 + 16 + module.exports = withNativeWind(config, { input: "./global.css" });
+2
apps/amethyst/package.json
··· 8 "android": "expo run:android", 9 "ios": "expo run:ios", 10 "web": "expo start --web", 11 "test": "jest --watchAll", 12 "lexgen": "lex gen-server ./lexicons/generated/server/ ./lexicons/src/" 13 }, ··· 21 "@atproto/oauth-client": "^0.3.5", 22 "@expo/vector-icons": "^14.0.4", 23 "@react-native-async-storage/async-storage": "1.23.1", 24 "@react-navigation/native": "^7.0.9", 25 "@rn-primitives/avatar": "^1.1.0", 26 "@rn-primitives/hover-card": "^1.1.0",
··· 8 "android": "expo run:android", 9 "ios": "expo run:ios", 10 "web": "expo start --web", 11 + "build": "expo export --output-dir ./build --platform all", 12 "test": "jest --watchAll", 13 "lexgen": "lex gen-server ./lexicons/generated/server/ ./lexicons/src/" 14 }, ··· 22 "@atproto/oauth-client": "^0.3.5", 23 "@expo/vector-icons": "^14.0.4", 24 "@react-native-async-storage/async-storage": "1.23.1", 25 + "@react-native-picker/picker": "^2.11.0", 26 "@react-navigation/native": "^7.0.9", 27 "@rn-primitives/avatar": "^1.1.0", 28 "@rn-primitives/hover-card": "^1.1.0",
+48
apps/amethyst/postbuild.py
···
··· 1 + import json 2 + import os 3 + import sys 4 + 5 + def update_metadata(): 6 + # Get CF_PAGES_URL from environment 7 + cf_pages_url = os.environ.get('CF_PAGES_URL') 8 + 9 + if not cf_pages_url: 10 + print("CF_PAGES_URL environment variable not found") 11 + sys.exit(1) 12 + 13 + # Remove 'https://' if present 14 + if cf_pages_url.startswith('https://'): 15 + cf_pages_url = cf_pages_url[8:] 16 + 17 + # Path to metadata file 18 + metadata_path_pre = 'assets/client-metadata.json' 19 + metadata_path = 'dist/client-metadata.json' 20 + 21 + try: 22 + # Read the JSON file 23 + with open(metadata_path_pre, 'r') as file: 24 + metadata = json.load(file) 25 + 26 + # Replace all instances of 'alpha.teal.fm' with CF_PAGES_URL 27 + metadata_str = json.dumps(metadata) 28 + updated_metadata_str = metadata_str.replace('alpha.teal.fm', cf_pages_url) 29 + updated_metadata = json.loads(updated_metadata_str) 30 + 31 + # Write the updated JSON back to file 32 + with open(metadata_path, 'w') as file: 33 + json.dump(updated_metadata, file, indent=2) 34 + 35 + print(f"Successfully updated {metadata_path} with {cf_pages_url}") 36 + 37 + except FileNotFoundError: 38 + print(f"Error: {metadata_path} not found") 39 + sys.exit(1) 40 + except json.JSONDecodeError: 41 + print(f"Error: Invalid JSON in {metadata_path}") 42 + sys.exit(1) 43 + except Exception as e: 44 + print(f"Error: {str(e)}") 45 + sys.exit(1) 46 + 47 + if __name__ == "__main__": 48 + update_metadata()
+4
apps/amethyst/readme.md
··· 7 8 We use [NativeWind](https://nativewind.dev/) for styling, and for UI components, we use [React Native Reusables](https://github.com/mrzachnugent/react-native-reusables). 9 Would highly recommend reading the "getting started" and "guides" sections on each.
··· 7 8 We use [NativeWind](https://nativewind.dev/) for styling, and for UI components, we use [React Native Reusables](https://github.com/mrzachnugent/react-native-reusables). 9 Would highly recommend reading the "getting started" and "guides" sections on each. 10 + 11 + ## Development 12 + 13 + TODO
+18 -11
apps/amethyst/stores/authenticationSlice.tsx
··· 32 33 export const createAuthenticationSlice: StateCreator<AuthenticationSlice> = ( 34 set, 35 - get 36 ) => { 37 - const initialAuth = createOAuthClient("http://localhost:8081"); 38 39 console.log("Auth client created!"); 40 ··· 72 if (!(state.has("code") && state.has("state") && state.has("iss"))) { 73 throw new Error("Missing params, got: " + state); 74 } 75 - // are we already logged in? 76 if (get().status === "loggedIn") { 77 return; 78 } 79 - const { session, state: oauthState } = await initialAuth.callback(state); 80 const agent = new Agent(session); 81 set({ 82 oauthSession: session, ··· 127 } 128 }, 129 logOut: () => { 130 set({ 131 status: "loggedOut", 132 oauthSession: null, ··· 140 }; 141 142 function addDocs(agent: Agent) { 143 - Lexicons.schemas.filter((schema) => !schema.id.startsWith("app.bsky.")).map((schema) => { 144 - try { 145 - agent.lex.add(schema); 146 - } catch (e) { 147 - console.error("Failed to add schema:", e); 148 - } 149 - }); 150 return agent; 151 }
··· 32 33 export const createAuthenticationSlice: StateCreator<AuthenticationSlice> = ( 34 set, 35 + get, 36 ) => { 37 + // check if we have CF_PAGES_URL set. if not, use localhost 38 + const baseUrl = process.env.EXPO_PUBLIC_BASE_URL || "http://localhost:8081"; 39 + console.log("Using base URL:", baseUrl); 40 + const initialAuth = createOAuthClient(baseUrl); 41 42 console.log("Auth client created!"); 43 ··· 75 if (!(state.has("code") && state.has("state") && state.has("iss"))) { 76 throw new Error("Missing params, got: " + state); 77 } 78 + // are we already logged in? 79 if (get().status === "loggedIn") { 80 return; 81 } 82 + const { session, state: oauthState } = 83 + await initialAuth.callback(state); 84 const agent = new Agent(session); 85 set({ 86 oauthSession: session, ··· 131 } 132 }, 133 logOut: () => { 134 + console.log("Logging out"); 135 set({ 136 status: "loggedOut", 137 oauthSession: null, ··· 145 }; 146 147 function addDocs(agent: Agent) { 148 + Lexicons.schemas 149 + .filter((schema) => !schema.id.startsWith("app.bsky.")) 150 + .map((schema) => { 151 + try { 152 + agent.lex.add(schema); 153 + } catch (e) { 154 + console.error("Failed to add schema:", e); 155 + } 156 + }); 157 return agent; 158 }
+524 -175
pnpm-lock.yaml
··· 25 dependencies: 26 '@aquareum/atproto-oauth-client-react-native': 27 specifier: ^0.0.1 28 - version: 0.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 29 '@atproto/api': 30 specifier: ^0.13.18 31 version: 0.13.19 ··· 41 '@react-native-async-storage/async-storage': 42 specifier: 1.23.1 43 version: 1.23.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 44 '@react-navigation/native': 45 specifier: ^7.0.9 46 version: 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) ··· 79 version: 19.0.0-beta-37ed2a7-20241206(eslint@8.57.1) 80 expo: 81 specifier: ~52.0.17 82 - version: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 83 expo-constants: 84 specifier: ^17.0.3 85 - version: 17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 86 expo-font: 87 specifier: ~13.0.1 88 - version: 13.0.2(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 89 expo-linking: 90 specifier: ~7.0.3 91 - version: 7.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 92 expo-router: 93 specifier: ~4.0.1 94 - version: 4.0.15(gotfvpjgdda64332thj6zgv2gq) 95 expo-splash-screen: 96 specifier: ~0.29.13 97 - version: 0.29.18(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)) 98 expo-sqlite: 99 specifier: ^15.0.3 100 - version: 15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 101 expo-status-bar: 102 specifier: ~2.0.0 103 - version: 2.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 104 expo-system-ui: 105 specifier: ~4.0.4 106 - version: 4.0.6(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 107 expo-web-browser: 108 specifier: ~14.0.1 109 - version: 14.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 110 lucide-react-native: 111 specifier: ^0.460.0 112 version: 0.460.0(react-native-svg@15.8.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) ··· 248 version: 16.4.7 249 drizzle-orm: 250 specifier: ^0.38.3 251 - version: 0.38.3(@libsql/client@0.14.0)(@types/react@18.3.12)(expo-sqlite@15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 252 envalid: 253 specifier: ^8.0.0 254 version: 8.0.0 ··· 309 version: 0.30.1 310 drizzle-orm: 311 specifier: ^0.38.3 312 - version: 0.38.3(@libsql/client@0.14.0)(@types/react@18.3.12)(expo-sqlite@15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 313 devDependencies: 314 '@types/node': 315 specifier: ^20.17.6 ··· 1867 resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} 1868 engines: {node: '>=0.10.0'} 1869 1870 - '@expo/cli@0.22.7': 1871 - resolution: {integrity: sha512-aNrUPVFPdIX42Q6UM6qygrN4DUqnXMDS1CnkTfNFVIZWRiJ1TUA05Zk6aF35M674CKd/c/dWHFjmbgjsyN/hEA==} 1872 hasBin: true 1873 1874 '@expo/code-signing-certificates@0.0.5': ··· 1876 1877 '@expo/config-plugins@9.0.12': 1878 resolution: {integrity: sha512-/Ko/NM+GzvJyRkq8PITm8ms0KY5v0wmN1OQFYRMkcJqOi3PjlhndW+G6bHpJI9mkQXBaUnHwAiGLqIC3+MQ5Wg==} 1879 1880 '@expo/config-types@52.0.1': 1881 resolution: {integrity: sha512-vD8ZetyKV7U29lR6+NJohYeoLYTH+eNYXJeNiSOrWCz0witJYY11meMmEnpEaVbN89EfC6uauSUOa6wihtbyPQ==} 1882 1883 '@expo/config@10.0.6': 1884 resolution: {integrity: sha512-xXkfPElrtxznkOZxFASJ7OPa6E9IHSjcZwj5BQ6XUF2dz5M7AFa2h5sXM8AalSaDU5tEBSgoUOjTh5957TlR8g==} 1885 1886 '@expo/devcert@1.1.4': 1887 resolution: {integrity: sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==} 1888 1889 - '@expo/env@0.4.0': 1890 - resolution: {integrity: sha512-g2JYFqck3xKIwJyK+8LxZ2ENZPWtRgjFWpeht9abnKgzXVXBeSNECFBkg+WQjQocSIdxXhEWM6hz4ZAe7Tc4ng==} 1891 1892 - '@expo/fingerprint@0.11.6': 1893 - resolution: {integrity: sha512-hlVIfMEJYZIqIFMjeGRN5GhK/h6vJ3M4QVc1ZD8F0Bh7gMeI+jZkEyZdL5XT29jergQrksP638e2qFwgrGTw/w==} 1894 hasBin: true 1895 1896 '@expo/image-utils@0.6.3': 1897 resolution: {integrity: sha512-v/JbCKBrHeudxn1gN1TgfPE/pWJSlLPrl29uXJBgrJFQVkViQvUHQNDhaS+UEa9wYI5HHh7XYmtzAehyG4L+GA==} 1898 1899 '@expo/json-file@9.0.0': 1900 resolution: {integrity: sha512-M+55xFVrFzDcgMDf+52lPDLjKB5xwRfStWlv/b/Vu2OLgxGZLWpxoPYjlRoHqxjPbCQIi2ZCbobK+0KuNhsELg==} 1901 1902 - '@expo/metro-config@0.19.8': 1903 - resolution: {integrity: sha512-dVAOetouQYuOTEJ2zR0OTLNPOH6zPkeEt5fY53TK0Wxi1QmtsmH6vEWg05U4zkSJ6f1aXmQ0Za77R8QxuukESA==} 1904 1905 '@expo/metro-runtime@4.0.0': 1906 resolution: {integrity: sha512-+zgCyuXqIzgZVN8h0g36sursGXBy3xqtJW9han7t/iR2HTTrrbEoep5ftW1a27bdSINU96ng+rSsPLbyHYeBvw==} 1907 peerDependencies: 1908 react-native: '*' 1909 1910 - '@expo/osascript@2.1.4': 1911 - resolution: {integrity: sha512-LcPjxJ5FOFpqPORm+5MRLV0CuYWMthJYV6eerF+lQVXKlvgSn3EOqaHC3Vf3H+vmB0f6G4kdvvFtg40vG4bIhA==} 1912 engines: {node: '>=12'} 1913 1914 - '@expo/package-manager@1.6.1': 1915 - resolution: {integrity: sha512-4rT46wP/94Ll+CWXtFKok1Lbo9XncSUtErFOo/9/3FVughGbIfdG4SKZOAWIpr9wxwEfkyhHfAP9q71ONlWODw==} 1916 1917 '@expo/plist@0.2.0': 1918 resolution: {integrity: sha512-F/IZJQaf8OIVnVA6XWUeMPC3OH6MV00Wxf0WC0JhTQht2QgjyHUa3U5Gs3vRtDq8tXNsZneOQRDVwpaOnd4zTQ==} 1919 1920 '@expo/prebuild-config@8.0.23': 1921 resolution: {integrity: sha512-Zf01kFiN2PISmLb0DhIAJh76v3J2oYUKSjiAtGZLOH0HUz59by/qdyU4mGHWdeyRdCCrLUA21Rct2MBykvRMsg==} 1922 1923 '@expo/rudder-sdk-node@1.1.1': 1924 resolution: {integrity: sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==} 1925 engines: {node: '>=12'} ··· 1927 '@expo/sdk-runtime-versions@1.0.0': 1928 resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==} 1929 1930 - '@expo/server@0.5.0': 1931 - resolution: {integrity: sha512-bfo5udr9C2feCn+vGQ9LvjRD2zFjMyBEnMWDZLYr5D8eCjqLjazGBpPKOVjWOhFR2SshKA3hUBkWEYrVpun0NQ==} 1932 1933 '@expo/spawn-async@1.7.2': 1934 resolution: {integrity: sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==} ··· 2440 peerDependencies: 2441 react-native: ^0.0.0-0 || >=0.60 <1.0 2442 2443 '@react-native/assets-registry@0.76.5': 2444 resolution: {integrity: sha512-MN5dasWo37MirVcKWuysRkRr4BjNc81SXwUtJYstwbn8oEkfnwR9DaqdDTo/hHOnTdhafffLIa2xOOHcjDIGEw==} 2445 engines: {node: '>=18'} ··· 2448 resolution: {integrity: sha512-xe7HSQGop4bnOLMaXt0aU+rIatMNEQbz242SDl8V9vx5oOTI0VbZV9yLy6yBc6poUlYbcboF20YVjoRsxX4yww==} 2449 engines: {node: '>=18'} 2450 2451 '@react-native/babel-preset@0.76.5': 2452 resolution: {integrity: sha512-1Nu5Um4EogOdppBLI4pfupkteTjWfmI0hqW8ezWTg7Bezw0FtBj8yS8UYVd3wTnDFT9A5mA2VNoNUqomJnvj2A==} 2453 engines: {node: '>=18'} 2454 peerDependencies: 2455 '@babel/core': '*' 2456 2457 '@react-native/codegen@0.76.5': 2458 resolution: {integrity: sha512-FoZ9VRQ5MpgtDAnVo1rT9nNRfjnWpE40o1GeJSDlpUMttd36bVXvsDm8W/NhX8BKTWXSX+CPQJsRcvN1UPYGKg==} 2459 engines: {node: '>=18'} 2460 peerDependencies: 2461 '@babel/preset-env': ^7.1.6 2462 2463 '@react-native/community-cli-plugin@0.76.5': 2464 resolution: {integrity: sha512-3MKMnlU0cZOWlMhz5UG6WqACJiWUrE3XwBEumzbMmZw3Iw3h+fIsn+7kLLE5EhzqLt0hg5Y4cgYFi4kOaNgq+g==} 2465 engines: {node: '>=18'} ··· 2471 2472 '@react-native/debugger-frontend@0.76.5': 2473 resolution: {integrity: sha512-5gtsLfBaSoa9WP8ToDb/8NnDBLZjv4sybQQj7rDKytKOdsXm3Pr2y4D7x7GQQtP1ZQRqzU0X0OZrhRz9xNnOqA==} 2474 engines: {node: '>=18'} 2475 2476 '@react-native/dev-middleware@0.76.5': 2477 resolution: {integrity: sha512-f8eimsxpkvMgJia7POKoUu9uqjGF6KgkxX4zqr/a6eoR1qdEAWUd6PonSAqtag3PAqvEaJpB99gLH2ZJI1nDGg==} 2478 engines: {node: '>=18'} 2479 2480 '@react-native/gradle-plugin@0.76.5': 2481 resolution: {integrity: sha512-7KSyD0g0KhbngITduC8OABn0MAlJfwjIdze7nA4Oe1q3R7qmAv+wQzW+UEXvPah8m1WqFjYTkQwz/4mK3XrQGw==} 2482 engines: {node: '>=18'} ··· 2496 2497 '@react-native/normalize-colors@0.76.5': 2498 resolution: {integrity: sha512-6QRLEok1r55gLqj+94mEWUENuU5A6wsr2OoXpyq/CgQ7THWowbHtru/kRGRr6o3AQXrVnZheR60JNgFcpNYIug==} 2499 2500 '@react-native/typescript-config@0.76.5': 2501 resolution: {integrity: sha512-dRbY4XQTUUxR5Oq+S+2/5JQVU6WL0qvNnAz51jiXllC+hp5L4bljSxlzaj5CJ9vzGNFzm56m5Y9Q6MltoIU4Cw==} ··· 3311 peerDependencies: 3312 '@babel/core': ^7.0.0 3313 3314 - babel-preset-expo@12.0.4: 3315 - resolution: {integrity: sha512-SAzAwqpyjA+/OFrU95OOioj6oTeCv4+rRfrNmBTy5S/gJswrZKBSPJioFudIaJBy43W+BL7HA5AspBIF6tO/aA==} 3316 peerDependencies: 3317 babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 3318 react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 ··· 4329 resolution: {integrity: sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==} 4330 engines: {node: '>=0.10.0'} 4331 4332 - expo-asset@11.0.1: 4333 - resolution: {integrity: sha512-WatvD7JVC89EsllXFYcS/rji3ajVzE2B/USo0TqedsETixwyVCQfrrvCdCPQyuKghrxVNEj8bQ/Qbea/RZLYjg==} 4334 peerDependencies: 4335 expo: '*' 4336 react: '*' 4337 react-native: '*' 4338 4339 - expo-constants@17.0.3: 4340 - resolution: {integrity: sha512-lnbcX2sAu8SucHXEXxSkhiEpqH+jGrf+TF+MO6sHWIESjwOUVVYlT8qYdjR9xbxWmqFtrI4KV44FkeJf2DaFjQ==} 4341 peerDependencies: 4342 expo: '*' 4343 react-native: '*' 4344 4345 - expo-file-system@18.0.6: 4346 - resolution: {integrity: sha512-gGEwIJCXV3/wpIJ/wRyhmieLOSAY7HeFFjb+wEfHs04aE63JYR+rXXV4b7rBpEh1ZgNV9U91zfet/iQG7J8HBQ==} 4347 peerDependencies: 4348 expo: '*' 4349 react-native: '*' 4350 4351 - expo-font@13.0.2: 4352 - resolution: {integrity: sha512-H9FaXM7ZW5+EfV38w80BgJG3H17kB7CuVXwHoiszIYyoPfWz9bWesFe4QwNZjTq3pzKes28sSd8irFuflIrSIA==} 4353 peerDependencies: 4354 expo: '*' 4355 react: '*' 4356 4357 - expo-keep-awake@14.0.1: 4358 - resolution: {integrity: sha512-c5mGCAIk2YM+Vsdy90BlEJ4ZX+KG5Au9EkJUIxXWlpnuKmDAJ3N+5nEZ7EUO1ZTheqoSBeAo4jJ8rTWPU+JXdw==} 4359 peerDependencies: 4360 expo: '*' 4361 react: '*' 4362 4363 - expo-linking@7.0.3: 4364 - resolution: {integrity: sha512-YiDacNzeQZd/bdOwGyi+YlawM4GGbcSRkuFCpDGIK7D1KUGqLinBHwJvxUMb9Zert2Ois5IHtmZaZ1et6g229g==} 4365 peerDependencies: 4366 react: '*' 4367 react-native: '*' 4368 4369 - expo-modules-autolinking@2.0.4: 4370 - resolution: {integrity: sha512-e0p+19NhmD50U7s7BV7kWIypWmTNC9n/VlJKlXS05hM/zX7pe6JKmXyb+BFnXJq3SLBalLCUY0tu2gEUF3XeVg==} 4371 hasBin: true 4372 4373 - expo-modules-core@2.1.2: 4374 - resolution: {integrity: sha512-0OhMU5S8zf9c/CRh1MwiXfOInI9wzz6yiIh5RuR/9J7N6xHRum68hInsPbaSc1UQpo08ZZLM4MPsbpoNRUoqIg==} 4375 4376 - expo-router@4.0.15: 4377 - resolution: {integrity: sha512-5MDy7iVzgi8lheRunsR4lTKEKTNqukC3uYSWhY370Nakdd+E/Woz+Vw1M67/KrnvefTV5hF97bNUUMzY+fyojw==} 4378 peerDependencies: 4379 '@react-navigation/drawer': ^7.1.1 4380 '@testing-library/jest-native': '*' ··· 4397 peerDependencies: 4398 expo: '*' 4399 4400 - expo-sqlite@15.0.5: 4401 - resolution: {integrity: sha512-PtkZB/w5uyPszt2oOnh9qG6Tn1nn8mDSi+KdjATQJyrWsUPHuhN/jugJ5NYD9/TcpDEZ/chttmTgkqIhjjwqeA==} 4402 peerDependencies: 4403 expo: '*' 4404 react: '*' 4405 react-native: '*' 4406 4407 - expo-status-bar@2.0.0: 4408 - resolution: {integrity: sha512-vxxdpvpNDMTEc5uTiIrbTvySKKUsOACmfl8OZuUdjNle05oGqwtq3v5YObwym/njSByjoyuZX8UpXBZnxvarwQ==} 4409 peerDependencies: 4410 react: '*' 4411 react-native: '*' 4412 4413 - expo-system-ui@4.0.6: 4414 - resolution: {integrity: sha512-JWmw0aaNIB8YxA6bXgH6nClyledZaAG5VNzoRvmXT4+j3MY4waAHSSSdVV71bUgjchT/2KOAcibZ/EeosJONug==} 4415 peerDependencies: 4416 expo: '*' 4417 react-native: '*' ··· 4420 react-native-web: 4421 optional: true 4422 4423 - expo-web-browser@14.0.1: 4424 - resolution: {integrity: sha512-QM9F3ie+UyIOoBvqFmT6CZojb1vMc2H+7ZlMT5dEu1PL2jtYyOeK2hLfbt/EMt7CBm/w+P29H9W9Y9gdebOkuQ==} 4425 peerDependencies: 4426 expo: '*' 4427 react-native: '*' 4428 4429 - expo@52.0.23: 4430 - resolution: {integrity: sha512-DR36Vkpz/ZLPci4fxDBG/pLk26nGK63vcZ+X4RZJfNBzi14DXZ939loP8YzWGV78Qp23qdPINczpo2727tqLxg==} 4431 hasBin: true 4432 peerDependencies: 4433 '@expo/dom-webview': '*' ··· 6306 peerDependencies: 6307 react: ^17.0.0 || ^18.0.0 || ^19.0.0 6308 6309 react-devtools-core@5.3.2: 6310 resolution: {integrity: sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==} 6311 ··· 6456 6457 react@18.3.1: 6458 resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 6459 engines: {node: '>=0.10.0'} 6460 6461 read-cache@1.0.0: ··· 7704 '@jridgewell/gen-mapping': 0.3.5 7705 '@jridgewell/trace-mapping': 0.3.25 7706 7707 - '@aquareum/atproto-oauth-client-react-native@0.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': 7708 dependencies: 7709 '@atproto-labs/did-resolver': 0.1.5 7710 '@atproto-labs/handle-resolver-node': 0.1.7 ··· 7719 '@atproto/oauth-types': 0.2.1 7720 abortcontroller-polyfill: 1.7.8 7721 event-target-shim: 6.0.2 7722 - expo-sqlite: 15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 7723 jose: 5.9.6 7724 react-native-quick-crypto: 0.7.10(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 7725 transitivePeerDependencies: ··· 9312 dependencies: 9313 uuid: 8.3.2 9314 9315 - '@expo/cli@0.22.7': 9316 dependencies: 9317 '@0no-co/graphql.web': 1.0.12 9318 '@babel/runtime': 7.26.0 9319 '@expo/code-signing-certificates': 0.0.5 9320 - '@expo/config': 10.0.6 9321 - '@expo/config-plugins': 9.0.12 9322 '@expo/devcert': 1.1.4 9323 - '@expo/env': 0.4.0 9324 - '@expo/image-utils': 0.6.3 9325 - '@expo/json-file': 9.0.0 9326 - '@expo/metro-config': 0.19.8 9327 - '@expo/osascript': 2.1.4 9328 - '@expo/package-manager': 1.6.1 9329 - '@expo/plist': 0.2.0 9330 - '@expo/prebuild-config': 8.0.23 9331 '@expo/rudder-sdk-node': 1.1.1 9332 '@expo/spawn-async': 1.7.2 9333 '@expo/xcpretty': 4.3.2 9334 - '@react-native/dev-middleware': 0.76.5 9335 '@urql/core': 5.1.0 9336 '@urql/exchange-retry': 1.3.0(@urql/core@5.1.0) 9337 accepts: 1.3.8 ··· 9416 transitivePeerDependencies: 9417 - supports-color 9418 9419 '@expo/config-types@52.0.1': {} 9420 9421 '@expo/config@10.0.6': 9422 dependencies: ··· 9436 transitivePeerDependencies: 9437 - supports-color 9438 9439 '@expo/devcert@1.1.4': 9440 dependencies: 9441 application-config-path: 0.1.1 ··· 9453 transitivePeerDependencies: 9454 - supports-color 9455 9456 - '@expo/env@0.4.0': 9457 dependencies: 9458 chalk: 4.1.2 9459 debug: 4.4.0 ··· 9463 transitivePeerDependencies: 9464 - supports-color 9465 9466 - '@expo/fingerprint@0.11.6': 9467 dependencies: 9468 '@expo/spawn-async': 1.7.2 9469 arg: 5.0.2 ··· 9491 temp-dir: 2.0.0 9492 unique-string: 2.0.0 9493 9494 '@expo/json-file@9.0.0': 9495 dependencies: 9496 '@babel/code-frame': 7.10.4 9497 json5: 2.2.3 9498 write-file-atomic: 2.4.3 9499 9500 - '@expo/metro-config@0.19.8': 9501 dependencies: 9502 '@babel/core': 7.26.0 9503 '@babel/generator': 7.26.3 9504 '@babel/parser': 7.26.3 9505 '@babel/types': 7.26.3 9506 - '@expo/config': 10.0.6 9507 - '@expo/env': 0.4.0 9508 - '@expo/json-file': 9.0.0 9509 '@expo/spawn-async': 1.7.2 9510 chalk: 4.1.2 9511 debug: 4.4.0 ··· 9524 dependencies: 9525 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 9526 9527 - '@expo/osascript@2.1.4': 9528 dependencies: 9529 '@expo/spawn-async': 1.7.2 9530 exec-async: 2.2.0 9531 9532 - '@expo/package-manager@1.6.1': 9533 dependencies: 9534 - '@expo/json-file': 9.0.0 9535 '@expo/spawn-async': 1.7.2 9536 ansi-regex: 5.0.1 9537 chalk: 4.1.2 ··· 9550 base64-js: 1.5.1 9551 xmlbuilder: 14.0.0 9552 9553 '@expo/prebuild-config@8.0.23': 9554 dependencies: 9555 '@expo/config': 10.0.6 ··· 9566 transitivePeerDependencies: 9567 - supports-color 9568 9569 '@expo/rudder-sdk-node@1.1.1': 9570 dependencies: 9571 '@expo/bunyan': 4.0.1 ··· 9580 9581 '@expo/sdk-runtime-versions@1.0.0': {} 9582 9583 - '@expo/server@0.5.0(typescript@5.7.2)': 9584 dependencies: 9585 '@remix-run/node': 2.15.2(typescript@5.7.2) 9586 abort-controller: 3.0.0 ··· 10105 merge-options: 3.0.4 10106 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 10107 10108 '@react-native/assets-registry@0.76.5': {} 10109 10110 '@react-native/babel-plugin-codegen@0.76.5(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10111 dependencies: 10112 '@react-native/codegen': 0.76.5(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 10113 transitivePeerDependencies: 10114 - '@babel/preset-env' 10115 - supports-color ··· 10165 - '@babel/preset-env' 10166 - supports-color 10167 10168 '@react-native/codegen@0.76.5(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10169 dependencies: 10170 '@babel/parser': 7.26.3 ··· 10179 transitivePeerDependencies: 10180 - supports-color 10181 10182 '@react-native/community-cli-plugin@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10183 dependencies: 10184 '@react-native/dev-middleware': 0.76.5 ··· 10201 - utf-8-validate 10202 10203 '@react-native/debugger-frontend@0.76.5': {} 10204 10205 '@react-native/dev-middleware@0.76.5': 10206 dependencies: ··· 10220 - supports-color 10221 - utf-8-validate 10222 10223 '@react-native/gradle-plugin@0.76.5': {} 10224 10225 '@react-native/js-polyfills@0.76.5': {} ··· 10237 '@react-native/normalize-colors@0.74.88': {} 10238 10239 '@react-native/normalize-colors@0.76.5': {} 10240 10241 '@react-native/typescript-config@0.76.5': {} 10242 ··· 10248 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 10249 optionalDependencies: 10250 '@types/react': 18.3.12 10251 10252 '@react-navigation/bottom-tabs@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-screens@4.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': 10253 dependencies: ··· 11161 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) 11162 '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) 11163 11164 - babel-preset-expo@12.0.4(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1)): 11165 dependencies: 11166 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) 11167 '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) ··· 11169 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) 11170 '@babel/preset-react': 7.26.3(@babel/core@7.26.0) 11171 '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) 11172 - '@react-native/babel-preset': 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 11173 babel-plugin-react-native-web: 0.19.13 11174 react-refresh: 0.14.2 11175 optionalDependencies: ··· 11180 - '@babel/preset-env' 11181 - supports-color 11182 11183 babel-preset-jest@29.6.3(@babel/core@7.26.0): 11184 dependencies: 11185 '@babel/core': 7.26.0 ··· 11803 transitivePeerDependencies: 11804 - supports-color 11805 11806 - drizzle-orm@0.38.3(@libsql/client@0.14.0)(@types/react@18.3.12)(expo-sqlite@15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1): 11807 optionalDependencies: 11808 '@libsql/client': 0.14.0 11809 '@types/react': 18.3.12 11810 - expo-sqlite: 15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 11811 - react: 18.3.1 11812 11813 dunder-proto@1.0.0: 11814 dependencies: ··· 12340 12341 exit-hook@1.1.1: {} 12342 12343 - expo-asset@11.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12344 dependencies: 12345 - '@expo/image-utils': 0.6.3 12346 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12347 - expo-constants: 17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12348 invariant: 2.2.4 12349 md5-file: 3.2.3 12350 react: 18.3.1 ··· 12352 transitivePeerDependencies: 12353 - supports-color 12354 12355 - expo-asset@11.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12356 dependencies: 12357 - '@expo/image-utils': 0.6.3 12358 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12359 - expo-constants: 17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12360 invariant: 2.2.4 12361 md5-file: 3.2.3 12362 - react: 18.3.1 12363 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12364 transitivePeerDependencies: 12365 - supports-color 12366 optional: true 12367 12368 - expo-constants@17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12369 dependencies: 12370 - '@expo/config': 10.0.6 12371 - '@expo/env': 0.4.0 12372 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12373 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12374 transitivePeerDependencies: 12375 - supports-color 12376 12377 - expo-constants@17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12378 dependencies: 12379 - '@expo/config': 10.0.6 12380 - '@expo/env': 0.4.0 12381 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12382 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12383 transitivePeerDependencies: 12384 - supports-color 12385 optional: true 12386 12387 - expo-file-system@18.0.6(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12388 dependencies: 12389 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12390 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12391 web-streams-polyfill: 3.3.3 12392 12393 - expo-file-system@18.0.6(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12394 dependencies: 12395 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12396 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12397 web-streams-polyfill: 3.3.3 12398 optional: true 12399 12400 - expo-font@13.0.2(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1): 12401 dependencies: 12402 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12403 fontfaceobserver: 2.3.0 12404 react: 18.3.1 12405 12406 - expo-font@13.0.2(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1): 12407 dependencies: 12408 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12409 fontfaceobserver: 2.3.0 12410 - react: 18.3.1 12411 optional: true 12412 12413 - expo-keep-awake@14.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1): 12414 dependencies: 12415 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12416 react: 18.3.1 12417 12418 - expo-keep-awake@14.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1): 12419 dependencies: 12420 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12421 - react: 18.3.1 12422 optional: true 12423 12424 - expo-linking@7.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12425 dependencies: 12426 - expo-constants: 17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12427 invariant: 2.2.4 12428 react: 18.3.1 12429 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) ··· 12431 - expo 12432 - supports-color 12433 12434 - expo-modules-autolinking@2.0.4: 12435 dependencies: 12436 '@expo/spawn-async': 1.7.2 12437 chalk: 4.1.2 ··· 12442 require-from-string: 2.0.2 12443 resolve-from: 5.0.0 12444 12445 - expo-modules-core@2.1.2: 12446 dependencies: 12447 invariant: 2.2.4 12448 12449 - expo-router@4.0.15(gotfvpjgdda64332thj6zgv2gq): 12450 dependencies: 12451 - '@expo/metro-runtime': 4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12452 - '@expo/server': 0.5.0(typescript@5.7.2) 12453 '@radix-ui/react-slot': 1.0.1(react@18.3.1) 12454 '@react-navigation/bottom-tabs': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-screens@4.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12455 '@react-navigation/native': 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12456 '@react-navigation/native-stack': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-screens@4.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12457 client-only: 0.0.1 12458 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12459 - expo-constants: 17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12460 - expo-linking: 7.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12461 react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 12462 react-native-helmet-async: 2.0.4(react@18.3.1) 12463 react-native-is-edge-to-edge: 1.1.6(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) ··· 12476 - supports-color 12477 - typescript 12478 12479 - expo-splash-screen@0.29.18(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)): 12480 dependencies: 12481 '@expo/prebuild-config': 8.0.23 12482 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12483 transitivePeerDependencies: 12484 - supports-color 12485 12486 - expo-sqlite@15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12487 dependencies: 12488 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12489 react: 18.3.1 12490 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12491 12492 - expo-sqlite@15.0.5(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12493 dependencies: 12494 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12495 - react: 18.3.1 12496 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12497 optional: true 12498 12499 - expo-status-bar@2.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12500 dependencies: 12501 react: 18.3.1 12502 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12503 12504 - expo-system-ui@4.0.6(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12505 dependencies: 12506 - '@react-native/normalize-colors': 0.76.5 12507 debug: 4.4.0 12508 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12509 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12510 optionalDependencies: 12511 react-native-web: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 12512 transitivePeerDependencies: 12513 - supports-color 12514 12515 - expo-web-browser@14.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12516 dependencies: 12517 - expo: 52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12518 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12519 12520 - expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12521 dependencies: 12522 '@babel/runtime': 7.26.0 12523 - '@expo/cli': 0.22.7 12524 - '@expo/config': 10.0.6 12525 - '@expo/config-plugins': 9.0.12 12526 - '@expo/fingerprint': 0.11.6 12527 - '@expo/metro-config': 0.19.8 12528 '@expo/vector-icons': 14.0.4 12529 - babel-preset-expo: 12.0.4(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1)) 12530 - expo-asset: 11.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12531 - expo-constants: 17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12532 - expo-file-system: 18.0.6(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12533 - expo-font: 13.0.2(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 12534 - expo-keep-awake: 14.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 12535 - expo-modules-autolinking: 2.0.4 12536 - expo-modules-core: 2.1.2 12537 fbemitter: 3.0.0 12538 react: 18.3.1 12539 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) ··· 12552 - supports-color 12553 - utf-8-validate 12554 12555 - expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12556 dependencies: 12557 '@babel/runtime': 7.26.0 12558 - '@expo/cli': 0.22.7 12559 - '@expo/config': 10.0.6 12560 - '@expo/config-plugins': 9.0.12 12561 - '@expo/fingerprint': 0.11.6 12562 - '@expo/metro-config': 0.19.8 12563 '@expo/vector-icons': 14.0.4 12564 - babel-preset-expo: 12.0.4(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1)) 12565 - expo-asset: 11.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12566 - expo-constants: 17.0.3(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12567 - expo-file-system: 18.0.6(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12568 - expo-font: 13.0.2(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 12569 - expo-keep-awake: 14.0.1(expo@52.0.23(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 12570 - expo-modules-autolinking: 2.0.4 12571 - expo-modules-core: 2.1.2 12572 fbemitter: 3.0.0 12573 - react: 18.3.1 12574 - react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12575 web-streams-polyfill: 3.3.3 12576 whatwg-url-without-unicode: 8.0.0-3 12577 optionalDependencies: 12578 - '@expo/metro-runtime': 4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12579 transitivePeerDependencies: 12580 - '@babel/core' 12581 - '@babel/preset-env' ··· 14591 dependencies: 14592 react: 18.3.1 14593 14594 react-devtools-core@5.3.2: 14595 dependencies: 14596 shell-quote: 1.8.2 ··· 14777 - supports-color 14778 - utf-8-validate 14779 14780 react-refresh@0.14.2: {} 14781 14782 react-refresh@0.16.0: {} ··· 14811 react@18.3.1: 14812 dependencies: 14813 loose-envify: 1.4.0 14814 14815 read-cache@1.0.0: 14816 dependencies:
··· 25 dependencies: 26 '@aquareum/atproto-oauth-client-react-native': 27 specifier: ^0.0.1 28 + version: 0.0.1(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 29 '@atproto/api': 30 specifier: ^0.13.18 31 version: 0.13.19 ··· 41 '@react-native-async-storage/async-storage': 42 specifier: 1.23.1 43 version: 1.23.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 44 + '@react-native-picker/picker': 45 + specifier: ^2.11.0 46 + version: 2.11.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 47 '@react-navigation/native': 48 specifier: ^7.0.9 49 version: 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) ··· 82 version: 19.0.0-beta-37ed2a7-20241206(eslint@8.57.1) 83 expo: 84 specifier: ~52.0.17 85 + version: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 86 expo-constants: 87 specifier: ^17.0.3 88 + version: 17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 89 expo-font: 90 specifier: ~13.0.1 91 + version: 13.0.3(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 92 expo-linking: 93 specifier: ~7.0.3 94 + version: 7.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 95 expo-router: 96 specifier: ~4.0.1 97 + version: 4.0.17(kalzsyr46alrrzsk3c2xh7hxja) 98 expo-splash-screen: 99 specifier: ~0.29.13 100 + version: 0.29.18(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)) 101 expo-sqlite: 102 specifier: ^15.0.3 103 + version: 15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 104 expo-status-bar: 105 specifier: ~2.0.0 106 + version: 2.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 107 expo-system-ui: 108 specifier: ~4.0.4 109 + version: 4.0.7(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 110 expo-web-browser: 111 specifier: ~14.0.1 112 + version: 14.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 113 lucide-react-native: 114 specifier: ^0.460.0 115 version: 0.460.0(react-native-svg@15.8.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) ··· 251 version: 16.4.7 252 drizzle-orm: 253 specifier: ^0.38.3 254 + version: 0.38.3(@libsql/client@0.14.0)(@types/react@18.3.12)(expo-sqlite@15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react@19.0.0) 255 envalid: 256 specifier: ^8.0.0 257 version: 8.0.0 ··· 312 version: 0.30.1 313 drizzle-orm: 314 specifier: ^0.38.3 315 + version: 0.38.3(@libsql/client@0.14.0)(@types/react@18.3.12)(expo-sqlite@15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react@19.0.0) 316 devDependencies: 317 '@types/node': 318 specifier: ^20.17.6 ··· 1870 resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} 1871 engines: {node: '>=0.10.0'} 1872 1873 + '@expo/cli@0.22.10': 1874 + resolution: {integrity: sha512-MA4TOtf6x8ixVaQbUINgest/DsrWcMVGMmjXYtnhUfwQGvZtJC+aI+xMBM7ow2OqY2B/xfoRcgqkvWkl36yxkA==} 1875 hasBin: true 1876 1877 '@expo/code-signing-certificates@0.0.5': ··· 1879 1880 '@expo/config-plugins@9.0.12': 1881 resolution: {integrity: sha512-/Ko/NM+GzvJyRkq8PITm8ms0KY5v0wmN1OQFYRMkcJqOi3PjlhndW+G6bHpJI9mkQXBaUnHwAiGLqIC3+MQ5Wg==} 1882 + 1883 + '@expo/config-plugins@9.0.14': 1884 + resolution: {integrity: sha512-Lx1ebV95rTFKKQmbu4wMPLz65rKn7mqSpfANdCx+KwRxuLY2JQls8V4h3lQjG6dW8NWf9qV5QaEFAgNB6VMyOQ==} 1885 1886 '@expo/config-types@52.0.1': 1887 resolution: {integrity: sha512-vD8ZetyKV7U29lR6+NJohYeoLYTH+eNYXJeNiSOrWCz0witJYY11meMmEnpEaVbN89EfC6uauSUOa6wihtbyPQ==} 1888 1889 + '@expo/config-types@52.0.3': 1890 + resolution: {integrity: sha512-muxvuARmbysH5OGaiBRlh1Y6vfdmL56JtpXxB+y2Hfhu0ezG1U4FjZYBIacthckZPvnDCcP3xIu1R+eTo7/QFA==} 1891 + 1892 '@expo/config@10.0.6': 1893 resolution: {integrity: sha512-xXkfPElrtxznkOZxFASJ7OPa6E9IHSjcZwj5BQ6XUF2dz5M7AFa2h5sXM8AalSaDU5tEBSgoUOjTh5957TlR8g==} 1894 1895 + '@expo/config@10.0.8': 1896 + resolution: {integrity: sha512-RaKwi8e6PbkMilRexdsxObLMdQwxhY6mlgel+l/eW+IfIw8HEydSU0ERlzYUjlGJxHLHUXe4rC2vw8FEvaowyQ==} 1897 + 1898 '@expo/devcert@1.1.4': 1899 resolution: {integrity: sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==} 1900 1901 + '@expo/env@0.4.1': 1902 + resolution: {integrity: sha512-oDtbO3i9yXD1nx93acWiPTWGljJ3vABn35x1NAbqtQ2JL6mFOcRcArt1dwi4imZyLnG4VCcjabT9irj+LgYntw==} 1903 1904 + '@expo/fingerprint@0.11.7': 1905 + resolution: {integrity: sha512-2rfYVS4nqWmOPQk+AL5GPfPSawbqqmI5mL++bxAhWADt+d+fjoQYfIrGtjZxQ30f9o/a1PrRPVSuh2j09+diVg==} 1906 hasBin: true 1907 1908 '@expo/image-utils@0.6.3': 1909 resolution: {integrity: sha512-v/JbCKBrHeudxn1gN1TgfPE/pWJSlLPrl29uXJBgrJFQVkViQvUHQNDhaS+UEa9wYI5HHh7XYmtzAehyG4L+GA==} 1910 1911 + '@expo/image-utils@0.6.4': 1912 + resolution: {integrity: sha512-L++1PBzSvf5iYc6UHJ8Db8GcYNkfLDw+a+zqEFBQ3xqRXP/muxb/O7wuiMFlXrj/cfkx4e0U+z1a4ceV0A7S7Q==} 1913 + 1914 '@expo/json-file@9.0.0': 1915 resolution: {integrity: sha512-M+55xFVrFzDcgMDf+52lPDLjKB5xwRfStWlv/b/Vu2OLgxGZLWpxoPYjlRoHqxjPbCQIi2ZCbobK+0KuNhsELg==} 1916 1917 + '@expo/json-file@9.0.1': 1918 + resolution: {integrity: sha512-ZVPhbbEBEwafPCJ0+kI25O2Iivt3XKHEKAADCml1q2cmOIbQnKgLyn8DpOJXqWEyRQr/VWS+hflBh8DU2YFSqg==} 1919 + 1920 + '@expo/metro-config@0.19.9': 1921 + resolution: {integrity: sha512-JAsLWhFQqwLH0KsI4OMbPXsKFji5KJEmsi+/02Sz1GCT17YrjRmv1fZ91regUS/FUH2Y/PDAE/+2ulrTgMeG7A==} 1922 1923 '@expo/metro-runtime@4.0.0': 1924 resolution: {integrity: sha512-+zgCyuXqIzgZVN8h0g36sursGXBy3xqtJW9han7t/iR2HTTrrbEoep5ftW1a27bdSINU96ng+rSsPLbyHYeBvw==} 1925 peerDependencies: 1926 react-native: '*' 1927 1928 + '@expo/metro-runtime@4.0.1': 1929 + resolution: {integrity: sha512-CRpbLvdJ1T42S+lrYa1iZp1KfDeBp4oeZOK3hdpiS5n0vR0nhD6sC1gGF0sTboCTp64tLteikz5Y3j53dvgOIw==} 1930 + peerDependencies: 1931 + react-native: '*' 1932 + 1933 + '@expo/osascript@2.1.5': 1934 + resolution: {integrity: sha512-Cp7YF7msGiTAIbFdzNovwHBfecdMLVL5XzSqq4xQz72ALFCQ3uSIUXRph1QV2r61ugH7Yem0gY8yi7RcDlI4qg==} 1935 engines: {node: '>=12'} 1936 1937 + '@expo/package-manager@1.7.1': 1938 + resolution: {integrity: sha512-DKbELrTOdl7U3KT0C07Aka9P+sUP3LL+1UTKf1KmLx2x2gPH1IC+c68N7iQlwNt+yA37qIw6/vKoqyTGu5EL9g==} 1939 1940 '@expo/plist@0.2.0': 1941 resolution: {integrity: sha512-F/IZJQaf8OIVnVA6XWUeMPC3OH6MV00Wxf0WC0JhTQht2QgjyHUa3U5Gs3vRtDq8tXNsZneOQRDVwpaOnd4zTQ==} 1942 1943 + '@expo/plist@0.2.1': 1944 + resolution: {integrity: sha512-9TaXGuNxa0LQwHQn4rYiU6YaERv6dPnQgsdKWq2rKKTr6LWOtGNQCi/yOk/HBLeZSxBm59APT5/6x60uRvr0Mg==} 1945 + 1946 '@expo/prebuild-config@8.0.23': 1947 resolution: {integrity: sha512-Zf01kFiN2PISmLb0DhIAJh76v3J2oYUKSjiAtGZLOH0HUz59by/qdyU4mGHWdeyRdCCrLUA21Rct2MBykvRMsg==} 1948 1949 + '@expo/prebuild-config@8.0.25': 1950 + resolution: {integrity: sha512-xYHV8eiydZEDedf2AGaOFRFwcGlaSzrqQH94dwX42urNCU03FO0RUb7yPp4nkb7WNFg5Ov6PDsV7ES+YwzNgYQ==} 1951 + 1952 '@expo/rudder-sdk-node@1.1.1': 1953 resolution: {integrity: sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==} 1954 engines: {node: '>=12'} ··· 1956 '@expo/sdk-runtime-versions@1.0.0': 1957 resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==} 1958 1959 + '@expo/server@0.5.1': 1960 + resolution: {integrity: sha512-lk8pKKw0eVP6rqkDR46vQB3vLA46z4KNGrqHpjD/SvMu1cGaRmQG2cQdX44mQtG8WyO9EYau+fBMHQQS2OTFKg==} 1961 1962 '@expo/spawn-async@1.7.2': 1963 resolution: {integrity: sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==} ··· 2469 peerDependencies: 2470 react-native: ^0.0.0-0 || >=0.60 <1.0 2471 2472 + '@react-native-picker/picker@2.11.0': 2473 + resolution: {integrity: sha512-QuZU6gbxmOID5zZgd/H90NgBnbJ3VV6qVzp6c7/dDrmWdX8S0X5YFYgDcQFjE3dRen9wB9FWnj2VVdPU64adSg==} 2474 + peerDependencies: 2475 + react: '*' 2476 + react-native: '*' 2477 + 2478 '@react-native/assets-registry@0.76.5': 2479 resolution: {integrity: sha512-MN5dasWo37MirVcKWuysRkRr4BjNc81SXwUtJYstwbn8oEkfnwR9DaqdDTo/hHOnTdhafffLIa2xOOHcjDIGEw==} 2480 engines: {node: '>=18'} ··· 2483 resolution: {integrity: sha512-xe7HSQGop4bnOLMaXt0aU+rIatMNEQbz242SDl8V9vx5oOTI0VbZV9yLy6yBc6poUlYbcboF20YVjoRsxX4yww==} 2484 engines: {node: '>=18'} 2485 2486 + '@react-native/babel-plugin-codegen@0.76.6': 2487 + resolution: {integrity: sha512-yFC9I/aDBOBz3ZMlqKn2NY/mDUtCksUNZ7AQmBiTAeVTUP0ujEjE0hTOx5Qd+kok7A7hwZEX87HdSgjiJZfr5g==} 2488 + engines: {node: '>=18'} 2489 + 2490 '@react-native/babel-preset@0.76.5': 2491 resolution: {integrity: sha512-1Nu5Um4EogOdppBLI4pfupkteTjWfmI0hqW8ezWTg7Bezw0FtBj8yS8UYVd3wTnDFT9A5mA2VNoNUqomJnvj2A==} 2492 engines: {node: '>=18'} 2493 peerDependencies: 2494 '@babel/core': '*' 2495 2496 + '@react-native/babel-preset@0.76.6': 2497 + resolution: {integrity: sha512-ojlVWY6S/VE/nb9hIRetPMTsW9ZmGb2R3dnToEXAtQQDz41eHMHXbkw/k2h0THp6qhas25ruNvn3N5n2o+lBzg==} 2498 + engines: {node: '>=18'} 2499 + peerDependencies: 2500 + '@babel/core': '*' 2501 + 2502 '@react-native/codegen@0.76.5': 2503 resolution: {integrity: sha512-FoZ9VRQ5MpgtDAnVo1rT9nNRfjnWpE40o1GeJSDlpUMttd36bVXvsDm8W/NhX8BKTWXSX+CPQJsRcvN1UPYGKg==} 2504 engines: {node: '>=18'} 2505 peerDependencies: 2506 '@babel/preset-env': ^7.1.6 2507 2508 + '@react-native/codegen@0.76.6': 2509 + resolution: {integrity: sha512-BABb3e5G/+hyQYEYi0AODWh2km2d8ERoASZr6Hv90pVXdUHRYR+yxCatX7vSd9rnDUYndqRTzD0hZWAucPNAKg==} 2510 + engines: {node: '>=18'} 2511 + peerDependencies: 2512 + '@babel/preset-env': ^7.1.6 2513 + 2514 '@react-native/community-cli-plugin@0.76.5': 2515 resolution: {integrity: sha512-3MKMnlU0cZOWlMhz5UG6WqACJiWUrE3XwBEumzbMmZw3Iw3h+fIsn+7kLLE5EhzqLt0hg5Y4cgYFi4kOaNgq+g==} 2516 engines: {node: '>=18'} ··· 2522 2523 '@react-native/debugger-frontend@0.76.5': 2524 resolution: {integrity: sha512-5gtsLfBaSoa9WP8ToDb/8NnDBLZjv4sybQQj7rDKytKOdsXm3Pr2y4D7x7GQQtP1ZQRqzU0X0OZrhRz9xNnOqA==} 2525 + engines: {node: '>=18'} 2526 + 2527 + '@react-native/debugger-frontend@0.76.6': 2528 + resolution: {integrity: sha512-kP97xMQjiANi5/lmf8MakS7d8FTJl+BqYHQMqyvNiY+eeWyKnhqW2GL2v3eEUBAuyPBgJGivuuO4RvjZujduJg==} 2529 engines: {node: '>=18'} 2530 2531 '@react-native/dev-middleware@0.76.5': 2532 resolution: {integrity: sha512-f8eimsxpkvMgJia7POKoUu9uqjGF6KgkxX4zqr/a6eoR1qdEAWUd6PonSAqtag3PAqvEaJpB99gLH2ZJI1nDGg==} 2533 engines: {node: '>=18'} 2534 2535 + '@react-native/dev-middleware@0.76.6': 2536 + resolution: {integrity: sha512-1bAyd2/X48Nzb45s5l2omM75vy764odx/UnDs4sJfFCuK+cupU4nRPgl0XWIqgdM/2+fbQ3E4QsVS/WIKTFxvQ==} 2537 + engines: {node: '>=18'} 2538 + 2539 '@react-native/gradle-plugin@0.76.5': 2540 resolution: {integrity: sha512-7KSyD0g0KhbngITduC8OABn0MAlJfwjIdze7nA4Oe1q3R7qmAv+wQzW+UEXvPah8m1WqFjYTkQwz/4mK3XrQGw==} 2541 engines: {node: '>=18'} ··· 2555 2556 '@react-native/normalize-colors@0.76.5': 2557 resolution: {integrity: sha512-6QRLEok1r55gLqj+94mEWUENuU5A6wsr2OoXpyq/CgQ7THWowbHtru/kRGRr6o3AQXrVnZheR60JNgFcpNYIug==} 2558 + 2559 + '@react-native/normalize-colors@0.76.6': 2560 + resolution: {integrity: sha512-1n4udXH2Cla31iA/8eLRdhFHpYUYK1NKWCn4m1Sr9L4SarWKAYuRFliK1fcLvPPALCFoFlWvn8I0ekdUOHMzDQ==} 2561 2562 '@react-native/typescript-config@0.76.5': 2563 resolution: {integrity: sha512-dRbY4XQTUUxR5Oq+S+2/5JQVU6WL0qvNnAz51jiXllC+hp5L4bljSxlzaj5CJ9vzGNFzm56m5Y9Q6MltoIU4Cw==} ··· 3373 peerDependencies: 3374 '@babel/core': ^7.0.0 3375 3376 + babel-preset-expo@12.0.6: 3377 + resolution: {integrity: sha512-az3H7gDVo0wxNBAFES8h5vLLWE8NPGkD9g5P962hDEOqZUdyPacb9MOzicypeLmcq9zQWr6E3iVtEHoNagCTTQ==} 3378 peerDependencies: 3379 babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 3380 react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 ··· 4391 resolution: {integrity: sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==} 4392 engines: {node: '>=0.10.0'} 4393 4394 + expo-asset@11.0.2: 4395 + resolution: {integrity: sha512-We3Td5WsNsNQyXoheLnuwic6JCOt/pqXqIIyWaZ3z/PeHrA+SwoQdI18MjDhkudLK08tbIVyDSUW8IJHXa04eg==} 4396 peerDependencies: 4397 expo: '*' 4398 react: '*' 4399 react-native: '*' 4400 4401 + expo-constants@17.0.4: 4402 + resolution: {integrity: sha512-5c0VlZycmDyQUCMCr3Na3cpHAsVJJ+5o6KkkD4rmATQZ0++Xp/S2gpnjWyEo2riRmO91vxoyHwmAySXuktJddQ==} 4403 peerDependencies: 4404 expo: '*' 4405 react-native: '*' 4406 4407 + expo-file-system@18.0.7: 4408 + resolution: {integrity: sha512-6PpbQfogMXdzOsJzlJayy5qf40IfIHhudtAOzr32RlRYL4Hkmk3YcR9jG0PWQ0rklJfAhbAdP63yOcN+wDgzaA==} 4409 peerDependencies: 4410 expo: '*' 4411 react-native: '*' 4412 4413 + expo-font@13.0.3: 4414 + resolution: {integrity: sha512-9IdYz+A+b3KvuCYP7DUUXF4VMZjPU+IsvAnLSVJ2TfP6zUD2JjZFx3jeo/cxWRkYk/aLj5+53Te7elTAScNl4Q==} 4415 peerDependencies: 4416 expo: '*' 4417 react: '*' 4418 4419 + expo-keep-awake@14.0.2: 4420 + resolution: {integrity: sha512-71XAMnoWjKZrN8J7Q3+u0l9Ytp4OfhNAYz8BCWF1/9aFUw09J3I7Z5DuI3MUsVMa/KWi+XhG+eDUFP8cVA19Uw==} 4421 peerDependencies: 4422 expo: '*' 4423 react: '*' 4424 4425 + expo-linking@7.0.4: 4426 + resolution: {integrity: sha512-i+QaFc2zwOoq/ajePVWC+op3cOKC6nd6Wj/BJtukU71byTAbxDhbi+3m0ZFbh2i1/v/iIXRqrl3PvQcKNklPkw==} 4427 peerDependencies: 4428 react: '*' 4429 react-native: '*' 4430 4431 + expo-modules-autolinking@2.0.6: 4432 + resolution: {integrity: sha512-E5G0t9kQ3i69uOD/nbU9MKrrLE7kl0DcfXOUmmRu6zskQ90kyg7eBXoxtg9C59oQCCXiQrNoBhEZCnAIKgI1og==} 4433 hasBin: true 4434 4435 + expo-modules-core@2.1.4: 4436 + resolution: {integrity: sha512-gfsbTPSaocgcQQDy4Z4ztg1hcOofwODctAA+yoNcrUQr/hRaDc6ndIJQwGPjoGXnEbXVxFfzGGSAkNiqK1I7lQ==} 4437 4438 + expo-router@4.0.17: 4439 + resolution: {integrity: sha512-8ybo6bVwdG1S9hafh9BTOjX1hpCgomdUvs6hKHMM01koo8mQ7zocH/+zxQeaMVDxGhboz2dO5GiDchWJ0OheRA==} 4440 peerDependencies: 4441 '@react-navigation/drawer': ^7.1.1 4442 '@testing-library/jest-native': '*' ··· 4459 peerDependencies: 4460 expo: '*' 4461 4462 + expo-sqlite@15.0.6: 4463 + resolution: {integrity: sha512-3cW8n6Lxj9P3JhbHQhLhPXBl/UAYZgKbbs19XbtaVM81LKiaUR6W1VLIaxGcv0vRVWfmEdGCbv12gF888szOig==} 4464 peerDependencies: 4465 expo: '*' 4466 react: '*' 4467 react-native: '*' 4468 4469 + expo-status-bar@2.0.1: 4470 + resolution: {integrity: sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==} 4471 peerDependencies: 4472 react: '*' 4473 react-native: '*' 4474 4475 + expo-system-ui@4.0.7: 4476 + resolution: {integrity: sha512-x1VDoE7J8m4wxTgWyUBEYqsf1KabIg64dOLzYiZjg0cWOE6o6kX2Mg6n3abVWEEC01WhZBoo9+Urcce/6ZJ3tg==} 4477 peerDependencies: 4478 expo: '*' 4479 react-native: '*' ··· 4482 react-native-web: 4483 optional: true 4484 4485 + expo-web-browser@14.0.2: 4486 + resolution: {integrity: sha512-Hncv2yojhTpHbP6SGWARBFdl7P6wBHc1O8IKaNsH0a/IEakq887o1eRhLxZ5IwztPQyRDhpqHdgJ+BjWolOnwA==} 4487 peerDependencies: 4488 expo: '*' 4489 react-native: '*' 4490 4491 + expo@52.0.26: 4492 + resolution: {integrity: sha512-9osjHwAyLxCexnLEJXaZDZowbQl7IHqeMOcx90xwMQp2O/5XP+3T7uPK0sNdjlEO05QzAv0k4oXAKMRr5gdEqg==} 4493 hasBin: true 4494 peerDependencies: 4495 '@expo/dom-webview': '*' ··· 6368 peerDependencies: 6369 react: ^17.0.0 || ^18.0.0 || ^19.0.0 6370 6371 + react-compiler-runtime@19.0.0-beta-e552027-20250112: 6372 + resolution: {integrity: sha512-GEeaCTe9UsEbNop0f6EAljFd82PvB3YCiZZPrxP0LbG0DVA5K4mOJ2D0zRpkxad/rCsT1SUo1KjBHSorRIdQug==} 6373 + peerDependencies: 6374 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental 6375 + 6376 react-devtools-core@5.3.2: 6377 resolution: {integrity: sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==} 6378 ··· 6523 6524 react@18.3.1: 6525 resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 6526 + engines: {node: '>=0.10.0'} 6527 + 6528 + react@19.0.0: 6529 + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} 6530 engines: {node: '>=0.10.0'} 6531 6532 read-cache@1.0.0: ··· 7775 '@jridgewell/gen-mapping': 0.3.5 7776 '@jridgewell/trace-mapping': 0.3.25 7777 7778 + '@aquareum/atproto-oauth-client-react-native@0.0.1(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': 7779 dependencies: 7780 '@atproto-labs/did-resolver': 0.1.5 7781 '@atproto-labs/handle-resolver-node': 0.1.7 ··· 7790 '@atproto/oauth-types': 0.2.1 7791 abortcontroller-polyfill: 1.7.8 7792 event-target-shim: 6.0.2 7793 + expo-sqlite: 15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 7794 jose: 5.9.6 7795 react-native-quick-crypto: 0.7.10(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 7796 transitivePeerDependencies: ··· 9383 dependencies: 9384 uuid: 8.3.2 9385 9386 + '@expo/cli@0.22.10': 9387 dependencies: 9388 '@0no-co/graphql.web': 1.0.12 9389 '@babel/runtime': 7.26.0 9390 '@expo/code-signing-certificates': 0.0.5 9391 + '@expo/config': 10.0.8 9392 + '@expo/config-plugins': 9.0.14 9393 '@expo/devcert': 1.1.4 9394 + '@expo/env': 0.4.1 9395 + '@expo/image-utils': 0.6.4 9396 + '@expo/json-file': 9.0.1 9397 + '@expo/metro-config': 0.19.9 9398 + '@expo/osascript': 2.1.5 9399 + '@expo/package-manager': 1.7.1 9400 + '@expo/plist': 0.2.1 9401 + '@expo/prebuild-config': 8.0.25 9402 '@expo/rudder-sdk-node': 1.1.1 9403 '@expo/spawn-async': 1.7.2 9404 '@expo/xcpretty': 4.3.2 9405 + '@react-native/dev-middleware': 0.76.6 9406 '@urql/core': 5.1.0 9407 '@urql/exchange-retry': 1.3.0(@urql/core@5.1.0) 9408 accepts: 1.3.8 ··· 9487 transitivePeerDependencies: 9488 - supports-color 9489 9490 + '@expo/config-plugins@9.0.14': 9491 + dependencies: 9492 + '@expo/config-types': 52.0.3 9493 + '@expo/json-file': 9.0.1 9494 + '@expo/plist': 0.2.1 9495 + '@expo/sdk-runtime-versions': 1.0.0 9496 + chalk: 4.1.2 9497 + debug: 4.4.0 9498 + getenv: 1.0.0 9499 + glob: 10.4.5 9500 + resolve-from: 5.0.0 9501 + semver: 7.6.3 9502 + slash: 3.0.0 9503 + slugify: 1.6.6 9504 + xcode: 3.0.1 9505 + xml2js: 0.6.0 9506 + transitivePeerDependencies: 9507 + - supports-color 9508 + 9509 '@expo/config-types@52.0.1': {} 9510 + 9511 + '@expo/config-types@52.0.3': {} 9512 9513 '@expo/config@10.0.6': 9514 dependencies: ··· 9528 transitivePeerDependencies: 9529 - supports-color 9530 9531 + '@expo/config@10.0.8': 9532 + dependencies: 9533 + '@babel/code-frame': 7.10.4 9534 + '@expo/config-plugins': 9.0.14 9535 + '@expo/config-types': 52.0.3 9536 + '@expo/json-file': 9.0.1 9537 + deepmerge: 4.3.1 9538 + getenv: 1.0.0 9539 + glob: 10.4.5 9540 + require-from-string: 2.0.2 9541 + resolve-from: 5.0.0 9542 + resolve-workspace-root: 2.0.0 9543 + semver: 7.6.3 9544 + slugify: 1.6.6 9545 + sucrase: 3.35.0 9546 + transitivePeerDependencies: 9547 + - supports-color 9548 + 9549 '@expo/devcert@1.1.4': 9550 dependencies: 9551 application-config-path: 0.1.1 ··· 9563 transitivePeerDependencies: 9564 - supports-color 9565 9566 + '@expo/env@0.4.1': 9567 dependencies: 9568 chalk: 4.1.2 9569 debug: 4.4.0 ··· 9573 transitivePeerDependencies: 9574 - supports-color 9575 9576 + '@expo/fingerprint@0.11.7': 9577 dependencies: 9578 '@expo/spawn-async': 1.7.2 9579 arg: 5.0.2 ··· 9601 temp-dir: 2.0.0 9602 unique-string: 2.0.0 9603 9604 + '@expo/image-utils@0.6.4': 9605 + dependencies: 9606 + '@expo/spawn-async': 1.7.2 9607 + chalk: 4.1.2 9608 + fs-extra: 9.0.0 9609 + getenv: 1.0.0 9610 + jimp-compact: 0.16.1 9611 + parse-png: 2.1.0 9612 + resolve-from: 5.0.0 9613 + semver: 7.6.3 9614 + temp-dir: 2.0.0 9615 + unique-string: 2.0.0 9616 + 9617 '@expo/json-file@9.0.0': 9618 dependencies: 9619 '@babel/code-frame': 7.10.4 9620 json5: 2.2.3 9621 write-file-atomic: 2.4.3 9622 9623 + '@expo/json-file@9.0.1': 9624 + dependencies: 9625 + '@babel/code-frame': 7.10.4 9626 + json5: 2.2.3 9627 + write-file-atomic: 2.4.3 9628 + 9629 + '@expo/metro-config@0.19.9': 9630 dependencies: 9631 '@babel/core': 7.26.0 9632 '@babel/generator': 7.26.3 9633 '@babel/parser': 7.26.3 9634 '@babel/types': 7.26.3 9635 + '@expo/config': 10.0.8 9636 + '@expo/env': 0.4.1 9637 + '@expo/json-file': 9.0.1 9638 '@expo/spawn-async': 1.7.2 9639 chalk: 4.1.2 9640 debug: 4.4.0 ··· 9653 dependencies: 9654 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 9655 9656 + '@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))': 9657 + dependencies: 9658 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 9659 + 9660 + '@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))': 9661 + dependencies: 9662 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0) 9663 + optional: true 9664 + 9665 + '@expo/osascript@2.1.5': 9666 dependencies: 9667 '@expo/spawn-async': 1.7.2 9668 exec-async: 2.2.0 9669 9670 + '@expo/package-manager@1.7.1': 9671 dependencies: 9672 + '@expo/json-file': 9.0.1 9673 '@expo/spawn-async': 1.7.2 9674 ansi-regex: 5.0.1 9675 chalk: 4.1.2 ··· 9688 base64-js: 1.5.1 9689 xmlbuilder: 14.0.0 9690 9691 + '@expo/plist@0.2.1': 9692 + dependencies: 9693 + '@xmldom/xmldom': 0.7.13 9694 + base64-js: 1.5.1 9695 + xmlbuilder: 14.0.0 9696 + 9697 '@expo/prebuild-config@8.0.23': 9698 dependencies: 9699 '@expo/config': 10.0.6 ··· 9710 transitivePeerDependencies: 9711 - supports-color 9712 9713 + '@expo/prebuild-config@8.0.25': 9714 + dependencies: 9715 + '@expo/config': 10.0.8 9716 + '@expo/config-plugins': 9.0.14 9717 + '@expo/config-types': 52.0.3 9718 + '@expo/image-utils': 0.6.4 9719 + '@expo/json-file': 9.0.1 9720 + '@react-native/normalize-colors': 0.76.6 9721 + debug: 4.4.0 9722 + fs-extra: 9.1.0 9723 + resolve-from: 5.0.0 9724 + semver: 7.6.3 9725 + xml2js: 0.6.0 9726 + transitivePeerDependencies: 9727 + - supports-color 9728 + 9729 '@expo/rudder-sdk-node@1.1.1': 9730 dependencies: 9731 '@expo/bunyan': 4.0.1 ··· 9740 9741 '@expo/sdk-runtime-versions@1.0.0': {} 9742 9743 + '@expo/server@0.5.1(typescript@5.7.2)': 9744 dependencies: 9745 '@remix-run/node': 2.15.2(typescript@5.7.2) 9746 abort-controller: 3.0.0 ··· 10265 merge-options: 3.0.4 10266 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 10267 10268 + '@react-native-picker/picker@2.11.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': 10269 + dependencies: 10270 + react: 18.3.1 10271 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 10272 + 10273 '@react-native/assets-registry@0.76.5': {} 10274 10275 '@react-native/babel-plugin-codegen@0.76.5(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10276 dependencies: 10277 '@react-native/codegen': 0.76.5(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 10278 + transitivePeerDependencies: 10279 + - '@babel/preset-env' 10280 + - supports-color 10281 + 10282 + '@react-native/babel-plugin-codegen@0.76.6(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10283 + dependencies: 10284 + '@react-native/codegen': 0.76.6(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 10285 transitivePeerDependencies: 10286 - '@babel/preset-env' 10287 - supports-color ··· 10337 - '@babel/preset-env' 10338 - supports-color 10339 10340 + '@react-native/babel-preset@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10341 + dependencies: 10342 + '@babel/core': 7.26.0 10343 + '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.0) 10344 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) 10345 + '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.0) 10346 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) 10347 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) 10348 + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) 10349 + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) 10350 + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) 10351 + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) 10352 + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) 10353 + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) 10354 + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) 10355 + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) 10356 + '@babel/plugin-transform-flow-strip-types': 7.25.9(@babel/core@7.26.0) 10357 + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) 10358 + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) 10359 + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) 10360 + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) 10361 + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) 10362 + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) 10363 + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) 10364 + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) 10365 + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) 10366 + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) 10367 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) 10368 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) 10369 + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) 10370 + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) 10371 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) 10372 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) 10373 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) 10374 + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) 10375 + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) 10376 + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) 10377 + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) 10378 + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) 10379 + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) 10380 + '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0) 10381 + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) 10382 + '@babel/template': 7.25.9 10383 + '@react-native/babel-plugin-codegen': 0.76.6(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 10384 + babel-plugin-syntax-hermes-parser: 0.25.1 10385 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.0) 10386 + react-refresh: 0.14.2 10387 + transitivePeerDependencies: 10388 + - '@babel/preset-env' 10389 + - supports-color 10390 + 10391 '@react-native/codegen@0.76.5(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10392 dependencies: 10393 '@babel/parser': 7.26.3 ··· 10402 transitivePeerDependencies: 10403 - supports-color 10404 10405 + '@react-native/codegen@0.76.6(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10406 + dependencies: 10407 + '@babel/parser': 7.26.3 10408 + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) 10409 + glob: 7.2.3 10410 + hermes-parser: 0.23.1 10411 + invariant: 2.2.4 10412 + jscodeshift: 0.14.0(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 10413 + mkdirp: 0.5.6 10414 + nullthrows: 1.1.1 10415 + yargs: 17.7.2 10416 + transitivePeerDependencies: 10417 + - supports-color 10418 + 10419 '@react-native/community-cli-plugin@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))': 10420 dependencies: 10421 '@react-native/dev-middleware': 0.76.5 ··· 10438 - utf-8-validate 10439 10440 '@react-native/debugger-frontend@0.76.5': {} 10441 + 10442 + '@react-native/debugger-frontend@0.76.6': {} 10443 10444 '@react-native/dev-middleware@0.76.5': 10445 dependencies: ··· 10459 - supports-color 10460 - utf-8-validate 10461 10462 + '@react-native/dev-middleware@0.76.6': 10463 + dependencies: 10464 + '@isaacs/ttlcache': 1.4.1 10465 + '@react-native/debugger-frontend': 0.76.6 10466 + chrome-launcher: 0.15.2 10467 + chromium-edge-launcher: 0.2.0 10468 + connect: 3.7.0 10469 + debug: 2.6.9 10470 + nullthrows: 1.1.1 10471 + open: 7.4.2 10472 + selfsigned: 2.4.1 10473 + serve-static: 1.16.2 10474 + ws: 6.2.3 10475 + transitivePeerDependencies: 10476 + - bufferutil 10477 + - supports-color 10478 + - utf-8-validate 10479 + 10480 '@react-native/gradle-plugin@0.76.5': {} 10481 10482 '@react-native/js-polyfills@0.76.5': {} ··· 10494 '@react-native/normalize-colors@0.74.88': {} 10495 10496 '@react-native/normalize-colors@0.76.5': {} 10497 + 10498 + '@react-native/normalize-colors@0.76.6': {} 10499 10500 '@react-native/typescript-config@0.76.5': {} 10501 ··· 10507 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 10508 optionalDependencies: 10509 '@types/react': 18.3.12 10510 + 10511 + '@react-native/virtualized-lists@0.76.5(@types/react@18.3.12)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0)': 10512 + dependencies: 10513 + invariant: 2.2.4 10514 + nullthrows: 1.1.1 10515 + react: 19.0.0 10516 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0) 10517 + optionalDependencies: 10518 + '@types/react': 18.3.12 10519 + optional: true 10520 10521 '@react-navigation/bottom-tabs@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-screens@4.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': 10522 dependencies: ··· 11430 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) 11431 '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) 11432 11433 + babel-preset-expo@12.0.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1)): 11434 dependencies: 11435 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) 11436 '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) ··· 11438 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) 11439 '@babel/preset-react': 7.26.3(@babel/core@7.26.0) 11440 '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) 11441 + '@react-native/babel-preset': 0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 11442 babel-plugin-react-native-web: 0.19.13 11443 react-refresh: 0.14.2 11444 optionalDependencies: ··· 11449 - '@babel/preset-env' 11450 - supports-color 11451 11452 + babel-preset-expo@12.0.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0)): 11453 + dependencies: 11454 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) 11455 + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) 11456 + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) 11457 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) 11458 + '@babel/preset-react': 7.26.3(@babel/core@7.26.0) 11459 + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) 11460 + '@react-native/babel-preset': 0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 11461 + babel-plugin-react-native-web: 0.19.13 11462 + react-refresh: 0.14.2 11463 + optionalDependencies: 11464 + react-compiler-runtime: 19.0.0-beta-e552027-20250112(react@19.0.0) 11465 + transitivePeerDependencies: 11466 + - '@babel/core' 11467 + - '@babel/preset-env' 11468 + - supports-color 11469 + optional: true 11470 + 11471 babel-preset-jest@29.6.3(@babel/core@7.26.0): 11472 dependencies: 11473 '@babel/core': 7.26.0 ··· 12091 transitivePeerDependencies: 12092 - supports-color 12093 12094 + drizzle-orm@0.38.3(@libsql/client@0.14.0)(@types/react@18.3.12)(expo-sqlite@15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react@19.0.0): 12095 optionalDependencies: 12096 '@libsql/client': 0.14.0 12097 '@types/react': 18.3.12 12098 + expo-sqlite: 15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12099 + react: 19.0.0 12100 12101 dunder-proto@1.0.0: 12102 dependencies: ··· 12628 12629 exit-hook@1.1.1: {} 12630 12631 + expo-asset@11.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12632 dependencies: 12633 + '@expo/image-utils': 0.6.4 12634 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12635 + expo-constants: 17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12636 invariant: 2.2.4 12637 md5-file: 3.2.3 12638 react: 18.3.1 ··· 12640 transitivePeerDependencies: 12641 - supports-color 12642 12643 + expo-asset@11.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0): 12644 dependencies: 12645 + '@expo/image-utils': 0.6.4 12646 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12647 + expo-constants: 17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)) 12648 invariant: 2.2.4 12649 md5-file: 3.2.3 12650 + react: 19.0.0 12651 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0) 12652 transitivePeerDependencies: 12653 - supports-color 12654 optional: true 12655 12656 + expo-constants@17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12657 dependencies: 12658 + '@expo/config': 10.0.8 12659 + '@expo/env': 0.4.1 12660 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12661 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12662 transitivePeerDependencies: 12663 - supports-color 12664 12665 + expo-constants@17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)): 12666 dependencies: 12667 + '@expo/config': 10.0.8 12668 + '@expo/env': 0.4.1 12669 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12670 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0) 12671 transitivePeerDependencies: 12672 - supports-color 12673 optional: true 12674 12675 + expo-file-system@18.0.7(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12676 dependencies: 12677 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12678 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12679 web-streams-polyfill: 3.3.3 12680 12681 + expo-file-system@18.0.7(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)): 12682 dependencies: 12683 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12684 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0) 12685 web-streams-polyfill: 3.3.3 12686 optional: true 12687 12688 + expo-font@13.0.3(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1): 12689 dependencies: 12690 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12691 fontfaceobserver: 2.3.0 12692 react: 18.3.1 12693 12694 + expo-font@13.0.3(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react@19.0.0): 12695 dependencies: 12696 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12697 fontfaceobserver: 2.3.0 12698 + react: 19.0.0 12699 optional: true 12700 12701 + expo-keep-awake@14.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1): 12702 dependencies: 12703 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12704 react: 18.3.1 12705 12706 + expo-keep-awake@14.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react@19.0.0): 12707 dependencies: 12708 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12709 + react: 19.0.0 12710 optional: true 12711 12712 + expo-linking@7.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12713 dependencies: 12714 + expo-constants: 17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12715 invariant: 2.2.4 12716 react: 18.3.1 12717 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) ··· 12719 - expo 12720 - supports-color 12721 12722 + expo-modules-autolinking@2.0.6: 12723 dependencies: 12724 '@expo/spawn-async': 1.7.2 12725 chalk: 4.1.2 ··· 12730 require-from-string: 2.0.2 12731 resolve-from: 5.0.0 12732 12733 + expo-modules-core@2.1.4: 12734 dependencies: 12735 invariant: 2.2.4 12736 12737 + expo-router@4.0.17(kalzsyr46alrrzsk3c2xh7hxja): 12738 dependencies: 12739 + '@expo/metro-runtime': 4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12740 + '@expo/server': 0.5.1(typescript@5.7.2) 12741 '@radix-ui/react-slot': 1.0.1(react@18.3.1) 12742 '@react-navigation/bottom-tabs': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-screens@4.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12743 '@react-navigation/native': 7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12744 '@react-navigation/native-stack': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-screens@4.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12745 client-only: 0.0.1 12746 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12747 + expo-constants: 17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12748 + expo-linking: 7.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12749 react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 12750 react-native-helmet-async: 2.0.4(react@18.3.1) 12751 react-native-is-edge-to-edge: 1.1.6(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) ··· 12764 - supports-color 12765 - typescript 12766 12767 + expo-splash-screen@0.29.18(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)): 12768 dependencies: 12769 '@expo/prebuild-config': 8.0.23 12770 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12771 transitivePeerDependencies: 12772 - supports-color 12773 12774 + expo-sqlite@15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12775 dependencies: 12776 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12777 react: 18.3.1 12778 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12779 12780 + expo-sqlite@15.0.6(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0): 12781 dependencies: 12782 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12783 + react: 19.0.0 12784 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0) 12785 optional: true 12786 12787 + expo-status-bar@2.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12788 dependencies: 12789 react: 18.3.1 12790 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12791 12792 + expo-system-ui@4.0.7(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12793 dependencies: 12794 + '@react-native/normalize-colors': 0.76.6 12795 debug: 4.4.0 12796 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12797 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12798 optionalDependencies: 12799 react-native-web: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 12800 transitivePeerDependencies: 12801 - supports-color 12802 12803 + expo-web-browser@14.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)): 12804 dependencies: 12805 + expo: 52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12806 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) 12807 12808 + expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1): 12809 dependencies: 12810 '@babel/runtime': 7.26.0 12811 + '@expo/cli': 0.22.10 12812 + '@expo/config': 10.0.8 12813 + '@expo/config-plugins': 9.0.14 12814 + '@expo/fingerprint': 0.11.7 12815 + '@expo/metro-config': 0.19.9 12816 '@expo/vector-icons': 14.0.4 12817 + babel-preset-expo: 12.0.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1)) 12818 + expo-asset: 11.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) 12819 + expo-constants: 17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12820 + expo-file-system: 18.0.7(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)) 12821 + expo-font: 13.0.3(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 12822 + expo-keep-awake: 14.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1)))(babel-plugin-react-compiler@19.0.0-beta-37ed2a7-20241206)(react-compiler-runtime@19.0.0-beta-37ed2a7-20241206(react@18.3.1))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1))(react@18.3.1) 12823 + expo-modules-autolinking: 2.0.6 12824 + expo-modules-core: 2.1.4 12825 fbemitter: 3.0.0 12826 react: 18.3.1 12827 react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@18.3.1) ··· 12840 - supports-color 12841 - utf-8-validate 12842 12843 + expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0): 12844 dependencies: 12845 '@babel/runtime': 7.26.0 12846 + '@expo/cli': 0.22.10 12847 + '@expo/config': 10.0.8 12848 + '@expo/config-plugins': 9.0.14 12849 + '@expo/fingerprint': 0.11.7 12850 + '@expo/metro-config': 0.19.9 12851 '@expo/vector-icons': 14.0.4 12852 + babel-preset-expo: 12.0.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0)) 12853 + expo-asset: 11.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 12854 + expo-constants: 17.0.4(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)) 12855 + expo-file-system: 18.0.7(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)) 12856 + expo-font: 13.0.3(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react@19.0.0) 12857 + expo-keep-awake: 14.0.2(expo@52.0.26(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)))(react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0))(react@19.0.0) 12858 + expo-modules-autolinking: 2.0.6 12859 + expo-modules-core: 2.1.4 12860 fbemitter: 3.0.0 12861 + react: 19.0.0 12862 + react-native: 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0) 12863 web-streams-polyfill: 3.3.3 12864 whatwg-url-without-unicode: 8.0.0-3 12865 optionalDependencies: 12866 + '@expo/metro-runtime': 4.0.1(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0)) 12867 transitivePeerDependencies: 12868 - '@babel/core' 12869 - '@babel/preset-env' ··· 14879 dependencies: 14880 react: 18.3.1 14881 14882 + react-compiler-runtime@19.0.0-beta-e552027-20250112(react@19.0.0): 14883 + dependencies: 14884 + react: 19.0.0 14885 + optional: true 14886 + 14887 react-devtools-core@5.3.2: 14888 dependencies: 14889 shell-quote: 1.8.2 ··· 15070 - supports-color 15071 - utf-8-validate 15072 15073 + react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0): 15074 + dependencies: 15075 + '@jest/create-cache-key-function': 29.7.0 15076 + '@react-native/assets-registry': 0.76.5 15077 + '@react-native/codegen': 0.76.5(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 15078 + '@react-native/community-cli-plugin': 0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0)) 15079 + '@react-native/gradle-plugin': 0.76.5 15080 + '@react-native/js-polyfills': 0.76.5 15081 + '@react-native/normalize-colors': 0.76.5 15082 + '@react-native/virtualized-lists': 0.76.5(@types/react@18.3.12)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@types/react@18.3.12)(react@19.0.0))(react@19.0.0) 15083 + abort-controller: 3.0.0 15084 + anser: 1.4.10 15085 + ansi-regex: 5.0.1 15086 + babel-jest: 29.7.0(@babel/core@7.26.0) 15087 + babel-plugin-syntax-hermes-parser: 0.23.1 15088 + base64-js: 1.5.1 15089 + chalk: 4.1.2 15090 + commander: 12.1.0 15091 + event-target-shim: 5.0.1 15092 + flow-enums-runtime: 0.0.6 15093 + glob: 7.2.3 15094 + invariant: 2.2.4 15095 + jest-environment-node: 29.7.0 15096 + jsc-android: 250231.0.0 15097 + memoize-one: 5.2.1 15098 + metro-runtime: 0.81.0 15099 + metro-source-map: 0.81.0 15100 + mkdirp: 0.5.6 15101 + nullthrows: 1.1.1 15102 + pretty-format: 29.7.0 15103 + promise: 8.3.0 15104 + react: 19.0.0 15105 + react-devtools-core: 5.3.2 15106 + react-refresh: 0.14.2 15107 + regenerator-runtime: 0.13.11 15108 + scheduler: 0.24.0-canary-efb381bbf-20230505 15109 + semver: 7.6.3 15110 + stacktrace-parser: 0.1.10 15111 + whatwg-fetch: 3.6.20 15112 + ws: 6.2.3 15113 + yargs: 17.7.2 15114 + optionalDependencies: 15115 + '@types/react': 18.3.12 15116 + transitivePeerDependencies: 15117 + - '@babel/core' 15118 + - '@babel/preset-env' 15119 + - '@react-native-community/cli-server-api' 15120 + - bufferutil 15121 + - encoding 15122 + - supports-color 15123 + - utf-8-validate 15124 + optional: true 15125 + 15126 react-refresh@0.14.2: {} 15127 15128 react-refresh@0.16.0: {} ··· 15157 react@18.3.1: 15158 dependencies: 15159 loose-envify: 1.4.0 15160 + 15161 + react@19.0.0: 15162 + optional: true 15163 15164 read-cache@1.0.0: 15165 dependencies: