diff --git a/apps/mobile/app.json b/apps/mobile/app.json index 725c696..67fdf0d 100644 --- a/apps/mobile/app.json +++ b/apps/mobile/app.json @@ -20,11 +20,14 @@ "bundleIdentifier": "com.cal.companion", "userInterfaceStyle": "automatic", "infoPlist": { - "ITSAppUsesNonExemptEncryption": false + "ITSAppUsesNonExemptEncryption": false, + "NSCameraUsageDescription": "Cal.com needs access to your camera to join video calls", + "NSMicrophoneUsageDescription": "Cal.com needs access to your microphone to join video calls" }, "entitlements": { "com.apple.developer.default-data-protection": "NSFileProtectionComplete", - "com.apple.security.application-groups": ["group.com.cal.companion"] + "com.apple.security.application-groups": ["group.com.cal.companion"], + "com.apple.developer.associated-domains": ["applinks:app.cal.com"] }, "icon": "./assets/cal-logo.icon" }, @@ -37,7 +40,21 @@ "package": "com.calcom.companion", "softwareKeyboardLayoutMode": "pan", "usesCleartextTraffic": false, - "userInterfaceStyle": "automatic" + "userInterfaceStyle": "automatic", + "intentFilters": [ + { + "action": "VIEW", + "autoVerify": true, + "data": [ + { + "scheme": "https", + "host": "app.cal.com", + "pathPrefix": "/video/" + } + ], + "category": ["BROWSABLE", "DEFAULT"] + } + ] }, "web": { "favicon": "./assets/favicon.png", @@ -125,6 +142,7 @@ } } ], + "@daily-co/config-plugin-rn-daily-js", "@bacons/apple-targets", [ "react-native-android-widget", diff --git a/apps/mobile/app/(tabs)/(bookings)/booking-detail.ios.tsx b/apps/mobile/app/(tabs)/(bookings)/booking-detail.ios.tsx index 28d961b..043fa67 100644 --- a/apps/mobile/app/(tabs)/(bookings)/booking-detail.ios.tsx +++ b/apps/mobile/app/(tabs)/(bookings)/booking-detail.ios.tsx @@ -1,6 +1,6 @@ import * as Clipboard from "expo-clipboard"; import { isLiquidGlassAvailable } from "expo-glass-effect"; -import { Stack, useLocalSearchParams } from "expo-router"; +import { Stack, useLocalSearchParams, useRouter } from "expo-router"; import { useCallback, useMemo, useRef } from "react"; import { useColorScheme } from "react-native"; import { BookingDetailScreen } from "@/components/screens/BookingDetailScreen"; @@ -10,6 +10,7 @@ import { showErrorAlert, showInfoAlert, showSuccessAlert } from "@/utils/alerts" import { getMeetingUrl } from "@/utils/booking"; import { type BookingActionsResult, getBookingActions } from "@/utils/booking-actions"; import { openInDefaultBrowser } from "@/utils/browser"; +import { isDailyRoomUrl } from "@/utils/cal-video"; // Empty actions result for when no booking is loaded const EMPTY_ACTIONS: BookingActionsResult = { @@ -44,6 +45,7 @@ const getMonthName = (dateString: string | undefined): string => { export default function BookingDetailIOS() { const { uid } = useLocalSearchParams<{ uid: string }>(); + const router = useRouter(); const { userInfo } = useAuth(); const colorScheme = useColorScheme(); @@ -69,10 +71,15 @@ export default function BookingDetailIOS() { // Handle join meeting const handleJoinMeeting = useCallback(() => { - if (meetingUrl) { - openInDefaultBrowser(meetingUrl, "meeting link"); + if (!meetingUrl) return; + + if (isDailyRoomUrl(meetingUrl)) { + router.push({ pathname: "/video-call", params: { url: meetingUrl } }); + return; } - }, [meetingUrl]); + + openInDefaultBrowser(meetingUrl, "meeting link"); + }, [meetingUrl, router]); // Handle copy meeting link const handleCopyMeetingLink = useCallback(async () => { diff --git a/apps/mobile/app/(tabs)/(bookings)/booking-detail.tsx b/apps/mobile/app/(tabs)/(bookings)/booking-detail.tsx index 3842d19..59c260c 100644 --- a/apps/mobile/app/(tabs)/(bookings)/booking-detail.tsx +++ b/apps/mobile/app/(tabs)/(bookings)/booking-detail.tsx @@ -20,6 +20,7 @@ import { showErrorAlert, showInfoAlert, showSuccessAlert } from "@/utils/alerts" import { getMeetingUrl } from "@/utils/booking"; import { type BookingActionsResult, getBookingActions } from "@/utils/booking-actions"; import { openInDefaultBrowser } from "@/utils/browser"; +import { isDailyRoomUrl } from "@/utils/cal-video"; // Empty actions result for when no booking is loaded const EMPTY_ACTIONS: BookingActionsResult = { @@ -263,10 +264,15 @@ export default function BookingDetail() { const meetingUrl = useMemo(() => getMeetingUrl(booking ?? null), [booking]); const handleJoinMeeting = useCallback(() => { - if (meetingUrl) { - openInDefaultBrowser(meetingUrl, "meeting link"); + if (!meetingUrl) return; + + if (isDailyRoomUrl(meetingUrl)) { + router.push({ pathname: "/video-call", params: { url: meetingUrl } }); + return; } - }, [meetingUrl]); + + openInDefaultBrowser(meetingUrl, "meeting link"); + }, [meetingUrl, router]); const handleCopyMeetingLink = useCallback(async () => { if (meetingUrl) { diff --git a/apps/mobile/app/_layout.tsx b/apps/mobile/app/_layout.tsx index 9cf1c8b..a095bad 100644 --- a/apps/mobile/app/_layout.tsx +++ b/apps/mobile/app/_layout.tsx @@ -3,9 +3,12 @@ import "../global.css"; import { DarkTheme, DefaultTheme, ThemeProvider } from "@react-navigation/native"; import { PortalHost } from "@rn-primitives/portal"; +import * as Linking from "expo-linking"; import { isLiquidGlassAvailable } from "expo-glass-effect"; -import { Stack } from "expo-router"; +import { Stack, useRouter } from "expo-router"; +import { useEffect } from "react"; import { Platform, StatusBar, useColorScheme, View } from "react-native"; +import { getBookingUidFromCalVideoUrl, isCalVideoWebUrl } from "@/utils/cal-video"; import { CalComLogo } from "@/components/CalComLogo"; import LoginScreenComponent from "@/components/LoginScreen"; import { NetworkStatusBanner } from "@/components/NetworkStatusBanner"; @@ -21,6 +24,29 @@ function RootLayoutContent() { const colorScheme = useColorScheme(); const isDark = colorScheme === "dark"; const colors = getColors(isDark); + const router = useRouter(); + + // Handle incoming deep links for Cal Video URLs (app.cal.com/video/) + useEffect(() => { + function handleDeepLink(event: { url: string }) { + const { url } = event; + if (isCalVideoWebUrl(url)) { + const bookingUid = getBookingUidFromCalVideoUrl(url); + if (bookingUid) { + router.push({ pathname: "/video-call", params: { bookingUid } }); + } + } + } + + // Handle URL that launched the app (cold start) + Linking.getInitialURL().then((url) => { + if (url) handleDeepLink({ url }); + }); + + // Handle URLs while the app is already open (warm start) + const subscription = Linking.addEventListener("url", handleDeepLink); + return () => subscription.remove(); + }, [router]); // Show Cal.com logo while checking auth state to prevent login flash if (loading) { @@ -379,6 +405,14 @@ function RootLayoutContent() { : "light", }} /> + (); + const router = useRouter(); + const insets = useSafeAreaInsets(); + const callObjectRef = useRef(null); + const [callState, setCallState] = useState("idle"); + const [errorMessage, setErrorMessage] = useState(null); + const [localParticipant, setLocalParticipant] = useState(null); + const [remoteParticipants, setRemoteParticipants] = useState([]); + const [isMicOn, setIsMicOn] = useState(true); + const [isCameraOn, setIsCameraOn] = useState(true); + + const updateParticipants = useCallback((callObject: DailyCall) => { + const participants = callObject.participants(); + if (participants.local) { + setLocalParticipant(extractParticipantInfo(participants.local)); + } + + const remotes: ParticipantInfo[] = []; + for (const [id, participant] of Object.entries(participants)) { + if (id !== "local") { + remotes.push(extractParticipantInfo(participant)); + } + } + setRemoteParticipants(remotes); + }, []); + + const leaveCall = useCallback(async () => { + setCallState("leaving"); + const callObject = callObjectRef.current; + if (callObject) { + await callObject.leave(); + callObject.destroy(); + callObjectRef.current = null; + } + if (router.canGoBack()) { + router.back(); + } + }, [router]); + + // Resolve the Daily.co room URL and join the call on mount. + // Accepts either a direct Daily room `url` or a `bookingUid` that is + // resolved to a Daily room URL via the Cal.com API. + useEffect(() => { + let cancelled = false; + + async function joinCall() { + // Resolve the joinable Daily.co URL + let dailyUrl: string | null = params.url ?? null; + + if (!dailyUrl && params.bookingUid) { + // Deep-link case: resolve booking UID → Daily room URL + const calVideoUrl = `https://app.cal.com/video/${params.bookingUid}`; + dailyUrl = await resolveDailyRoomUrl(calVideoUrl); + } + + if (cancelled) return; + + if (!dailyUrl) { + setCallState("error"); + setErrorMessage("No meeting URL provided"); + return; + } + + const callObject = Daily.createCallObject({ + subscribeToTracksAutomatically: true, + reactNativeConfig: { + androidInCallNotification: { + title: "Cal.com Video", + subtitle: "In a video call", + }, + }, + }); + callObjectRef.current = callObject; + + const handleJoinedMeeting = () => { + setCallState("joined"); + updateParticipants(callObject); + }; + + const handleParticipantJoined = (_event: DailyEventObjectParticipant) => { + updateParticipants(callObject); + }; + + const handleParticipantUpdated = (_event: DailyEventObjectParticipant) => { + updateParticipants(callObject); + }; + + const handleParticipantLeft = (_event: DailyEventObjectParticipantLeft) => { + updateParticipants(callObject); + }; + + const handleLeftMeeting = () => { + setCallState("idle"); + }; + + const handleError = (event: DailyEventObjectFatalError) => { + setCallState("error"); + setErrorMessage(event.errorMsg || "An error occurred during the call"); + }; + + callObject.on("joined-meeting", handleJoinedMeeting); + callObject.on("participant-joined", handleParticipantJoined); + callObject.on("participant-updated", handleParticipantUpdated); + callObject.on("participant-left", handleParticipantLeft); + callObject.on("left-meeting", handleLeftMeeting); + callObject.on("error", handleError); + + setCallState("joining"); + callObject.join({ url: dailyUrl }).catch((err: Error) => { + setCallState("error"); + setErrorMessage(err.message || "Failed to join meeting"); + }); + } + + joinCall(); + + return () => { + cancelled = true; + const callObject = callObjectRef.current; + if (callObject) { + if (callObject.meetingState() === "joined-meeting") { + callObject.leave().then(() => callObject.destroy()); + } else { + callObject.destroy(); + } + callObjectRef.current = null; + } + }; + }, [params.url, params.bookingUid, updateParticipants]); + + const toggleMic = useCallback(() => { + const callObject = callObjectRef.current; + if (!callObject) return; + const newState = !isMicOn; + callObject.setLocalAudio(newState); + setIsMicOn(newState); + }, [isMicOn]); + + const toggleCamera = useCallback(() => { + const callObject = callObjectRef.current; + if (!callObject) return; + const newState = !isCameraOn; + callObject.setLocalVideo(newState); + setIsCameraOn(newState); + }, [isCameraOn]); + + const flipCamera = useCallback(() => { + const callObject = callObjectRef.current; + if (!callObject) return; + callObject.cycleCamera(); + }, []); + + // Determine the main video participant (first remote, or local if alone) + const mainParticipant = remoteParticipants[0] ?? localParticipant; + const showPip = remoteParticipants.length > 0 && localParticipant; + + if (callState === "error") { + return ( + <> + + + + + Unable to Join Call + + + {errorMessage} + + router.back()} + style={{ + marginTop: 24, + backgroundColor: "#FFF", + paddingHorizontal: 24, + paddingVertical: 12, + borderRadius: 100, + }} + > + Go Back + + + + ); + } + + return ( + <> + + + {/* Main video area */} + + {callState === "joining" && ( + + + + Joining call... + + + )} + + {callState === "joined" && mainParticipant && ( + + {/* Main participant video */} + {mainParticipant.videoTrack.state === "playable" && + mainParticipant.videoTrack.track ? ( + + ) : ( + + + + + + {mainParticipant.userName} + + + )} + + {/* PiP local video (when remote participants are present) */} + {showPip && ( + + {localParticipant.videoTrack.state === "playable" && + localParticipant.videoTrack.track ? ( + + ) : ( + + + + )} + + )} + + )} + + {callState === "leaving" && ( + + + + Leaving call... + + + )} + + + {/* Controls bar */} + {callState === "joined" && ( + + {/* Flip camera */} + + + + + {/* Toggle camera */} + + + + + {/* Toggle mic */} + + + + + {/* Leave call */} + + + + + )} + + + ); +} diff --git a/apps/mobile/components/screens/BookingDetailScreen.tsx b/apps/mobile/components/screens/BookingDetailScreen.tsx index 027dfb5..654e05a 100644 --- a/apps/mobile/components/screens/BookingDetailScreen.tsx +++ b/apps/mobile/components/screens/BookingDetailScreen.tsx @@ -46,6 +46,7 @@ import { showErrorAlert, showInfoAlert, showSuccessAlert } from "@/utils/alerts" import { getMeetingUrl } from "@/utils/booking"; import { type BookingActionsResult, getBookingActions } from "@/utils/booking-actions"; import { openInAppBrowser } from "@/utils/browser"; +import { isDailyRoomUrl } from "@/utils/cal-video"; const CopyButton = ({ text, @@ -360,10 +361,15 @@ export function BookingDetailScreen({ const meetingUrl = useMemo(() => getMeetingUrl(booking ?? null), [booking]); const handleJoinMeeting = useCallback(() => { - if (meetingUrl) { - openInAppBrowser(meetingUrl, "meeting link"); + if (!meetingUrl) return; + + if (isDailyRoomUrl(meetingUrl)) { + router.push({ pathname: "/video-call", params: { url: meetingUrl } }); + return; } - }, [meetingUrl]); + + openInAppBrowser(meetingUrl, "meeting link"); + }, [meetingUrl, router]); // Expose action handlers to parent component (for iOS header menu) useEffect(() => { diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 0886a49..e5bc4a3 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -21,6 +21,8 @@ }, "dependencies": { "@bacons/apple-targets": "^3.0.7", + "@daily-co/react-native-daily-js": "^0.84.1", + "@daily-co/react-native-webrtc": "124.0.6-daily.1", "@expo/ui": "0.2.0-canary-20251230-fc48ddc", "@expo/vector-icons": "15.0.3", "@react-native-async-storage/async-storage": "2.2.0", @@ -61,8 +63,10 @@ "react-dom": "19.2.4", "react-native": "0.83.1", "react-native-android-widget": "^0.20.1", + "react-native-background-timer": "^2.4.1", "react-native-css-interop": "0.2.1", "react-native-gesture-handler": "2.28.0", + "react-native-get-random-values": "^2.0.0", "react-native-reanimated": "4.2.0", "react-native-safe-area-context": "5.6.2", "react-native-screens": "4.19.0", @@ -75,6 +79,7 @@ }, "devDependencies": { "@babel/plugin-transform-react-jsx": "^7.28.6", + "@daily-co/config-plugin-rn-daily-js": "^0.0.11", "@types/chrome": "0.1.31", "@types/node": "22.19.6", "@types/react": "19.2.10", diff --git a/apps/mobile/utils/cal-video.ts b/apps/mobile/utils/cal-video.ts new file mode 100644 index 0000000..cdcde9d --- /dev/null +++ b/apps/mobile/utils/cal-video.ts @@ -0,0 +1,125 @@ +/** + * Cal Video Utilities + * + * Utilities for detecting Cal Video / Daily.co URLs and resolving them + * to joinable Daily.co room URLs for react-native-daily-js. + * + * There are two kinds of URLs this module handles: + * + * 1. **Daily.co room URLs** (returned by the Cal.com API in `meetingUrl` / `location`): + * https://meetco.daily.co/ + * These are already directly joinable — no further resolution needed. + * + * 2. **Cal Video web URLs** (used in deep links / browser): + * https://app.cal.com/video/ + * The path segment is a *booking UID*, not a Daily room name. + * To join the call we must fetch the booking via the API and read the + * Daily.co room URL from the booking's meetingUrl / location field. + */ + +import { getBookingByUid } from "@/services/calcom/bookings"; + +const DAILY_HOST = "meetco.daily.co"; +const CAL_VIDEO_HOSTS = ["app.cal.com", "cal.com"]; +const CAL_VIDEO_PATH_PREFIX = "/video/"; + +/** + * Check if a URL points directly to a Daily.co room (meetco.daily.co). + * + * These URLs are returned by the Cal.com API and can be passed straight + * to `callObject.join({ url })`. + */ +export function isDailyRoomUrl(url: string): boolean { + try { + const parsed = new URL(url); + return parsed.hostname === DAILY_HOST; + } catch { + return false; + } +} + +/** + * Check if a URL is a Cal Video web URL (app.cal.com/video/*). + * + * These URLs contain a booking UID and require an API call to resolve + * the actual Daily.co room URL. + */ +export function isCalVideoWebUrl(url: string): boolean { + try { + const parsed = new URL(url); + return ( + CAL_VIDEO_HOSTS.includes(parsed.hostname) && + parsed.pathname.startsWith(CAL_VIDEO_PATH_PREFIX) + ); + } catch { + return false; + } +} + +/** + * Check if a URL can be handled as a native video call. + * + * Returns true for both direct Daily.co room URLs and Cal Video web URLs. + */ +export function isNativeVideoUrl(url: string): boolean { + return isDailyRoomUrl(url) || isCalVideoWebUrl(url); +} + +/** + * Extract the booking UID from a Cal Video web URL. + * + * @param url - e.g. https://app.cal.com/video/vgEm18Vh3wUGTVGWkgcUZj + * @returns The booking UID, or null if the URL is not a Cal Video web URL + */ +export function getBookingUidFromCalVideoUrl(url: string): string | null { + try { + const parsed = new URL(url); + if ( + !CAL_VIDEO_HOSTS.includes(parsed.hostname) || + !parsed.pathname.startsWith(CAL_VIDEO_PATH_PREFIX) + ) { + return null; + } + const uid = parsed.pathname.slice(CAL_VIDEO_PATH_PREFIX.length); + return uid || null; + } catch { + return null; + } +} + +/** + * Resolve a meeting URL to a Daily.co room URL that can be joined natively. + * + * - If the URL is already a Daily.co room URL, returns it directly. + * - If the URL is a Cal Video web URL (app.cal.com/video/), fetches the + * booking by UID and extracts the Daily.co room URL from the booking data. + * + * @param url - A Daily.co room URL or Cal Video web URL + * @returns The Daily.co room URL, or null if resolution fails + */ +export async function resolveDailyRoomUrl(url: string): Promise { + // Already a direct Daily.co URL — use as-is + if (isDailyRoomUrl(url)) { + return url; + } + + // Cal Video web URL — extract booking UID and fetch the booking + const bookingUid = getBookingUidFromCalVideoUrl(url); + if (!bookingUid) return null; + + try { + const booking = await getBookingByUid(bookingUid); + + // The API returns the Daily.co room URL in meetingUrl or location + if (booking.meetingUrl && isDailyRoomUrl(booking.meetingUrl)) { + return booking.meetingUrl; + } + if (booking.location && isDailyRoomUrl(booking.location)) { + return booking.location; + } + + return null; + } catch { + return null; + } +} diff --git a/bun.lock b/bun.lock index 6f1d693..f22e02e 100644 --- a/bun.lock +++ b/bun.lock @@ -56,6 +56,8 @@ "version": "1.7.6", "dependencies": { "@bacons/apple-targets": "^3.0.7", + "@daily-co/react-native-daily-js": "^0.84.1", + "@daily-co/react-native-webrtc": "124.0.6-daily.1", "@expo/ui": "0.2.0-canary-20251230-fc48ddc", "@expo/vector-icons": "15.0.3", "@react-native-async-storage/async-storage": "2.2.0", @@ -96,8 +98,10 @@ "react-dom": "19.2.4", "react-native": "0.83.1", "react-native-android-widget": "^0.20.1", + "react-native-background-timer": "^2.4.1", "react-native-css-interop": "0.2.1", "react-native-gesture-handler": "2.28.0", + "react-native-get-random-values": "^2.0.0", "react-native-reanimated": "4.2.0", "react-native-safe-area-context": "5.6.2", "react-native-screens": "4.19.0", @@ -110,6 +114,7 @@ }, "devDependencies": { "@babel/plugin-transform-react-jsx": "^7.28.6", + "@daily-co/config-plugin-rn-daily-js": "^0.0.11", "@types/chrome": "0.1.31", "@types/node": "22.19.6", "@types/react": "19.2.10", @@ -387,6 +392,14 @@ "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], + "@daily-co/config-plugin-rn-daily-js": ["@daily-co/config-plugin-rn-daily-js@0.0.11", "", { "dependencies": { "@expo/config-plugins": "^10.1.2", "expo-build-properties": "~0.14.8" }, "peerDependencies": { "expo": "^54.0.0" } }, "sha512-ZNfniHIlivEx+MI5OObvIV7c1C9Fb1quresK+8PGTd6FbBZiYKJdU3YxqvQ5P0CvfkdveCXvZ95Zbqc7S2YUBQ=="], + + "@daily-co/daily-js": ["@daily-co/daily-js@0.89.1", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@sentry/browser": "^8.33.1", "bowser": "^2.8.1", "dequal": "^2.0.3", "events": "^3.1.0" } }, "sha512-1RnXtzg8aeJYLhmMjRK9mnsWRljwsM2OUBJH5onpAOFIjHPSA7h03DSCd8D/YMyrpX8jQHcVMDSWOhcj+tZD/A=="], + + "@daily-co/react-native-daily-js": ["@daily-co/react-native-daily-js@0.84.1", "", { "dependencies": { "@daily-co/daily-js": "^0.89.1", "@types/react-native-background-timer": "^2.0.0", "base-64": "^1.0.0", "react-native-url-polyfill": "^1.1.2" }, "peerDependencies": { "@daily-co/react-native-webrtc": "^124.0.6-daily.1", "@react-native-async-storage/async-storage": "^1.24.0", "react-native": ">=0.68.0", "react-native-background-timer": "^2.4.1", "react-native-get-random-values": "^1.11.0" } }, "sha512-9gg9yol0scNSKop2vW4CN1iyFcViea8AcDOUFWUnTCGzz+t01ZYnrv6dMwdWG7/0gsDnzs5C0E9bktHbA3K0Iw=="], + + "@daily-co/react-native-webrtc": ["@daily-co/react-native-webrtc@124.0.6-daily.1", "", { "dependencies": { "base64-js": "1.5.1", "debug": "4.3.4", "event-target-shim": "6.0.2" }, "peerDependencies": { "react-native": ">=0.60.0" } }, "sha512-oI3vl5hUkoXTiw3zMJZC+eIdYXejCAA1JVkn2/r3b1FStnF6A2/MPCHEXPVmZHPy+rdJcSi7P7TtG2pLkmo8Jw=="], + "@devicefarmer/adbkit": ["@devicefarmer/adbkit@3.3.8", "", { "dependencies": { "@devicefarmer/adbkit-logcat": "^2.1.2", "@devicefarmer/adbkit-monkey": "~1.2.1", "bluebird": "~3.7", "commander": "^9.1.0", "debug": "~4.3.1", "node-forge": "^1.3.1", "split": "~1.0.1" }, "bin": { "adbkit": "bin/adbkit" } }, "sha512-7rBLLzWQnBwutH2WZ0EWUkQdihqrnLYCUMaB44hSol9e0/cdIhuNFcqZO0xNheAU6qqHVA8sMiLofkYTgb+lmw=="], "@devicefarmer/adbkit-logcat": ["@devicefarmer/adbkit-logcat@2.1.3", "", {}, "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw=="], @@ -475,9 +488,9 @@ "@expo/config": ["@expo/config@12.0.14-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "@expo/config-plugins": "54.0.5-canary-20251230-fc48ddc", "@expo/config-types": "55.0.0-canary-20251230-fc48ddc", "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", "resolve-workspace-root": "^2.0.0", "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "~3.35.1" } }, "sha512-M50hGICoIA974u/Rxdejzc8ZHOWzBUVH/m5DJZFFj2W2LoZ70IJ3pW/XqqtH45+fuERL6vuQbS/9XdgD2F4Djg=="], - "@expo/config-plugins": ["@expo/config-plugins@54.0.5-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config-types": "55.0.0-canary-20251230-fc48ddc", "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "@expo/plist": "0.4.9-canary-20251230-fc48ddc", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-xFUuvg+KNufhjiKRH6T1WOMz3XVGulFI1Kr8gDUD/H1FfG+YhlkbL1sOEU+B2eZGSCGmJyGsjVXRYe6H2+UuSQ=="], + "@expo/config-plugins": ["@expo/config-plugins@10.1.2", "", { "dependencies": { "@expo/config-types": "^53.0.5", "@expo/json-file": "~9.1.5", "@expo/plist": "^0.3.5", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^10.4.2", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-IMYCxBOcnuFStuK0Ay+FzEIBKrwW8OVUMc65+v0+i7YFIIe8aL342l7T4F8lR4oCfhXn7d6M5QPgXvjtc/gAcw=="], - "@expo/config-types": ["@expo/config-types@55.0.0-canary-20251230-fc48ddc", "", {}, "sha512-tFdYULhz0H9FT4+pqHhaQh+jqH1dLrPpU95sF4XIIWkn+KDVEJLVSijc2E8NRHJwahPrtXJjcE+OES2IfCydnQ=="], + "@expo/config-types": ["@expo/config-types@53.0.5", "", {}, "sha512-kqZ0w44E+HEGBjy+Lpyn0BVL5UANg/tmNixxaRMLS6nf37YsDrLk2VMAmeKMMk5CKG0NmOdVv3ngeUjRQMsy9g=="], "@expo/devcert": ["@expo/devcert@1.2.1", "", { "dependencies": { "@expo/sudo-prompt": "^9.3.1", "debug": "^3.1.0" } }, "sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA=="], @@ -491,7 +504,7 @@ "@expo/image-utils": ["@expo/image-utils@0.8.9-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0", "semver": "^7.6.0", "temp-dir": "~2.0.0", "unique-string": "~2.0.0" } }, "sha512-QNXW9i2a2dW1yEGyPHfvIGefuqXi3eqp8E+IkYIdpP2YVqBfGXVlrm2DPv67aUEx6JuYe/050bsazScDZM7TkQ=="], - "@expo/json-file": ["@expo/json-file@10.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-KE1XtrIdxcSL32nV5Oo0x9EEVS5PAbmdHYgn8BiZ1xMVlqtLuMRctXpEo2ubNk9NCVTOSrO1GRIzN0IdJZBxHg=="], + "@expo/json-file": ["@expo/json-file@9.1.5", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA=="], "@expo/local-build-cache-provider": ["@expo/local-build-cache-provider@0.0.1-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config": "12.0.14-canary-20251230-fc48ddc", "chalk": "^4.1.2" } }, "sha512-5f3Mry6hUp/Bvxqd9S5LS0bp5a4/W9qg0a6nzztosqwIdkFBg9wfwxcnpKiqpQgKTdeYlmvdAg+3JEmaTBzcGw=="], @@ -507,7 +520,7 @@ "@expo/package-manager": ["@expo/package-manager@1.9.10-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "resolve-workspace-root": "^2.0.0" } }, "sha512-Yy74eMzqJKlk1H3B7w1geOyXOz15aOvjgUeRdgBikMj9lgBA6iPGER+cRObGiI5e2nE5eZYQxFOecV0kJawntg=="], - "@expo/plist": ["@expo/plist@0.0.18", "", { "dependencies": { "@xmldom/xmldom": "~0.7.0", "base64-js": "^1.2.3", "xmlbuilder": "^14.0.0" } }, "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w=="], + "@expo/plist": ["@expo/plist@0.3.5", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.2.3", "xmlbuilder": "^15.1.1" } }, "sha512-9RYVU1iGyCJ7vWfg3e7c/NVyMFs8wbl+dMWZphtFtsqyN9zppGREU3ctlD3i8KUE0sCUTVnLjCWr+VeUIDep2g=="], "@expo/prebuild-config": ["@expo/prebuild-config@54.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config": "12.0.14-canary-20251230-fc48ddc", "@expo/config-plugins": "54.0.5-canary-20251230-fc48ddc", "@expo/config-types": "55.0.0-canary-20251230-fc48ddc", "@expo/image-utils": "0.8.9-canary-20251230-fc48ddc", "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "@react-native/normalize-colors": "0.83.1", "debug": "^4.3.1", "resolve-from": "^5.0.0", "semver": "^7.6.0", "xml2js": "0.6.0" }, "peerDependencies": { "expo": "55.0.0-canary-20251230-fc48ddc" } }, "sha512-fQTz858QMQqlx7v9rf75FOS+nJJ5EgFIVJVFfn4TVPYi9wPlLtOieEKVh3RK8ZKg9VTt81kp/dFpgcLS12AiGA=="], @@ -853,6 +866,18 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA=="], + "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@8.55.1", "", { "dependencies": { "@sentry/core": "8.55.1" } }, "sha512-SipXiwVhJrxzy3/4kf+YIFmpYlLKtGSRD+er7SBCcuSBtv31Fee8IXMDvk+bq24gRXxyjOLUmT//GGXjy2LL6w=="], + + "@sentry-internal/feedback": ["@sentry-internal/feedback@8.55.1", "", { "dependencies": { "@sentry/core": "8.55.1" } }, "sha512-9iFHaT/ijtzB0ffZhXMnt2rPNIXO/dDiCL1G1Bc55rQMPXgawR9AIaAWciyqQjYcbL1DDOhWbzdVqB+kVs5gXw=="], + + "@sentry-internal/replay": ["@sentry-internal/replay@8.55.1", "", { "dependencies": { "@sentry-internal/browser-utils": "8.55.1", "@sentry/core": "8.55.1" } }, "sha512-XaX6r8pXeX47rfiQrSQUwkgxHsDkOKzIT++zfTwrmveVlYSqAhp3x+AKhxAXGmKG62wlmAKQz54GJKcG4cgyKQ=="], + + "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@8.55.1", "", { "dependencies": { "@sentry-internal/replay": "8.55.1", "@sentry/core": "8.55.1" } }, "sha512-2sKRu96Qe70y6TiYdYbwkhg4um2prgzH/ZJRItuoSEAjPjoFYYlP+1qjE2CcBw4RPS8/PimV7SFheSaeZs2GCw=="], + + "@sentry/browser": ["@sentry/browser@8.55.1", "", { "dependencies": { "@sentry-internal/browser-utils": "8.55.1", "@sentry-internal/feedback": "8.55.1", "@sentry-internal/replay": "8.55.1", "@sentry-internal/replay-canvas": "8.55.1", "@sentry/core": "8.55.1" } }, "sha512-OEn2eg8h3Mr7BmBGQ28BqbWehYA/NklZ0pAZB1FypPPl+kMd85AbaRdGTnaSjgmpc8bKbBO64edq4Y14sbCs5w=="], + + "@sentry/core": ["@sentry/core@8.55.1", "", {}, "sha512-0ea+yDOgaijR3ba2al1QZxY0bZ9MBZq2a0G+2A0uCBpBkiXnpLFGVAo9UAlEikN1C4M8ROZYiuFU7yZCqacgLQ=="], + "@sinclair/typebox": ["@sinclair/typebox@0.27.10", "", {}, "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA=="], "@sinonjs/commons": ["@sinonjs/commons@3.0.1", "", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ=="], @@ -929,6 +954,8 @@ "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@types/react-native-background-timer": ["@types/react-native-background-timer@2.0.2", "", {}, "sha512-cMAep0M5yqUHjiiRPvGiviqiJYdI45KSjbI5ufsIFSQGFwHwrHJC/8yawNhy0G3Gix6fufWLsEj6jC5niUNHiQ=="], + "@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="], "@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], @@ -981,7 +1008,7 @@ "@wxt-dev/storage": ["@wxt-dev/storage@1.2.8", "", { "dependencies": { "@wxt-dev/browser": "^0.1.37", "async-mutex": "^0.5.0", "dequal": "^2.0.3" } }, "sha512-GWCFKgF5+d7eslOxUDFC70ypA9njupmJb1nQM8uZoX0J3sWT2BO5xJLzb1sYahWAfID9p2BMtnUBN1lkWxPsbQ=="], - "@xmldom/xmldom": ["@xmldom/xmldom@0.7.13", "", {}, "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g=="], + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], @@ -1073,6 +1100,8 @@ "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "base-64": ["base-64@1.0.0", "", {}, "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="], + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], "baseline-browser-mapping": ["baseline-browser-mapping@2.10.0", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="], @@ -1087,6 +1116,8 @@ "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], + "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], "bplist-creator": ["bplist-creator@0.1.0", "", { "dependencies": { "stream-buffers": "2.2.x" } }, "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg=="], @@ -1357,10 +1388,12 @@ "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + "event-target-shim": ["event-target-shim@6.0.2", "", {}, "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA=="], "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], "exec-async": ["exec-async@2.2.0", "", {}, "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw=="], @@ -1375,6 +1408,8 @@ "expo-auth-session": ["expo-auth-session@7.0.11-canary-20251230-fc48ddc", "", { "dependencies": { "expo-application": "7.0.9-canary-20251230-fc48ddc", "expo-constants": "18.1.0-canary-20251230-fc48ddc", "expo-crypto": "15.0.9-canary-20251230-fc48ddc", "expo-linking": "8.0.12-canary-20251230-fc48ddc", "expo-web-browser": "15.0.11-canary-20251230-fc48ddc", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-wXb6bPFaiTB2QuZiYNoR2TReuWvFozWindIXpLeTtWaRvx7nR7gWAwxUm+xmYNXLlWA7QXhvrxZ9Ufp+5NpJ9g=="], + "expo-build-properties": ["expo-build-properties@0.14.8", "", { "dependencies": { "ajv": "^8.11.0", "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-GTFNZc5HaCS9RmCi6HspCe2+isleuOWt2jh7UEKHTDQ9tdvzkIoWc7U6bQO9lH3Mefk4/BcCUZD/utl7b1wdqw=="], + "expo-clipboard": ["expo-clipboard@9.0.0-canary-20251230-fc48ddc", "", { "peerDependencies": { "expo": "55.0.0-canary-20251230-fc48ddc", "react": "*", "react-native": "*" } }, "sha512-xCvGGc7d5FMqqVGvdImTDGkxkAJlQHQPdhBqX2gmhPtRGlqIleGgJBrOFQPoCpfrVOW840MVSLI8p0c0updpjQ=="], "expo-constants": ["expo-constants@18.1.0-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config": "12.0.14-canary-20251230-fc48ddc", "@expo/env": "2.0.9-canary-20251230-fc48ddc" }, "peerDependencies": { "expo": "55.0.0-canary-20251230-fc48ddc", "react-native": "*" } }, "sha512-iyMYWluY4vXeRJxwYSyGpJcrjkt+YdtFI9Fj/UNHaylsHfMRVKEVIn/yr0VW7PgIqGSydASQJSQZekP1gifYog=="], @@ -1439,6 +1474,8 @@ "extension": ["extension@workspace:apps/extension"], + "fast-base64-decode": ["fast-base64-decode@1.0.0", "", {}, "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], @@ -2171,10 +2208,14 @@ "react-native-android-widget": ["react-native-android-widget@0.20.1", "", { "peerDependencies": { "expo": ">=54.0.0", "react": "*", "react-native": "*" }, "optionalPeers": ["expo"] }, "sha512-m3akQCyoG6XUH8OLHOyL3/Xxx/XXTXf9ZyFYmWvSQrv1YUaZ7kVjmeLIYnaNz+qQ9VrTAS9OygCxZQptqCGzjQ=="], + "react-native-background-timer": ["react-native-background-timer@2.4.1", "", { "peerDependencies": { "react-native": ">=0.47.0" } }, "sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g=="], + "react-native-css-interop": ["react-native-css-interop@0.2.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.22.15", "@babel/traverse": "^7.23.0", "@babel/types": "^7.23.0", "debug": "^4.3.7", "lightningcss": "~1.27.0", "semver": "^7.6.3" }, "peerDependencies": { "react": ">=18", "react-native": "*", "react-native-reanimated": ">=3.6.2", "tailwindcss": "~3" } }, "sha512-B88f5rIymJXmy1sNC/MhTkb3xxBej1KkuAt7TiT9iM7oXz3RM8Bn+7GUrfR02TvSgKm4cg2XiSuLEKYfKwNsjA=="], "react-native-gesture-handler": ["react-native-gesture-handler@2.28.0", "", { "dependencies": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A=="], + "react-native-get-random-values": ["react-native-get-random-values@2.0.0", "", { "dependencies": { "fast-base64-decode": "^1.0.0" }, "peerDependencies": { "react-native": ">=0.81" } }, "sha512-wx7/aPqsUIiWsG35D+MsUJd8ij96e3JKddklSdrdZUrheTx89gPtz3Q2yl9knBArj5u26Cl23T88ai+Q0vypdQ=="], + "react-native-is-edge-to-edge": ["react-native-is-edge-to-edge@1.2.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q=="], "react-native-reanimated": ["react-native-reanimated@4.2.0", "", { "dependencies": { "react-native-is-edge-to-edge": "1.2.1", "semver": "7.7.3" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-worklets": ">=0.7.0" } }, "sha512-frhu5b8/m/VvaMWz48V8RxcsXnE3hrlErQ5chr21MzAeDCpY4X14sQjvm+jvu3aOI+7Cz2atdRpyhhIuqxVaXg=="], @@ -2185,6 +2226,8 @@ "react-native-svg": ["react-native-svg@15.12.1", "", { "dependencies": { "css-select": "^5.1.0", "css-tree": "^1.1.3", "warn-once": "0.1.1" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g=="], + "react-native-url-polyfill": ["react-native-url-polyfill@1.3.0", "", { "dependencies": { "whatwg-url-without-unicode": "8.0.0-3" }, "peerDependencies": { "react-native": "*" } }, "sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ=="], + "react-native-web": ["react-native-web@0.21.2", "", { "dependencies": { "@babel/runtime": "^7.18.6", "@react-native/normalize-colors": "^0.74.1", "fbjs": "^3.0.4", "inline-style-prefixer": "^7.0.1", "memoize-one": "^6.0.0", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", "styleq": "^0.1.3" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg=="], "react-native-worklets": ["react-native-worklets@0.7.1", "", { "dependencies": { "@babel/plugin-transform-arrow-functions": "7.27.1", "@babel/plugin-transform-class-properties": "7.27.1", "@babel/plugin-transform-classes": "7.28.4", "@babel/plugin-transform-nullish-coalescing-operator": "7.27.1", "@babel/plugin-transform-optional-chaining": "7.27.1", "@babel/plugin-transform-shorthand-properties": "7.27.1", "@babel/plugin-transform-template-literals": "7.27.1", "@babel/plugin-transform-unicode-regex": "7.27.1", "@babel/preset-typescript": "7.27.1", "convert-source-map": "2.0.0", "semver": "7.7.3" }, "peerDependencies": { "@babel/core": "*", "react": "*", "react-native": "*" } }, "sha512-KNsvR48ULg73QhTlmwPbdJLPsWcyBotrGPsrDRDswb5FYpQaJEThUKc2ncXE4UM5dn/ewLoQHjSjLaKUVPxPhA=="], @@ -2585,7 +2628,7 @@ "xml2js": ["xml2js@0.6.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w=="], - "xmlbuilder": ["xmlbuilder@14.0.0", "", {}, "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg=="], + "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], @@ -2645,6 +2688,8 @@ "@bacons/apple-targets/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "@bacons/xcode/@expo/plist": ["@expo/plist@0.0.18", "", { "dependencies": { "@xmldom/xmldom": "~0.7.0", "base64-js": "^1.2.3", "xmlbuilder": "^14.0.0" } }, "sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w=="], + "@bacons/xcode/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "@calcom/chat/@types/node": ["@types/node@20.19.37", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw=="], @@ -2667,6 +2712,10 @@ "@eslint/plugin-kit/@eslint/core": ["@eslint/core@0.15.2", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg=="], + "@expo/cli/@expo/config-plugins": ["@expo/config-plugins@54.0.5-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config-types": "55.0.0-canary-20251230-fc48ddc", "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "@expo/plist": "0.4.9-canary-20251230-fc48ddc", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-xFUuvg+KNufhjiKRH6T1WOMz3XVGulFI1Kr8gDUD/H1FfG+YhlkbL1sOEU+B2eZGSCGmJyGsjVXRYe6H2+UuSQ=="], + + "@expo/cli/@expo/json-file": ["@expo/json-file@10.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-KE1XtrIdxcSL32nV5Oo0x9EEVS5PAbmdHYgn8BiZ1xMVlqtLuMRctXpEo2ubNk9NCVTOSrO1GRIzN0IdJZBxHg=="], + "@expo/cli/@expo/plist": ["@expo/plist@0.4.9-canary-20251230-fc48ddc", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-I/x0ULbAtHRHgfW5oZ+rx5+qe9/Y6vA7yQZYZ3ip9e31g1kxpwxhcmHDhFBS62jJLrZ/PWIJ5N5LWQOlL66uYw=="], "@expo/cli/arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], @@ -2693,16 +2742,18 @@ "@expo/config/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], + "@expo/config/@expo/config-plugins": ["@expo/config-plugins@54.0.5-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config-types": "55.0.0-canary-20251230-fc48ddc", "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "@expo/plist": "0.4.9-canary-20251230-fc48ddc", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-xFUuvg+KNufhjiKRH6T1WOMz3XVGulFI1Kr8gDUD/H1FfG+YhlkbL1sOEU+B2eZGSCGmJyGsjVXRYe6H2+UuSQ=="], + + "@expo/config/@expo/config-types": ["@expo/config-types@55.0.0-canary-20251230-fc48ddc", "", {}, "sha512-tFdYULhz0H9FT4+pqHhaQh+jqH1dLrPpU95sF4XIIWkn+KDVEJLVSijc2E8NRHJwahPrtXJjcE+OES2IfCydnQ=="], + + "@expo/config/@expo/json-file": ["@expo/json-file@10.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-KE1XtrIdxcSL32nV5Oo0x9EEVS5PAbmdHYgn8BiZ1xMVlqtLuMRctXpEo2ubNk9NCVTOSrO1GRIzN0IdJZBxHg=="], + "@expo/config/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], "@expo/config/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "@expo/config-plugins/@expo/plist": ["@expo/plist@0.4.9-canary-20251230-fc48ddc", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-I/x0ULbAtHRHgfW5oZ+rx5+qe9/Y6vA7yQZYZ3ip9e31g1kxpwxhcmHDhFBS62jJLrZ/PWIJ5N5LWQOlL66uYw=="], - "@expo/config-plugins/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "@expo/config-plugins/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], - "@expo/config-plugins/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], "@expo/devcert/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -2731,6 +2782,8 @@ "@expo/metro/metro-source-map": ["metro-source-map@0.83.3", "", { "dependencies": { "@babel/traverse": "^7.25.3", "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.83.3", "nullthrows": "^1.1.1", "ob1": "0.83.3", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg=="], + "@expo/metro-config/@expo/json-file": ["@expo/json-file@10.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-KE1XtrIdxcSL32nV5Oo0x9EEVS5PAbmdHYgn8BiZ1xMVlqtLuMRctXpEo2ubNk9NCVTOSrO1GRIzN0IdJZBxHg=="], + "@expo/metro-config/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "@expo/metro-config/dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], @@ -2747,8 +2800,16 @@ "@expo/metro-config/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], + "@expo/package-manager/@expo/json-file": ["@expo/json-file@10.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-KE1XtrIdxcSL32nV5Oo0x9EEVS5PAbmdHYgn8BiZ1xMVlqtLuMRctXpEo2ubNk9NCVTOSrO1GRIzN0IdJZBxHg=="], + "@expo/package-manager/ora": ["ora@3.4.0", "", { "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" } }, "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg=="], + "@expo/prebuild-config/@expo/config-plugins": ["@expo/config-plugins@54.0.5-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config-types": "55.0.0-canary-20251230-fc48ddc", "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "@expo/plist": "0.4.9-canary-20251230-fc48ddc", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-xFUuvg+KNufhjiKRH6T1WOMz3XVGulFI1Kr8gDUD/H1FfG+YhlkbL1sOEU+B2eZGSCGmJyGsjVXRYe6H2+UuSQ=="], + + "@expo/prebuild-config/@expo/config-types": ["@expo/config-types@55.0.0-canary-20251230-fc48ddc", "", {}, "sha512-tFdYULhz0H9FT4+pqHhaQh+jqH1dLrPpU95sF4XIIWkn+KDVEJLVSijc2E8NRHJwahPrtXJjcE+OES2IfCydnQ=="], + + "@expo/prebuild-config/@expo/json-file": ["@expo/json-file@10.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-KE1XtrIdxcSL32nV5Oo0x9EEVS5PAbmdHYgn8BiZ1xMVlqtLuMRctXpEo2ubNk9NCVTOSrO1GRIzN0IdJZBxHg=="], + "@expo/prebuild-config/@react-native/normalize-colors": ["@react-native/normalize-colors@0.83.1", "", {}, "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg=="], "@expo/prebuild-config/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], @@ -2841,6 +2902,8 @@ "@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "abort-controller/event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -2895,8 +2958,14 @@ "eslint-plugin-react-compiler/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "expo/@expo/config-plugins": ["@expo/config-plugins@54.0.5-canary-20251230-fc48ddc", "", { "dependencies": { "@expo/config-types": "55.0.0-canary-20251230-fc48ddc", "@expo/json-file": "10.0.9-canary-20251230-fc48ddc", "@expo/plist": "0.4.9-canary-20251230-fc48ddc", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-xFUuvg+KNufhjiKRH6T1WOMz3XVGulFI1Kr8gDUD/H1FfG+YhlkbL1sOEU+B2eZGSCGmJyGsjVXRYe6H2+UuSQ=="], + "expo/babel-preset-expo": ["babel-preset-expo@54.1.0-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-preset": "0.83.1", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4", "resolve-from": "^5.0.0" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "55.0.0-canary-20251230-fc48ddc", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo"] }, "sha512-2SMoySepYnhskzwMSjZplBE77FPp0GwjuEgioFgIWLKJ7Lw2P84zoEcQ7uGtiz1W0snVmqfAQtSuLi894BK9Sg=="], + "expo-build-properties/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + + "expo-build-properties/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "expo-dev-launcher/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], "expo-modules-autolinking/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], @@ -3043,10 +3112,6 @@ "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "plist/@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], - - "plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], - "postcss-load-config/lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], @@ -3193,6 +3258,10 @@ "@bacons/apple-targets/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "@bacons/xcode/@expo/plist/@xmldom/xmldom": ["@xmldom/xmldom@0.7.13", "", {}, "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g=="], + + "@bacons/xcode/@expo/plist/xmlbuilder": ["xmlbuilder@14.0.0", "", {}, "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg=="], + "@bacons/xcode/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "@eslint/config-array/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -3203,9 +3272,9 @@ "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "@expo/cli/@expo/plist/@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], + "@expo/cli/@expo/config-plugins/@expo/config-types": ["@expo/config-types@55.0.0-canary-20251230-fc48ddc", "", {}, "sha512-tFdYULhz0H9FT4+pqHhaQh+jqH1dLrPpU95sF4XIIWkn+KDVEJLVSijc2E8NRHJwahPrtXJjcE+OES2IfCydnQ=="], - "@expo/cli/@expo/plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], + "@expo/cli/@expo/json-file/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], "@expo/cli/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -3227,13 +3296,11 @@ "@expo/cli/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@expo/config-plugins/@expo/plist/@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], - - "@expo/config-plugins/@expo/plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], - "@expo/config-plugins/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "@expo/config-plugins/glob/path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], + "@expo/config/@expo/config-plugins/@expo/plist": ["@expo/plist@0.4.9-canary-20251230-fc48ddc", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-I/x0ULbAtHRHgfW5oZ+rx5+qe9/Y6vA7yQZYZ3ip9e31g1kxpwxhcmHDhFBS62jJLrZ/PWIJ5N5LWQOlL66uYw=="], + + "@expo/config/@expo/config-plugins/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "@expo/config/glob/path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], @@ -3251,6 +3318,8 @@ "@expo/fingerprint/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@expo/metro-config/@expo/json-file/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], + "@expo/metro-config/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "@expo/metro-config/dotenv-expand/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], @@ -3287,6 +3356,8 @@ "@expo/metro/metro-source-map/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + "@expo/package-manager/@expo/json-file/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], + "@expo/package-manager/ora/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], "@expo/package-manager/ora/cli-cursor": ["cli-cursor@2.1.0", "", { "dependencies": { "restore-cursor": "^2.0.0" } }, "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw=="], @@ -3295,6 +3366,12 @@ "@expo/package-manager/ora/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="], + "@expo/prebuild-config/@expo/config-plugins/@expo/plist": ["@expo/plist@0.4.9-canary-20251230-fc48ddc", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-I/x0ULbAtHRHgfW5oZ+rx5+qe9/Y6vA7yQZYZ3ip9e31g1kxpwxhcmHDhFBS62jJLrZ/PWIJ5N5LWQOlL66uYw=="], + + "@expo/prebuild-config/@expo/config-plugins/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], + + "@expo/prebuild-config/@expo/json-file/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], + "@expo/prebuild-config/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "@expo/router-server/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -3391,10 +3468,24 @@ "eslint/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "expo-build-properties/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "expo-dev-launcher/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "expo-router/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "expo/@expo/config-plugins/@expo/config-types": ["@expo/config-types@55.0.0-canary-20251230-fc48ddc", "", {}, "sha512-tFdYULhz0H9FT4+pqHhaQh+jqH1dLrPpU95sF4XIIWkn+KDVEJLVSijc2E8NRHJwahPrtXJjcE+OES2IfCydnQ=="], + + "expo/@expo/config-plugins/@expo/json-file": ["@expo/json-file@10.0.9-canary-20251230-fc48ddc", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-KE1XtrIdxcSL32nV5Oo0x9EEVS5PAbmdHYgn8BiZ1xMVlqtLuMRctXpEo2ubNk9NCVTOSrO1GRIzN0IdJZBxHg=="], + + "expo/@expo/config-plugins/@expo/plist": ["@expo/plist@0.4.9-canary-20251230-fc48ddc", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-I/x0ULbAtHRHgfW5oZ+rx5+qe9/Y6vA7yQZYZ3ip9e31g1kxpwxhcmHDhFBS62jJLrZ/PWIJ5N5LWQOlL66uYw=="], + + "expo/@expo/config-plugins/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "expo/@expo/config-plugins/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], + + "expo/@expo/config-plugins/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "expo/babel-preset-expo/@react-native/babel-preset": ["@react-native/babel-preset@0.83.1", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-transform-arrow-functions": "^7.24.7", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", "@babel/plugin-transform-function-name": "^7.25.1", "@babel/plugin-transform-literals": "^7.25.2", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", "@babel/plugin-transform-numeric-separator": "^7.24.7", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", "@babel/plugin-transform-react-jsx": "^7.25.2", "@babel/plugin-transform-react-jsx-self": "^7.24.7", "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/plugin-transform-shorthand-properties": "^7.24.7", "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", "@react-native/babel-plugin-codegen": "0.83.1", "babel-plugin-syntax-hermes-parser": "0.32.0", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" } }, "sha512-xI+tbsD4fXcI6PVU4sauRCh0a5fuLQC849SINmU2J5wP8kzKu4Ye0YkGjUW3mfGrjaZcjkWmF6s33jpyd3gdTw=="], "expo/babel-preset-expo/babel-plugin-react-compiler": ["babel-plugin-react-compiler@1.0.0", "", { "dependencies": { "@babel/types": "^7.26.0" } }, "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw=="], @@ -3545,7 +3636,7 @@ "@expo/cli/wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "@expo/config-plugins/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + "@expo/config/@expo/config-plugins/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "@expo/config/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], @@ -3567,6 +3658,8 @@ "@expo/package-manager/ora/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], + "@expo/prebuild-config/@expo/config-plugins/glob/path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], + "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], "@react-native/babel-plugin-codegen/@react-native/codegen/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], @@ -3593,6 +3686,12 @@ "eslint/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "expo/@expo/config-plugins/@expo/json-file/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], + + "expo/@expo/config-plugins/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "expo/@expo/config-plugins/glob/path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], + "expo/babel-preset-expo/@react-native/babel-preset/@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw=="], "expo/babel-preset-expo/@react-native/babel-preset/@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-replace-supers": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q=="], @@ -3637,6 +3736,8 @@ "@expo/package-manager/ora/cli-cursor/restore-cursor/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "@expo/prebuild-config/@expo/config-plugins/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "@react-native/babel-plugin-codegen/@react-native/codegen/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], @@ -3645,6 +3746,8 @@ "@react-native/dev-middleware/chrome-launcher/lighthouse-logger/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "expo/@expo/config-plugins/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + "expo/babel-preset-expo/@react-native/babel-preset/babel-plugin-syntax-hermes-parser/hermes-parser": ["hermes-parser@0.32.0", "", { "dependencies": { "hermes-estree": "0.32.0" } }, "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw=="], "react-native/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],