diff --git a/frontend/.vscode/settings.json b/frontend/.vscode/settings.json
new file mode 100644
index 0000000..9e5a22b
--- /dev/null
+++ b/frontend/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "WillLuke.nextjs.addTypesOnSave": true,
+ "WillLuke.nextjs.hasPrompted": true
+}
diff --git a/frontend/app/api/auth/[...nextauth]/authOptions.ts b/frontend/app/api/auth/[...nextauth]/authOptions.ts
index 5062f56..44b72bc 100644
--- a/frontend/app/api/auth/[...nextauth]/authOptions.ts
+++ b/frontend/app/api/auth/[...nextauth]/authOptions.ts
@@ -39,9 +39,9 @@ export const authOptions: NextAuthOptions = {
params: {
prompt: "consent",
access_type: "offline",
- response_type: "code"
- }
- }
+ response_type: "code",
+ },
+ },
}),
DiscordProvider({
clientId: process.env.DISCORD_CLIENT_ID as string,
@@ -69,13 +69,13 @@ export const authOptions: NextAuthOptions = {
// };
// },
authorization: {
- params: { scope: 'openid profile email' },
+ params: { scope: "openid profile email" },
},
- issuer: 'https://www.linkedin.com',
- jwks_endpoint: 'https://www.linkedin.com/oauth/openid/jwks',
+ issuer: "https://www.linkedin.com",
+ jwks_endpoint: "https://www.linkedin.com/oauth/openid/jwks",
profile(profile, tokens) {
const defaultImage =
- 'https://cdn-icons-png.flaticon.com/512/174/174857.png';
+ "https://cdn-icons-png.flaticon.com/512/174/174857.png";
return {
id: profile.sub,
name: profile.name,
@@ -94,8 +94,8 @@ export const authOptions: NextAuthOptions = {
// // Find your user in the database using MongoDBAdapter
// const client = await clientPromise;
// const users = client.db("auth").collection("users");
-
- // // Find user with the email
+
+ // // Find user with the email
// const result = await users.findOne({
// email: credentials?.email,
// });
@@ -148,4 +148,4 @@ export const authOptions: NextAuthOptions = {
return session;
},
},
-};
\ No newline at end of file
+};
diff --git a/frontend/app/api/auth/[...nextauth]/route.ts b/frontend/app/api/auth/[...nextauth]/route.ts
index 966a375..a4735df 100644
--- a/frontend/app/api/auth/[...nextauth]/route.ts
+++ b/frontend/app/api/auth/[...nextauth]/route.ts
@@ -4,4 +4,3 @@ import { authOptions } from "./authOptions";
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
-
diff --git a/frontend/app/api/user/route.ts b/frontend/app/api/user/route.ts
index 946098e..22b4d35 100644
--- a/frontend/app/api/user/route.ts
+++ b/frontend/app/api/user/route.ts
@@ -1,28 +1,35 @@
-import type { NextApiRequest, NextApiResponse } from 'next';
-import prisma from '@/lib/prisma'; // adjust the import path as needed
-import { getSession, useSession } from 'next-auth/react'
-import { NextRequest } from 'next/server';
-import useSWR from 'swr';
+import type { NextApiRequest, NextApiResponse } from "next";
+import prisma from "@/lib/prisma"; // adjust the import path as needed
+import { getSession, useSession } from "next-auth/react";
+import { NextRequest } from "next/server";
+import useSWR from "swr";
-const fetcher = (url: string) => fetch(url, { next: { revalidate: 60 }}).then((res) => res.json())
+const fetcher = (url: string) =>
+ fetch(url, { next: { revalidate: 60 } }).then((res) => res.json());
export async function GET(request: NextRequest) {
- const session = request.nextUrl.searchParams.get('userId')
- const { data } = useSWR(`/api/auth/session`, fetcher);
- console.log(data)
-
+ const userId = request.nextUrl.searchParams.get("userId");
+ const email = request.nextUrl.searchParams.get("email");
+ const name = request.nextUrl.searchParams.get("name");
+
+ const session = { userId: userId, name: name, email: email };
+
try {
if (session) {
- const provRaw = await prisma.account.findMany({ select: { provider: true } }, { where: {id: session }})
-
- const provArray = provRaw.map((prov: {provider: string}) => {
- return prov.provider
- })
- return Response.json(provArray);
+ const provRaw = await prisma.account.findMany(
+ { select: { provider: true } },
+ { where: { id: session.userId } }
+ );
+
+ const provArray = provRaw.map((prov: { provider: string }) => {
+ return prov.provider;
+ });
+
+ return Response.json({ name: name, providers: provArray, email: email });
} else {
- return Response.json({ message: 'Unauthorized' })
+ return Response.json(session);
}
} catch (error) {
- return Response.json({ message: 'Server error' });
+ return Response.json({ message: "Server error" });
}
-}
\ No newline at end of file
+}
diff --git a/frontend/app/dashboard/page.tsx b/frontend/app/dashboard/page.tsx
index 6717a5c..2ffd9fb 100644
--- a/frontend/app/dashboard/page.tsx
+++ b/frontend/app/dashboard/page.tsx
@@ -14,28 +14,34 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
-import {
- Tabs,
- TabsContent,
- TabsList,
- TabsTrigger,
-} from "@/components/ui/tabs";
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { redirect } from "next/navigation";
-import { Activity, Book, CalendarDays, Clock4, FileText, ShieldAlert, TableProperties } from "lucide-react";
+import {
+ Activity,
+ Book,
+ CalendarDays,
+ Clock4,
+ FileText,
+ ShieldAlert,
+ TableProperties,
+} from "lucide-react";
export const metadata: Metadata = {
title: "Dashboard",
description: "Example dashboard app built using the components.",
-}
+};
export default async function DashboardPage() {
const session = await getServerSession(authOptions);
- if (!session) { redirect('/api/auth/signin') }
+ if (!session) {
+ redirect("/api/auth/signin");
+ }
- return (session && (
-
-
- {/*
+ return (
+ session && (
+
+
+ {/*
@@ -45,112 +51,120 @@ export default async function DashboardPage() {
*/}
-
-
-
Marketplace Listings Dashboard
-
-
-
Download
+
+
+
+ Marketplace Listings Dashboard
+
+
+
+ Download
+
+
+
+ Overview
+
+ Analytics
+
+
+ Reports
+
+
+ Notifications
+
+
+ Search
+
+
+
+
+
+
+
+ Total Listings
+
+
+
+
+ 286
+
+ +1098% from last month
+
+
+
+
+
+
+ Flagged Listings
+
+
+
+
+ +0
+
+ +0% from last month
+
+
+
+
+
+
+ New Listings
+
+
+
+
+ +243
+
+ +876% from last month
+
+
+
+
+
+
+ Listings Today
+
+
+
+
+ +36
+
+ +36 from last 24 hours
+
+
+
+
+
+
+
+ Overview
+
+
+
+
+
+
+
+ Recent Listings
+
+ 8 listings flagged in the last 24 hours
+
+
+
+
+
+
+
+
+
-
-
- Overview
-
- Analytics
-
-
- Reports
-
-
- Notifications
-
-
- Search
-
-
-
-
-
-
-
- Total Listings
-
-
-
-
- 286
-
- +1098% from last month
-
-
-
-
-
-
- Flagged Listings
-
-
-
-
- +0
-
- +0% from last month
-
-
-
-
-
- New Listings
-
-
-
- +243
-
- +876% from last month
-
-
-
-
-
-
- Listings Today
-
-
-
-
- +36
-
- +36 from last 24 hours
-
-
-
-
-
-
-
- Overview
-
-
-
-
-
-
-
- Recent Listings
-
- 8 listings flagged in the last 24 hours
-
-
-
-
-
-
-
-
-
-
- ))
-}
\ No newline at end of file
+ )
+ );
+}
diff --git a/frontend/app/error.tsx b/frontend/app/error.tsx
index dcb5f93..189192f 100644
--- a/frontend/app/error.tsx
+++ b/frontend/app/error.tsx
@@ -1,4 +1,4 @@
-'use client' // Error components must be Client Components
+"use client"; // Error components must be Client Components
import Meta, { defaultMetaProps } from "@/components/layout/meta";
import { useEffect } from "react";
diff --git a/frontend/app/globals.css b/frontend/app/globals.css
index f994691..7c1aa0a 100644
--- a/frontend/app/globals.css
+++ b/frontend/app/globals.css
@@ -1,7 +1,7 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
-
+
@layer base {
:root {
--background: 0 0% 100%;
@@ -9,87 +9,89 @@
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
-
+
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
-
+
--primary: 222.2 47.4% 11.2%;
--primary-foreground: 210 40% 98%;
-
+
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
-
+
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
-
+
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
-
+
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 222.2 84% 4.9%;
-
+
--radius: 0.5rem;
}
-
+
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
-
+
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
-
+
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
-
+
--primary: 210 40% 98%;
--primary-foreground: 222.2 47.4% 11.2%;
-
+
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
-
+
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
-
+
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
-
+
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
-
+
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 212.7 26.8% 83.9%;
}
}
-
+
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
- font-feature-settings: "rlig" 1, "calt" 1;
- }
- }
-
- @layer utilities {
- .step {
- counter-increment: step;
- }
-
- .step:before {
- @apply absolute w-9 h-9 bg-muted rounded-full font-mono font-medium text-center text-base inline-flex items-center justify-center -indent-px border-4 border-background;
- @apply ml-[-50px] mt-[-4px];
- content: counter(step);
- }
- }
-
- @media (max-width: 640px) {
- .container {
- @apply px-4;
+ font-feature-settings:
+ "rlig" 1,
+ "calt" 1;
+ }
+}
+
+@layer utilities {
+ .step {
+ counter-increment: step;
}
-}
\ No newline at end of file
+
+ .step:before {
+ @apply absolute w-9 h-9 bg-muted rounded-full font-mono font-medium text-center text-base inline-flex items-center justify-center -indent-px border-4 border-background;
+ @apply ml-[-50px] mt-[-4px];
+ content: counter(step);
+ }
+}
+
+@media (max-width: 640px) {
+ .container {
+ @apply px-4;
+ }
+}
diff --git a/frontend/app/middleware.ts b/frontend/app/middleware.ts
index a43667a..51c0aec 100644
--- a/frontend/app/middleware.ts
+++ b/frontend/app/middleware.ts
@@ -1,14 +1,14 @@
-import type { NextRequest } from 'next/server';
+import type { NextRequest } from "next/server";
export function middleware(request: NextRequest) {
- if (request.nextUrl.pathname.startsWith('/profile')) {
- // Add /profile specific logics
+ if (request.nextUrl.pathname.startsWith("/settings")) {
+ // Add /settings specific logics
}
- if (request.nextUrl.pathname.startsWith('/dashboard')) {
+ if (request.nextUrl.pathname.startsWith("/dashboard")) {
// Add /dashboard specific logics
}
}
export const config = {
- matcher: ['/profile/:path*', '/dashboard/:path*'],
-}
\ No newline at end of file
+ matcher: ["/settings/:path*", "/dashboard/:path*"],
+};
diff --git a/frontend/app/not-found.tsx b/frontend/app/not-found.tsx
index bed838b..7d81d66 100644
--- a/frontend/app/not-found.tsx
+++ b/frontend/app/not-found.tsx
@@ -1,8 +1,8 @@
-"use client"
+"use client";
import Meta, { defaultMetaProps } from "@/components/layout/meta";
import { ArrowBigLeftDash, ArrowLeft } from "lucide-react";
-import { useRouter } from 'next/navigation';
+import { useRouter } from "next/navigation";
export default function NotFound() {
const router = useRouter();
@@ -17,13 +17,20 @@ export default function NotFound() {
}}
/>
- Not Found | Could not find requested resource
+ Not Found | Could not find
+ requested resource
-
router.back()} className="group flex mt-4 max-w-fit items-center justify-center space-x-2 rounded-full border border-statefarm bg-statefarm px-5 py-2 text-sm text-white transition-colors hover:bg-white hover:text-statefarm">
-
+ router.back()}
+ className="group flex mt-4 max-w-fit items-center justify-center space-x-2 rounded-full border border-statefarm bg-statefarm px-5 py-2 text-sm text-white transition-colors hover:bg-white hover:text-statefarm"
+ >
+
Go Back
-
+
);
}
diff --git a/frontend/app/opengraph-image.tsx b/frontend/app/opengraph-image.tsx
index 767e051..caa0198 100644
--- a/frontend/app/opengraph-image.tsx
+++ b/frontend/app/opengraph-image.tsx
@@ -7,8 +7,8 @@ export const contentType = "image/png";
export default async function OG() {
const sfPro = await fetch(
- new URL("./fonts/SF-Pro-Display-Medium.otf", import.meta.url),
- ).then((res) => res.arrayBuffer())
+ new URL("./fonts/SF-Pro-Display-Medium.otf", import.meta.url)
+ ).then((res) => res.arrayBuffer());
return new ImageResponse(
(
@@ -26,7 +26,9 @@ export default async function OG() {
}}
>
@@ -55,6 +57,6 @@ export default async function OG() {
data: sfPro,
},
],
- },
+ }
);
}
diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx
index cf43c0a..b1110e4 100644
--- a/frontend/app/page.tsx
+++ b/frontend/app/page.tsx
@@ -30,7 +30,11 @@ export default async function Home() {
className="group flex max-w-fit items-center justify-center space-x-2 rounded-full border border-statefarm bg-statefarm px-5 py-2 text-sm text-white transition-colors hover:bg-white hover:text-statefarm"
href="/dashboard"
>
-
+
View Dashboard
+type AccountFormValues = z.infer;
// This can come from your database or API.
const defaultValues: Partial = {
// name: "Your name",
// dob: new Date("2023-01-23"),
-}
+};
export function AccountForm() {
const form = useForm({
resolver: zodResolver(accountFormSchema),
defaultValues,
- })
+ });
function onSubmit(data: AccountFormValues) {
toast({
@@ -84,7 +84,7 @@ export function AccountForm() {
{JSON.stringify(data, null, 2)}
),
- })
+ });
}
return (
@@ -187,7 +187,7 @@ export function AccountForm() {
value={language.label}
key={language.value}
onSelect={() => {
- form.setValue("language", language.value)
+ form.setValue("language", language.value);
}}
>
Update account
- )
+ );
}
diff --git a/frontend/app/settings/account/page.tsx b/frontend/app/settings/account/page.tsx
index 40521ab..9ac8512 100644
--- a/frontend/app/settings/account/page.tsx
+++ b/frontend/app/settings/account/page.tsx
@@ -1,5 +1,5 @@
-import { Separator } from "@/components/ui/separator"
-import { AccountForm } from "@/app/settings/account/account-form"
+import { Separator } from "@/components/ui/separator";
+import { AccountForm } from "@/app/settings/account/account-form";
export default function SettingsAccountPage() {
return (
@@ -14,5 +14,5 @@ export default function SettingsAccountPage() {
- )
+ );
}
diff --git a/frontend/app/settings/appearance/appearance-form.tsx b/frontend/app/settings/appearance/appearance-form.tsx
index 2bf99ac..a0f22e1 100644
--- a/frontend/app/settings/appearance/appearance-form.tsx
+++ b/frontend/app/settings/appearance/appearance-form.tsx
@@ -1,12 +1,12 @@
-"use client"
+"use client";
-import { zodResolver } from "@hookform/resolvers/zod"
-import { ChevronDownIcon } from "@radix-ui/react-icons"
-import { useForm } from "react-hook-form"
-import * as z from "zod"
+import { zodResolver } from "@hookform/resolvers/zod";
+import { ChevronDownIcon } from "@radix-ui/react-icons";
+import { useForm } from "react-hook-form";
+import * as z from "zod";
-import { cn } from "@/lib/utils"
-import { Button, buttonVariants } from "@/components/ui/button"
+import { cn } from "@/lib/utils";
+import { Button, buttonVariants } from "@/components/ui/button";
import {
Form,
FormControl,
@@ -15,9 +15,9 @@ import {
FormItem,
FormLabel,
FormMessage,
-} from "@/components/ui/form"
-import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
-import { toast } from "@/components/ui/use-toast"
+} from "@/components/ui/form";
+import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
+import { toast } from "@/components/ui/use-toast";
const appearanceFormSchema = z.object({
theme: z.enum(["light", "dark"], {
@@ -27,20 +27,20 @@ const appearanceFormSchema = z.object({
invalid_type_error: "Select a font",
required_error: "Please select a font.",
}),
-})
+});
-type AppearanceFormValues = z.infer
+type AppearanceFormValues = z.infer;
// This can come from your database or API.
const defaultValues: Partial = {
theme: "light",
-}
+};
export function AppearanceForm() {
const form = useForm({
resolver: zodResolver(appearanceFormSchema),
defaultValues,
- })
+ });
function onSubmit(data: AppearanceFormValues) {
toast({
@@ -50,7 +50,7 @@ export function AppearanceForm() {
{JSON.stringify(data, null, 2)}
),
- })
+ });
}
return (
@@ -160,5 +160,5 @@ export function AppearanceForm() {
Update preferences
- )
+ );
}
diff --git a/frontend/app/settings/appearance/page.tsx b/frontend/app/settings/appearance/page.tsx
index 72a7e09..7a46b4d 100644
--- a/frontend/app/settings/appearance/page.tsx
+++ b/frontend/app/settings/appearance/page.tsx
@@ -1,5 +1,5 @@
-import { Separator } from "@/components/ui/separator"
-import { AppearanceForm } from "@/app/settings/appearance/appearance-form"
+import { Separator } from "@/components/ui/separator";
+import { AppearanceForm } from "@/app/settings/appearance/appearance-form";
export default function SettingsAppearancePage() {
return (
@@ -14,5 +14,5 @@ export default function SettingsAppearancePage() {
- )
+ );
}
diff --git a/frontend/app/settings/components/sidebar-nav.tsx b/frontend/app/settings/components/sidebar-nav.tsx
index addcfef..1348309 100644
--- a/frontend/app/settings/components/sidebar-nav.tsx
+++ b/frontend/app/settings/components/sidebar-nav.tsx
@@ -1,20 +1,20 @@
-"use client"
+"use client";
-import Link from "next/link"
-import { usePathname } from "next/navigation"
+import Link from "next/link";
+import { usePathname } from "next/navigation";
-import { cn } from "@/lib/utils"
-import { buttonVariants } from "@/components/ui/button"
+import { cn } from "@/lib/utils";
+import { buttonVariants } from "@/components/ui/button";
interface SidebarNavProps extends React.HTMLAttributes {
items: {
- href: string
- title: string
- }[]
+ href: string;
+ title: string;
+ }[];
}
export function SidebarNav({ className, items, ...props }: SidebarNavProps) {
- const pathname = usePathname()
+ const pathname = usePathname();
return (
))}
- )
+ );
}
diff --git a/frontend/app/settings/layout.tsx b/frontend/app/settings/layout.tsx
index b169b51..bc8b507 100644
--- a/frontend/app/settings/layout.tsx
+++ b/frontend/app/settings/layout.tsx
@@ -1,13 +1,13 @@
-import { Metadata } from "next"
-import Image from "next/image"
+import { Metadata } from "next";
+import Image from "next/image";
-import { Separator } from "@/components/ui/separator"
-import { SidebarNav } from "@/app/settings/components/sidebar-nav"
+import { Separator } from "@/components/ui/separator";
+import { SidebarNav } from "@/app/settings/components/sidebar-nav";
export const metadata: Metadata = {
title: "Forms",
description: "Advanced form example using react-hook-form and Zod.",
-}
+};
const sidebarNavItems = [
{
@@ -22,31 +22,15 @@ const sidebarNavItems = [
title: "Notifications",
href: "/settings/notifications",
},
-]
+];
interface SettingsLayoutProps {
- children: React.ReactNode
+ children: React.ReactNode;
}
export default function SettingsLayout({ children }: SettingsLayoutProps) {
return (
-
-
-
-
Settings
@@ -63,5 +47,5 @@ export default function SettingsLayout({ children }: SettingsLayoutProps) {
- )
+ );
}
diff --git a/frontend/app/settings/notifications/notifications-form.tsx b/frontend/app/settings/notifications/notifications-form.tsx
index ec81554..1e2fea1 100644
--- a/frontend/app/settings/notifications/notifications-form.tsx
+++ b/frontend/app/settings/notifications/notifications-form.tsx
@@ -1,12 +1,12 @@
-"use client"
+"use client";
-import Link from "next/link"
-import { zodResolver } from "@hookform/resolvers/zod"
-import { useForm } from "react-hook-form"
-import * as z from "zod"
+import Link from "next/link";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { useForm } from "react-hook-form";
+import * as z from "zod";
-import { Button } from "@/components/ui/button"
-import { Checkbox } from "@/components/ui/checkbox"
+import { Button } from "@/components/ui/button";
+import { Checkbox } from "@/components/ui/checkbox";
import {
Form,
FormControl,
@@ -15,10 +15,10 @@ import {
FormItem,
FormLabel,
FormMessage,
-} from "@/components/ui/form"
-import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
-import { Switch } from "@/components/ui/switch"
-import { toast } from "@/components/ui/use-toast"
+} from "@/components/ui/form";
+import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
+import { Switch } from "@/components/ui/switch";
+import { toast } from "@/components/ui/use-toast";
const notificationsFormSchema = z.object({
type: z.enum(["all", "mentions", "none"], {
@@ -29,9 +29,9 @@ const notificationsFormSchema = z.object({
social_emails: z.boolean().default(false).optional(),
marketing_emails: z.boolean().default(false).optional(),
security_emails: z.boolean(),
-})
+});
-type NotificationsFormValues = z.infer
+type NotificationsFormValues = z.infer;
// This can come from your database or API.
const defaultValues: Partial = {
@@ -39,13 +39,13 @@ const defaultValues: Partial = {
marketing_emails: false,
social_emails: true,
security_emails: true,
-}
+};
export function NotificationsForm() {
const form = useForm({
resolver: zodResolver(notificationsFormSchema),
defaultValues,
- })
+ });
function onSubmit(data: NotificationsFormValues) {
toast({
@@ -55,7 +55,7 @@ export function NotificationsForm() {
{JSON.stringify(data, null, 2)}
),
- })
+ });
}
return (
@@ -209,7 +209,7 @@ export function NotificationsForm() {
You can manage your mobile notifications in the{" "}
- mobile settings page.
+ mobile settings page.
@@ -218,5 +218,5 @@ export function NotificationsForm() {
Update notifications
- )
+ );
}
diff --git a/frontend/app/settings/notifications/page.tsx b/frontend/app/settings/notifications/page.tsx
index 7cecd4e..d850cde 100644
--- a/frontend/app/settings/notifications/page.tsx
+++ b/frontend/app/settings/notifications/page.tsx
@@ -1,5 +1,5 @@
-import { Separator } from "@/components/ui/separator"
-import { NotificationsForm } from "@/app/settings/notifications/notifications-form"
+import { Separator } from "@/components/ui/separator";
+import { NotificationsForm } from "@/app/settings/notifications/notifications-form";
export default function SettingsNotificationsPage() {
return (
@@ -13,5 +13,5 @@ export default function SettingsNotificationsPage() {
- )
+ );
}
diff --git a/frontend/app/settings/page.tsx b/frontend/app/settings/page.tsx
index f85793b..fe57fec 100644
--- a/frontend/app/settings/page.tsx
+++ b/frontend/app/settings/page.tsx
@@ -1,5 +1,5 @@
-import { Separator } from "@/components/ui/separator"
-import { ProfileForm } from "@/app/settings/profile-form"
+import { Separator } from "@/components/ui/separator";
+import { ProfileForm } from "@/app/settings/profile-form";
export default function SettingsProfilePage() {
return (
@@ -13,5 +13,5 @@ export default function SettingsProfilePage() {
- )
+ );
}
diff --git a/frontend/app/settings/profile-form.tsx b/frontend/app/settings/profile-form.tsx
index a5b5320..2298d78 100644
--- a/frontend/app/settings/profile-form.tsx
+++ b/frontend/app/settings/profile-form.tsx
@@ -3,13 +3,12 @@
import { zodResolver } from "@hookform/resolvers/zod";
import { useForm } from "react-hook-form";
import * as z from "zod";
-import { FaLinkedin } from "react-icons/fa";
-import { FaGoogle } from "react-icons/fa";
-import { FaDiscord } from "react-icons/fa";
-import { FaGithub } from "react-icons/fa";
+import { FaLinkedin, FaGoogle, FaDiscord, FaGithub } from "react-icons/fa";
+import { redirect } from "next/navigation";
import { cn } from "@/lib/utils";
import { Button } from "@/components/ui/button";
+import { Skeleton } from "@/components/ui/skeleton";
import {
Form,
FormControl,
@@ -20,13 +19,6 @@ import {
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "@/components/ui/select";
import {
Dialog,
DialogClose,
@@ -38,12 +30,12 @@ import {
DialogTrigger,
} from "@/components/ui/dialog";
import { toast } from "@/components/ui/use-toast";
-import { getProviders, getSession, signIn, useSession } from "next-auth/react";
+import { getProviders, getSession, signIn } from "next-auth/react";
import { useEffect, useState } from "react";
-import { authOptions } from "../api/auth/[...nextauth]/authOptions";
-import { redirect } from "next/navigation";
import { Session } from "next-auth";
import useSWR from "swr";
+import { is } from "date-fns/locale";
+import { Check, SendHorizontal } from "lucide-react";
const providers = [
{ type: "github", icon: },
@@ -87,35 +79,64 @@ const profileFormSchema = z.object({
type ProfileFormValues = z.infer;
-const fetcher = (url: string) => fetch(url, { next: { revalidate: 60 }}).then((res) => res.json());
+const fetcher = (url: string) =>
+ fetch(url, { next: { revalidate: 60 } }).then((res) => res.json());
export function ProfileForm() {
- // if (!session) { redirect('/api/auth/signin') }
- const [defaultValues, setDefaultValues] = useState>({ name: "", email: "", connected_accounts: [""] })
+ const { data: session, isValidating: isSessionLoading } = useSWR(
+ "/api/auth/session",
+ fetcher
+ );
+ const { data: userData, isValidating: isUserDataLoading } = useSWR(
+ () =>
+ `/api/user?userId=${session.user.id}&email=${encodeURI(
+ session.user.email
+ )}&name=${encodeURI(session.user.name)}`,
+ fetcher
+ );
+
+ // exit if session doesnt have a valid email if session is not loading
+ useEffect(() => {
+ if (!session?.user?.email && !isSessionLoading) {
+ redirect("/api/auth/signin");
+ }
+ }, [session, isSessionLoading]);
+
+ const [isDataReady, setIsDataReady] = useState(false);
+ const [defaultValues, setDefaultValues] = useState<
+ Partial
+ >({
+ name: "",
+ email: "",
+ connected_accounts: [],
+ });
+
+ // set default values once userData is loaded
+ useEffect(() => {
+ if (userData && !isUserDataLoading) {
+ const newDefaultValues = {
+ name: userData.name,
+ email: userData.email,
+ connected_accounts: userData.providers,
+ };
+ setDefaultValues(newDefaultValues);
+ setIsDataReady(true);
+ }
+ }, [userData, isUserDataLoading]);
+ // set default values once userData is loaded
const form = useForm({
resolver: zodResolver(profileFormSchema),
defaultValues,
mode: "onChange",
});
- // const { data } = useSWR(`/api/user?userId=${session}`, fetcher);
useEffect(() => {
- // const { data } = useSWR(`/api/user?userId=${session}`, fetcher);
- const getSesh = async () => {
- const provs = Object.keys(await getProviders() as Object);
- const session = await getSession() as Session;
- console.log(provs)
- const newDefaultValues = {
- name: session?.user?.name || '',
- email: session?.user?.email || '',
- connected_accounts: provs || ['']
- };
- setDefaultValues(newDefaultValues);
- form.reset(newDefaultValues); // Reset the form with new default values
+ if (isDataReady) {
+ form.reset(defaultValues); // Reset the form with new default values
}
- getSesh();
- }, [form]);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [isDataReady, defaultValues]);
function onSubmit(data: ProfileFormValues) {
toast({
@@ -128,10 +149,10 @@ export function ProfileForm() {
});
}
-
return (
);
diff --git a/frontend/app/sitemap.ts b/frontend/app/sitemap.ts
index ca9a9c2..2ed89e2 100644
--- a/frontend/app/sitemap.ts
+++ b/frontend/app/sitemap.ts
@@ -14,7 +14,7 @@ export default async function sitemap(): Promise {
url: "https://smare.lryanle.com",
lastModified: new Date(),
},
- ...users.map((user: { id: any; }) => ({
+ ...users.map((user: { id: any }) => ({
url: `https://smare.lryanle.com/${user.id}`,
lastModified: new Date(),
})),
diff --git a/frontend/components.json b/frontend/components.json
index 7681c2f..fe9dede 100644
--- a/frontend/components.json
+++ b/frontend/components.json
@@ -13,4 +13,4 @@
"components": "@/components",
"utils": "@/lib/utils"
}
-}
\ No newline at end of file
+}
diff --git a/frontend/components/dashboard/date-range-picker.tsx b/frontend/components/dashboard/date-range-picker.tsx
index 832a9af..e9fb2ac 100644
--- a/frontend/components/dashboard/date-range-picker.tsx
+++ b/frontend/components/dashboard/date-range-picker.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import { CalendarIcon } from "@radix-ui/react-icons";
import { addDays, format } from "date-fns";
@@ -21,7 +21,7 @@ export function CalendarDateRangePicker({
const [date, setDate] = React.useState({
from: new Date(2023, 9, 27),
to: addDays(new Date(2023, 9, 27), 31),
- })
+ });
return (
@@ -62,5 +62,5 @@ export function CalendarDateRangePicker({
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/frontend/components/dashboard/main-nav.tsx b/frontend/components/dashboard/main-nav.tsx
index 96b2cbc..7593982 100644
--- a/frontend/components/dashboard/main-nav.tsx
+++ b/frontend/components/dashboard/main-nav.tsx
@@ -12,29 +12,29 @@ export function MainNav({
{...props}
>
Overview
Customers
Products
Settings
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/frontend/components/dashboard/overview.tsx b/frontend/components/dashboard/overview.tsx
index f80b188..73b940a 100644
--- a/frontend/components/dashboard/overview.tsx
+++ b/frontend/components/dashboard/overview.tsx
@@ -1,4 +1,4 @@
-"use client"
+"use client";
import { Bar, BarChart, ResponsiveContainer, XAxis, YAxis } from "recharts";
@@ -11,7 +11,7 @@ const data = [
name: "Nov",
total: 153,
},
-]
+];
export function Overview() {
return (
@@ -34,5 +34,5 @@ export function Overview() {
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/frontend/components/dashboard/recent-listings.tsx b/frontend/components/dashboard/recent-listings.tsx
index 544d12f..52fe965 100644
--- a/frontend/components/dashboard/recent-listings.tsx
+++ b/frontend/components/dashboard/recent-listings.tsx
@@ -1,8 +1,4 @@
-import {
- Avatar,
- AvatarFallback,
- AvatarImage,
-} from "@/components/ui/avatar";
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
export function RecentListings() {
return (
@@ -14,9 +10,7 @@ export function RecentListings() {
Toyota Camry 2010
-
- Date
-
+
Date
0.0/100
@@ -38,9 +32,7 @@ export function RecentListings() {
Honda Civic 2015
-
- Date
-
+
Date
0.0/100
@@ -50,7 +42,9 @@ export function RecentListings() {
CL
-
Chevrolet Silverado 2020
+
+ Chevrolet Silverado 2020
+
Date
0.0/100
@@ -67,5 +61,5 @@ export function RecentListings() {
0.0/100
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/frontend/components/dashboard/search.tsx b/frontend/components/dashboard/search.tsx
index 53da55e..69c09cf 100644
--- a/frontend/components/dashboard/search.tsx
+++ b/frontend/components/dashboard/search.tsx
@@ -9,5 +9,5 @@ export function Search() {
className="md:w-[100px] lg:w-[300px]"
/>
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/frontend/components/dashboard/team-switcher.tsx b/frontend/components/dashboard/team-switcher.tsx
index a3c01de..27536c1 100644
--- a/frontend/components/dashboard/team-switcher.tsx
+++ b/frontend/components/dashboard/team-switcher.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import {
CaretSortIcon,
@@ -8,11 +8,7 @@ import {
} from "@radix-ui/react-icons";
import * as React from "react";
-import {
- Avatar,
- AvatarFallback,
- AvatarImage,
-} from "@/components/ui/avatar";
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Button } from "@/components/ui/button";
import {
Command,
@@ -71,20 +67,22 @@ const groups = [
},
],
},
-]
+];
-type Team = (typeof groups)[number]["teams"][number]
+type Team = (typeof groups)[number]["teams"][number];
-type PopoverTriggerProps = React.ComponentPropsWithoutRef
+type PopoverTriggerProps = React.ComponentPropsWithoutRef<
+ typeof PopoverTrigger
+>;
interface TeamSwitcherProps extends PopoverTriggerProps {}
export default function TeamSwitcher({ className }: TeamSwitcherProps) {
- const [open, setOpen] = React.useState(false)
- const [showNewTeamDialog, setShowNewTeamDialog] = React.useState(false)
+ const [open, setOpen] = React.useState(false);
+ const [showNewTeamDialog, setShowNewTeamDialog] = React.useState(false);
const [selectedTeam, setSelectedTeam] = React.useState(
groups[0].teams[0]
- )
+ );
return (
@@ -119,8 +117,8 @@ export default function TeamSwitcher({ className }: TeamSwitcherProps) {
{
- setSelectedTeam(team)
- setOpen(false)
+ setSelectedTeam(team);
+ setOpen(false);
}}
className="text-sm"
>
@@ -152,8 +150,8 @@ export default function TeamSwitcher({ className }: TeamSwitcherProps) {
{
- setOpen(false)
- setShowNewTeamDialog(true)
+ setOpen(false);
+ setShowNewTeamDialog(true);
}}
>
@@ -210,5 +208,5 @@ export default function TeamSwitcher({ className }: TeamSwitcherProps) {
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/frontend/components/dashboard/user-nav.tsx b/frontend/components/dashboard/user-nav.tsx
index fe1b6b1..acc0b3a 100644
--- a/frontend/components/dashboard/user-nav.tsx
+++ b/frontend/components/dashboard/user-nav.tsx
@@ -1,8 +1,4 @@
-import {
- Avatar,
- AvatarFallback,
- AvatarImage,
-} from "@/components/ui/avatar";
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
@@ -58,5 +54,5 @@ export function UserNav() {
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/frontend/components/home/component-grid.tsx b/frontend/components/home/component-grid.tsx
index 91e3cae..957db3f 100644
--- a/frontend/components/home/component-grid.tsx
+++ b/frontend/components/home/component-grid.tsx
@@ -41,8 +41,9 @@ export default function ComponentGrid() {
>
Popover
diff --git a/frontend/components/home/demo-modal.tsx b/frontend/components/home/demo-modal.tsx
index b36dbc9..8635644 100644
--- a/frontend/components/home/demo-modal.tsx
+++ b/frontend/components/home/demo-modal.tsx
@@ -52,6 +52,6 @@ export function useDemoModal() {
return useMemo(
() => ({ setShowDemoModal, DemoModal: DemoModalCallback }),
- [setShowDemoModal, DemoModalCallback],
+ [setShowDemoModal, DemoModalCallback]
);
}
diff --git a/frontend/components/layout/footer.tsx b/frontend/components/layout/footer.tsx
index 7bd79a3..accf970 100644
--- a/frontend/components/layout/footer.tsx
+++ b/frontend/components/layout/footer.tsx
@@ -11,18 +11,17 @@ export default function Footer() {
target="_blank"
rel="noopener noreferrer"
>
- {" "}
- University of Texas at Arlington CSE
-
- {" "}×{" "}
+ University of Texas at Arlington
+ CSE
+ {" "}
+ ×{" "}
- {" "}
- Statefarm
+ Statefarm
diff --git a/frontend/components/layout/meta.tsx b/frontend/components/layout/meta.tsx
index ea34dc2..4c9df1b 100644
--- a/frontend/components/layout/meta.tsx
+++ b/frontend/components/layout/meta.tsx
@@ -45,4 +45,4 @@ export default function Meta({ props }: { props: MetaProps }) {
);
-}
\ No newline at end of file
+}
diff --git a/frontend/components/layout/navbar.tsx b/frontend/components/layout/navbar.tsx
index 18092e8..8e5cc7b 100644
--- a/frontend/components/layout/navbar.tsx
+++ b/frontend/components/layout/navbar.tsx
@@ -28,27 +28,33 @@ export default function NavBar({ session }: { session: Session | null }) {
alt="SMARE logo"
width="156"
height="50"
- className="mr-2 rounded-sm"
+ className="mr-2 rounded-sm w-auto h-auto"
>
-
+
Home
-
+
Dashboard
<>
- {session ? (
-
- ) : (
- setShowSignInModal(true)}
- >
- Sign In
-
- )}
+ {session ? (
+
+ ) : (
+ setShowSignInModal(true)}
+ >
+ Sign In
+
+ )}
>
diff --git a/frontend/components/layout/sign-in-modal.tsx b/frontend/components/layout/sign-in-modal.tsx
index cfd3f67..2908172 100644
--- a/frontend/components/layout/sign-in-modal.tsx
+++ b/frontend/components/layout/sign-in-modal.tsx
@@ -37,12 +37,14 @@ const SignInModal = ({
Log In
- Log in or create an account to view your social marketplace risky listings dashboard - only your email and profile picture will be stored.
+ Log in or create an account to view your social marketplace risky
+ listings dashboard - only your email and profile picture will be
+ stored.
-
{
setSignInClickedGithub(true);
- signIn("github");
+ signIn("github");
}}
>
{signInClickedGithub ? (
@@ -72,7 +74,7 @@ const SignInModal = ({
} flex h-10 w-full items-center justify-center space-x-3 rounded-md border text-sm shadow-sm transition-all duration-75 focus:outline-none`}
onClick={() => {
setSignInClickedGoogle(true);
- signIn("google");
+ signIn("google");
}}
>
{signInClickedGoogle ? (
@@ -146,6 +148,6 @@ export function useSignInModal() {
return useMemo(
() => ({ setShowSignInModal, SignInModal: SignInModalCallback }),
- [setShowSignInModal, SignInModalCallback],
+ [setShowSignInModal, SignInModalCallback]
);
}
diff --git a/frontend/components/shared/icons/index.tsx b/frontend/components/shared/icons/index.tsx
index f3d9db1..2bf17ea 100644
--- a/frontend/components/shared/icons/index.tsx
+++ b/frontend/components/shared/icons/index.tsx
@@ -9,4 +9,3 @@ export { default as LoadingSpinner } from "./loading-spinner";
export { default as Statefarm } from "./statefarm";
export { default as Twitter } from "./twitter";
export { default as Uta } from "./uta";
-
diff --git a/frontend/components/shared/icons/linkedin.tsx b/frontend/components/shared/icons/linkedin.tsx
index e214a62..42bf301 100644
--- a/frontend/components/shared/icons/linkedin.tsx
+++ b/frontend/components/shared/icons/linkedin.tsx
@@ -13,7 +13,7 @@ export default function Linkedin({ className }: { className?: string }) {
fill="#0E76A8"
/>
diff --git a/frontend/components/shared/modal.tsx b/frontend/components/shared/modal.tsx
index f405f0a..a7cb2cc 100644
--- a/frontend/components/shared/modal.tsx
+++ b/frontend/components/shared/modal.tsx
@@ -53,7 +53,7 @@ export default function Modal({
onCloseAutoFocus={(e) => e.preventDefault()}
className={cn(
"animate-scale-in fixed inset-0 z-40 m-auto max-h-fit w-full max-w-md overflow-hidden border border-gray-200 bg-white p-0 shadow-xl md:rounded-2xl",
- className,
+ className
)}
>
{children}
diff --git a/frontend/components/ui/avatar.tsx b/frontend/components/ui/avatar.tsx
index 867316e..bb45a37 100644
--- a/frontend/components/ui/avatar.tsx
+++ b/frontend/components/ui/avatar.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import * as AvatarPrimitive from "@radix-ui/react-avatar";
import * as React from "react";
@@ -18,8 +18,8 @@ const Avatar = React.forwardRef<
)}
{...props}
/>
-))
-Avatar.displayName = AvatarPrimitive.Root.displayName
+));
+Avatar.displayName = AvatarPrimitive.Root.displayName;
const AvatarImage = React.forwardRef<
React.ElementRef,
@@ -30,8 +30,8 @@ const AvatarImage = React.forwardRef<
className={cn("aspect-square h-full w-full", className)}
{...props}
/>
-))
-AvatarImage.displayName = AvatarPrimitive.Image.displayName
+));
+AvatarImage.displayName = AvatarPrimitive.Image.displayName;
const AvatarFallback = React.forwardRef<
React.ElementRef,
@@ -45,8 +45,7 @@ const AvatarFallback = React.forwardRef<
)}
{...props}
/>
-))
-AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
+));
+AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
export { Avatar, AvatarFallback, AvatarImage };
-
diff --git a/frontend/components/ui/button.tsx b/frontend/components/ui/button.tsx
index 85d20f2..6dead21 100644
--- a/frontend/components/ui/button.tsx
+++ b/frontend/components/ui/button.tsx
@@ -1,8 +1,8 @@
-import * as React from "react"
-import { Slot } from "@radix-ui/react-slot"
-import { cva, type VariantProps } from "class-variance-authority"
+import * as React from "react";
+import { Slot } from "@radix-ui/react-slot";
+import { cva, type VariantProps } from "class-variance-authority";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
const buttonVariants = cva(
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
@@ -32,26 +32,26 @@ const buttonVariants = cva(
size: "default",
},
}
-)
+);
export interface ButtonProps
extends React.ButtonHTMLAttributes,
VariantProps {
- asChild?: boolean
+ asChild?: boolean;
}
const Button = React.forwardRef(
({ className, variant, size, asChild = false, ...props }, ref) => {
- const Comp = asChild ? Slot : "button"
+ const Comp = asChild ? Slot : "button";
return (
- )
+ );
}
-)
-Button.displayName = "Button"
+);
+Button.displayName = "Button";
-export { Button, buttonVariants }
+export { Button, buttonVariants };
diff --git a/frontend/components/ui/calendar.tsx b/frontend/components/ui/calendar.tsx
index ab7da74..116336f 100644
--- a/frontend/components/ui/calendar.tsx
+++ b/frontend/components/ui/calendar.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import { ChevronLeftIcon, ChevronRightIcon } from "@radix-ui/react-icons";
import * as React from "react";
@@ -8,7 +8,7 @@ import { DayPicker } from "react-day-picker";
import { buttonVariants } from "@/components/ui/button";
import { cn } from "@/lib/utils";
-export type CalendarProps = React.ComponentProps
+export type CalendarProps = React.ComponentProps;
function Calendar({
className,
@@ -66,9 +66,8 @@ function Calendar({
}}
{...props}
/>
- )
+ );
}
-Calendar.displayName = "Calendar"
+Calendar.displayName = "Calendar";
export { Calendar };
-
diff --git a/frontend/components/ui/card.tsx b/frontend/components/ui/card.tsx
index a896af1..b76a4a0 100644
--- a/frontend/components/ui/card.tsx
+++ b/frontend/components/ui/card.tsx
@@ -15,8 +15,8 @@ const Card = React.forwardRef<
)}
{...props}
/>
-))
-Card.displayName = "Card"
+));
+Card.displayName = "Card";
const CardHeader = React.forwardRef<
HTMLDivElement,
@@ -27,8 +27,8 @@ const CardHeader = React.forwardRef<
className={cn("flex flex-col space-y-1.5 p-6", className)}
{...props}
/>
-))
-CardHeader.displayName = "CardHeader"
+));
+CardHeader.displayName = "CardHeader";
const CardTitle = React.forwardRef<
HTMLParagraphElement,
@@ -39,8 +39,8 @@ const CardTitle = React.forwardRef<
className={cn("font-semibold leading-none tracking-tight", className)}
{...props}
/>
-))
-CardTitle.displayName = "CardTitle"
+));
+CardTitle.displayName = "CardTitle";
const CardDescription = React.forwardRef<
HTMLParagraphElement,
@@ -51,16 +51,16 @@ const CardDescription = React.forwardRef<
className={cn("text-sm text-muted-foreground", className)}
{...props}
/>
-))
-CardDescription.displayName = "CardDescription"
+));
+CardDescription.displayName = "CardDescription";
const CardContent = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes
>(({ className, ...props }, ref) => (
-))
-CardContent.displayName = "CardContent"
+));
+CardContent.displayName = "CardContent";
const CardFooter = React.forwardRef<
HTMLDivElement,
@@ -71,7 +71,14 @@ const CardFooter = React.forwardRef<
className={cn("flex items-center p-6 pt-0", className)}
{...props}
/>
-))
-CardFooter.displayName = "CardFooter"
+));
+CardFooter.displayName = "CardFooter";
-export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
+export {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+};
diff --git a/frontend/components/ui/checkbox.tsx b/frontend/components/ui/checkbox.tsx
index c7159e1..d15eb74 100644
--- a/frontend/components/ui/checkbox.tsx
+++ b/frontend/components/ui/checkbox.tsx
@@ -1,11 +1,11 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
-import * as React from "react"
-import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
-import { CheckIcon } from "@radix-ui/react-icons"
+import * as React from "react";
+import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
+import { CheckIcon } from "@radix-ui/react-icons";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
const Checkbox = React.forwardRef<
React.ElementRef,
@@ -25,7 +25,7 @@ const Checkbox = React.forwardRef<
-))
-Checkbox.displayName = CheckboxPrimitive.Root.displayName
+));
+Checkbox.displayName = CheckboxPrimitive.Root.displayName;
-export { Checkbox }
+export { Checkbox };
diff --git a/frontend/components/ui/command.tsx b/frontend/components/ui/command.tsx
index fb584c6..f75653c 100644
--- a/frontend/components/ui/command.tsx
+++ b/frontend/components/ui/command.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import { type DialogProps } from "@radix-ui/react-dialog";
import { MagnifyingGlassIcon } from "@radix-ui/react-icons";
@@ -21,8 +21,8 @@ const Command = React.forwardRef<
)}
{...props}
/>
-))
-Command.displayName = CommandPrimitive.displayName
+));
+Command.displayName = CommandPrimitive.displayName;
interface CommandDialogProps extends DialogProps {}
@@ -35,8 +35,8 @@ const CommandDialog = ({ children, ...props }: CommandDialogProps) => {
- )
-}
+ );
+};
const CommandInput = React.forwardRef<
React.ElementRef,
@@ -53,9 +53,9 @@ const CommandInput = React.forwardRef<
{...props}
/>
-))
+));
-CommandInput.displayName = CommandPrimitive.Input.displayName
+CommandInput.displayName = CommandPrimitive.Input.displayName;
const CommandList = React.forwardRef<
React.ElementRef,
@@ -66,9 +66,9 @@ const CommandList = React.forwardRef<
className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)}
{...props}
/>
-))
+));
-CommandList.displayName = CommandPrimitive.List.displayName
+CommandList.displayName = CommandPrimitive.List.displayName;
const CommandEmpty = React.forwardRef<
React.ElementRef,
@@ -79,9 +79,9 @@ const CommandEmpty = React.forwardRef<
className="py-6 text-center text-sm"
{...props}
/>
-))
+));
-CommandEmpty.displayName = CommandPrimitive.Empty.displayName
+CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
const CommandGroup = React.forwardRef<
React.ElementRef,
@@ -95,9 +95,9 @@ const CommandGroup = React.forwardRef<
)}
{...props}
/>
-))
+));
-CommandGroup.displayName = CommandPrimitive.Group.displayName
+CommandGroup.displayName = CommandPrimitive.Group.displayName;
const CommandSeparator = React.forwardRef<
React.ElementRef,
@@ -108,8 +108,8 @@ const CommandSeparator = React.forwardRef<
className={cn("-mx-1 h-px bg-border", className)}
{...props}
/>
-))
-CommandSeparator.displayName = CommandPrimitive.Separator.displayName
+));
+CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
const CommandItem = React.forwardRef<
React.ElementRef,
@@ -123,9 +123,9 @@ const CommandItem = React.forwardRef<
)}
{...props}
/>
-))
+));
-CommandItem.displayName = CommandPrimitive.Item.displayName
+CommandItem.displayName = CommandPrimitive.Item.displayName;
const CommandShortcut = ({
className,
@@ -139,13 +139,18 @@ const CommandShortcut = ({
)}
{...props}
/>
- )
-}
-CommandShortcut.displayName = "CommandShortcut"
+ );
+};
+CommandShortcut.displayName = "CommandShortcut";
export {
Command,
- CommandDialog, CommandEmpty,
- CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut
+ CommandDialog,
+ CommandEmpty,
+ CommandGroup,
+ CommandInput,
+ CommandItem,
+ CommandList,
+ CommandSeparator,
+ CommandShortcut,
};
-
diff --git a/frontend/components/ui/dialog.tsx b/frontend/components/ui/dialog.tsx
index 8f81c32..ccf4499 100644
--- a/frontend/components/ui/dialog.tsx
+++ b/frontend/components/ui/dialog.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import * as DialogPrimitive from "@radix-ui/react-dialog";
import { Cross2Icon } from "@radix-ui/react-icons";
@@ -7,13 +7,13 @@ import * as React from "react";
import { cn } from "@/lib/utils";
-const Dialog = DialogPrimitive.Root
+const Dialog = DialogPrimitive.Root;
-const DialogTrigger = DialogPrimitive.Trigger
+const DialogTrigger = DialogPrimitive.Trigger;
-const DialogPortal = DialogPrimitive.Portal
+const DialogPortal = DialogPrimitive.Portal;
-const DialogClose = DialogPrimitive.Close
+const DialogClose = DialogPrimitive.Close;
const DialogOverlay = React.forwardRef<
React.ElementRef,
@@ -27,8 +27,8 @@ const DialogOverlay = React.forwardRef<
)}
{...props}
/>
-))
-DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
+));
+DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
const DialogContent = React.forwardRef<
React.ElementRef,
@@ -51,8 +51,8 @@ const DialogContent = React.forwardRef<
-))
-DialogContent.displayName = DialogPrimitive.Content.displayName
+));
+DialogContent.displayName = DialogPrimitive.Content.displayName;
const DialogHeader = ({
className,
@@ -65,8 +65,8 @@ const DialogHeader = ({
)}
{...props}
/>
-)
-DialogHeader.displayName = "DialogHeader"
+);
+DialogHeader.displayName = "DialogHeader";
const DialogFooter = ({
className,
@@ -79,8 +79,8 @@ const DialogFooter = ({
)}
{...props}
/>
-)
-DialogFooter.displayName = "DialogFooter"
+);
+DialogFooter.displayName = "DialogFooter";
const DialogTitle = React.forwardRef<
React.ElementRef,
@@ -94,8 +94,8 @@ const DialogTitle = React.forwardRef<
)}
{...props}
/>
-))
-DialogTitle.displayName = DialogPrimitive.Title.displayName
+));
+DialogTitle.displayName = DialogPrimitive.Title.displayName;
const DialogDescription = React.forwardRef<
React.ElementRef,
@@ -106,11 +106,18 @@ const DialogDescription = React.forwardRef<
className={cn("text-sm text-muted-foreground", className)}
{...props}
/>
-))
-DialogDescription.displayName = DialogPrimitive.Description.displayName
+));
+DialogDescription.displayName = DialogPrimitive.Description.displayName;
export {
- Dialog, DialogClose,
- DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger
+ Dialog,
+ DialogClose,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogOverlay,
+ DialogPortal,
+ DialogTitle,
+ DialogTrigger,
};
-
diff --git a/frontend/components/ui/dropdown-menu.tsx b/frontend/components/ui/dropdown-menu.tsx
index fd7373f..4973b65 100644
--- a/frontend/components/ui/dropdown-menu.tsx
+++ b/frontend/components/ui/dropdown-menu.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
import {
@@ -11,22 +11,22 @@ import * as React from "react";
import { cn } from "@/lib/utils";
-const DropdownMenu = DropdownMenuPrimitive.Root
+const DropdownMenu = DropdownMenuPrimitive.Root;
-const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
+const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
-const DropdownMenuGroup = DropdownMenuPrimitive.Group
+const DropdownMenuGroup = DropdownMenuPrimitive.Group;
-const DropdownMenuPortal = DropdownMenuPrimitive.Portal
+const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
-const DropdownMenuSub = DropdownMenuPrimitive.Sub
+const DropdownMenuSub = DropdownMenuPrimitive.Sub;
-const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
+const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
const DropdownMenuSubTrigger = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef & {
- inset?: boolean
+ inset?: boolean;
}
>(({ className, inset, children, ...props }, ref) => (
-))
+));
DropdownMenuSubTrigger.displayName =
- DropdownMenuPrimitive.SubTrigger.displayName
+ DropdownMenuPrimitive.SubTrigger.displayName;
const DropdownMenuSubContent = React.forwardRef<
React.ElementRef,
@@ -57,9 +57,9 @@ const DropdownMenuSubContent = React.forwardRef<
)}
{...props}
/>
-))
+));
DropdownMenuSubContent.displayName =
- DropdownMenuPrimitive.SubContent.displayName
+ DropdownMenuPrimitive.SubContent.displayName;
const DropdownMenuContent = React.forwardRef<
React.ElementRef,
@@ -77,13 +77,13 @@ const DropdownMenuContent = React.forwardRef<
{...props}
/>
-))
-DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
+));
+DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
const DropdownMenuItem = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef & {
- inset?: boolean
+ inset?: boolean;
}
>(({ className, inset, ...props }, ref) => (
-))
-DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
+));
+DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
const DropdownMenuCheckboxItem = React.forwardRef<
React.ElementRef,
@@ -118,9 +118,9 @@ const DropdownMenuCheckboxItem = React.forwardRef<
{children}
-))
+));
DropdownMenuCheckboxItem.displayName =
- DropdownMenuPrimitive.CheckboxItem.displayName
+ DropdownMenuPrimitive.CheckboxItem.displayName;
const DropdownMenuRadioItem = React.forwardRef<
React.ElementRef,
@@ -141,13 +141,13 @@ const DropdownMenuRadioItem = React.forwardRef<
{children}
-))
-DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
+));
+DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
const DropdownMenuLabel = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef & {
- inset?: boolean
+ inset?: boolean;
}
>(({ className, inset, ...props }, ref) => (
-))
-DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
+));
+DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
const DropdownMenuSeparator = React.forwardRef<
React.ElementRef,
@@ -171,8 +171,8 @@ const DropdownMenuSeparator = React.forwardRef<
className={cn("-mx-1 my-1 h-px bg-muted", className)}
{...props}
/>
-))
-DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
+));
+DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
const DropdownMenuShortcut = ({
className,
@@ -183,14 +183,24 @@ const DropdownMenuShortcut = ({
className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
{...props}
/>
- )
-}
-DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
+ );
+};
+DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
export {
- DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator,
- DropdownMenuShortcut, DropdownMenuSub,
+ DropdownMenu,
+ DropdownMenuCheckboxItem,
+ DropdownMenuContent,
+ DropdownMenuGroup,
+ DropdownMenuItem,
+ DropdownMenuLabel,
+ DropdownMenuPortal,
+ DropdownMenuRadioGroup,
+ DropdownMenuRadioItem,
+ DropdownMenuSeparator,
+ DropdownMenuShortcut,
+ DropdownMenuSub,
DropdownMenuSubContent,
- DropdownMenuSubTrigger, DropdownMenuTrigger
+ DropdownMenuSubTrigger,
+ DropdownMenuTrigger,
};
-
diff --git a/frontend/components/ui/form.tsx b/frontend/components/ui/form.tsx
index a7b8fe5..6456b7e 100644
--- a/frontend/components/ui/form.tsx
+++ b/frontend/components/ui/form.tsx
@@ -1,7 +1,7 @@
/* eslint-disable react/prop-types */
-import * as React from "react"
-import * as LabelPrimitive from "@radix-ui/react-label"
-import { Slot } from "@radix-ui/react-slot"
+import * as React from "react";
+import * as LabelPrimitive from "@radix-ui/react-label";
+import { Slot } from "@radix-ui/react-slot";
import {
Controller,
ControllerProps,
@@ -9,27 +9,27 @@ import {
FieldValues,
FormProvider,
useFormContext,
-} from "react-hook-form"
+} from "react-hook-form";
-import { cn } from "@/lib/utils"
-import { Label } from "@/components/ui/label"
+import { cn } from "@/lib/utils";
+import { Label } from "@/components/ui/label";
-const Form = FormProvider
+const Form = FormProvider;
type FormFieldContextValue<
TFieldValues extends FieldValues = FieldValues,
- TName extends FieldPath = FieldPath
+ TName extends FieldPath = FieldPath,
> = {
- name: TName
-}
+ name: TName;
+};
const FormFieldContext = React.createContext(
{} as FormFieldContextValue
-)
+);
const FormField = <
TFieldValues extends FieldValues = FieldValues,
- TName extends FieldPath = FieldPath
+ TName extends FieldPath = FieldPath,
>({
...props
}: ControllerProps) => {
@@ -37,21 +37,21 @@ const FormField = <
- )
-}
+ );
+};
const useFormField = () => {
- const fieldContext = React.useContext(FormFieldContext)
- const itemContext = React.useContext(FormItemContext)
- const { getFieldState, formState } = useFormContext()
+ const fieldContext = React.useContext(FormFieldContext);
+ const itemContext = React.useContext(FormItemContext);
+ const { getFieldState, formState } = useFormContext();
- const fieldState = getFieldState(fieldContext.name, formState)
+ const fieldState = getFieldState(fieldContext.name, formState);
if (!fieldContext) {
- throw new Error("useFormField should be used within ")
+ throw new Error("useFormField should be used within ");
}
- const { id } = itemContext
+ const { id } = itemContext;
return {
id,
@@ -60,36 +60,36 @@ const useFormField = () => {
formDescriptionId: `${id}-form-item-description`,
formMessageId: `${id}-form-item-message`,
...fieldState,
- }
-}
+ };
+};
type FormItemContextValue = {
- id: string
-}
+ id: string;
+};
const FormItemContext = React.createContext(
{} as FormItemContextValue
-)
+);
const FormItem = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes
>(({ className, ...props }, ref) => {
- const id = React.useId()
+ const id = React.useId();
return (
- )
-})
-FormItem.displayName = "FormItem"
+ );
+});
+FormItem.displayName = "FormItem";
const FormLabel = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef
>(({ className, ...props }, ref) => {
- const { error, formItemId } = useFormField()
+ const { error, formItemId } = useFormField();
return (
- )
-})
-FormLabel.displayName = "FormLabel"
+ );
+});
+FormLabel.displayName = "FormLabel";
const FormControl = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef
>(({ ...props }, ref) => {
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
+ const { error, formItemId, formDescriptionId, formMessageId } =
+ useFormField();
return (
- )
-})
-FormControl.displayName = "FormControl"
+ );
+});
+FormControl.displayName = "FormControl";
const FormDescription = React.forwardRef<
HTMLParagraphElement,
React.HTMLAttributes
>(({ className, ...props }, ref) => {
- const { formDescriptionId } = useFormField()
+ const { formDescriptionId } = useFormField();
return (
- )
-})
-FormDescription.displayName = "FormDescription"
+ );
+});
+FormDescription.displayName = "FormDescription";
const FormMessage = React.forwardRef<
HTMLParagraphElement,
React.HTMLAttributes
>(({ className, children, ...props }, ref) => {
- const { error, formMessageId } = useFormField()
- const body = error ? String(error?.message) : children
+ const { error, formMessageId } = useFormField();
+ const body = error ? String(error?.message) : children;
if (!body) {
- return null
+ return null;
}
return (
@@ -161,9 +162,9 @@ const FormMessage = React.forwardRef<
>
{body}
- )
-})
-FormMessage.displayName = "FormMessage"
+ );
+});
+FormMessage.displayName = "FormMessage";
export {
useFormField,
@@ -174,4 +175,4 @@ export {
FormDescription,
FormMessage,
FormField,
-}
+};
diff --git a/frontend/components/ui/input.tsx b/frontend/components/ui/input.tsx
index 8736826..f6b2453 100644
--- a/frontend/components/ui/input.tsx
+++ b/frontend/components/ui/input.tsx
@@ -17,9 +17,9 @@ const Input = React.forwardRef(
ref={ref}
{...props}
/>
- )
+ );
}
-)
-Input.displayName = "Input"
+);
+Input.displayName = "Input";
export { Input };
diff --git a/frontend/components/ui/label.tsx b/frontend/components/ui/label.tsx
index ffc5875..907c200 100644
--- a/frontend/components/ui/label.tsx
+++ b/frontend/components/ui/label.tsx
@@ -1,4 +1,4 @@
-"use client"
+"use client";
import * as LabelPrimitive from "@radix-ui/react-label";
import { cva, type VariantProps } from "class-variance-authority";
@@ -8,7 +8,7 @@ import { cn } from "@/lib/utils";
const labelVariants = cva(
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
-)
+);
const Label = React.forwardRef<
React.ElementRef,
@@ -20,7 +20,7 @@ const Label = React.forwardRef<
className={cn(labelVariants(), className)}
{...props}
/>
-))
-Label.displayName = LabelPrimitive.Root.displayName
+));
+Label.displayName = LabelPrimitive.Root.displayName;
export { Label };
diff --git a/frontend/components/ui/popover.tsx b/frontend/components/ui/popover.tsx
index cb2f2ba..4e5b57f 100644
--- a/frontend/components/ui/popover.tsx
+++ b/frontend/components/ui/popover.tsx
@@ -1,14 +1,14 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import * as PopoverPrimitive from "@radix-ui/react-popover";
import * as React from "react";
import { cn } from "@/lib/utils";
-const Popover = PopoverPrimitive.Root
+const Popover = PopoverPrimitive.Root;
-const PopoverTrigger = PopoverPrimitive.Trigger
+const PopoverTrigger = PopoverPrimitive.Trigger;
const PopoverContent = React.forwardRef<
React.ElementRef,
@@ -26,7 +26,7 @@ const PopoverContent = React.forwardRef<
{...props}
/>
-))
-PopoverContent.displayName = PopoverPrimitive.Content.displayName
+));
+PopoverContent.displayName = PopoverPrimitive.Content.displayName;
export { Popover, PopoverContent, PopoverTrigger };
diff --git a/frontend/components/ui/radio-group.tsx b/frontend/components/ui/radio-group.tsx
index ff69ea0..70e051d 100644
--- a/frontend/components/ui/radio-group.tsx
+++ b/frontend/components/ui/radio-group.tsx
@@ -1,11 +1,11 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
-import * as React from "react"
-import { CheckIcon } from "@radix-ui/react-icons"
-import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"
+import * as React from "react";
+import { CheckIcon } from "@radix-ui/react-icons";
+import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
const RadioGroup = React.forwardRef<
React.ElementRef,
@@ -17,9 +17,9 @@ const RadioGroup = React.forwardRef<
{...props}
ref={ref}
/>
- )
-})
-RadioGroup.displayName = RadioGroupPrimitive.Root.displayName
+ );
+});
+RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
const RadioGroupItem = React.forwardRef<
React.ElementRef,
@@ -38,8 +38,8 @@ const RadioGroupItem = React.forwardRef<
- )
-})
-RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName
+ );
+});
+RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
-export { RadioGroup, RadioGroupItem }
+export { RadioGroup, RadioGroupItem };
diff --git a/frontend/components/ui/select.tsx b/frontend/components/ui/select.tsx
index 3f95a65..8a2e920 100644
--- a/frontend/components/ui/select.tsx
+++ b/frontend/components/ui/select.tsx
@@ -1,5 +1,5 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import {
CaretSortIcon,
@@ -12,11 +12,11 @@ import * as React from "react";
import { cn } from "@/lib/utils";
-const Select = SelectPrimitive.Root
+const Select = SelectPrimitive.Root;
-const SelectGroup = SelectPrimitive.Group
+const SelectGroup = SelectPrimitive.Group;
-const SelectValue = SelectPrimitive.Value
+const SelectValue = SelectPrimitive.Value;
const SelectTrigger = React.forwardRef<
React.ElementRef,
@@ -35,8 +35,8 @@ const SelectTrigger = React.forwardRef<
-))
-SelectTrigger.displayName = SelectPrimitive.Trigger.displayName
+));
+SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
const SelectScrollUpButton = React.forwardRef<
React.ElementRef,
@@ -52,8 +52,8 @@ const SelectScrollUpButton = React.forwardRef<
>
-))
-SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
+));
+SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
const SelectScrollDownButton = React.forwardRef<
React.ElementRef,
@@ -69,9 +69,9 @@ const SelectScrollDownButton = React.forwardRef<
>
-))
+));
SelectScrollDownButton.displayName =
- SelectPrimitive.ScrollDownButton.displayName
+ SelectPrimitive.ScrollDownButton.displayName;
const SelectContent = React.forwardRef<
React.ElementRef,
@@ -102,8 +102,8 @@ const SelectContent = React.forwardRef<
-))
-SelectContent.displayName = SelectPrimitive.Content.displayName
+));
+SelectContent.displayName = SelectPrimitive.Content.displayName;
const SelectLabel = React.forwardRef<
React.ElementRef,
@@ -114,8 +114,8 @@ const SelectLabel = React.forwardRef<
className={cn("px-2 py-1.5 text-sm font-semibold", className)}
{...props}
/>
-))
-SelectLabel.displayName = SelectPrimitive.Label.displayName
+));
+SelectLabel.displayName = SelectPrimitive.Label.displayName;
const SelectItem = React.forwardRef<
React.ElementRef,
@@ -136,8 +136,8 @@ const SelectItem = React.forwardRef<
{children}
-))
-SelectItem.displayName = SelectPrimitive.Item.displayName
+));
+SelectItem.displayName = SelectPrimitive.Item.displayName;
const SelectSeparator = React.forwardRef<
React.ElementRef,
@@ -148,9 +148,18 @@ const SelectSeparator = React.forwardRef<
className={cn("-mx-1 my-1 h-px bg-muted", className)}
{...props}
/>
-))
-SelectSeparator.displayName = SelectPrimitive.Separator.displayName
+));
+SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
export {
- Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue
+ Select,
+ SelectContent,
+ SelectGroup,
+ SelectItem,
+ SelectLabel,
+ SelectScrollDownButton,
+ SelectScrollUpButton,
+ SelectSeparator,
+ SelectTrigger,
+ SelectValue,
};
diff --git a/frontend/components/ui/separator.tsx b/frontend/components/ui/separator.tsx
index 80c622b..7296d13 100644
--- a/frontend/components/ui/separator.tsx
+++ b/frontend/components/ui/separator.tsx
@@ -1,10 +1,10 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
-import * as React from "react"
-import * as SeparatorPrimitive from "@radix-ui/react-separator"
+import * as React from "react";
+import * as SeparatorPrimitive from "@radix-ui/react-separator";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
const Separator = React.forwardRef<
React.ElementRef,
@@ -26,7 +26,7 @@ const Separator = React.forwardRef<
{...props}
/>
)
-)
-Separator.displayName = SeparatorPrimitive.Root.displayName
+);
+Separator.displayName = SeparatorPrimitive.Root.displayName;
-export { Separator }
+export { Separator };
diff --git a/frontend/components/ui/skeleton.tsx b/frontend/components/ui/skeleton.tsx
new file mode 100644
index 0000000..4448d2b
--- /dev/null
+++ b/frontend/components/ui/skeleton.tsx
@@ -0,0 +1,15 @@
+import { cn } from "@/lib/utils";
+
+function Skeleton({
+ className,
+ ...props
+}: Readonly>) {
+ return (
+
+ );
+}
+
+export { Skeleton };
diff --git a/frontend/components/ui/switch.tsx b/frontend/components/ui/switch.tsx
index 1c123de..22194d8 100644
--- a/frontend/components/ui/switch.tsx
+++ b/frontend/components/ui/switch.tsx
@@ -1,10 +1,10 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
-import * as React from "react"
-import * as SwitchPrimitives from "@radix-ui/react-switch"
+import * as React from "react";
+import * as SwitchPrimitives from "@radix-ui/react-switch";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
const Switch = React.forwardRef<
React.ElementRef,
@@ -24,7 +24,7 @@ const Switch = React.forwardRef<
)}
/>
-))
-Switch.displayName = SwitchPrimitives.Root.displayName
+));
+Switch.displayName = SwitchPrimitives.Root.displayName;
-export { Switch }
+export { Switch };
diff --git a/frontend/components/ui/tabs.tsx b/frontend/components/ui/tabs.tsx
index d4ffcb7..cff8486 100644
--- a/frontend/components/ui/tabs.tsx
+++ b/frontend/components/ui/tabs.tsx
@@ -1,12 +1,12 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
import * as TabsPrimitive from "@radix-ui/react-tabs";
import * as React from "react";
import { cn } from "@/lib/utils";
-const Tabs = TabsPrimitive.Root
+const Tabs = TabsPrimitive.Root;
const TabsList = React.forwardRef<
React.ElementRef,
@@ -20,8 +20,8 @@ const TabsList = React.forwardRef<
)}
{...props}
/>
-))
-TabsList.displayName = TabsPrimitive.List.displayName
+));
+TabsList.displayName = TabsPrimitive.List.displayName;
const TabsTrigger = React.forwardRef<
React.ElementRef,
@@ -35,8 +35,8 @@ const TabsTrigger = React.forwardRef<
)}
{...props}
/>
-))
-TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
+));
+TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
const TabsContent = React.forwardRef<
React.ElementRef,
@@ -50,7 +50,7 @@ const TabsContent = React.forwardRef<
)}
{...props}
/>
-))
-TabsContent.displayName = TabsPrimitive.Content.displayName
+));
+TabsContent.displayName = TabsPrimitive.Content.displayName;
export { Tabs, TabsContent, TabsList, TabsTrigger };
diff --git a/frontend/components/ui/textarea.tsx b/frontend/components/ui/textarea.tsx
index d1258e4..2fb9690 100644
--- a/frontend/components/ui/textarea.tsx
+++ b/frontend/components/ui/textarea.tsx
@@ -1,6 +1,6 @@
-import * as React from "react"
+import * as React from "react";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
export interface TextareaProps
extends React.TextareaHTMLAttributes {}
@@ -16,9 +16,9 @@ const Textarea = React.forwardRef(
ref={ref}
{...props}
/>
- )
+ );
}
-)
-Textarea.displayName = "Textarea"
+);
+Textarea.displayName = "Textarea";
-export { Textarea }
+export { Textarea };
diff --git a/frontend/components/ui/toast.tsx b/frontend/components/ui/toast.tsx
index b4c4da6..16c5286 100644
--- a/frontend/components/ui/toast.tsx
+++ b/frontend/components/ui/toast.tsx
@@ -1,12 +1,12 @@
/* eslint-disable react/prop-types */
-import * as React from "react"
-import { Cross2Icon } from "@radix-ui/react-icons"
-import * as ToastPrimitives from "@radix-ui/react-toast"
-import { cva, type VariantProps } from "class-variance-authority"
+import * as React from "react";
+import { Cross2Icon } from "@radix-ui/react-icons";
+import * as ToastPrimitives from "@radix-ui/react-toast";
+import { cva, type VariantProps } from "class-variance-authority";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
-const ToastProvider = ToastPrimitives.Provider
+const ToastProvider = ToastPrimitives.Provider;
const ToastViewport = React.forwardRef<
React.ElementRef,
@@ -20,8 +20,8 @@ const ToastViewport = React.forwardRef<
)}
{...props}
/>
-))
-ToastViewport.displayName = ToastPrimitives.Viewport.displayName
+));
+ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
const toastVariants = cva(
"group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",
@@ -37,7 +37,7 @@ const toastVariants = cva(
variant: "default",
},
}
-)
+);
const Toast = React.forwardRef<
React.ElementRef,
@@ -50,9 +50,9 @@ const Toast = React.forwardRef<
className={cn(toastVariants({ variant }), className)}
{...props}
/>
- )
-})
-Toast.displayName = ToastPrimitives.Root.displayName
+ );
+});
+Toast.displayName = ToastPrimitives.Root.displayName;
const ToastAction = React.forwardRef<
React.ElementRef,
@@ -66,8 +66,8 @@ const ToastAction = React.forwardRef<
)}
{...props}
/>
-))
-ToastAction.displayName = ToastPrimitives.Action.displayName
+));
+ToastAction.displayName = ToastPrimitives.Action.displayName;
const ToastClose = React.forwardRef<
React.ElementRef,
@@ -84,8 +84,8 @@ const ToastClose = React.forwardRef<
>
-))
-ToastClose.displayName = ToastPrimitives.Close.displayName
+));
+ToastClose.displayName = ToastPrimitives.Close.displayName;
const ToastTitle = React.forwardRef<
React.ElementRef,
@@ -96,8 +96,8 @@ const ToastTitle = React.forwardRef<
className={cn("text-sm font-semibold [&+div]:text-xs", className)}
{...props}
/>
-))
-ToastTitle.displayName = ToastPrimitives.Title.displayName
+));
+ToastTitle.displayName = ToastPrimitives.Title.displayName;
const ToastDescription = React.forwardRef<
React.ElementRef,
@@ -108,12 +108,12 @@ const ToastDescription = React.forwardRef<
className={cn("text-sm opacity-90", className)}
{...props}
/>
-))
-ToastDescription.displayName = ToastPrimitives.Description.displayName
+));
+ToastDescription.displayName = ToastPrimitives.Description.displayName;
-type ToastProps = React.ComponentPropsWithoutRef
+type ToastProps = React.ComponentPropsWithoutRef;
-type ToastActionElement = React.ReactElement
+type ToastActionElement = React.ReactElement;
export {
type ToastProps,
@@ -125,4 +125,4 @@ export {
ToastDescription,
ToastClose,
ToastAction,
-}
+};
diff --git a/frontend/components/ui/toaster.tsx b/frontend/components/ui/toaster.tsx
index e223385..7d82ed5 100644
--- a/frontend/components/ui/toaster.tsx
+++ b/frontend/components/ui/toaster.tsx
@@ -1,4 +1,4 @@
-"use client"
+"use client";
import {
Toast,
@@ -7,11 +7,11 @@ import {
ToastProvider,
ToastTitle,
ToastViewport,
-} from "@/components/ui/toast"
-import { useToast } from "@/components/ui/use-toast"
+} from "@/components/ui/toast";
+import { useToast } from "@/components/ui/use-toast";
export function Toaster() {
- const { toasts } = useToast()
+ const { toasts } = useToast();
return (
@@ -27,9 +27,9 @@ export function Toaster() {
{action}
- )
+ );
})}
- )
+ );
}
diff --git a/frontend/components/ui/tooltip.tsx b/frontend/components/ui/tooltip.tsx
index cab4940..4646dac 100644
--- a/frontend/components/ui/tooltip.tsx
+++ b/frontend/components/ui/tooltip.tsx
@@ -1,16 +1,16 @@
/* eslint-disable react/prop-types */
-"use client"
+"use client";
-import * as React from "react"
-import * as TooltipPrimitive from "@radix-ui/react-tooltip"
+import * as React from "react";
+import * as TooltipPrimitive from "@radix-ui/react-tooltip";
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
-const TooltipProvider = TooltipPrimitive.Provider
+const TooltipProvider = TooltipPrimitive.Provider;
-const Tooltip = TooltipPrimitive.Root
+const Tooltip = TooltipPrimitive.Root;
-const TooltipTrigger = TooltipPrimitive.Trigger
+const TooltipTrigger = TooltipPrimitive.Trigger;
const TooltipContent = React.forwardRef<
React.ElementRef,
@@ -25,7 +25,7 @@ const TooltipContent = React.forwardRef<
)}
{...props}
/>
-))
-TooltipContent.displayName = TooltipPrimitive.Content.displayName
+));
+TooltipContent.displayName = TooltipPrimitive.Content.displayName;
-export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
+export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
diff --git a/frontend/components/ui/use-toast.ts b/frontend/components/ui/use-toast.ts
index 1671307..525b4e1 100644
--- a/frontend/components/ui/use-toast.ts
+++ b/frontend/components/ui/use-toast.ts
@@ -1,76 +1,73 @@
// Inspired by react-hot-toast library
-import * as React from "react"
+import * as React from "react";
-import type {
- ToastActionElement,
- ToastProps,
-} from "@/components/ui/toast"
+import type { ToastActionElement, ToastProps } from "@/components/ui/toast";
-const TOAST_LIMIT = 1
-const TOAST_REMOVE_DELAY = 1000000
+const TOAST_LIMIT = 1;
+const TOAST_REMOVE_DELAY = 1000000;
type ToasterToast = ToastProps & {
- id: string
- title?: React.ReactNode
- description?: React.ReactNode
- action?: ToastActionElement
-}
+ id: string;
+ title?: React.ReactNode;
+ description?: React.ReactNode;
+ action?: ToastActionElement;
+};
const actionTypes = {
ADD_TOAST: "ADD_TOAST",
UPDATE_TOAST: "UPDATE_TOAST",
DISMISS_TOAST: "DISMISS_TOAST",
REMOVE_TOAST: "REMOVE_TOAST",
-} as const
+} as const;
-let count = 0
+let count = 0;
function genId() {
- count = (count + 1) % Number.MAX_SAFE_INTEGER
- return count.toString()
+ count = (count + 1) % Number.MAX_SAFE_INTEGER;
+ return count.toString();
}
-type ActionType = typeof actionTypes
+type ActionType = typeof actionTypes;
type Action =
| {
- type: ActionType["ADD_TOAST"]
- toast: ToasterToast
+ type: ActionType["ADD_TOAST"];
+ toast: ToasterToast;
}
| {
- type: ActionType["UPDATE_TOAST"]
- toast: Partial
+ type: ActionType["UPDATE_TOAST"];
+ toast: Partial;
}
| {
- type: ActionType["DISMISS_TOAST"]
- toastId?: ToasterToast["id"]
+ type: ActionType["DISMISS_TOAST"];
+ toastId?: ToasterToast["id"];
}
| {
- type: ActionType["REMOVE_TOAST"]
- toastId?: ToasterToast["id"]
- }
+ type: ActionType["REMOVE_TOAST"];
+ toastId?: ToasterToast["id"];
+ };
interface State {
- toasts: ToasterToast[]
+ toasts: ToasterToast[];
}
-const toastTimeouts = new Map>()
+const toastTimeouts = new Map>();
const addToRemoveQueue = (toastId: string) => {
if (toastTimeouts.has(toastId)) {
- return
+ return;
}
const timeout = setTimeout(() => {
- toastTimeouts.delete(toastId)
+ toastTimeouts.delete(toastId);
dispatch({
type: "REMOVE_TOAST",
toastId: toastId,
- })
- }, TOAST_REMOVE_DELAY)
+ });
+ }, TOAST_REMOVE_DELAY);
- toastTimeouts.set(toastId, timeout)
-}
+ toastTimeouts.set(toastId, timeout);
+};
export const reducer = (state: State, action: Action): State => {
switch (action.type) {
@@ -78,7 +75,7 @@ export const reducer = (state: State, action: Action): State => {
return {
...state,
toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
- }
+ };
case "UPDATE_TOAST":
return {
@@ -86,19 +83,19 @@ export const reducer = (state: State, action: Action): State => {
toasts: state.toasts.map((t) =>
t.id === action.toast.id ? { ...t, ...action.toast } : t
),
- }
+ };
case "DISMISS_TOAST": {
- const { toastId } = action
+ const { toastId } = action;
// ! Side effects ! - This could be extracted into a dismissToast() action,
// but I'll keep it here for simplicity
if (toastId) {
- addToRemoveQueue(toastId)
+ addToRemoveQueue(toastId);
} else {
state.toasts.forEach((toast) => {
- addToRemoveQueue(toast.id)
- })
+ addToRemoveQueue(toast.id);
+ });
}
return {
@@ -111,44 +108,44 @@ export const reducer = (state: State, action: Action): State => {
}
: t
),
- }
+ };
}
case "REMOVE_TOAST":
if (action.toastId === undefined) {
return {
...state,
toasts: [],
- }
+ };
}
return {
...state,
toasts: state.toasts.filter((t) => t.id !== action.toastId),
- }
+ };
}
-}
+};
-const listeners: Array<(state: State) => void> = []
+const listeners: Array<(state: State) => void> = [];
-let memoryState: State = { toasts: [] }
+let memoryState: State = { toasts: [] };
function dispatch(action: Action) {
- memoryState = reducer(memoryState, action)
+ memoryState = reducer(memoryState, action);
listeners.forEach((listener) => {
- listener(memoryState)
- })
+ listener(memoryState);
+ });
}
-type Toast = Omit
+type Toast = Omit;
function toast({ ...props }: Toast) {
- const id = genId()
+ const id = genId();
const update = (props: ToasterToast) =>
dispatch({
type: "UPDATE_TOAST",
toast: { ...props, id },
- })
- const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id })
+ });
+ const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id });
dispatch({
type: "ADD_TOAST",
@@ -157,36 +154,36 @@ function toast({ ...props }: Toast) {
id,
open: true,
onOpenChange: (open) => {
- if (!open) dismiss()
+ if (!open) dismiss();
},
},
- })
+ });
return {
id: id,
dismiss,
update,
- }
+ };
}
function useToast() {
- const [state, setState] = React.useState(memoryState)
+ const [state, setState] = React.useState(memoryState);
React.useEffect(() => {
- listeners.push(setState)
+ listeners.push(setState);
return () => {
- const index = listeners.indexOf(setState)
+ const index = listeners.indexOf(setState);
if (index > -1) {
- listeners.splice(index, 1)
+ listeners.splice(index, 1);
}
- }
- }, [state])
+ };
+ }, [state]);
return {
...state,
toast,
dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }),
- }
+ };
}
-export { useToast, toast }
+export { useToast, toast };
diff --git a/frontend/lib/hooks/use-intersection-observer.ts b/frontend/lib/hooks/use-intersection-observer.ts
index 516428d..4a8d464 100644
--- a/frontend/lib/hooks/use-intersection-observer.ts
+++ b/frontend/lib/hooks/use-intersection-observer.ts
@@ -11,7 +11,7 @@ function useIntersectionObserver(
root = null,
rootMargin = "0%",
freezeOnceVisible = false,
- }: Args,
+ }: Args
): IntersectionObserverEntry | undefined {
const [entry, setEntry] = useState();
diff --git a/frontend/lib/hooks/use-local-storage.ts b/frontend/lib/hooks/use-local-storage.ts
index aa3984b..ba6e8c5 100644
--- a/frontend/lib/hooks/use-local-storage.ts
+++ b/frontend/lib/hooks/use-local-storage.ts
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
const useLocalStorage = (
key: string,
- initialValue: T,
+ initialValue: T
): [T, (value: T) => void] => {
const [storedValue, setStoredValue] = useState(initialValue);
diff --git a/frontend/lib/hooks/use-media-query.ts b/frontend/lib/hooks/use-media-query.ts
index c91e543..1dc4550 100644
--- a/frontend/lib/hooks/use-media-query.ts
+++ b/frontend/lib/hooks/use-media-query.ts
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
export default function useMediaQuery() {
const [device, setDevice] = useState<"mobile" | "tablet" | "desktop" | null>(
- null,
+ null
);
const [dimensions, setDimensions] = useState<{
width: number;
diff --git a/frontend/lib/mongodb.ts b/frontend/lib/mongodb.ts
index 8a60e40..b0fab7e 100644
--- a/frontend/lib/mongodb.ts
+++ b/frontend/lib/mongodb.ts
@@ -8,24 +8,24 @@ if (!uri) {
const options: MongoClientOptions = {};
-let client
-let clientPromise: Promise
+let client;
+let clientPromise: Promise;
if (process.env.NODE_ENV === "development") {
// In development mode, use a global variable so that the value
// is preserved across module reloads caused by HMR (Hot Module Replacement).
const globalWithMongo = global as typeof globalThis & {
- _mongoClientPromise?: Promise
- }
+ _mongoClientPromise?: Promise;
+ };
if (globalWithMongo._mongoClientPromise === undefined) {
- client = new MongoClient(uri)
- globalWithMongo._mongoClientPromise = client.connect()
+ client = new MongoClient(uri);
+ globalWithMongo._mongoClientPromise = client.connect();
}
- clientPromise = globalWithMongo._mongoClientPromise
+ clientPromise = globalWithMongo._mongoClientPromise;
} else {
// In production mode, it's best to not use a global variable.
- client = new MongoClient(uri, options)
- clientPromise = client.connect()
+ client = new MongoClient(uri, options);
+ clientPromise = client.connect();
}
-export default clientPromise
+export default clientPromise;
diff --git a/frontend/lib/prisma.ts b/frontend/lib/prisma.ts
index 5f642da..ddb8a17 100644
--- a/frontend/lib/prisma.ts
+++ b/frontend/lib/prisma.ts
@@ -8,4 +8,4 @@ const prisma = (global as any).prisma || new PrismaClient();
if (process.env.NODE_ENV === "development") (global as any).prisma = prisma;
-export default prisma;
\ No newline at end of file
+export default prisma;
diff --git a/frontend/lib/utils.ts b/frontend/lib/utils.ts
index 0679051..dd0a8b5 100644
--- a/frontend/lib/utils.ts
+++ b/frontend/lib/utils.ts
@@ -15,7 +15,7 @@ export const timeAgo = (timestamp: Date, timeOnly?: boolean): string => {
export async function fetcher(
input: RequestInfo,
- init?: RequestInit,
+ init?: RequestInit
): Promise {
const res = await fetch(input, init);
diff --git a/frontend/next.config.js b/frontend/next.config.js
index 11a75f7..2775d82 100644
--- a/frontend/next.config.js
+++ b/frontend/next.config.js
@@ -13,12 +13,12 @@ module.exports = {
},
{
protocol: "https",
- hostname: "avatars.githubusercontent.com"
+ hostname: "avatars.githubusercontent.com",
},
{
protocol: "https",
- hostname: "lh3.googleusercontent.com"
- }
+ hostname: "lh3.googleusercontent.com",
+ },
],
},
async redirects() {
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 87ac724..caa9901 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -47,7 +47,7 @@
"lodash": "^4.17.21",
"lucide-react": "^0.292.0",
"mongodb": "^6.2.0",
- "next": "^14.0.2",
+ "next": "^14.0.3",
"next-auth": "^4.24.5",
"next-mdx-remote": "^4.4.1",
"react": "18.2.0",
@@ -89,7 +89,7 @@
"postcss": "^8.4.31",
"prettier": "3.0.3",
"prettier-plugin-tailwindcss": "^0.5.6",
- "prisma": "^5.5.2",
+ "prisma": "^5.6.0",
"tailwindcss": "^3.3.5",
"typescript": "5.2.2",
"typescript-plugin-css-modules": "^5.0.2"
@@ -105,9 +105,9 @@
}
},
"node_modules/@adobe/css-tools": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz",
- "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz",
+ "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==",
"dev": true
},
"node_modules/@alloc/quick-lru": {
@@ -668,9 +668,9 @@
}
},
"node_modules/@next/env": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.2.tgz",
- "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA=="
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz",
+ "integrity": "sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA=="
},
"node_modules/@next/eslint-plugin-next": {
"version": "14.0.0",
@@ -682,9 +682,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.2.tgz",
- "integrity": "sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz",
+ "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==",
"cpu": [
"arm64"
],
@@ -697,9 +697,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.2.tgz",
- "integrity": "sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz",
+ "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==",
"cpu": [
"x64"
],
@@ -712,9 +712,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.2.tgz",
- "integrity": "sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz",
+ "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==",
"cpu": [
"arm64"
],
@@ -727,9 +727,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.2.tgz",
- "integrity": "sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz",
+ "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==",
"cpu": [
"arm64"
],
@@ -742,9 +742,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.2.tgz",
- "integrity": "sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz",
+ "integrity": "sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==",
"cpu": [
"x64"
],
@@ -757,9 +757,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.2.tgz",
- "integrity": "sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz",
+ "integrity": "sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==",
"cpu": [
"x64"
],
@@ -772,9 +772,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.2.tgz",
- "integrity": "sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz",
+ "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==",
"cpu": [
"arm64"
],
@@ -787,9 +787,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.2.tgz",
- "integrity": "sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz",
+ "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==",
"cpu": [
"ia32"
],
@@ -802,9 +802,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.2.tgz",
- "integrity": "sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz",
+ "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==",
"cpu": [
"x64"
],
@@ -897,9 +897,9 @@
}
},
"node_modules/@prisma/engines": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.5.2.tgz",
- "integrity": "sha512-Be5hoNF8k+lkB3uEMiCHbhbfF6aj1GnrTBnn5iYFT7GEr3TsOEp1soviEcBR0tYCgHbxjcIxJMhdbvxALJhAqg==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz",
+ "integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==",
"devOptional": true,
"hasInstallScript": true
},
@@ -8962,11 +8962,11 @@
}
},
"node_modules/next": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/next/-/next-14.0.2.tgz",
- "integrity": "sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz",
+ "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==",
"dependencies": {
- "@next/env": "14.0.2",
+ "@next/env": "14.0.3",
"@swc/helpers": "0.5.2",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001406",
@@ -8981,15 +8981,15 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.0.2",
- "@next/swc-darwin-x64": "14.0.2",
- "@next/swc-linux-arm64-gnu": "14.0.2",
- "@next/swc-linux-arm64-musl": "14.0.2",
- "@next/swc-linux-x64-gnu": "14.0.2",
- "@next/swc-linux-x64-musl": "14.0.2",
- "@next/swc-win32-arm64-msvc": "14.0.2",
- "@next/swc-win32-ia32-msvc": "14.0.2",
- "@next/swc-win32-x64-msvc": "14.0.2"
+ "@next/swc-darwin-arm64": "14.0.3",
+ "@next/swc-darwin-x64": "14.0.3",
+ "@next/swc-linux-arm64-gnu": "14.0.3",
+ "@next/swc-linux-arm64-musl": "14.0.3",
+ "@next/swc-linux-x64-gnu": "14.0.3",
+ "@next/swc-linux-x64-musl": "14.0.3",
+ "@next/swc-win32-arm64-msvc": "14.0.3",
+ "@next/swc-win32-ia32-msvc": "14.0.3",
+ "@next/swc-win32-x64-msvc": "14.0.3"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -13102,13 +13102,13 @@
"integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
},
"node_modules/prisma": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.5.2.tgz",
- "integrity": "sha512-WQtG6fevOL053yoPl6dbHV+IWgKo25IRN4/pwAGqcWmg7CrtoCzvbDbN9fXUc7QS2KK0LimHIqLsaCOX/vHl8w==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.6.0.tgz",
+ "integrity": "sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==",
"devOptional": true,
"hasInstallScript": true,
"dependencies": {
- "@prisma/engines": "5.5.2"
+ "@prisma/engines": "5.6.0"
},
"bin": {
"prisma": "build/index.js"
@@ -16557,9 +16557,9 @@
"dev": true
},
"@adobe/css-tools": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz",
- "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz",
+ "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==",
"dev": true
},
"@alloc/quick-lru": {
@@ -16962,9 +16962,9 @@
"requires": {}
},
"@next/env": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.2.tgz",
- "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA=="
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz",
+ "integrity": "sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA=="
},
"@next/eslint-plugin-next": {
"version": "14.0.0",
@@ -16976,57 +16976,57 @@
}
},
"@next/swc-darwin-arm64": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.2.tgz",
- "integrity": "sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz",
+ "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==",
"optional": true
},
"@next/swc-darwin-x64": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.2.tgz",
- "integrity": "sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz",
+ "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==",
"optional": true
},
"@next/swc-linux-arm64-gnu": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.2.tgz",
- "integrity": "sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz",
+ "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==",
"optional": true
},
"@next/swc-linux-arm64-musl": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.2.tgz",
- "integrity": "sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz",
+ "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==",
"optional": true
},
"@next/swc-linux-x64-gnu": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.2.tgz",
- "integrity": "sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz",
+ "integrity": "sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==",
"optional": true
},
"@next/swc-linux-x64-musl": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.2.tgz",
- "integrity": "sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz",
+ "integrity": "sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==",
"optional": true
},
"@next/swc-win32-arm64-msvc": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.2.tgz",
- "integrity": "sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz",
+ "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==",
"optional": true
},
"@next/swc-win32-ia32-msvc": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.2.tgz",
- "integrity": "sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz",
+ "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==",
"optional": true
},
"@next/swc-win32-x64-msvc": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.2.tgz",
- "integrity": "sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz",
+ "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==",
"optional": true
},
"@nodelib/fs.scandir": {
@@ -17080,9 +17080,9 @@
}
},
"@prisma/engines": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.5.2.tgz",
- "integrity": "sha512-Be5hoNF8k+lkB3uEMiCHbhbfF6aj1GnrTBnn5iYFT7GEr3TsOEp1soviEcBR0tYCgHbxjcIxJMhdbvxALJhAqg==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz",
+ "integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==",
"devOptional": true
},
"@prisma/engines-version": {
@@ -22291,20 +22291,20 @@
}
},
"next": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/next/-/next-14.0.2.tgz",
- "integrity": "sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==",
- "requires": {
- "@next/env": "14.0.2",
- "@next/swc-darwin-arm64": "14.0.2",
- "@next/swc-darwin-x64": "14.0.2",
- "@next/swc-linux-arm64-gnu": "14.0.2",
- "@next/swc-linux-arm64-musl": "14.0.2",
- "@next/swc-linux-x64-gnu": "14.0.2",
- "@next/swc-linux-x64-musl": "14.0.2",
- "@next/swc-win32-arm64-msvc": "14.0.2",
- "@next/swc-win32-ia32-msvc": "14.0.2",
- "@next/swc-win32-x64-msvc": "14.0.2",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz",
+ "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==",
+ "requires": {
+ "@next/env": "14.0.3",
+ "@next/swc-darwin-arm64": "14.0.3",
+ "@next/swc-darwin-x64": "14.0.3",
+ "@next/swc-linux-arm64-gnu": "14.0.3",
+ "@next/swc-linux-arm64-musl": "14.0.3",
+ "@next/swc-linux-x64-gnu": "14.0.3",
+ "@next/swc-linux-x64-musl": "14.0.3",
+ "@next/swc-win32-arm64-msvc": "14.0.3",
+ "@next/swc-win32-ia32-msvc": "14.0.3",
+ "@next/swc-win32-x64-msvc": "14.0.3",
"@swc/helpers": "0.5.2",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001406",
@@ -25006,12 +25006,12 @@
"integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
},
"prisma": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.5.2.tgz",
- "integrity": "sha512-WQtG6fevOL053yoPl6dbHV+IWgKo25IRN4/pwAGqcWmg7CrtoCzvbDbN9fXUc7QS2KK0LimHIqLsaCOX/vHl8w==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.6.0.tgz",
+ "integrity": "sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==",
"devOptional": true,
"requires": {
- "@prisma/engines": "5.5.2"
+ "@prisma/engines": "5.6.0"
}
},
"prop-types": {
diff --git a/frontend/package.json b/frontend/package.json
index f78b7d6..1630ab3 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -54,7 +54,7 @@
"lodash": "^4.17.21",
"lucide-react": "^0.292.0",
"mongodb": "^6.2.0",
- "next": "^14.0.2",
+ "next": "^14.0.3",
"next-auth": "^4.24.5",
"next-mdx-remote": "^4.4.1",
"react": "18.2.0",
@@ -96,7 +96,7 @@
"postcss": "^8.4.31",
"prettier": "3.0.3",
"prettier-plugin-tailwindcss": "^0.5.6",
- "prisma": "^5.5.2",
+ "prisma": "^5.6.0",
"tailwindcss": "^3.3.5",
"typescript": "5.2.2",
"typescript-plugin-css-modules": "^5.0.2"
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
index 7cbe9a5..c4f8343 100644
--- a/frontend/tailwind.config.js
+++ b/frontend/tailwind.config.js
@@ -1,14 +1,14 @@
-const { fontFamily } = require("tailwindcss/defaultTheme")
+const { fontFamily } = require("tailwindcss/defaultTheme");
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: ["class"],
content: [
- './pages/**/*.{ts,tsx}',
- './components/**/*.{ts,tsx}',
- './app/**/*.{ts,tsx}',
- './src/**/*.{ts,tsx}',
- ],
+ "./pages/**/*.{ts,tsx}",
+ "./components/**/*.{ts,tsx}",
+ "./app/**/*.{ts,tsx}",
+ "./src/**/*.{ts,tsx}",
+ ],
theme: {
container: {
center: true,
@@ -55,7 +55,7 @@ module.exports = {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
- statefarm: "#d62311"
+ statefarm: "#d62311",
},
borderRadius: {
lg: "var(--radius)",
@@ -79,4 +79,4 @@ module.exports = {
},
},
plugins: [require("tailwindcss-animate")],
-}
\ No newline at end of file
+};
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index e7b0971..7a47b0b 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -44,6 +44,12 @@
"@/icons": ["./components/shared/icons"]
}
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "lib/hooks/use-intersection-observer.ts"],
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ "lib/hooks/use-intersection-observer.ts"
+ ],
"exclude": ["node_modules"]
}
diff --git a/frontend/types/next-auth.d.ts b/frontend/types/next-auth.d.ts
index cd2eeae..fb140ac 100644
--- a/frontend/types/next-auth.d.ts
+++ b/frontend/types/next-auth.d.ts
@@ -5,16 +5,16 @@ declare module "next-auth" {
* Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context
*/
interface Session {
- accessToken?: any,
- user:{
- id?: any,
- } & DefaultSession["user"]
+ accessToken?: any;
+ user: {
+ id?: any;
+ } & DefaultSession["user"];
}
interface User {
- // access_token: any
- // id: any
- // & DefaultSession["user"]
+ // access_token: any
+ // id: any
+ // & DefaultSession["user"]
}
}
@@ -25,4 +25,4 @@ declare module "next-auth/jwt" {
access_token?: string;
id?: string;
}
-}
\ No newline at end of file
+}