diff --git a/.gitignore b/.gitignore index 1e7a76d..24b6ff9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ next-env.d.ts # expo .expo/ dist/ -expo-env.d.ts apps/expo/.gitignore # production diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 40a6e5f..eaf9f02 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -10,9 +10,7 @@ }, "dependencies": { "@acme/api": "workspace:^", - "@clerk/clerk-react": "^4.30.5", - "@clerk/clerk-sdk-node": "^4.13.9", - "@clerk/nextjs": "^4.29.7", + "@dnd-kit/core": "^6.1.0", "@hookform/resolvers": "^3.3.4", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.5", diff --git a/apps/nextjs/src/app/actions.ts b/apps/nextjs/src/app/actions.ts new file mode 100644 index 0000000..9cc9ef3 --- /dev/null +++ b/apps/nextjs/src/app/actions.ts @@ -0,0 +1,28 @@ +"use server"; + +import { revalidatePath } from "next/cache"; +import { redirect } from "next/navigation"; + +import { createClient } from "@/lib/utils/supabase/server"; + +export async function signup(formData: FormData) { + const supabase = createClient(); + + // type-casting here for convenience + // in practice, you should validate your inputs + const data = { + email: formData.get("email") as string, + password: formData.get("password") as string, + }; + + const { error } = await supabase.auth.signUp(data); + console.log("error", error); + if (error) { + // TODO: Form check error + redirect("/error"); + } + + revalidatePath("/", "layout"); + redirect("/"); + } + \ No newline at end of file diff --git a/apps/nextjs/src/app/auth/confirm/route.ts b/apps/nextjs/src/app/auth/confirm/route.ts index 1d140ee..90409e1 100644 --- a/apps/nextjs/src/app/auth/confirm/route.ts +++ b/apps/nextjs/src/app/auth/confirm/route.ts @@ -1,12 +1,9 @@ import { type EmailOtpType } from "@supabase/supabase-js"; -import { cookies } from "next/headers"; import { type NextRequest, NextResponse } from "next/server"; import { createClient } from "@/lib/utils/supabase/server"; export async function GET(request: NextRequest) { - const cookieStore = cookies(); - const { searchParams } = new URL(request.url); const token_hash = searchParams.get("token_hash"); const type = searchParams.get("type") as EmailOtpType | null; @@ -18,7 +15,7 @@ export async function GET(request: NextRequest) { redirectTo.searchParams.delete("type"); if (token_hash && type) { - const supabase = createClient(cookieStore); + const supabase = createClient(); const { error } = await supabase.auth.verifyOtp({ type, diff --git a/apps/nextjs/src/app/dashboard/Assignments.tsx b/apps/nextjs/src/app/dashboard/Assignments.tsx new file mode 100644 index 0000000..fb7a7f2 --- /dev/null +++ b/apps/nextjs/src/app/dashboard/Assignments.tsx @@ -0,0 +1,159 @@ +"use client"; + +import { useState } from "react"; +import { Metadata } from "next"; +import Image from "next/image"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + ResizableHandle, + ResizablePanel, + ResizablePanelGroup, +} from "@/components/ui/resizable"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import { Separator } from "@/components/ui/separator"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { DndContext, DragOverlay, useDroppable } from "@dnd-kit/core"; + +import { AssignmentCard, MemberCard } from "./components/cards"; +import { CalendarDateRangePicker } from "./components/date-range-picker"; +import { MainNav } from "./components/main-nav"; +import { Overview } from "./components/overview"; +import { RecentSales } from "./components/recent-sales"; +import { Search } from "./components/search"; +import TeamSwitcher from "./components/team-switcher"; +import { UserNav } from "./components/user-nav"; + +const tags = Array.from({ length: 50 }).map( + (_, i, a) => `v1.2.0-beta.${a.length - i}`, +); + +export default function Assignments() { + // XXX: Use real data via tRPC + const [members, setMembers] = useState<{ [key: string]: string[] }>( + Object.fromEntries(tags.map((x) => [`${x}M`, []])), + ); + const [assignments, setAssignments] = useState(tags.map((x) => `${x}A`)); + const [activeId, setActiveId] = useState(null); + // Inverted members + const reverseAssignmentToMembers = Object.fromEntries( + Object.entries(members).flatMap(([k, v]) => v.map((x) => [x, k])), + ); + // const [parent, setParent] = useState(null); + return ( + [...assignments, activeId as string]); + setMembers((members) => { + const prevMember = reverseAssignmentToMembers[activeId as string]; + return { + ...members, + [prevMember]: members[prevMember].filter((x) => x !== activeId), + }; + }); + setActiveId(null); + return; + } + if (members[overId].includes(activeId as string)) { + // Assignment already exists in the member's list + return; + } + const prevMember = reverseAssignmentToMembers[activeId as string]; + if (prevMember !== undefined) { + setMembers((members) => { + return { + ...members, + [overId]: [...members[overId], activeId as string], + [prevMember]: members[prevMember].filter((x) => x !== activeId), + }; + }); + } else { + setMembers((members) => { + return { + ...members, + [overId]: [...members[overId], activeId as string], + }; + }); + } + setAssignments((assignments) => + assignments.filter((x) => x !== activeId), + ); + setActiveId(null); + }} + > + + + +
+ {Object.entries(members).map(([name, values]) => ( + + ))} +
+
+
+ + + + + {activeId && } + + {/* + +
+ Two +
+
+ + +
+ Three +
+
+
*/} +
+
+
+ ); +} +function AssignmentList({ assignments }: { assignments: string[] }) { + const { isOver, setNodeRef } = useDroppable({ + id: "ASSIGNMENT_LIST", + }); + return ( + +
+ {assignments.map((x) => ( + + ))} +
+
+ ); +} diff --git a/apps/nextjs/src/app/dashboard/components/cards.tsx b/apps/nextjs/src/app/dashboard/components/cards.tsx new file mode 100644 index 0000000..dabd8d4 --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/cards.tsx @@ -0,0 +1,160 @@ +import * as React from "react"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@/components/ui/collapsible"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { DragOverlay, useDraggable, useDroppable } from "@dnd-kit/core"; + +// XXX: Properly conform to database types +export function MemberCard({ + user, + assignments, +}: { + user: string; + assignments: string[]; +}) { + const { isOver, setNodeRef } = useDroppable({ + id: user, + }); + return ( + // + + + + + + SC + + + Bryan Hu ({user}) + + + {assignments.length === 0 ? ( +

+ No assignments were assigned +

+ ) : ( + + + + See ({assignments.length}) assignment + {assignments.length > 1 && "s"} + + + {assignments.map((assignment) => ( + + ))} + + + + )} + + {/* */} + {/*
+
+
+ + +
+
+ + +
+
+
*/} +
+ {/* + + + */} +
+ ); +} +export function AssignmentCard({ assignment }: { assignment: string }) { + const { attributes, listeners, setNodeRef, transform } = useDraggable({ + id: assignment, + }); + const style = transform + ? { + transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`, + } + : undefined; + + return ( + + + Match Scouting Assignment + {assignment} + + + {" "} + I AM BORING + {/* */} + {/*
+
+
+ + +
+
+ + +
+
+
*/} +
+ {/* + + + */} +
+ ); +} diff --git a/apps/nextjs/src/app/dashboard/components/date-range-picker.tsx b/apps/nextjs/src/app/dashboard/components/date-range-picker.tsx new file mode 100644 index 0000000..4dec048 --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/date-range-picker.tsx @@ -0,0 +1,64 @@ +"use client"; + +import * as React from "react"; +import { Button } from "@/components/ui/button"; +import { Calendar } from "@/components/ui/calendar"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { cn } from "@/lib/utils"; +import { CalendarIcon } from "@radix-ui/react-icons"; +import { addDays, format } from "date-fns"; +import { DateRange } from "react-day-picker"; + +export function CalendarDateRangePicker({ + className, +}: React.HTMLAttributes) { + const [date, setDate] = React.useState({ + from: new Date(2023, 0, 20), + to: addDays(new Date(2023, 0, 20), 20), + }); + + return ( +
+ + + + + + + + +
+ ); +} diff --git a/apps/nextjs/src/app/dashboard/components/main-nav.tsx b/apps/nextjs/src/app/dashboard/components/main-nav.tsx new file mode 100644 index 0000000..3722ed3 --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/main-nav.tsx @@ -0,0 +1,37 @@ +import Link from "next/link"; +import { cn } from "@/lib/utils"; + +const NAV = { + Overview: "/examples/dashboard", + Customers: "/examples/dashboard", + Products: "/examples/dashboard", + Settings: "/examples/dashboard", +}; +export function MainNav({ + className, + currentlySelected, + ...props +}: React.HTMLAttributes & { currentlySelected?: string }) { + return ( + + ); +} diff --git a/apps/nextjs/src/app/dashboard/components/overview.tsx b/apps/nextjs/src/app/dashboard/components/overview.tsx new file mode 100644 index 0000000..60739cb --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/overview.tsx @@ -0,0 +1,84 @@ +"use client"; + +// import { Bar, BarChart, ResponsiveContainer, XAxis, YAxis } from "recharts"; + +const data = [ + { + name: "Jan", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Feb", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Mar", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Apr", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "May", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Jun", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Jul", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Aug", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Sep", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Oct", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Nov", + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: "Dec", + total: Math.floor(Math.random() * 5000) + 1000, + }, +]; + +export function Overview() { + return ( +

你的妈妈真可爱

+ // + // + // + // `$${value}`} + // /> + // + // + // + ); +} diff --git a/apps/nextjs/src/app/dashboard/components/recent-sales.tsx b/apps/nextjs/src/app/dashboard/components/recent-sales.tsx new file mode 100644 index 0000000..a2f80e1 --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/recent-sales.tsx @@ -0,0 +1,67 @@ +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; + +export function RecentSales() { + return ( +
+
+ + + OM + +
+

Olivia Martin

+

+ olivia.martin@email.com +

+
+
+$1,999.00
+
+
+ + + JL + +
+

Jackson Lee

+

jackson.lee@email.com

+
+
+$39.00
+
+
+ + + IN + +
+

Isabella Nguyen

+

+ isabella.nguyen@email.com +

+
+
+$299.00
+
+
+ + + WK + +
+

William Kim

+

will@email.com

+
+
+$99.00
+
+
+ + + SD + +
+

Sofia Davis

+

sofia.davis@email.com

+
+
+$39.00
+
+
+ ); +} diff --git a/apps/nextjs/src/app/dashboard/components/search.tsx b/apps/nextjs/src/app/dashboard/components/search.tsx new file mode 100644 index 0000000..69c09cf --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/search.tsx @@ -0,0 +1,13 @@ +import { Input } from "@/components/ui/input"; + +export function Search() { + return ( +
+ +
+ ); +} diff --git a/apps/nextjs/src/app/dashboard/components/team-switcher.tsx b/apps/nextjs/src/app/dashboard/components/team-switcher.tsx new file mode 100644 index 0000000..f3166a6 --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/team-switcher.tsx @@ -0,0 +1,211 @@ +"use client"; + +import * as React from "react"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Button } from "@/components/ui/button"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + CommandSeparator, +} from "@/components/ui/command"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { cn } from "@/lib/utils"; +import { + CaretSortIcon, + CheckIcon, + PlusCircledIcon, +} from "@radix-ui/react-icons"; + +const groups = [ + { + label: "Personal Account", + teams: [ + { + label: "Alicia Koch", + value: "personal", + }, + ], + }, + { + label: "Teams", + teams: [ + { + label: "Acme Inc.", + value: "acme-inc", + }, + { + label: "Monsters Inc.", + value: "monsters", + }, + ], + }, +]; + +type Team = (typeof groups)[number]["teams"][number]; + +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 [selectedTeam, setSelectedTeam] = React.useState( + groups[0].teams[0], + ); + + return ( + + + + + + + + + + No team found. + {groups.map((group) => ( + + {group.teams.map((team) => ( + { + setSelectedTeam(team); + setOpen(false); + }} + className="text-sm" + > + + + SC + + {team.label} + + + ))} + + ))} + + + + + + { + setOpen(false); + setShowNewTeamDialog(true); + }} + > + + Create Team + + + + + + + + + + Create team + + Add a new team to manage products and customers. + + +
+
+
+ + +
+
+ + +
+
+
+ + + + +
+
+ ); +} diff --git a/apps/nextjs/src/app/dashboard/components/user-nav.tsx b/apps/nextjs/src/app/dashboard/components/user-nav.tsx new file mode 100644 index 0000000..ccd662c --- /dev/null +++ b/apps/nextjs/src/app/dashboard/components/user-nav.tsx @@ -0,0 +1,58 @@ +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; + +export function UserNav() { + return ( + + + + + + +
+

shadcn

+

+ m@example.com +

+
+
+ + + + Profile + ⇧⌘P + + + Billing + ⌘B + + + Settings + ⌘S + + New Team + + + + Log out + ⇧⌘Q + +
+
+ ); +} diff --git a/apps/nextjs/src/app/dashboard/layout.tsx b/apps/nextjs/src/app/dashboard/layout.tsx index 14def33..2754c78 100644 --- a/apps/nextjs/src/app/dashboard/layout.tsx +++ b/apps/nextjs/src/app/dashboard/layout.tsx @@ -1,6 +1,11 @@ +import Image from "next/image"; + import "../globals.css"; -import { ClerkProvider } from "@clerk/nextjs"; +import { MainNav } from "./components/main-nav"; +import { Search } from "./components/search"; +import TeamSwitcher from "./components/team-switcher"; +import { UserNav } from "./components/user-nav"; export default function RootLayout({ children, @@ -8,10 +13,39 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - - - {children} - - + + +
+ Dashboard + Dashboard +
+
+
+
+ {/* */} + {/* XXX: Dynamic MainNav */} + +
+ + +
+
+
+ {children} +
+ + ); } diff --git a/apps/nextjs/src/app/dashboard/page.jsx b/apps/nextjs/src/app/dashboard/page.jsx deleted file mode 100644 index 138ae69..0000000 --- a/apps/nextjs/src/app/dashboard/page.jsx +++ /dev/null @@ -1,244 +0,0 @@ -"use client"; - -import * as React from "react"; -import Link from "next/link"; -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { - NavigationMenu, - NavigationMenuContent, - NavigationMenuItem, - NavigationMenuLink, - NavigationMenuList, - NavigationMenuTrigger, - navigationMenuTriggerStyle, -} from "@/components/ui/navigation-menu"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { UserButton } from "@clerk/nextjs"; - -export default function Component() { - return ( -
-
-
-
- - - FRC roboticss fklsjklf jslkfjlk - -
- - -
-
-
-
- - - Home - - - - - - - Assignments - - - - - - - Grades - - - - - - - Attendance - - - - - - - Sign Out - - - - - -
-
-
-
-
-
A
-
w
-
e
-
s
-
o
-
m
- {/* */} -
-
-
-
-
-
- ) -} - -function BookOpenIcon(props) { - return ( - // biome-ignore lint/a11y/noSvgWithoutTitle: - - - - - ) -} - - -function CalendarIcon(props) { - return ( - // biome-ignore lint/a11y/noSvgWithoutTitle: - - - - - - - ) -} - - -function HomeIcon(props) { - return ( - // biome-ignore lint/a11y/noSvgWithoutTitle: - - - - - ) -} - - -function Package2Icon(props) { - return ( - // biome-ignore lint/a11y/noSvgWithoutTitle: - - - - - - ) -} - - -function UserCheckIcon(props) { - return ( - // biome-ignore lint/a11y/noSvgWithoutTitle: - - - - - - ) -} diff --git a/apps/nextjs/src/app/dashboard/page.tsx b/apps/nextjs/src/app/dashboard/page.tsx new file mode 100644 index 0000000..45e85a7 --- /dev/null +++ b/apps/nextjs/src/app/dashboard/page.tsx @@ -0,0 +1,189 @@ +import { Metadata } from "next"; +import Image from "next/image"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + ResizableHandle, + ResizablePanel, + ResizablePanelGroup, +} from "@/components/ui/resizable"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import { Separator } from "@/components/ui/separator"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; + +import Assignments from "./Assignments"; +import { CalendarDateRangePicker } from "./components/date-range-picker"; +import { MainNav } from "./components/main-nav"; +import { Overview } from "./components/overview"; +import { RecentSales } from "./components/recent-sales"; +import { Search } from "./components/search"; +import TeamSwitcher from "./components/team-switcher"; +import { UserNav } from "./components/user-nav"; + +export const metadata: Metadata = { + title: "Dashboard", + description: "Example dashboard app built using the components.", +}; + +export default function DashboardPage() { + return ( +
+
+

Dashboard

+
+ {/* */} + {/* */} +
+
+ + + Scouting Assignments + + Attendance + + + Team Overview + + + Management + + + + + + {/* +
+ + + + Total Revenue + + + + + + +
$45,231.89
+

+ +20.1% from last month +

+
+
+ + + + Subscriptions + + + + + + + + +
+2350
+

+ +180.1% from last month +

+
+
+ + + Sales + + + + + + +
+12,234
+

+ +19% from last month +

+
+
+ + + + Active Now + + + + + + +
+573
+

+ +201 since last hour +

+
+
+
+
+ + + Overview + + + + + + + + Recent Sales + + You made 265 sales this month. + + + + + + +
+
*/} +
+
+ ); +} diff --git a/apps/nextjs/src/app/globals.css b/apps/nextjs/src/app/globals.css index 285f4c8..6a75725 100644 --- a/apps/nextjs/src/app/globals.css +++ b/apps/nextjs/src/app/globals.css @@ -1,7 +1,7 @@ @tailwind base; @tailwind components; @tailwind utilities; -/* + @layer base { :root { --background: 0 0% 100%; @@ -73,4 +73,4 @@ body { @apply bg-background text-foreground; } -} */ \ No newline at end of file +} \ No newline at end of file diff --git a/apps/nextjs/src/app/layout.tsx b/apps/nextjs/src/app/layout.tsx index 084de77..1fa798f 100644 --- a/apps/nextjs/src/app/layout.tsx +++ b/apps/nextjs/src/app/layout.tsx @@ -1,8 +1,8 @@ // import type { Metadata } from "next"; import type { Metadata } from "next/dist/lib/metadata/types/metadata-interface"; + // import { Inter } from "next/font/google"; -import { ClerkProvider } from "@clerk/nextjs"; import "./globals.css"; @@ -19,10 +19,8 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - - {children} - - + + {children} + ); } diff --git a/apps/nextjs/src/app/login/actions.ts b/apps/nextjs/src/app/login/actions.ts deleted file mode 100644 index 42196a6..0000000 --- a/apps/nextjs/src/app/login/actions.ts +++ /dev/null @@ -1,49 +0,0 @@ -"use server"; - -import { revalidatePath } from "next/cache"; -import { cookies } from "next/headers"; -import { redirect } from "next/navigation"; - -import { createClient } from "@/lib/utils/supabase/server"; - -export async function login(formData: FormData) { - const cookieStore = cookies(); - const supabase = createClient(cookieStore); - - // type-casting here for convenience - // in practice, you should validate your inputs - const data = { - email: formData.get("email") as string, - password: formData.get("password") as string, - }; - - const { error } = await supabase.auth.signInWithPassword(data); - - if (error) { - redirect("/error"); - } - - revalidatePath("/", "layout"); - redirect("/"); -} - -export async function signup(formData: FormData) { - const cookieStore = cookies(); - const supabase = createClient(cookieStore); - - // type-casting here for convenience - // in practice, you should validate your inputs - const data = { - email: formData.get("email") as string, - password: formData.get("password") as string, - }; - - const { error } = await supabase.auth.signUp(data); - - if (error) { - redirect("/error"); - } - - revalidatePath("/", "layout"); - redirect("/"); -} diff --git a/apps/nextjs/src/app/login/layout.tsx b/apps/nextjs/src/app/login/layout.tsx deleted file mode 100644 index 3d64e86..0000000 --- a/apps/nextjs/src/app/login/layout.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { ClerkProvider } from "@clerk/nextjs"; - -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { - return ( - - - {children} - - - ); -} diff --git a/apps/nextjs/src/app/login/page.tsx b/apps/nextjs/src/app/login/page.tsx deleted file mode 100644 index 9290e89..0000000 --- a/apps/nextjs/src/app/login/page.tsx +++ /dev/null @@ -1,15 +0,0 @@ -"use client"; - -import { createClient } from "@/lib/utils/supabase/client"; -import { SignIn, UserButton } from "@clerk/nextjs"; - -import { login, signup } from "./actions"; - -export default function LoginPage() { - const supabase = createClient(); - return ( -
- -
- ); -} diff --git a/apps/nextjs/src/app/page.jsx b/apps/nextjs/src/app/page.jsx deleted file mode 100644 index f8b2c76..0000000 --- a/apps/nextjs/src/app/page.jsx +++ /dev/null @@ -1,39 +0,0 @@ -"use client"; - -import * as React from "react"; -import Image from "next/image"; -import Link from "next/link"; -import { Button } from "@/components/ui/button"; -import { useAuth } from '@clerk/clerk-react'; -import {supabaseClient} from '../lib/utils/supabase/client'; - -export default function Home() { - const { getToken } = useAuth(); - - const fetchData = async () => { - console.log("IOM HERE") - // TODO #1: Replace with your JWT template name - const supabaseAccessToken = await getToken({ template: 'supabase' }); - - const supabase = await supabaseClient(supabaseAccessToken); - - // TODO #2: Replace with your database table name - - const { data, error } = await supabase.from('matches').select(); - - // TODO #3: Handle the response - console.log("DAAAAA: ", data); - }; - - return ( -
- - - -
- ); -} \ No newline at end of file diff --git a/apps/nextjs/src/app/page.tsx b/apps/nextjs/src/app/page.tsx new file mode 100644 index 0000000..a8ac4ed --- /dev/null +++ b/apps/nextjs/src/app/page.tsx @@ -0,0 +1,105 @@ +import { Metadata } from "next"; +import Image from "next/image"; +import Link from "next/link"; +import { buttonVariants } from "@/components/ui/button"; +import { SignUp } from "@/components/user-auth-form"; +import { cn } from "@/lib/utils"; + +import { signup } from "./actions"; + +export const metadata: Metadata = { + title: "Authentication", + description: "Authentication forms built using the components.", +}; + +export default function AuthenticationPage() { + return ( + <> +
+ Authentication + Authentication +
+
+ + Sign in + +
+
+ {/*
+ + + + Acme Inc +
*/} + {/*
+
+

+ “This library has saved me countless hours of work and + helped me deliver stunning designs to my clients faster than + ever before.” +

+
Sofia Davis
+
+
*/} +
+
+
+
+

+ Create an account +

+

+ Enter your email below to create your account +

+
+ +

+ By clicking continue, you agree to our{" "} + + Terms of Service + {" "} + and{" "} + + Privacy Policy + + . +

+
+
+
+ + ); +} diff --git a/apps/nextjs/src/app/sign-out/layout.tsx b/apps/nextjs/src/app/sign-out/layout.tsx deleted file mode 100644 index 14def33..0000000 --- a/apps/nextjs/src/app/sign-out/layout.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import "../globals.css"; - -import { ClerkProvider } from "@clerk/nextjs"; - -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { - return ( - - - {children} - - - ); -} diff --git a/apps/nextjs/src/app/sign-out/page.tsx b/apps/nextjs/src/app/sign-out/page.tsx deleted file mode 100644 index 4c6a74f..0000000 --- a/apps/nextjs/src/app/sign-out/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { SignOutButton, UserButton } from "@clerk/nextjs"; - -export default function SignOutPage() { - return ( -
- - -
- ); -} diff --git a/apps/nextjs/src/app/signin/actions.ts b/apps/nextjs/src/app/signin/actions.ts new file mode 100644 index 0000000..5355f59 --- /dev/null +++ b/apps/nextjs/src/app/signin/actions.ts @@ -0,0 +1,28 @@ +"use server"; + +import { revalidatePath } from "next/cache"; +import { redirect } from "next/navigation"; + +import { createClient } from "@/lib/utils/supabase/server"; + +export async function signin(formData: FormData) { + const supabase = createClient(); + + // type-casting here for convenience + // in practice, you should validate your inputs + const data = { + email: formData.get("email") as string, + password: formData.get("password") as string, + }; + + const { error } = await supabase.auth.signInWithPassword(data); + console.log("error", error); + if (error) { + // TODO: Form check error + redirect("/error"); + } + + revalidatePath("/", "layout"); + redirect("/dashboard"); +} + diff --git a/apps/nextjs/src/app/signin/layout.tsx b/apps/nextjs/src/app/signin/layout.tsx new file mode 100644 index 0000000..225b603 --- /dev/null +++ b/apps/nextjs/src/app/signin/layout.tsx @@ -0,0 +1,11 @@ +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + {children} + + ); +} diff --git a/apps/nextjs/src/app/signin/page.tsx b/apps/nextjs/src/app/signin/page.tsx new file mode 100644 index 0000000..a169025 --- /dev/null +++ b/apps/nextjs/src/app/signin/page.tsx @@ -0,0 +1,103 @@ +"use client"; + +import { Metadata } from "next"; +import Image from "next/image"; +import Link from "next/link"; +import { buttonVariants } from "@/components/ui/button"; +import { SignIn } from "@/components/user-auth-form"; +import { cn } from "@/lib/utils"; + +import { signin } from "./actions"; + +export default function LoginPage() { + return ( + <> +
+ Authentication + Authentication +
+
+ + Sign Up + +
+
+ {/*
+ + + + Acme Inc +
*/} + {/*
+
+

+ “This library has saved me countless hours of work and + helped me deliver stunning designs to my clients faster than + ever before.” +

+
Sofia Davis
+
+
*/} +
+
+
+
+

Sign In

+

+ No account?{" "} + + Sign up. + +

+
+ +

+ By clicking continue, you agree to our{" "} + + Terms of Service + {" "} + and{" "} + + Privacy Policy + + . +

+
+
+
+ + ); +} diff --git a/apps/nextjs/src/app/signout/layout.tsx b/apps/nextjs/src/app/signout/layout.tsx new file mode 100644 index 0000000..d408b0a --- /dev/null +++ b/apps/nextjs/src/app/signout/layout.tsx @@ -0,0 +1,13 @@ +import "../globals.css"; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + {children} + + ); +} diff --git a/apps/nextjs/src/app/signout/page.tsx b/apps/nextjs/src/app/signout/page.tsx new file mode 100644 index 0000000..8687a6c --- /dev/null +++ b/apps/nextjs/src/app/signout/page.tsx @@ -0,0 +1,3 @@ +export default function SignOutPage() { + return
yo wht
; +} diff --git a/apps/nextjs/src/components/icons.tsx b/apps/nextjs/src/components/icons.tsx new file mode 100644 index 0000000..4f90f28 --- /dev/null +++ b/apps/nextjs/src/components/icons.tsx @@ -0,0 +1,166 @@ +type IconProps = React.HTMLAttributes; + +export const Icons = { + logo: (props: IconProps) => ( + + + + + + ), + twitter: (props: IconProps) => ( + + + + ), + gitHub: (props: IconProps) => ( + + + + ), + radix: (props: IconProps) => ( + + + + + + ), + aria: (props: IconProps) => ( + + + + ), + npm: (props: IconProps) => ( + + + + ), + yarn: (props: IconProps) => ( + + + + ), + pnpm: (props: IconProps) => ( + + + + ), + react: (props: IconProps) => ( + + + + ), + tailwind: (props: IconProps) => ( + + + + ), + google: (props: IconProps) => ( + + + + + + + ), + apple: (props: IconProps) => ( + + + + ), + paypal: (props: IconProps) => ( + + + + ), + spinner: (props: IconProps) => ( + + + + ), +}; diff --git a/apps/nextjs/src/components/user-auth-form.tsx b/apps/nextjs/src/components/user-auth-form.tsx new file mode 100644 index 0000000..ba39c1f --- /dev/null +++ b/apps/nextjs/src/components/user-auth-form.tsx @@ -0,0 +1,179 @@ +"use client"; + +import * as React from "react"; +import Link from "next/link"; +import { Icons } from "@/components/icons"; +import { cn } from "@/lib/utils"; +import { createClient } from "@/lib/utils/supabase/client"; +import { Auth } from "@supabase/auth-ui-react"; + +import { Button } from "./ui/button"; +import { Input } from "./ui/input"; +import { Label } from "./ui/label"; + +interface UserAuthFormProps extends React.HTMLAttributes { + action: (event: FormData) => Promise; +} + +export function SignIn({ className, action, ...props }: UserAuthFormProps) { + const [isLoading, setIsLoading] = React.useState(false); + + async function onSubmit(formData: FormData) { + console.log("formData", formData); + setIsLoading(true); + await action(formData); + setIsLoading(false); + } + + return ( +
+
+
+
+ + + +
+ +
+
+
+
+ +
+
+ + Or continue with + +
+
+ +
+ ); +} +export function SignUp({ className, action, ...props }: UserAuthFormProps) { + const [isLoading, setIsLoading] = React.useState(false); + + async function onSubmit(formData: FormData) { + console.log("formData", formData); + setIsLoading(true); + await action(formData); + setIsLoading(false); + } + + return ( +
+
+
+
+ + + +
+ +

+ Already have an account?{" "} + + Sign in. + +

+
+
+
+
+ +
+
+ + Or continue with + +
+
+ +
+ ); +} diff --git a/apps/nextjs/src/lib/utils.ts b/apps/nextjs/src/lib/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/apps/nextjs/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/apps/nextjs/src/lib/utils/supabase/client.js b/apps/nextjs/src/lib/utils/supabase/client.js deleted file mode 100644 index 05d20f6..0000000 --- a/apps/nextjs/src/lib/utils/supabase/client.js +++ /dev/null @@ -1,10 +0,0 @@ - -import { createClient } from "@supabase/supabase-js"; - -export const supabaseClient = async (supabaseAccessToken) => { - const supabase = createClient(process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY, { - global: { headers: { Authorization: `Bearer ${supabaseAccessToken}` } }, - }); - return supabase; - }; - diff --git a/apps/nextjs/src/lib/utils/supabase/client.ts b/apps/nextjs/src/lib/utils/supabase/client.ts new file mode 100644 index 0000000..78ff395 --- /dev/null +++ b/apps/nextjs/src/lib/utils/supabase/client.ts @@ -0,0 +1,8 @@ +import { createBrowserClient } from '@supabase/ssr' + +export function createClient() { + return createBrowserClient( + process.env.NEXT_PUBLIC_SUPABASE_URL!, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! + ) +} \ No newline at end of file diff --git a/apps/nextjs/src/lib/utils/supabase/server.ts b/apps/nextjs/src/lib/utils/supabase/server.ts index 6b1f58c..59b492c 100644 --- a/apps/nextjs/src/lib/utils/supabase/server.ts +++ b/apps/nextjs/src/lib/utils/supabase/server.ts @@ -1,18 +1,20 @@ -import { createServerClient, type CookieOptions } from "@supabase/ssr"; -import { type cookies } from "next/headers"; +import { createServerClient, type CookieOptions } from '@supabase/ssr' +import { cookies } from 'next/headers' + +export function createClient() { + const cookieStore = cookies() -export function createClient(cookieStore: ReturnType) { return createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { cookies: { get(name: string) { - return cookieStore.get(name)?.value; + return cookieStore.get(name)?.value }, set(name: string, value: string, options: CookieOptions) { try { - cookieStore.set({ name, value, ...options }); + cookieStore.set({ name, value, ...options }) } catch (error) { // The `set` method was called from a Server Component. // This can be ignored if you have middleware refreshing @@ -21,7 +23,7 @@ export function createClient(cookieStore: ReturnType) { }, remove(name: string, options: CookieOptions) { try { - cookieStore.set({ name, value: "", ...options }); + cookieStore.set({ name, value: '', ...options }) } catch (error) { // The `delete` method was called from a Server Component. // This can be ignored if you have middleware refreshing @@ -29,6 +31,6 @@ export function createClient(cookieStore: ReturnType) { } }, }, - }, - ); -} + } + ) +} \ No newline at end of file diff --git a/apps/nextjs/tsconfig.json b/apps/nextjs/tsconfig.json index ede8aad..46c7eaf 100644 --- a/apps/nextjs/tsconfig.json +++ b/apps/nextjs/tsconfig.json @@ -21,6 +21,6 @@ "@/*": ["./src/*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "src/app/middleware.js", "src/app/api/trpc/[trpc]/route.js", "src/app/page.jsx", "src/lib/utils/supabase/client.js"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "src/app/middleware.js", "src/app/api/trpc/[trpc]/route.js", "src/app/page.tsx", "src/lib/utils/supabase/client.js"], "exclude": ["node_modules"] } diff --git a/packages/db/schema.ts b/packages/db/schema.ts index b9b0a2a..77f1f75 100644 --- a/packages/db/schema.ts +++ b/packages/db/schema.ts @@ -12,21 +12,21 @@ import { varchar, } from "drizzle-orm/pg-core"; -export const post = pgTable("post", { - id: varchar("id", { length: 256 }).primaryKey(), - title: varchar("name", { length: 256 }).notNull(), - content: varchar("content", { length: 256 }).notNull(), - authorId: varchar("author_id", { length: 256 }) - .notNull() - .references(() => profile.id), - createdAt: timestamp("created_at") - .default(sql`CURRENT_TIMESTAMP`) - .notNull(), -}); +// export const post = pgTable("post", { +// id: varchar("id", { length: 256 }).primaryKey(), +// title: varchar("name", { length: 256 }).notNull(), +// content: varchar("content", { length: 256 }).notNull(), +// authorId: varchar("author_id", { length: 256 }) +// .notNull() +// .references(() => profile.id), +// createdAt: timestamp("created_at") +// .default(sql`CURRENT_TIMESTAMP`) +// .notNull(), +// }); -export const postRelations = relations(post, ({ one }) => ({ - author: one(profile, { fields: [post.authorId], references: [profile.id] }), -})); +// export const postRelations = relations(post, ({ one }) => ({ +// author: one(profile, { fields: [post.authorId], references: [profile.id] }), +// })); export const profileRoleEnum = pgEnum("profile_role", [ "default", // default role @@ -178,9 +178,9 @@ export const qualitativeScouting = pgTable("qualitative_scouting", { driverAwareness: varchar("driver_awareness", { length: 256 }).notNull(), driverAbility: varchar("driver_ability", { length: 256 }).notNull(), }); -export const profileRelations = relations(profile, ({ many }) => ({ - posts: many(post), -})); +// export const profileRelations = relations(profile, ({ many }) => ({ +// posts: many(post), +// })); // Attendance schema diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ded6eea..94367e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -174,15 +174,9 @@ importers: '@acme/api': specifier: workspace:^ version: link:../../packages/api - '@clerk/clerk-react': - specifier: ^4.30.5 - version: 4.30.5(react@18.2.0) - '@clerk/clerk-sdk-node': - specifier: ^4.13.9 - version: 4.13.9(react@18.2.0) - '@clerk/nextjs': - specifier: ^4.29.7 - version: 4.29.7(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) + '@dnd-kit/core': + specifier: ^6.1.0 + version: 6.1.0(react-dom@18.2.0)(react@18.2.0) '@hookform/resolvers': specifier: ^3.3.4 version: 3.3.4(react-hook-form@7.50.1) @@ -2018,100 +2012,44 @@ packages: react-native: 0.72.6(@babel/core@7.23.6)(@babel/preset-env@7.23.6)(react@18.2.0) dev: false - /@clerk/backend@0.38.1(react@18.2.0): - resolution: {integrity: sha512-Nnr+j2V0RwFp/CFjlp7VenGPACilhAVD2j1c49fxjQUuAWeLd/z/5efb9mp7kgZup8oxpOHoMDjO2ndWY4rPqA==} - engines: {node: '>=14'} + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} dependencies: - '@clerk/shared': 1.3.1(react@18.2.0) - '@clerk/types': 3.62.0 - '@peculiar/webcrypto': 1.4.1 - '@types/node': 16.18.6 - cookie: 0.5.0 - deepmerge: 4.2.2 - node-fetch-native: 1.0.1 - snakecase-keys: 5.4.4 - tslib: 2.4.1 - transitivePeerDependencies: - - react - dev: false + '@jridgewell/trace-mapping': 0.3.9 + dev: true - /@clerk/clerk-react@4.30.5(react@18.2.0): - resolution: {integrity: sha512-jWSbgjWW3ny+ctQKpz/c8CwascliDtaa/8FyHX7tqKlV7vFeR9N/AjaZIUKHrbeGpRk+b/RM2xHLoZS4nZ4V6A==} - engines: {node: '>=14'} + /@dnd-kit/accessibility@3.1.0(react@18.2.0): + resolution: {integrity: sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==} peerDependencies: - react: '>=16' + react: '>=16.8.0' dependencies: - '@clerk/shared': 1.3.1(react@18.2.0) - '@clerk/types': 3.62.0 react: 18.2.0 - tslib: 2.4.1 - dev: false - - /@clerk/clerk-sdk-node@4.13.9(react@18.2.0): - resolution: {integrity: sha512-SRATpmPcN5IkdewasiJyvSoKNnNnk+Igb/tpjNV6hM9zS3tbWwJx/haUtR76tTjmloUQemVBl5oVr0hnZTq3kg==} - engines: {node: '>=14'} - dependencies: - '@clerk/backend': 0.38.1(react@18.2.0) - '@clerk/shared': 1.3.1(react@18.2.0) - '@clerk/types': 3.62.0 - '@types/cookies': 0.7.7 - '@types/express': 4.17.14 - '@types/node-fetch': 2.6.2 - camelcase-keys: 6.2.2 - snakecase-keys: 3.2.1 - tslib: 2.4.1 - transitivePeerDependencies: - - react + tslib: 2.6.2 dev: false - /@clerk/nextjs@4.29.7(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tPvIp4GXCsjcKankLRpPPQGDWmpmlB2tm+p656/OUUmzPMeDnk5Euc86HjSk+5C9BAHVatrveRth6fHa4yzNhQ==} - engines: {node: '>=14'} + /@dnd-kit/core@6.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==} peerDependencies: - next: '>=10' - react: ^17.0.2 || ^18.0.0-0 - react-dom: ^17.0.2 || ^18.0.0-0 + react: '>=16.8.0' + react-dom: '>=16.8.0' dependencies: - '@clerk/backend': 0.38.1(react@18.2.0) - '@clerk/clerk-react': 4.30.5(react@18.2.0) - '@clerk/clerk-sdk-node': 4.13.9(react@18.2.0) - '@clerk/shared': 1.3.1(react@18.2.0) - '@clerk/types': 3.62.0 - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) - path-to-regexp: 6.2.1 + '@dnd-kit/accessibility': 3.1.0(react@18.2.0) + '@dnd-kit/utilities': 3.2.2(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.4.1 + tslib: 2.6.2 dev: false - /@clerk/shared@1.3.1(react@18.2.0): - resolution: {integrity: sha512-nzv4+uA90I/eQp55zfK9a1Po9VgCYlzlNhuZnKqyRsPyJ38l4gpIf3B3qSHHdN0+MTx9cWGFrik1CnpftdOBXQ==} + /@dnd-kit/utilities@3.2.2(react@18.2.0): + resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} peerDependencies: - react: '>=16' - peerDependenciesMeta: - react: - optional: true + react: '>=16.8.0' dependencies: - glob-to-regexp: 0.4.1 - js-cookie: 3.0.1 react: 18.2.0 - swr: 2.2.0(react@18.2.0) - dev: false - - /@clerk/types@3.62.0: - resolution: {integrity: sha512-rjtdPqNJtfayCrqOCi20i46rw7X5yzAiOoh0Dzl7KX8kdBWQn06UxpgREPEp/3gFS2imVFRyXtx+fUGRwOGjaw==} - engines: {node: '>=14'} - dependencies: - csstype: 3.1.1 + tslib: 2.6.2 dev: false - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@drizzle-team/studio@0.0.37: resolution: {integrity: sha512-LZyAPGJBX43jsrVZh7+w1Jig/BC6PJx63ReHUYK+GRQYNY9UJNlPXmn1uC/LMRX+A7JwYM4Sr4Fg/hnJSqlfgA==} dependencies: @@ -3354,32 +3292,6 @@ packages: rimraf: 3.0.2 dev: false - /@peculiar/asn1-schema@2.3.8: - resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} - dependencies: - asn1js: 3.0.5 - pvtsutils: 1.3.5 - tslib: 2.6.2 - dev: false - - /@peculiar/json-schema@1.1.12: - resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} - engines: {node: '>=8.0.0'} - dependencies: - tslib: 2.6.2 - dev: false - - /@peculiar/webcrypto@1.4.1: - resolution: {integrity: sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw==} - engines: {node: '>=10.12.0'} - dependencies: - '@peculiar/asn1-schema': 2.3.8 - '@peculiar/json-schema': 1.1.12 - pvtsutils: 1.3.5 - tslib: 2.6.2 - webcrypto-core: 1.7.8 - dev: false - /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -6610,28 +6522,6 @@ packages: '@babel/types': 7.23.6 dev: true - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.11.19 - dev: false - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.11.19 - dev: false - - /@types/cookies@0.7.7: - resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} - dependencies: - '@types/connect': 3.4.38 - '@types/express': 4.17.14 - '@types/keygrip': 1.0.6 - '@types/node': 20.11.19 - dev: false - /@types/eslint@8.44.9: resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==} dependencies: @@ -6643,24 +6533,6 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/express-serve-static-core@4.17.43: - resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} - dependencies: - '@types/node': 20.11.19 - '@types/qs': 6.9.10 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: false - - /@types/express@4.17.14: - resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.43 - '@types/qs': 6.9.10 - '@types/serve-static': 1.15.5 - dev: false - /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -6672,10 +6544,6 @@ packages: resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==} dev: false - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: false - /@types/inquirer@6.5.0: resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} dependencies: @@ -6705,33 +6573,10 @@ packages: /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - /@types/keygrip@1.0.6: - resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} - dev: false - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: false - - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: false - /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/node-fetch@2.6.2: - resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} - dependencies: - '@types/node': 20.11.19 - form-data: 3.0.1 - dev: false - - /@types/node@16.18.6: - resolution: {integrity: sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==} - dev: false - /@types/node@20.11.19: resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} dependencies: @@ -6756,10 +6601,6 @@ packages: resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} dev: false - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: false - /@types/react-dom@18.2.17: resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} dependencies: @@ -6779,21 +6620,6 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: false - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.11.19 - dev: false - - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 20.11.19 - dev: false - /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: false @@ -7282,15 +7108,6 @@ packages: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false - /asn1js@3.0.5: - resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} - engines: {node: '>=12.0.0'} - dependencies: - pvtsutils: 1.3.5 - pvutils: 1.1.3 - tslib: 2.6.2 - dev: false - /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -7771,15 +7588,6 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: false - /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -8260,10 +8068,6 @@ packages: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} - /csstype@3.1.1: - resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - dev: false - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -8343,11 +8147,6 @@ packages: /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /deepmerge@4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} - engines: {node: '>=0.10.0'} - dev: false - /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -8532,13 +8331,6 @@ packages: no-case: 2.3.2 dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: false - /dotenv-cli@7.3.0: resolution: {integrity: sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==} dependencies: @@ -10085,10 +9877,6 @@ packages: dependencies: is-glob: 4.0.3 - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false - /glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} @@ -10934,11 +10722,6 @@ packages: resolution: {integrity: sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==} dev: false - /js-cookie@3.0.1: - resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==} - engines: {node: '>=12'} - dev: false - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -11393,12 +11176,6 @@ packages: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.2 - dev: false - /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} @@ -11444,11 +11221,6 @@ packages: tmpl: 1.0.5 dev: false - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: false - /md5-file@3.2.3: resolution: {integrity: sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==} engines: {node: '>=0.10'} @@ -12119,13 +11891,6 @@ packages: lower-case: 1.1.4 dev: true - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 - dev: false - /nocache@3.0.4: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} engines: {node: '>=12.0.0'} @@ -12142,10 +11907,6 @@ packages: minimatch: 3.1.2 dev: false - /node-fetch-native@1.0.1: - resolution: {integrity: sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==} - dev: false - /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -12606,10 +12367,6 @@ packages: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: false - /path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} - dev: false - /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -13019,17 +12776,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /pvtsutils@1.3.5: - resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} - dependencies: - tslib: 2.6.2 - dev: false - - /pvutils@1.1.3: - resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} - engines: {node: '>=6.0.0'} - dev: false - /qrcode-terminal@0.11.0: resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} dev: false @@ -13071,11 +12817,6 @@ packages: inherits: 2.0.4 dev: false - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: false - /ramda@0.29.1: resolution: {integrity: sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==} dev: false @@ -14053,30 +13794,6 @@ packages: no-case: 2.3.2 dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: false - - /snakecase-keys@3.2.1: - resolution: {integrity: sha512-CjU5pyRfwOtaOITYv5C8DzpZ8XA/ieRsDpr93HI2r6e3YInC6moZpSQbmUtg8cTk58tq2x3jcG2gv+p1IZGmMA==} - engines: {node: '>=8'} - dependencies: - map-obj: 4.3.0 - to-snake-case: 1.0.0 - dev: false - - /snakecase-keys@5.4.4: - resolution: {integrity: sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA==} - engines: {node: '>=12'} - dependencies: - map-obj: 4.3.0 - snake-case: 3.0.4 - type-fest: 2.19.0 - dev: false - /socks-proxy-agent@8.0.2: resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} engines: {node: '>= 14'} @@ -14414,15 +14131,6 @@ packages: upper-case: 1.1.3 dev: true - /swr@2.2.0(react@18.2.0): - resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) - dev: false - /tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} dev: false @@ -14680,28 +14388,12 @@ packages: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - /to-no-case@1.0.2: - resolution: {integrity: sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==} - dev: false - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /to-snake-case@1.0.0: - resolution: {integrity: sha512-joRpzBAk1Bhi2eGEYBjukEWHOe/IvclOkiJl3DtA91jV6NwQ3MwXA4FHYeqk8BNp/D8bmi9tcNbRu/SozP0jbQ==} - dependencies: - to-space-case: 1.0.0 - dev: false - - /to-space-case@1.0.0: - resolution: {integrity: sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==} - dependencies: - to-no-case: 1.0.2 - dev: false - /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -14777,10 +14469,6 @@ packages: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: false - /tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: false - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -14883,11 +14571,6 @@ packages: engines: {node: '>=8'} dev: false - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: false - /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -15221,16 +14904,6 @@ packages: dependencies: defaults: 1.0.4 - /webcrypto-core@1.7.8: - resolution: {integrity: sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==} - dependencies: - '@peculiar/asn1-schema': 2.3.8 - '@peculiar/json-schema': 1.1.12 - asn1js: 3.0.5 - pvtsutils: 1.3.5 - tslib: 2.6.2 - dev: false - /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false