diff --git a/apps/expo/.env.development b/apps/expo/.env.development
new file mode 100644
index 00000000..af475f13
--- /dev/null
+++ b/apps/expo/.env.development
@@ -0,0 +1,3 @@
+
+EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_ZXRoaWNhbC1zbmFwcGVyLTk0LmNsZXJrLmFjY291bnRzLmRldiQ
+EXPO_PUBLIC_API_URL="localhost:3000"
\ No newline at end of file
diff --git a/apps/expo/app.config.ts b/apps/expo/app.config.ts
index e1b5f479..8b0a9244 100644
--- a/apps/expo/app.config.ts
+++ b/apps/expo/app.config.ts
@@ -32,6 +32,7 @@ const defineConfig = (): ExpoConfig => ({
eas: {
projectId: "e5b5d2cd-098b-4fe4-85ed-ac05e395552d", // dennis' project id for now
},
+ clerkPublishableKey: process.env.CLERK_PUBLISHABLE_KEY,
},
experiments: {
tsconfigPaths: true,
diff --git a/apps/expo/package.json b/apps/expo/package.json
index 6704c97f..332cf55a 100644
--- a/apps/expo/package.json
+++ b/apps/expo/package.json
@@ -15,6 +15,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
+ "@clerk/clerk-expo": "^1.1.4",
"@expo/metro-config": "^0.17.6",
"@react-native-async-storage/async-storage": "1.21.0",
"@react-native-community/datetimepicker": "7.6.1",
@@ -52,6 +53,7 @@
"react-native-svg": "^15.1.0",
"superjson": "2.2.1",
"tamagui": "^1.94.4",
+ "zod": "^3.22.4",
"zustand": "^4.5.2"
},
"devDependencies": {
diff --git a/apps/expo/src/app/_layout.tsx b/apps/expo/src/app/_layout.tsx
index 70b4a634..e9ebb11a 100644
--- a/apps/expo/src/app/_layout.tsx
+++ b/apps/expo/src/app/_layout.tsx
@@ -8,6 +8,7 @@ import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useFonts } from "expo-font";
import { Stack } from "expo-router";
import { StatusBar } from "expo-status-bar";
+import { ClerkProvider } from "@clerk/clerk-expo";
import InterBold from "@tamagui/font-inter/otf/Inter-Bold.otf";
import Inter from "@tamagui/font-inter/otf/Inter-Medium.otf";
import { ToastProvider, ToastViewport } from "@tamagui/toast";
@@ -15,6 +16,7 @@ import { createTamagui, TamaguiProvider, Theme } from "tamagui";
import { HamburgerMenu, Logo } from "~/components";
import { TRPCProvider } from "~/utils";
+import { env } from "../utils/env";
// Main layout of the app
// It wraps your pages with the providers they need
@@ -37,37 +39,39 @@ export default function RootLayout() {
return (
-
-
- ,
- headerRight: () => ,
- headerStyle: {
- backgroundColor: "#1A1B1D",
- },
- contentStyle: {
- backgroundColor:
- colorScheme === "dark" ? "#1A1B1D" : "#FFFFFF",
- },
- }}
- >
- {/*
+
+
+ ,
+ headerRight: () => ,
+ headerStyle: {
+ backgroundColor: "#1A1B1D",
+ },
+ contentStyle: {
+ backgroundColor:
+ colorScheme === "dark" ? "#1A1B1D" : "#FFFFFF",
+ },
+ }}
+ >
+ {/* */}
-
-
-
-
-
+
+
+
+
+
+
);
diff --git a/apps/expo/src/app/auth/index.tsx b/apps/expo/src/app/auth/index.tsx
new file mode 100644
index 00000000..8debec41
--- /dev/null
+++ b/apps/expo/src/app/auth/index.tsx
@@ -0,0 +1,5 @@
+import { Text } from "tamagui";
+
+export default function Auth() {
+ return Auth;
+}
diff --git a/apps/expo/src/app/home/_components/dish-card.tsx b/apps/expo/src/app/home/_components/dish-card.tsx
new file mode 100644
index 00000000..89052ac5
--- /dev/null
+++ b/apps/expo/src/app/home/_components/dish-card.tsx
@@ -0,0 +1,80 @@
+import { Link } from "expo-router";
+import { StarFull } from "@tamagui/lucide-icons";
+import { Image, ListItem, Text, XStack, YGroup, YStack } from "tamagui";
+
+import type { MenuWithRelations } from "@zotmeal/db";
+
+import { PinButton } from "~/components";
+
+type Station = MenuWithRelations["stations"][0];
+type Dish = MenuWithRelations["stations"][0]["dishes"][0];
+
+export const DishCard = ({
+ dish,
+ stationId,
+}: Readonly<{
+ dish: Dish;
+ stationId: Station["id"];
+}>) => (
+
+
+
+
+
+
+
+
+ {dish.name}
+
+
+ {dish.nutritionInfo.calories} cal
+
+
+
+
+
+
+
+ 5.0
+ {" "}
+ (10,000 reviews)
+
+
+
+
+
+
+
+
+
+);
diff --git a/apps/expo/src/app/home/_components/event-toast.tsx b/apps/expo/src/app/home/_components/event-toast.tsx
new file mode 100644
index 00000000..d0be58e8
--- /dev/null
+++ b/apps/expo/src/app/home/_components/event-toast.tsx
@@ -0,0 +1,52 @@
+import { Link } from "expo-router";
+import { ArrowRight, CalendarDays } from "@tamagui/lucide-icons";
+import { Toast, useToastState } from "@tamagui/toast";
+import { Button } from "tamagui";
+import { LinearGradient } from "tamagui/linear-gradient";
+
+
+
+export function EventToast() {
+ const currentToast = useToastState();
+ if (!currentToast || currentToast.isHandledNatively) return null;
+ return (
+
+
+ {currentToast.title}
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/expo/src/app/home/_components/period-picker.tsx b/apps/expo/src/app/home/_components/period-picker.tsx
new file mode 100644
index 00000000..f76c3d69
--- /dev/null
+++ b/apps/expo/src/app/home/_components/period-picker.tsx
@@ -0,0 +1,37 @@
+import { Picker } from "@react-native-picker/picker";
+
+import type { PeriodName } from "@zotmeal/utils";
+import { PeriodEnum } from "@zotmeal/utils";
+
+interface PeriodPickerProps {
+ periodName: PeriodName;
+ setPeriodName: (periodName: PeriodName) => void;
+ color: string;
+}
+
+export const PeriodPicker = ({
+ periodName,
+ setPeriodName,
+ color,
+}: Readonly) => (
+ {
+ setPeriodName(itemValue);
+ }}
+ >
+ {/* Create a Picker.Item for each period */}
+ {Object.entries(PeriodEnum).map(([period, id]) => (
+
+ ))}
+
+);
diff --git a/apps/expo/src/app/home/_components/station-tabs.tsx b/apps/expo/src/app/home/_components/station-tabs.tsx
new file mode 100644
index 00000000..37415bdc
--- /dev/null
+++ b/apps/expo/src/app/home/_components/station-tabs.tsx
@@ -0,0 +1,91 @@
+import { H3, ScrollView, Separator, Tabs, Text, YGroup, YStack } from "tamagui";
+
+import type { MenuWithRelations } from "@zotmeal/db";
+
+import { groupBy } from "~/utils";
+import { DishCard } from './dish-card';
+
+type Station = MenuWithRelations["stations"][0];
+type Dish = MenuWithRelations["stations"][0]["dishes"][0];
+
+export const StationTabs = ({
+ stations,
+}: Readonly<{ stations: Station[] }>) => (
+
+
+
+ {stations.map((station) => (
+
+ {station.name}
+
+ ))}
+
+
+
+ {stations.map((station) => (
+
+
+ {/* group dishes by category */}
+ {Object.entries(
+ groupBy(station.dishes, (dish) => dish.category as keyof Dish),
+ ).map(([category, dishes]) => (
+
+ ))}
+
+
+ ))}
+
+);
+
+const Category = ({
+ stationId,
+ category,
+ dishes,
+}: Readonly<{
+ stationId: Station["id"];
+ category: string;
+ dishes: Dish[];
+}>) => (
+
+
+ {category}
+
+ }>
+ {dishes.map((dish) => (
+
+ ))}
+
+
+);
diff --git a/apps/expo/src/app/home/example_menus.ts b/apps/expo/src/app/home/example_menus.ts
index e9d6595a..63648759 100644
--- a/apps/expo/src/app/home/example_menus.ts
+++ b/apps/expo/src/app/home/example_menus.ts
@@ -69,6 +69,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Breakfast Muffin",
@@ -120,6 +122,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 1",
@@ -171,6 +175,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 2",
@@ -222,6 +228,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
],
},
@@ -282,6 +290,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Breakfast Muffin",
@@ -333,6 +343,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 1",
@@ -384,6 +396,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 2",
@@ -435,6 +449,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
],
},
@@ -495,6 +511,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Breakfast Muffin",
@@ -546,6 +564,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 1",
@@ -597,6 +617,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 2",
@@ -648,6 +670,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
],
},
@@ -708,6 +732,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Breakfast Muffin",
@@ -759,6 +785,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 1",
@@ -810,6 +838,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 2",
@@ -861,6 +891,8 @@ export const brandywineData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
],
},
@@ -936,6 +968,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Breakfast Muffin",
@@ -987,6 +1021,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 1",
@@ -1038,6 +1074,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 2",
@@ -1089,6 +1127,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
],
},
@@ -1149,6 +1189,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Breakfast Muffin",
@@ -1200,6 +1242,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 1",
@@ -1251,6 +1295,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
{
name: "Side 2",
@@ -1302,6 +1348,8 @@ export const anteateryData = {
servingUnit: "g",
caloriesFromFat: "2",
},
+ menuId: '',
+ stationId: ''
},
],
},
diff --git a/apps/expo/src/app/home/index.tsx b/apps/expo/src/app/home/index.tsx
index ddb6730b..b162f9cc 100644
--- a/apps/expo/src/app/home/index.tsx
+++ b/apps/expo/src/app/home/index.tsx
@@ -1,89 +1,24 @@
import { useEffect, useState } from "react";
import { Platform } from "react-native";
-import { Link } from "expo-router";
import DateTimePicker from "@react-native-community/datetimepicker";
-import { Picker } from "@react-native-picker/picker";
-import { ArrowRight, CalendarDays, StarFull } from "@tamagui/lucide-icons";
-import { Toast, useToastController, useToastState } from "@tamagui/toast";
+import { CalendarDays } from "@tamagui/lucide-icons";
+import { useToastController } from "@tamagui/toast";
import { endOfWeek, startOfWeek } from "date-fns";
-import {
- Button,
- H3,
- Image,
- ListItem,
- ScrollView,
- Separator,
- Tabs,
- Text,
- useTheme,
- XStack,
- YGroup,
- YStack,
-} from "tamagui";
-import { LinearGradient } from "tamagui/linear-gradient";
+import { Button, Tabs, Text, useTheme, XStack } from "tamagui";
-import type { MenuWithRelations } from "@zotmeal/db";
import type { PeriodName } from "@zotmeal/utils";
-import { restaurantIdEnum } from "@zotmeal/db";
import {
getCurrentPeriodName,
getRestaurantNameById,
- PeriodEnum,
- restaurantIds,
restaurantNames,
} from "@zotmeal/utils";
-import { PinButton, RestaurantTabs } from "~/components";
-import { groupBy, useMenuStore } from "~/utils";
+import { RestaurantTabs } from "~/components";
+import { useMenuStore } from "~/utils";
import { api } from "~/utils/api";
-
-type Station = MenuWithRelations["stations"][0];
-type Dish = MenuWithRelations["stations"][0]["dishes"][0];
-
-export function EventToast() {
- const currentToast = useToastState();
- if (!currentToast || currentToast.isHandledNatively) return null;
- return (
-
-
- {currentToast.title}
-
-
-
-
-
-
-
-
- );
-}
+import { PeriodPicker } from "./_components/period-picker";
+import { StationTabs } from "./_components/station-tabs";
+import { EventToast } from './_components/event-toast';
export function Home() {
const { anteateryMenu, brandywineMenu, setAnteateryMenu, setBrandywineMenu } =
@@ -221,186 +156,3 @@ export function Home() {
);
}
-
-interface PeriodPickerProps {
- periodName: PeriodName;
- setPeriodName: (periodName: PeriodName) => void;
- color: string;
-}
-
-const PeriodPicker = ({
- periodName,
- setPeriodName,
- color,
-}: Readonly) => (
- {
- setPeriodName(itemValue);
- }}
- >
- {/* Create a Picker.Item for each period */}
- {Object.entries(PeriodEnum).map(([period, id]) => (
-
- ))}
-
-);
-
-const StationTabs = ({ stations }: Readonly<{ stations: Station[] }>) => (
-
-
-
- {stations.map((station) => (
-
- {station.name}
-
- ))}
-
-
-
- {stations.map((station) => (
-
-
- {/* group dishes by category */}
- {Object.entries(
- groupBy(station.dishes, (dish) => dish.category as keyof Dish),
- ).map(([category, dishes]) => (
-
- ))}
-
-
- ))}
-
-);
-
-const Category = ({
- stationId,
- category,
- dishes,
-}: Readonly<{
- stationId: Station["id"];
- category: string;
- dishes: Dish[];
-}>) => (
-
-
- {category}
-
- }>
- {dishes.map((dish) => (
-
- ))}
-
-
-);
-
-const DishCard = ({
- dish,
- stationId,
-}: Readonly<{
- dish: Dish;
- stationId: Station["id"];
-}>) => (
-
-
-
-
-
-
-
-
- {dish.name}
-
-
- {dish.nutritionInfo.calories} cal
-
-
-
-
-
-
-
- 5.0
- {" "}
- (10,000 reviews)
-
-
-
-
-
-
-
-
-
-);
diff --git a/apps/expo/src/utils/api.tsx b/apps/expo/src/utils/api.tsx
index 972f7297..a156264a 100644
--- a/apps/expo/src/utils/api.tsx
+++ b/apps/expo/src/utils/api.tsx
@@ -40,7 +40,7 @@ const getBaseUrl = () => {
if (Platform.OS == "android") {
return `http://10.0.2.2:3000`;
}
-
+
return `http://localhost:3000`;
};
@@ -50,12 +50,14 @@ const getBaseUrl = () => {
*/
export function TRPCProvider(props: { children: React.ReactNode }) {
const [queryClient] = useState(() => new QueryClient());
- const [trpcClient] = useState(() =>
- api.createClient({
+ const [trpcClient] = useState(() => {
+ const url = getBaseUrl();
+ console.error("hello", url);
+ return api.createClient({
links: [
httpBatchLink({
transformer: superjson,
- url: getBaseUrl(),
+ url: url,
headers() {
const headers = new Map();
headers.set("x-trpc-source", "expo-react");
@@ -69,8 +71,8 @@ export function TRPCProvider(props: { children: React.ReactNode }) {
colorMode: "ansi",
}),
],
- }),
- );
+ });
+ });
return (
diff --git a/apps/expo/src/utils/env.js b/apps/expo/src/utils/env.js
new file mode 100644
index 00000000..cd728729
--- /dev/null
+++ b/apps/expo/src/utils/env.js
@@ -0,0 +1,12 @@
+import { z } from "zod";
+
+const envSchema = z.object({
+ API_URL: z.string(),
+ CLERK_PUBLISHABLE_KEY: z.string(),
+});
+const env = envSchema.parse({
+ API_URL: process.env.EXPO_PUBLIC_API_URL,
+ CLERK_PUBLISHABLE_KEY: process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY,
+});
+
+export { env };
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..690ef1cf
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,19 @@
+# Use postgres/example user/password credentials
+version: "3.9"
+
+services:
+ db:
+ image: postgres
+ restart: always
+ # or set shared memory limit when deploy via swarm stack
+ environment:
+ POSTGRES_USER: admin
+ POSTGRES_PASSWORD: admin
+ POSTGRES_DB: zotmeal
+ volumes:
+ - db_data:/var/lib/postgresql/data
+ ports:
+ - 5433:5432
+
+volumes:
+ db_data:
diff --git a/packages/api/.env.development b/packages/api/.env.development
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/api/package.json b/packages/api/package.json
index c04ea414..bf028b05 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -10,8 +10,6 @@
}
},
"scripts": {
- "dev": "echo 'Add dev script here'",
- "build": "echo 'Add build script here'",
"with-env": "dotenv -e ../../.env --",
"test": "pnpm with-env vitest run --config vitest.config.ts | pino-pretty",
"lint": "eslint ."
diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts
index c8cf3116..5e937ffb 100644
--- a/packages/api/src/index.ts
+++ b/packages/api/src/index.ts
@@ -34,7 +34,6 @@ export * from "./menus";
export * from "./notifications";
export * from "./restaurants";
export * from "./schedules";
-export * from "./services";
export { createTRPCContext, appRouter, createCaller };
export type { AppRouter, RouterInputs, RouterOutputs };
diff --git a/packages/api/src/services/getWeekInfo.ts b/packages/api/src/schedules/getWeekInfo.ts
similarity index 100%
rename from packages/api/src/services/getWeekInfo.ts
rename to packages/api/src/schedules/getWeekInfo.ts
diff --git a/packages/api/src/schedules/index.ts b/packages/api/src/schedules/index.ts
index 020000ce..e9041696 100644
--- a/packages/api/src/schedules/index.ts
+++ b/packages/api/src/schedules/index.ts
@@ -1 +1,3 @@
-export * from "./services/schedule";
+export * from "./getWeekInfo";
+export * from "./schedule";
+export * from "./updateDaily";
diff --git a/packages/api/src/schedules/procedures/getSchedule.ts b/packages/api/src/schedules/procedures/getSchedule.ts
index ad3d35f4..ac1bf464 100644
--- a/packages/api/src/schedules/procedures/getSchedule.ts
+++ b/packages/api/src/schedules/procedures/getSchedule.ts
@@ -1,7 +1,9 @@
import { TRPCError } from "@trpc/server";
import { publicProcedure } from "../../trpc";
-import { getSchedule, GetScheduleSchema } from "../services/schedule";
+import { getSchedule, GetScheduleSchema } from "../schedule";
+
+// import { getSchedule, GetScheduleSchema } from
export const getScheduleProcedure = publicProcedure
.input(GetScheduleSchema)
diff --git a/packages/api/src/schedules/services/schedule.test.ts b/packages/api/src/schedules/schedule.test.ts
similarity index 100%
rename from packages/api/src/schedules/services/schedule.test.ts
rename to packages/api/src/schedules/schedule.test.ts
diff --git a/packages/api/src/schedules/services/schedule.ts b/packages/api/src/schedules/schedule.ts
similarity index 100%
rename from packages/api/src/schedules/services/schedule.ts
rename to packages/api/src/schedules/schedule.ts
diff --git a/packages/api/src/services/updateDaily.ts b/packages/api/src/schedules/updateDaily.ts
similarity index 92%
rename from packages/api/src/services/updateDaily.ts
rename to packages/api/src/schedules/updateDaily.ts
index 03950135..c8a2ce2d 100644
--- a/packages/api/src/services/updateDaily.ts
+++ b/packages/api/src/schedules/updateDaily.ts
@@ -5,9 +5,9 @@ import { RestaurantSchema } from "@zotmeal/db";
import { periodNames } from "@zotmeal/utils";
import { DateRegex } from "@zotmeal/validators";
-import type { GetMenuParams } from "..";
-import { getCampusDish, parseCampusDish } from "..";
+import type { GetMenuParams } from "../menus";
import { logger } from "../../logger";
+import { getCampusDish, parseCampusDish } from "../menus";
export const UpdateDailySchema = z.object({
date: DateRegex,
diff --git a/packages/api/src/services/index.ts b/packages/api/src/services/index.ts
deleted file mode 100644
index 1488ce3d..00000000
--- a/packages/api/src/services/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from "./getWeekInfo";
-export * from "./updateDaily";
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b0d1c4fc..cd40d78d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -32,6 +32,9 @@ importers:
apps/expo:
dependencies:
+ '@clerk/clerk-expo':
+ specifier: ^1.1.4
+ version: 1.1.4(expo-auth-session@5.5.2)(expo-web-browser@13.0.3)(react-dom@18.2.0)(react-native@0.73.7)(react@18.2.0)
'@expo/metro-config':
specifier: ^0.17.6
version: 0.17.7(@react-native/babel-preset@0.74.81)
@@ -143,6 +146,9 @@ importers:
tamagui:
specifier: ^1.94.4
version: 1.95.1(react-dom@18.2.0)(react-native-web@0.19.11)(react-native@0.73.7)(react@18.2.0)
+ zod:
+ specifier: ^3.22.4
+ version: 3.23.4
zustand:
specifier: ^4.5.2
version: 4.5.2(react@18.2.0)
@@ -2625,6 +2631,106 @@ packages:
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
dev: false
+ /@clerk/clerk-expo@1.1.4(expo-auth-session@5.5.2)(expo-web-browser@13.0.3)(react-dom@18.2.0)(react-native@0.73.7)(react@18.2.0):
+ resolution: {integrity: sha512-h3iALBqerRIGXRR6a3ktfqAbFyyeEnbal45sGsEghYQ1lPZnHf042eqvw2xqEbVTSA5UnYoi+zwpOkdYMwtpGg==}
+ engines: {node: '>=18.17.0'}
+ peerDependencies:
+ expo-auth-session: '>=4'
+ expo-web-browser: '>=12.5.0'
+ react: '>=18'
+ react-dom: '>=18'
+ dependencies:
+ '@clerk/clerk-js': 5.4.0(react-dom@18.2.0)(react@18.2.0)
+ '@clerk/clerk-react': 5.1.0(react-dom@18.2.0)(react@18.2.0)
+ '@clerk/shared': 2.1.1(react-dom@18.2.0)(react@18.2.0)
+ base-64: 1.0.0
+ expo-auth-session: 5.5.2(expo@50.0.17)
+ expo-web-browser: 13.0.3(expo@50.0.17)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-native-url-polyfill: 2.0.0(react-native@0.73.7)
+ tslib: 2.4.1
+ transitivePeerDependencies:
+ - '@types/react'
+ - react-native
+ dev: false
+
+ /@clerk/clerk-js@5.4.0(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-eUP+jRuHfa7vvn/Ffz5c/FwRi48JWVlcYKAwbZcujq4ZjkkYLVbyg3czn84UdEeEDLrzn/tYZlefWrq2EV+I+w==}
+ engines: {node: '>=18.17.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ dependencies:
+ '@clerk/localizations': 2.4.2
+ '@clerk/shared': 2.1.1(react-dom@18.2.0)(react@18.2.0)
+ '@clerk/types': 4.4.0
+ '@emotion/cache': 11.11.0
+ '@emotion/react': 11.11.1(react@18.2.0)
+ '@floating-ui/react': 0.25.4(react-dom@18.2.0)(react@18.2.0)
+ '@formkit/auto-animate': 0.8.2
+ '@zxcvbn-ts/core': 3.0.4
+ '@zxcvbn-ts/language-common': 3.0.4
+ browser-tabs-lock: 1.2.15
+ copy-to-clipboard: 3.3.3
+ core-js: 3.26.1
+ dequal: 2.0.3
+ qrcode.react: 3.1.0(react@18.2.0)
+ qs: 6.11.0
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ regenerator-runtime: 0.13.11
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: false
+
+ /@clerk/clerk-react@5.1.0(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-drc/V0J+h9Jsz32QsL7WmuUhhhkU21KbNz5mwLPbSzBMoLg43sx6aRjJGCfBQYPxPsuFZWDlKoJhX6LZ8yxHcA==}
+ engines: {node: '>=18.17.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ dependencies:
+ '@clerk/shared': 2.1.1(react-dom@18.2.0)(react@18.2.0)
+ '@clerk/types': 4.4.0
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ tslib: 2.4.1
+ dev: false
+
+ /@clerk/localizations@2.4.2:
+ resolution: {integrity: sha512-bDxHZ6YG+oHB03h0fl7jlOmwTwwtsrB9KFVepwI9L7vJixPNFRdnGcCgAcOFZ+E+dn6EBY/W2RgP3hbVRdWV8g==}
+ engines: {node: '>=18.17.0'}
+ dev: false
+
+ /@clerk/shared@2.1.1(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-cj8VZdEtuqghHBFApl2fFgBtjYZ0NN085uXPqSvdBS62EIKpSENCqm7Ug1H5R2WSuCIv819ZZEBxPiYZM0TNFg==}
+ engines: {node: '>=18.17.0'}
+ requiresBuild: true
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ dependencies:
+ glob-to-regexp: 0.4.1
+ js-cookie: 3.0.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ std-env: 3.7.0
+ swr: 2.2.0(react@18.2.0)
+ dev: false
+
+ /@clerk/types@4.4.0:
+ resolution: {integrity: sha512-OaT02uLG1P/jBFNyoPM3n9nLdV4H0etTpa/l3iTW4IgOLiAINToLpMOvEpWzKWUq9nvmOouZlBzPVMozu7dwDg==}
+ engines: {node: '>=18.17.0'}
+ dependencies:
+ csstype: 3.1.1
+ dev: false
+
/@cspotcode/source-map-support@0.8.1:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
@@ -2638,6 +2744,36 @@ packages:
'@types/hammerjs': 2.0.45
dev: false
+ /@emotion/babel-plugin@11.11.0:
+ resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==}
+ dependencies:
+ '@babel/helper-module-imports': 7.24.3
+ '@babel/runtime': 7.24.4
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/serialize': 1.1.4
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.9.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.2.0
+ dev: false
+
+ /@emotion/cache@11.11.0:
+ resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==}
+ dependencies:
+ '@emotion/memoize': 0.8.1
+ '@emotion/sheet': 1.2.2
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ stylis: 4.2.0
+ dev: false
+
+ /@emotion/hash@0.9.1:
+ resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
+ dev: false
+
/@emotion/is-prop-valid@0.8.8:
resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==}
requiresBuild: true
@@ -2652,6 +2788,64 @@ packages:
dev: false
optional: true
+ /@emotion/memoize@0.8.1:
+ resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
+ dev: false
+
+ /@emotion/react@11.11.1(react@18.2.0):
+ resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/cache': 11.11.0
+ '@emotion/serialize': 1.1.4
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ hoist-non-react-statics: 3.3.2
+ react: 18.2.0
+ dev: false
+
+ /@emotion/serialize@1.1.4:
+ resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==}
+ dependencies:
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/unitless': 0.8.1
+ '@emotion/utils': 1.2.1
+ csstype: 3.1.3
+ dev: false
+
+ /@emotion/sheet@1.2.2:
+ resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
+ dev: false
+
+ /@emotion/unitless@0.8.1:
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
+ dev: false
+
+ /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0):
+ resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@emotion/utils@1.2.1:
+ resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
+ dev: false
+
+ /@emotion/weak-memoize@0.3.1:
+ resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
+ dev: false
+
/@esbuild-kit/core-utils@3.3.2:
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
dependencies:
@@ -3443,10 +3637,36 @@ packages:
- supports-color
dev: false
+ /@expo/config-plugins@8.0.4:
+ resolution: {integrity: sha512-Hi+xuyNWE2LT4LVbGttHJgl9brnsdWAhEB42gWKb5+8ae86Nr/KwUBQJsJppirBYTeLjj5ZlY0glYnAkDa2jqw==}
+ dependencies:
+ '@expo/config-types': 51.0.0
+ '@expo/json-file': 8.3.1
+ '@expo/plist': 0.1.1
+ '@expo/sdk-runtime-versions': 1.0.0
+ chalk: 4.1.2
+ debug: 4.3.4(supports-color@8.1.1)
+ find-up: 5.0.0
+ getenv: 1.0.0
+ glob: 7.1.6
+ resolve-from: 5.0.0
+ semver: 7.6.0
+ slash: 3.0.0
+ slugify: 1.6.6
+ xcode: 3.0.1
+ xml2js: 0.6.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/@expo/config-types@50.0.1:
resolution: {integrity: sha512-EZHMgzkWRB9SMHO1e9m8s+OMahf92XYTnsCFjxhSfcDrcEoSdFPyJWDJVloHZPMGhxns7Fi2+A+bEVN/hD4NKA==}
dev: false
+ /@expo/config-types@51.0.0:
+ resolution: {integrity: sha512-acn03/u8mQvBhdTQtA7CNhevMltUhbSrpI01FYBJwpVntufkU++ncQujWKlgY/OwIajcfygk1AY4xcNZ5ImkRA==}
+ dev: false
+
/@expo/config@8.5.6:
resolution: {integrity: sha512-wF5awSg6MNn1cb1lIgjnhOn5ov2TEUTnkAVCsOl0QqDwcP+YIerteSFwjn9V52UZvg58L+LKxpCuGbw5IHavbg==}
dependencies:
@@ -3465,6 +3685,24 @@ packages:
- supports-color
dev: false
+ /@expo/config@9.0.2:
+ resolution: {integrity: sha512-BKQ4/qBf3OLT8hHp5kjObk2vxwoRQ1yYQBbG/OM9Jdz32yYtrU8opTbKRAxfZEWH5i3ZHdLrPdC1rO0I6WxtTw==}
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ '@expo/config-plugins': 8.0.4
+ '@expo/config-types': 51.0.0
+ '@expo/json-file': 8.3.1
+ getenv: 1.0.0
+ glob: 7.1.6
+ require-from-string: 2.0.2
+ resolve-from: 5.0.0
+ semver: 7.6.0
+ slugify: 1.6.6
+ sucrase: 3.34.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/@expo/devcert@1.1.0:
resolution: {integrity: sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA==}
dependencies:
@@ -3743,6 +3981,19 @@ packages:
react-native: 0.73.7(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0)
dev: false
+ /@floating-ui/react@0.25.4(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-lWRQ/UiTvSIBxohn0/2HFHEmnmOVRjl7j6XcRJuLH0ls6f/9AyHMWVzkAJFuwx0n9gaEeCmg9VccCSCJzbEJig==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+ dependencies:
+ '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0)
+ '@floating-ui/utils': 0.1.6
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ tabbable: 6.2.0
+ dev: false
+
/@floating-ui/react@0.26.12(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-D09o62HrWdIkstF2kGekIKAC0/N/Dl6wo3CQsnLcOmO3LkW6Ik8uIb3kw8JYkwxNCcg+uJ2bpWUiIijTBep05w==}
peerDependencies:
@@ -3756,10 +4007,18 @@ packages:
tabbable: 6.2.0
dev: false
+ /@floating-ui/utils@0.1.6:
+ resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==}
+ dev: false
+
/@floating-ui/utils@0.2.1:
resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==}
dev: false
+ /@formkit/auto-animate@0.8.2:
+ resolution: {integrity: sha512-SwPWfeRa5veb1hOIBMdzI+73te5puUBHmqqaF1Bu7FjvxlYSz/kJcZKSa9Cg60zL0uRNeJL2SbRxV6Jp6Q1nFQ==}
+ dev: false
+
/@gar/promisify@1.1.3:
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
dev: false
@@ -7844,6 +8103,10 @@ packages:
dependencies:
undici-types: 5.26.5
+ /@types/parse-json@4.0.2:
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+ dev: false
+
/@types/pg@8.11.5:
resolution: {integrity: sha512-2xMjVviMxneZHDHX5p5S6tsRRs7TpDHeeK7kTTMe/kAC/mRRNjWHjZg0rkiY+e17jXSZV3zJYDxXV8Cy72/Vuw==}
dependencies:
@@ -8135,6 +8398,16 @@ packages:
engines: {node: '>=10.0.0'}
dev: false
+ /@zxcvbn-ts/core@3.0.4:
+ resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==}
+ dependencies:
+ fastest-levenshtein: 1.0.16
+ dev: false
+
+ /@zxcvbn-ts/language-common@3.0.4:
+ resolution: {integrity: sha512-viSNNnRYtc7ULXzxrQIVUNwHAPSXRtoIwy/Tq4XQQdIknBzw4vz36lQLF6mvhMlTIlpjoN/Z1GFu/fwiAlUSsw==}
+ dev: false
+
/@zxing/text-encoding@0.9.0:
resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
requiresBuild: true
@@ -8663,6 +8936,15 @@ packages:
'@babel/core': 7.24.4
dev: false
+ /babel-plugin-macros@3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+ dependencies:
+ '@babel/runtime': 7.24.4
+ cosmiconfig: 7.1.0
+ resolve: 1.22.8
+ dev: false
+
/babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.4):
resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==}
peerDependencies:
@@ -8821,6 +9103,10 @@ packages:
dev: false
optional: true
+ /base-64@1.0.0:
+ resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
+ dev: false
+
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
@@ -8944,6 +9230,13 @@ packages:
dependencies:
fill-range: 7.0.1
+ /browser-tabs-lock@1.2.15:
+ resolution: {integrity: sha512-J8K9vdivK0Di+b8SBdE7EZxDr88TnATing7XoLw6+nFkXMQ6sVBh92K3NQvZlZU91AIkFRi0w3sztk5Z+vsswA==}
+ requiresBuild: true
+ dependencies:
+ lodash: 4.17.21
+ dev: false
+
/browserslist@4.23.0:
resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -9638,6 +9931,10 @@ packages:
safe-buffer: 5.2.1
dev: false
+ /convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+ dev: false
+
/convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -9661,6 +9958,12 @@ packages:
dependencies:
is-what: 4.1.16
+ /copy-to-clipboard@3.3.3:
+ resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
+ dependencies:
+ toggle-selection: 1.0.6
+ dev: false
+
/core-js-compat@3.37.0:
resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==}
dependencies:
@@ -9671,6 +9974,11 @@ packages:
requiresBuild: true
dev: true
+ /core-js@3.26.1:
+ resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==}
+ requiresBuild: true
+ dev: false
+
/core-js@3.37.0:
resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==}
requiresBuild: true
@@ -9690,6 +9998,17 @@ packages:
parse-json: 4.0.0
dev: false
+ /cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+ dev: false
+
/cpu-features@0.0.9:
resolution: {integrity: sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==}
engines: {node: '>=10.0.0'}
@@ -9799,6 +10118,10 @@ packages:
engines: {node: '>=4'}
hasBin: true
+ /csstype@3.1.1:
+ resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
+ dev: false
+
/csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -11153,6 +11476,14 @@ packages:
strip-final-newline: 3.0.0
dev: false
+ /expo-application@5.9.1(expo@50.0.17):
+ resolution: {integrity: sha512-uAfLBNZNahnDZLRU41ZFmNSKtetHUT9Ua557/q189ua0AWV7pQjoVAx49E4953feuvqc9swtU3ScZ/hN1XO/FQ==}
+ peerDependencies:
+ expo: '*'
+ dependencies:
+ expo: 50.0.17(@babel/core@7.24.4)(@react-native/babel-preset@0.74.81)
+ dev: false
+
/expo-asset@9.0.2(expo@50.0.17):
resolution: {integrity: sha512-PzYKME1MgUOoUvwtdzhAyXkjXOXGiSYqGKG/MsXwWr0Ef5wlBaBm2DCO9V6KYbng5tBPFu6hTjoRNil1tBOSow==}
dependencies:
@@ -11167,6 +11498,20 @@ packages:
- supports-color
dev: false
+ /expo-auth-session@5.5.2(expo@50.0.17):
+ resolution: {integrity: sha512-fgqrNz9FhCl/kNyU2Vy2AmLWk+X7vmgiGN2KVUgB8yLHl/tPogYLpNOiqFl/pMLMveoKjPpVOVfbz3RTJHJoTg==}
+ dependencies:
+ expo-application: 5.9.1(expo@50.0.17)
+ expo-constants: 16.0.1(expo@50.0.17)
+ expo-crypto: 13.0.2(expo@50.0.17)
+ expo-linking: 6.3.1(expo@50.0.17)
+ expo-web-browser: 13.0.3(expo@50.0.17)
+ invariant: 2.2.4
+ transitivePeerDependencies:
+ - expo
+ - supports-color
+ dev: false
+
/expo-constants@15.4.6(expo@50.0.17):
resolution: {integrity: sha512-vizE69dww2Vl0PTWWvDmK0Jo2/J+WzdcMZlA05YEnEYofQuhKxTVsiuipf79mSOmFavt4UQYC1UnzptzKyfmiQ==}
peerDependencies:
@@ -11178,6 +11523,26 @@ packages:
- supports-color
dev: false
+ /expo-constants@16.0.1(expo@50.0.17):
+ resolution: {integrity: sha512-s6aTHtglp926EsugWtxN7KnpSsE9FCEjb7CgEjQQ78Gpu4btj4wB+IXot2tlqNwqv+x7xFe5veoPGfJDGF/kVg==}
+ peerDependencies:
+ expo: '*'
+ dependencies:
+ '@expo/config': 9.0.2
+ expo: 50.0.17(@babel/core@7.24.4)(@react-native/babel-preset@0.74.81)
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /expo-crypto@13.0.2(expo@50.0.17):
+ resolution: {integrity: sha512-7f/IMPYJZkBM21LNEMXGrNo/0uXSVfZTwufUdpNKedJR0fm5fH4DCSN79ZddlV26nF90PuXjK2inIbI6lb0qRA==}
+ peerDependencies:
+ expo: '*'
+ dependencies:
+ base64-js: 1.5.1
+ expo: 50.0.17(@babel/core@7.24.4)(@react-native/babel-preset@0.74.81)
+ dev: false
+
/expo-file-system@16.0.9(expo@50.0.17):
resolution: {integrity: sha512-3gRPvKVv7/Y7AdD9eHMIdfg5YbUn2zbwKofjsloTI5sEC57SLUFJtbLvUCz9Pk63DaSQ7WIE1JM0EASyvuPbuw==}
peerDependencies:
@@ -11221,6 +11586,16 @@ packages:
- supports-color
dev: false
+ /expo-linking@6.3.1(expo@50.0.17):
+ resolution: {integrity: sha512-xuZCntSBGWCD/95iZ+mTUGTwHdy8Sx+immCqbUBxdvZ2TN61P02kKg7SaLS8A4a/hLrSCwrg5tMMwu5wfKr35g==}
+ dependencies:
+ expo-constants: 16.0.1(expo@50.0.17)
+ invariant: 2.2.4
+ transitivePeerDependencies:
+ - expo
+ - supports-color
+ dev: false
+
/expo-modules-autolinking@1.10.3:
resolution: {integrity: sha512-pn4n2Dl4iRh/zUeiChjRIe1C7EqOw1qhccr85viQV7W6l5vgRpY0osE51ij5LKg/kJmGRcJfs12+PwbdTplbKw==}
hasBin: true
@@ -11314,6 +11689,14 @@ packages:
resolution: {integrity: sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==}
dev: false
+ /expo-web-browser@13.0.3(expo@50.0.17):
+ resolution: {integrity: sha512-HXb7y82ApVJtqk8tManyudtTrCtx8xcUnVzmJECeHCB0SsWSQ+penVLZxJkcyATWoJOsFMnfVSVdrTcpKKGszQ==}
+ peerDependencies:
+ expo: '*'
+ dependencies:
+ expo: 50.0.17(@babel/core@7.24.4)(@react-native/babel-preset@0.74.81)
+ dev: false
+
/expo@50.0.17(@babel/core@7.24.4)(@react-native/babel-preset@0.74.81):
resolution: {integrity: sha512-eD8Nh10BgVwecU7EVyogx7X314ajxVpJdFwkXhi341AD61S2WPX31NMHW82XGXas6dbDjdbgtaOMo5H/vylB7Q==}
hasBin: true
@@ -11960,6 +12343,10 @@ packages:
dependencies:
is-glob: 4.0.3
+ /glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+ dev: false
+
/glob@10.3.10:
resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -13013,6 +13400,11 @@ packages:
engines: {node: '>=10'}
dev: false
+ /js-cookie@3.0.1:
+ resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==}
+ engines: {node: '>=12'}
+ dev: false
+
/js-string-escape@1.0.1:
resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
engines: {node: '>= 0.8'}
@@ -13118,6 +13510,10 @@ packages:
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
dev: false
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ dev: false
+
/json-refs@3.0.15(supports-color@8.1.1):
resolution: {integrity: sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==}
engines: {node: '>=0.8'}
@@ -14787,6 +15183,16 @@ packages:
json-parse-better-errors: 1.0.2
dev: false
+ /parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.24.2
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+ dev: false
+
/parse-png@2.1.0:
resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==}
engines: {node: '>=10'}
@@ -15466,6 +15872,21 @@ packages:
hasBin: true
dev: false
+ /qrcode.react@3.1.0(react@18.2.0):
+ resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.6
+ dev: false
+
/qs@6.12.1:
resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==}
engines: {node: '>=0.6'}
@@ -15711,6 +16132,15 @@ packages:
react-native: 0.73.7(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0)
dev: false
+ /react-native-url-polyfill@2.0.0(react-native@0.73.7):
+ resolution: {integrity: sha512-My330Do7/DvKnEvwQc0WdcBnFPploYKp9CYlefDXzIdEaA+PAhDYllkvGeEroEzvc4Kzzj2O4yVdz8v6fjRvhA==}
+ peerDependencies:
+ react-native: '*'
+ dependencies:
+ react-native: 0.73.7(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0)
+ whatwg-url-without-unicode: 8.0.0-3
+ dev: false
+
/react-native-web-internals@1.95.1:
resolution: {integrity: sha512-M9pPiATeCtUMg2TELxdM/3nha6TiH6NblIwBxhCioNfSbh3IBjtWoSPrOgr2tBz06Ju6SfMDGc98Uj4yaqmKCw==}
dependencies:
@@ -17118,6 +17548,10 @@ packages:
resolution: {integrity: sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==}
dev: false
+ /stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
+ dev: false
+
/sucrase@3.34.0:
resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
engines: {node: '>=8'}
@@ -17227,6 +17661,15 @@ packages:
upper-case: 1.1.3
dev: true
+ /swr@2.2.0(react@18.2.0):
+ resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==}
+ peerDependencies:
+ react: ^16.11.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ use-sync-external-store: 1.2.0(react@18.2.0)
+ dev: false
+
/tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
dev: false
@@ -17597,6 +18040,10 @@ packages:
dependencies:
is-number: 7.0.0
+ /toggle-selection@1.0.6:
+ resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
+ dev: false
+
/toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
@@ -17692,6 +18139,10 @@ packages:
resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
dev: false
+ /tslib@2.4.1:
+ resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
+ dev: false
+
/tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
@@ -18566,6 +19017,11 @@ packages:
resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==}
dev: false
+ /yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+ dev: false
+
/yaml@2.4.1:
resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==}
engines: {node: '>= 14'}