├── app
├── favicon.ico
├── api
│ ├── auth
│ │ └── [...nextauth]
│ │ │ └── route.ts
│ └── protected
│ │ └── route.ts
├── client-example
│ └── page.tsx
├── middleware-example
│ └── page.tsx
├── server-example
│ └── page.tsx
├── layout.tsx
├── api-example
│ └── page.tsx
├── policy
│ └── page.tsx
├── globals.css
└── page.tsx
├── public
└── logo.png
├── postcss.config.js
├── .env.example
├── lib
└── utils.ts
├── next.config.js
├── .gitignore
├── middleware.ts
├── components.json
├── components
├── header.tsx
├── auth-components.tsx
├── footer.tsx
├── ui
│ ├── input.tsx
│ ├── avatar.tsx
│ ├── button.tsx
│ ├── navigation-menu.tsx
│ └── dropdown-menu.tsx
├── custom-link.tsx
├── session-data.tsx
├── user-button.tsx
├── client-example.tsx
└── main-nav.tsx
├── tsconfig.json
├── prisma
├── schema.prisma
└── migrations
│ └── 20240208153010_authjs_init
│ └── migration.sql
├── auth.ts
├── package.json
├── tailwind.config.js
├── README.md
└── pnpm-lock.yaml
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ndom91/authjs-prisma-edge-example/HEAD/app/favicon.ico
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ndom91/authjs-prisma-edge-example/HEAD/public/logo.png
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/app/api/auth/[...nextauth]/route.ts:
--------------------------------------------------------------------------------
1 | import { handlers } from "auth"
2 | export const { GET, POST } = handlers
3 |
4 | export const runtime = "edge"
5 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | # `openssl rand -hex 33` or `pnpm dlx auth secret`
2 | AUTH_SECRET=
3 |
4 | # Prisma
5 | AUTH_POSTGRES_PRISMA_URL=""
6 |
7 | AUTH_GITHUB_ID=
8 | AUTH_GITHUB_SECRET=
9 |
--------------------------------------------------------------------------------
/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | webpack(config) {
4 | config.experiments = {
5 | asyncWebAssembly: true,
6 | layers: true,
7 | }
8 |
9 | return config
10 | },
11 | }
12 | module.exports = nextConfig
13 |
--------------------------------------------------------------------------------
/app/api/protected/route.ts:
--------------------------------------------------------------------------------
1 | import { auth } from "auth"
2 |
3 | export const GET = auth((req: any) => {
4 | if (req.auth) {
5 | return Response.json({ data: "Protected data" })
6 | }
7 |
8 | return Response.json({ message: "Not authenticated" }, { status: 401 })
9 | }) as any
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
3 | node_modules/
4 | logs
5 | *.log
6 | npm-debug.log*
7 | yarn-debug.log*
8 | yarn-error.log*
9 | lerna-debug.log*
10 | .yarn-integrity
11 | .npm
12 |
13 | .eslintcache
14 |
15 | *.tsbuildinfo
16 | next-env.d.ts
17 |
18 | .next
19 | .vercel
20 | .env*.local
21 | .env
22 |
--------------------------------------------------------------------------------
/middleware.ts:
--------------------------------------------------------------------------------
1 | export { auth as middleware } from "auth"
2 |
3 | // Read more: https://nextjs.org/docs/app/building-your-application/routing/middleware#matcher
4 | export const config = {
5 | matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
6 | }
7 |
8 | export const runtime = "experimental-edge"
9 |
--------------------------------------------------------------------------------
/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": true,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "app/globals.css",
9 | "baseColor": "slate",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/components",
14 | "utils": "@/lib/utils"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/components/header.tsx:
--------------------------------------------------------------------------------
1 | import { MainNav } from "./main-nav"
2 | import UserButton from "./user-button"
3 |
4 | export default function Header() {
5 | return (
6 |
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/app/client-example/page.tsx:
--------------------------------------------------------------------------------
1 | import { auth } from "auth"
2 | import ClientExample from "@/components/client-example"
3 | import { SessionProvider } from "next-auth/react"
4 |
5 | export default async function ClientPage() {
6 | const session = await auth()
7 | if (session?.user) {
8 | // filter out sensitive data before passing to client.
9 | session.user = {
10 | name: session.user.name,
11 | email: session.user.email,
12 | image: session.user.image,
13 | }
14 | }
15 |
16 | return (
17 |
18 |
19 |
20 | )
21 | }
22 |
--------------------------------------------------------------------------------
/app/middleware-example/page.tsx:
--------------------------------------------------------------------------------
1 | import CustomLink from "@/components/custom-link"
2 |
3 | export default function Page() {
4 | return (
5 |
6 |
Middleware usage
7 |
8 | This page is protected by using the universal{" "}
9 |
10 | auth()
11 | {" "}
12 | method in{" "}
13 |
14 | Next.js Middleware
15 |
16 | .
17 |
18 |
19 | )
20 | }
21 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true,
17 | "plugins": [
18 | {
19 | "name": "next"
20 | }
21 | ],
22 | "paths": {
23 | "@/*": ["./*"],
24 | "auth": ["./auth"]
25 | }
26 | },
27 | "include": [
28 | "process.d.ts",
29 | "next-env.d.ts",
30 | "**/*.ts",
31 | "**/*.tsx",
32 | ".next/types/**/*.ts"
33 | ],
34 | "exclude": ["node_modules"]
35 | }
36 |
--------------------------------------------------------------------------------
/components/auth-components.tsx:
--------------------------------------------------------------------------------
1 | import { signIn, signOut } from "auth"
2 | import { Button } from "./ui/button"
3 |
4 | export function SignIn({
5 | provider,
6 | ...props
7 | }: { provider?: string } & React.ComponentPropsWithRef) {
8 | return (
9 |
17 | )
18 | }
19 |
20 | export function SignOut(props: React.ComponentPropsWithRef) {
21 | return (
22 |
33 | )
34 | }
35 |
--------------------------------------------------------------------------------
/app/server-example/page.tsx:
--------------------------------------------------------------------------------
1 | import CustomLink from "@/components/custom-link"
2 | import SessionData from "@/components/session-data"
3 | import { auth } from "auth"
4 |
5 | export default async function Page() {
6 | const session = await auth()
7 | return (
8 |
9 |
React Server Component Usage
10 |
11 | This page is server-rendered as a{" "}
12 |
13 | React Server Component
14 |
15 | . It gets the session data on the server using{" "}
16 |
17 | auth()
18 | {" "}
19 | method.
20 |
21 |
22 |
23 | )
24 | }
25 |
--------------------------------------------------------------------------------
/components/footer.tsx:
--------------------------------------------------------------------------------
1 | import CustomLink from "./custom-link"
2 | import packageJSON from "../package.json"
3 |
4 | export default function Footer() {
5 | return (
6 |
19 | )
20 | }
21 |
--------------------------------------------------------------------------------
/components/ui/input.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | export interface InputProps extends React.InputHTMLAttributes {}
6 |
7 | const Input = React.forwardRef(
8 | ({ className, type, ...props }, ref) => {
9 | return (
10 |
19 | )
20 | },
21 | )
22 | Input.displayName = "Input"
23 |
24 | export { Input }
25 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import "./globals.css"
2 | import type { Metadata } from "next"
3 | import { Inter } from "next/font/google"
4 | import Footer from "@/components/footer"
5 | import Header from "@/components/header"
6 |
7 | const inter = Inter({ subsets: ["latin"] })
8 |
9 | export const metadata: Metadata = {
10 | title: "NextAuth.js Example",
11 | description: "This is an example site to demonstrate how to use NextAuth.js for authentication",
12 | }
13 |
14 | export default function RootLayout({ children }: React.PropsWithChildren) {
15 | return (
16 |
17 |
18 |
19 |
20 |
21 | {children}
22 |
23 |
24 |
25 |
26 |
27 | )
28 | }
29 |
--------------------------------------------------------------------------------
/components/custom-link.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from "@/lib/utils"
2 | import { ExternalLink } from "lucide-react"
3 | import Link from "next/link"
4 |
5 | interface CustomLinkProps extends React.LinkHTMLAttributes {
6 | href: string
7 | }
8 |
9 | const CustomLink = ({ href, children, className, ...rest }: CustomLinkProps) => {
10 | const isInternalLink = href.startsWith("/")
11 | const isAnchorLink = href.startsWith("#")
12 |
13 | if (isInternalLink || isAnchorLink) {
14 | return (
15 |
16 | {children}
17 |
18 | )
19 | }
20 |
21 | return (
22 |
29 | {children}
30 |
31 |
32 | )
33 | }
34 |
35 | export default CustomLink
36 |
--------------------------------------------------------------------------------
/components/session-data.tsx:
--------------------------------------------------------------------------------
1 | import type { Session } from "next-auth"
2 |
3 | export default function SessionData({ session }: { session: Session | null }) {
4 | if (session?.user) {
5 | return (
6 |
7 |
Current Session Data
8 | {Object.keys(session.user).length > 3 ? (
9 |
10 | In this example, the whole session object is passed to the page, including the raw user
11 | object. Our recommendation is to only pass the necessary fields to the page, as
12 | the raw user object may contain sensitive information.
13 |
14 | ) : (
15 |
16 | In this example, only some fields in the user object is passed to the page to avoid
17 | exposing sensitive information.
18 |
19 | )}
20 |
{JSON.stringify(session, null, 2)}
21 |
22 | )
23 | }
24 |
25 | return (
26 |
27 | No session data, please Sign In first.
28 |
29 | )
30 | }
31 |
--------------------------------------------------------------------------------
/app/api-example/page.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 | import CustomLink from "@/components/custom-link"
3 | import { useEffect, useState } from "react"
4 |
5 | export default function Page() {
6 | const [data, setData] = useState()
7 | useEffect(() => {
8 | ;(async () => {
9 | const res = await fetch("/api/protected")
10 | const json = await res.json()
11 | setData(json)
12 | })()
13 | }, [])
14 | return (
15 |
16 |
Route Handler Usage
17 |
18 | This page fetches data from an API{" "}
19 |
20 | Route Handler
21 |
22 | . The API is protected using the universal{" "}
23 |
24 | auth()
25 | {" "}
26 | method.
27 |
28 |
Data from API Route:
29 |
30 | {JSON.stringify(data, null, 2)}
31 |
32 |
33 | )
34 | }
35 |
--------------------------------------------------------------------------------
/app/policy/page.tsx:
--------------------------------------------------------------------------------
1 | export default function PolicyPage() {
2 | return (
3 |
4 |
5 | Terms of Service
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
8 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
9 | PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
10 | FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
12 | DEALINGS IN THE SOFTWARE.
13 |
14 |
15 |
16 | Privacy Policy
17 | This site uses JSON Web Tokens and an in-memory database which resets every ~2 hours.
18 |
19 | Data provided to this site is exclusively used to support signing in and is not passed to
20 | any third party services, other than via SMTP or OAuth for the purposes of authentication.
21 |
22 |
23 |
24 | )
25 | }
26 |
--------------------------------------------------------------------------------
/prisma/schema.prisma:
--------------------------------------------------------------------------------
1 | datasource db {
2 | provider = "postgres"
3 | url = env("AUTH_POSTGRES_PRISMA_URL")
4 | directUrl = env("AUTH_POSTGRES_URL_NON_POOLING")
5 | }
6 |
7 | generator client {
8 | provider = "prisma-client-js"
9 | previewFeatures = ["driverAdapters"]
10 | }
11 |
12 | model User {
13 | id String @id @default(cuid())
14 | name String?
15 | email String @unique
16 | emailVerified DateTime?
17 | image String?
18 | accounts Account[]
19 | sessions Session[]
20 | }
21 |
22 | model Account {
23 | userId String
24 | type String
25 | provider String
26 | providerAccountId String
27 | refresh_token String?
28 | access_token String?
29 | expires_at Int?
30 | token_type String?
31 | scope String?
32 | id_token String?
33 | session_state String?
34 |
35 | user User @relation(fields: [userId], references: [id], onDelete: Cascade)
36 |
37 | @@id([provider, providerAccountId])
38 | }
39 |
40 | model Session {
41 | sessionToken String @unique
42 | userId String
43 | expires DateTime
44 | user User @relation(fields: [userId], references: [id], onDelete: Cascade)
45 | }
46 |
47 | model VerificationToken {
48 | identifier String
49 | token String @unique
50 | expires DateTime
51 |
52 | @@id([identifier, token])
53 | }
54 |
--------------------------------------------------------------------------------
/components/user-button.tsx:
--------------------------------------------------------------------------------
1 | import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar"
2 | import { Button } from "./ui/button"
3 | import { auth } from "auth"
4 | import {
5 | DropdownMenu,
6 | DropdownMenuContent,
7 | DropdownMenuItem,
8 | DropdownMenuLabel,
9 | DropdownMenuTrigger,
10 | } from "./ui/dropdown-menu"
11 | import { SignIn, SignOut } from "./auth-components"
12 |
13 | export default async function UserButton() {
14 | const session = await auth()
15 | if (!session?.user) return
16 | return (
17 |
18 |
19 |
20 |
21 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
{session.user.name}
32 |
{session.user.email}
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | )
41 | }
42 |
--------------------------------------------------------------------------------
/auth.ts:
--------------------------------------------------------------------------------
1 | import NextAuth from "next-auth"
2 | import GitHub from "next-auth/providers/github"
3 | import Credentials from "next-auth/providers/credentials"
4 | import { PrismaClient } from "@prisma/client"
5 | import { PrismaAdapter } from "@auth/prisma-adapter"
6 | import { PrismaNeon } from "@prisma/adapter-neon"
7 | import { Pool } from "@neondatabase/serverless"
8 |
9 | const neon = new Pool({
10 | connectionString: process.env.AUTH_POSTGRES_PRISMA_URL,
11 | })
12 | const adapter = new PrismaNeon(neon)
13 | const prisma = new PrismaClient({ adapter })
14 |
15 | export const {
16 | handlers,
17 | auth,
18 | signIn,
19 | signOut,
20 | unstable_update: update,
21 | } = NextAuth({
22 | adapter: PrismaAdapter(prisma),
23 | providers: [
24 | GitHub,
25 | Credentials({
26 | credentials: { password: { label: "Password", type: "password" } },
27 | async authorize(credentials) {
28 | if (credentials.password !== "password") return null
29 | return {
30 | id: "1",
31 | name: "Fill Murray",
32 | email: "bill@fillmurray.com",
33 | image: "https://source.boringavatars.com/marble/120",
34 | }
35 | },
36 | }),
37 | ],
38 | callbacks: {
39 | // authorized({ request, auth }) {
40 | // const { pathname } = request.nextUrl
41 | // if (pathname === "/middleware-example") return !!auth
42 | // return true
43 | // },
44 | jwt({ token, trigger, session }) {
45 | if (trigger === "update") token.name = session?.user?.name
46 | return token
47 | },
48 | },
49 | })
50 |
--------------------------------------------------------------------------------
/components/ui/avatar.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as AvatarPrimitive from "@radix-ui/react-avatar"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Avatar = React.forwardRef<
9 | React.ElementRef,
10 | React.ComponentPropsWithoutRef
11 | >(({ className, ...props }, ref) => (
12 |
17 | ))
18 | Avatar.displayName = AvatarPrimitive.Root.displayName
19 |
20 | const AvatarImage = React.forwardRef<
21 | React.ElementRef,
22 | React.ComponentPropsWithoutRef
23 | >(({ className, ...props }, ref) => (
24 |
29 | ))
30 | AvatarImage.displayName = AvatarPrimitive.Image.displayName
31 |
32 | const AvatarFallback = React.forwardRef<
33 | React.ElementRef,
34 | React.ComponentPropsWithoutRef
35 | >(({ className, ...props }, ref) => (
36 |
44 | ))
45 | AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
46 |
47 | export { Avatar, AvatarImage, AvatarFallback }
48 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "authjs-prisma-edge-example",
3 | "version": "0.1.0",
4 | "description": "An example project for Auth.js Prisma Edge Client",
5 | "repository": "https://github.com/ndom91/authjs-prisma-edge-example.git",
6 | "author": "ndom91 ",
7 | "license": "MIT",
8 | "scripts": {
9 | "dev": "next",
10 | "build": "next build",
11 | "start": "next start",
12 | "db:generate": "pnpm exec prisma generate",
13 | "db:migrate": "pnpm exec prisma migrate dev",
14 | "db:studio": "pnpm exec prisma studio",
15 | "postinstall": "pnpm db:generate"
16 | },
17 | "dependencies": {
18 | "@auth/prisma-adapter": "^1.5.2",
19 | "@neondatabase/serverless": "^0.9.0",
20 | "@prisma/adapter-neon": "5.12.0",
21 | "@prisma/client": "5.12.0",
22 | "@radix-ui/react-avatar": "^1.0.4",
23 | "@radix-ui/react-collapsible": "^1.0.3",
24 | "@radix-ui/react-dropdown-menu": "^2.0.6",
25 | "@radix-ui/react-navigation-menu": "^1.1.4",
26 | "@radix-ui/react-slot": "^1.0.2",
27 | "class-variance-authority": "^0.7.0",
28 | "clsx": "^2.1.0",
29 | "lucide-react": "^0.364.0",
30 | "next": "14.2.0-canary.56",
31 | "next-auth": "5.0.0-beta.16",
32 | "prisma": "5.12.0",
33 | "react": "^18.2.0",
34 | "react-dom": "^18.2.0",
35 | "tailwind-merge": "^2.2.2"
36 | },
37 | "devDependencies": {
38 | "@types/node": "^20",
39 | "@types/react": "^18.2.74",
40 | "@types/react-dom": "^18.2.23",
41 | "autoprefixer": "^10.4.19",
42 | "postcss": "^8.4.38",
43 | "prettier": "^3.2.5",
44 | "tailwindcss": "^3.4.3",
45 | "tailwindcss-animate": "^1.0.7",
46 | "typescript": "^5.4.3"
47 | },
48 | "prettier": {
49 | "semi": false,
50 | "printWidth": 100
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | :root {
7 | --background: 0 0% 100%;
8 | --foreground: 222.2 84% 4.9%;
9 |
10 | --card: 0 0% 100%;
11 | --card-foreground: 222.2 84% 4.9%;
12 |
13 | --popover: 0 0% 100%;
14 | --popover-foreground: 222.2 84% 4.9%;
15 |
16 | --primary: 222.2 47.4% 11.2%;
17 | --primary-foreground: 210 40% 98%;
18 |
19 | --secondary: 210 40% 96.1%;
20 | --secondary-foreground: 222.2 47.4% 11.2%;
21 |
22 | --muted: 210 40% 96.1%;
23 | --muted-foreground: 215.4 16.3% 46.9%;
24 |
25 | --accent: 210 40% 96.1%;
26 | --accent-foreground: 222.2 47.4% 11.2%;
27 |
28 | --destructive: 0 84.2% 60.2%;
29 | --destructive-foreground: 210 40% 98%;
30 |
31 | --border: 214.3 31.8% 91.4%;
32 | --input: 214.3 31.8% 91.4%;
33 | --ring: 222.2 84% 4.9%;
34 |
35 | --radius: 0.5rem;
36 | }
37 |
38 | .dark {
39 | --background: 222.2 84% 4.9%;
40 | --foreground: 210 40% 98%;
41 |
42 | --card: 222.2 84% 4.9%;
43 | --card-foreground: 210 40% 98%;
44 |
45 | --popover: 222.2 84% 4.9%;
46 | --popover-foreground: 210 40% 98%;
47 |
48 | --primary: 210 40% 98%;
49 | --primary-foreground: 222.2 47.4% 11.2%;
50 |
51 | --secondary: 217.2 32.6% 17.5%;
52 | --secondary-foreground: 210 40% 98%;
53 |
54 | --muted: 217.2 32.6% 17.5%;
55 | --muted-foreground: 215 20.2% 65.1%;
56 |
57 | --accent: 217.2 32.6% 17.5%;
58 | --accent-foreground: 210 40% 98%;
59 |
60 | --destructive: 0 62.8% 30.6%;
61 | --destructive-foreground: 210 40% 98%;
62 |
63 | --border: 217.2 32.6% 17.5%;
64 | --input: 217.2 32.6% 17.5%;
65 | --ring: 212.7 26.8% 83.9%;
66 | }
67 | }
68 |
69 | @layer base {
70 | * {
71 | @apply border-border;
72 | }
73 | body {
74 | @apply bg-background text-foreground;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/components/ui/button.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { Slot } from "@radix-ui/react-slot"
3 | import { cva, type VariantProps } from "class-variance-authority"
4 |
5 | import { cn } from "@/lib/utils"
6 |
7 | const buttonVariants = cva(
8 | "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
9 | {
10 | variants: {
11 | variant: {
12 | default: "bg-primary text-primary-foreground hover:bg-primary/90",
13 | destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
14 | outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
15 | secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
16 | ghost: "hover:bg-accent hover:text-accent-foreground",
17 | link: "text-primary underline-offset-4 hover:underline",
18 | },
19 | size: {
20 | default: "h-10 px-4 py-2",
21 | sm: "h-9 rounded-md px-3",
22 | lg: "h-11 rounded-md px-8",
23 | icon: "h-10 w-10",
24 | },
25 | },
26 | defaultVariants: {
27 | variant: "default",
28 | size: "default",
29 | },
30 | },
31 | )
32 |
33 | export interface ButtonProps
34 | extends React.ButtonHTMLAttributes,
35 | VariantProps {
36 | asChild?: boolean
37 | }
38 |
39 | const Button = React.forwardRef(
40 | ({ className, variant, size, asChild = false, ...props }, ref) => {
41 | const Comp = asChild ? Slot : "button"
42 | return (
43 |
44 | )
45 | },
46 | )
47 | Button.displayName = "Button"
48 |
49 | export { Button, buttonVariants }
50 |
--------------------------------------------------------------------------------
/components/client-example.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useSession } from "next-auth/react"
4 | import { Button } from "./ui/button"
5 | import { Input } from "./ui/input"
6 | import { useState } from "react"
7 | import SessionData from "./session-data"
8 | import CustomLink from "./custom-link"
9 |
10 | const UpdateForm = () => {
11 | const { data: session, update } = useSession()
12 | const [name, setName] = useState(`New ${session?.user?.name}` ?? "")
13 |
14 | if (!session?.user) return null
15 | return (
16 | <>
17 | Updating the session client-side
18 |
19 | {
24 | setName(e.target.value)
25 | }}
26 | />
27 | update({ user: { name } })} type="submit">
28 | Update
29 |
30 |
31 | >
32 | )
33 | }
34 |
35 | export default function ClientExample() {
36 | const { data: session, status } = useSession()
37 | return (
38 |
39 |
Client Side Rendering Usage
40 |
41 | This page fetches session data client side using the{" "}
42 |
43 | useSession
44 | {" "}
45 | React Hook.
46 |
47 |
48 | It needs the{" "}
49 |
50 | 'use client'
51 | {" "}
52 | directive at the top of the file to enable client side rendering, and the{" "}
53 |
54 | SessionProvider
55 | {" "}
56 | component in{" "}
57 |
58 | client-example/page.tsx
59 | {" "}
60 | to provide the session data.
61 |
62 |
63 | {status === "loading" ?
Loading...
:
}
64 |
65 |
66 | )
67 | }
68 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | darkMode: ["class"],
4 | content: [
5 | "./pages/**/*.{ts,tsx}",
6 | "./components/**/*.{ts,tsx}",
7 | "./app/**/*.{ts,tsx}",
8 | "./src/**/*.{ts,tsx}",
9 | ],
10 | theme: {
11 | container: {
12 | center: true,
13 | padding: "2rem",
14 | screens: {
15 | "2xl": "1400px",
16 | },
17 | },
18 | extend: {
19 | colors: {
20 | border: "hsl(var(--border))",
21 | input: "hsl(var(--input))",
22 | ring: "hsl(var(--ring))",
23 | background: "hsl(var(--background))",
24 | foreground: "hsl(var(--foreground))",
25 | primary: {
26 | DEFAULT: "hsl(var(--primary))",
27 | foreground: "hsl(var(--primary-foreground))",
28 | },
29 | secondary: {
30 | DEFAULT: "hsl(var(--secondary))",
31 | foreground: "hsl(var(--secondary-foreground))",
32 | },
33 | destructive: {
34 | DEFAULT: "hsl(var(--destructive))",
35 | foreground: "hsl(var(--destructive-foreground))",
36 | },
37 | muted: {
38 | DEFAULT: "hsl(var(--muted))",
39 | foreground: "hsl(var(--muted-foreground))",
40 | },
41 | accent: {
42 | DEFAULT: "hsl(var(--accent))",
43 | foreground: "hsl(var(--accent-foreground))",
44 | },
45 | popover: {
46 | DEFAULT: "hsl(var(--popover))",
47 | foreground: "hsl(var(--popover-foreground))",
48 | },
49 | card: {
50 | DEFAULT: "hsl(var(--card))",
51 | foreground: "hsl(var(--card-foreground))",
52 | },
53 | },
54 | borderRadius: {
55 | lg: "var(--radius)",
56 | md: "calc(var(--radius) - 2px)",
57 | sm: "calc(var(--radius) - 4px)",
58 | },
59 | keyframes: {
60 | "accordion-down": {
61 | from: { height: 0 },
62 | to: { height: "var(--radix-accordion-content-height)" },
63 | },
64 | "accordion-up": {
65 | from: { height: "var(--radix-accordion-content-height)" },
66 | to: { height: 0 },
67 | },
68 | },
69 | animation: {
70 | "accordion-down": "accordion-down 0.2s ease-out",
71 | "accordion-up": "accordion-up 0.2s ease-out",
72 | },
73 | },
74 | },
75 | plugins: [require("tailwindcss-animate")],
76 | }
77 |
--------------------------------------------------------------------------------
/prisma/migrations/20240208153010_authjs_init/migration.sql:
--------------------------------------------------------------------------------
1 | -- CreateTable
2 | CREATE TABLE "User" (
3 | "id" TEXT NOT NULL,
4 | "name" TEXT,
5 | "email" TEXT NOT NULL,
6 | "emailVerified" TIMESTAMP(3),
7 | "image" TEXT,
8 |
9 | CONSTRAINT "User_pkey" PRIMARY KEY ("id")
10 | );
11 |
12 | -- CreateTable
13 | CREATE TABLE "Account" (
14 | "userId" TEXT NOT NULL,
15 | "type" TEXT NOT NULL,
16 | "provider" TEXT NOT NULL,
17 | "providerAccountId" TEXT NOT NULL,
18 | "refresh_token" TEXT,
19 | "access_token" TEXT,
20 | "expires_at" INTEGER,
21 | "token_type" TEXT,
22 | "scope" TEXT,
23 | "id_token" TEXT,
24 | "session_state" TEXT,
25 |
26 | CONSTRAINT "Account_pkey" PRIMARY KEY ("provider","providerAccountId")
27 | );
28 |
29 | -- CreateTable
30 | CREATE TABLE "Session" (
31 | "sessionToken" TEXT NOT NULL,
32 | "userId" TEXT NOT NULL,
33 | "expires" TIMESTAMP(3) NOT NULL
34 | );
35 |
36 | -- CreateTable
37 | CREATE TABLE "VerificationToken" (
38 | "identifier" TEXT NOT NULL,
39 | "token" TEXT NOT NULL,
40 | "expires" TIMESTAMP(3) NOT NULL,
41 |
42 | CONSTRAINT "VerificationToken_pkey" PRIMARY KEY ("identifier","token")
43 | );
44 |
45 | -- CreateTable
46 | CREATE TABLE "Authenticator" (
47 | "id" TEXT NOT NULL,
48 | "credentialID" TEXT NOT NULL,
49 | "userId" TEXT NOT NULL,
50 | "providerAccountId" TEXT NOT NULL,
51 | "credentialPublicKey" TEXT NOT NULL,
52 | "counter" INTEGER NOT NULL,
53 | "credentialDeviceType" TEXT NOT NULL,
54 | "credentialBackedUp" BOOLEAN NOT NULL,
55 | "transports" TEXT,
56 |
57 | CONSTRAINT "Authenticator_pkey" PRIMARY KEY ("id")
58 | );
59 |
60 | -- CreateIndex
61 | CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
62 |
63 | -- CreateIndex
64 | CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken");
65 |
66 | -- CreateIndex
67 | CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token");
68 |
69 | -- CreateIndex
70 | CREATE UNIQUE INDEX "Authenticator_credentialID_key" ON "Authenticator"("credentialID");
71 |
72 | -- AddForeignKey
73 | ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
74 |
75 | -- AddForeignKey
76 | ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
77 |
78 | -- AddForeignKey
79 | ALTER TABLE "Authenticator" ADD CONSTRAINT "Authenticator_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
80 |
--------------------------------------------------------------------------------
/components/main-nav.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import Image from "next/image"
4 |
5 | import { cn } from "@/lib/utils"
6 | import CustomLink from "./custom-link"
7 | import {
8 | NavigationMenu,
9 | NavigationMenuContent,
10 | NavigationMenuItem,
11 | NavigationMenuLink,
12 | NavigationMenuList,
13 | NavigationMenuTrigger,
14 | navigationMenuTriggerStyle,
15 | } from "./ui/navigation-menu"
16 | import React from "react"
17 | import { Button } from "./ui/button"
18 |
19 | export function MainNav() {
20 | return (
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | Server Side
29 |
30 |
31 |
32 | Protecting React Server Component.
33 |
34 |
35 | Using Middleware to protect pages & APIs.
36 |
37 |
38 | Getting the session inside an API Route.
39 |
40 |
41 |
42 |
43 |
44 |
48 | Client Side
49 |
50 |
51 |
52 |
53 |
54 | )
55 | }
56 |
57 | const ListItem = React.forwardRef, React.ComponentPropsWithoutRef<"a">>(
58 | ({ className, title, children, ...props }, ref) => {
59 | return (
60 |
61 |
62 |
70 | {title}
71 | {children}
72 |
73 |
74 |
75 | )
76 | },
77 | )
78 | ListItem.displayName = "ListItem"
79 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Auth.js + Prisma Edge Example App
5 |
6 | Open Source. Full Stack. Own Your Data.
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | ## 🧭 Overview
16 |
17 | This is an example application showing [Auth.js](https://authjs.dev) (`next-auth@5.0.0-beta.15`) and [Prisma](https://prisma.io) (`@prisma/client@5.12.0`) working together in edge runtimes, like Vercel's middleware or Cloudflare Workers.
18 |
19 | This had previously only been possible with significant workarounds and limitations. As of `@prisma/client@5.9.1` Prisma began making changes to their client, for example, to error out at query-time, not instantiation. So you could begin using Prisma with `next-auth` in Edge runtimes, as long as you didn't actually execute any queries on the edge. This implied using the Auth.js setting `session: { strategy: 'jwt' }`, as the `strategy: 'database'` didn't work because we couldn't update the expiry time of a database-based session in the `middleware` handler.
20 |
21 | Prisma has now rolled out edge-compatible clients and adapters which communicate via HTTP, making them much more straightforward to run under any JavaScript runtime. You can check out their [edge deployment](https://www.prisma.io/docs/orm/prisma-client/deployment/edge/overview#which-database-drivers-are-edge-compatible) page for a current list of supported adapters and platforms.
22 |
23 | As this example shows, however, using Prisma + Auth.js with an Edge-compatible database provider and adapter like Neon (Vercel Postgres), PlanetScale or Turso is beginning to become much more straightforward!
24 |
25 | ## 🚀 Getting Started
26 |
27 | ### 1. Clone the repository and install dependencies
28 |
29 | ```bash
30 | git clone https://github.com/ndom91/authjs-prisma-edge-example.git
31 | cd authjs-prisma-edge-example
32 | pnpm install
33 | ```
34 |
35 | ### 2. Configure your local environment
36 |
37 | Copy the .env.local.example file in this directory to .env.local (which will be ignored by Git):
38 |
39 | ```bash
40 | cp .env.example .env
41 | ```
42 |
43 | Make sure to fill out the `AUTH_SECRET` env var as well as your Prisma database connection string(s). Also, don't forget to add environment variables to configure any of the [supported providers](https://authjs.dev/reference/core/providers) for Auth.js login.
44 |
45 | ### 3. Database
46 |
47 | This example is configured to use a [Neon Postgres](https://neon.tech) database ([Vercel Postgres](https://vercel.com/storage/postgres) also works). Any Prisma Edge compatible database driver should work with a bit of tweaking though, these currently include:
48 |
49 | - **PlanetScale** serverless driver with `@prisma/adapter-planetscale`
50 | - **Neon** serverless driver with `@prisma/adapter-neon`
51 | - **Turso** with `@prisma/adapter-libsql`
52 | - **Cloudflare D1** with `@prisma/adapter-d1`
53 | - **PostgreSQL** with `@prisma/adapter-pg`
54 |
55 | See Prisma's Edge compatible driver [documentation](https://www.prisma.io/docs/orm/prisma-client/deployment/edge/overview) for more details.
56 |
57 | ### 4. Start the application
58 |
59 | To run your site locally, use:
60 |
61 | ```bash
62 | pnpm dev
63 | ```
64 |
65 | ## 📝 License
66 |
67 | MIT
68 |
--------------------------------------------------------------------------------
/components/ui/navigation-menu.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
3 | import { cva } from "class-variance-authority"
4 | import { ChevronDown } from "lucide-react"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const NavigationMenu = React.forwardRef<
9 | React.ElementRef,
10 | React.ComponentPropsWithoutRef
11 | >(({ className, children, ...props }, ref) => (
12 |
17 | {children}
18 |
19 |
20 | ))
21 | NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName
22 |
23 | const NavigationMenuList = React.forwardRef<
24 | React.ElementRef,
25 | React.ComponentPropsWithoutRef
26 | >(({ className, ...props }, ref) => (
27 |
32 | ))
33 | NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName
34 |
35 | const NavigationMenuItem = NavigationMenuPrimitive.Item
36 |
37 | const navigationMenuTriggerStyle = cva(
38 | "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50",
39 | )
40 |
41 | const NavigationMenuTrigger = React.forwardRef<
42 | React.ElementRef,
43 | React.ComponentPropsWithoutRef
44 | >(({ className, children, ...props }, ref) => (
45 |
50 | {children}{" "}
51 |
55 |
56 | ))
57 | NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName
58 |
59 | const NavigationMenuContent = React.forwardRef<
60 | React.ElementRef,
61 | React.ComponentPropsWithoutRef
62 | >(({ className, ...props }, ref) => (
63 |
71 | ))
72 | NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName
73 |
74 | const NavigationMenuLink = NavigationMenuPrimitive.Link
75 |
76 | const NavigationMenuViewport = React.forwardRef<
77 | React.ElementRef,
78 | React.ComponentPropsWithoutRef
79 | >(({ className, ...props }, ref) => (
80 |
81 |
89 |
90 | ))
91 | NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName
92 |
93 | const NavigationMenuIndicator = React.forwardRef<
94 | React.ElementRef,
95 | React.ComponentPropsWithoutRef
96 | >(({ className, ...props }, ref) => (
97 |
105 |
106 |
107 | ))
108 | NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName
109 |
110 | export {
111 | navigationMenuTriggerStyle,
112 | NavigationMenu,
113 | NavigationMenuList,
114 | NavigationMenuItem,
115 | NavigationMenuContent,
116 | NavigationMenuTrigger,
117 | NavigationMenuLink,
118 | NavigationMenuIndicator,
119 | NavigationMenuViewport,
120 | }
121 |
--------------------------------------------------------------------------------
/components/ui/dropdown-menu.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
5 | import { Check, ChevronRight, Circle } from "lucide-react"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const DropdownMenu = DropdownMenuPrimitive.Root
10 |
11 | const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
12 |
13 | const DropdownMenuGroup = DropdownMenuPrimitive.Group
14 |
15 | const DropdownMenuPortal = DropdownMenuPrimitive.Portal
16 |
17 | const DropdownMenuSub = DropdownMenuPrimitive.Sub
18 |
19 | const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
20 |
21 | const DropdownMenuSubTrigger = React.forwardRef<
22 | React.ElementRef,
23 | React.ComponentPropsWithoutRef & {
24 | inset?: boolean
25 | }
26 | >(({ className, inset, children, ...props }, ref) => (
27 |
36 | {children}
37 |
38 |
39 | ))
40 | DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName
41 |
42 | const DropdownMenuSubContent = React.forwardRef<
43 | React.ElementRef,
44 | React.ComponentPropsWithoutRef
45 | >(({ className, ...props }, ref) => (
46 |
54 | ))
55 | DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName
56 |
57 | const DropdownMenuContent = React.forwardRef<
58 | React.ElementRef,
59 | React.ComponentPropsWithoutRef
60 | >(({ className, sideOffset = 4, ...props }, ref) => (
61 |
62 |
71 |
72 | ))
73 | DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
74 |
75 | const DropdownMenuItem = React.forwardRef<
76 | React.ElementRef,
77 | React.ComponentPropsWithoutRef & {
78 | inset?: boolean
79 | }
80 | >(({ className, inset, ...props }, ref) => (
81 |
90 | ))
91 | DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
92 |
93 | const DropdownMenuCheckboxItem = React.forwardRef<
94 | React.ElementRef,
95 | React.ComponentPropsWithoutRef
96 | >(({ className, children, checked, ...props }, ref) => (
97 |
106 |
107 |
108 |
109 |
110 |
111 | {children}
112 |
113 | ))
114 | DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName
115 |
116 | const DropdownMenuRadioItem = React.forwardRef<
117 | React.ElementRef,
118 | React.ComponentPropsWithoutRef
119 | >(({ className, children, ...props }, ref) => (
120 |
128 |
129 |
130 |
131 |
132 |
133 | {children}
134 |
135 | ))
136 | DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
137 |
138 | const DropdownMenuLabel = React.forwardRef<
139 | React.ElementRef,
140 | React.ComponentPropsWithoutRef & {
141 | inset?: boolean
142 | }
143 | >(({ className, inset, ...props }, ref) => (
144 |
149 | ))
150 | DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
151 |
152 | const DropdownMenuSeparator = React.forwardRef<
153 | React.ElementRef,
154 | React.ComponentPropsWithoutRef
155 | >(({ className, ...props }, ref) => (
156 |
161 | ))
162 | DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
163 |
164 | const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => {
165 | return
166 | }
167 | DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
168 |
169 | export {
170 | DropdownMenu,
171 | DropdownMenuTrigger,
172 | DropdownMenuContent,
173 | DropdownMenuItem,
174 | DropdownMenuCheckboxItem,
175 | DropdownMenuRadioItem,
176 | DropdownMenuLabel,
177 | DropdownMenuSeparator,
178 | DropdownMenuShortcut,
179 | DropdownMenuGroup,
180 | DropdownMenuPortal,
181 | DropdownMenuSub,
182 | DropdownMenuSubContent,
183 | DropdownMenuSubTrigger,
184 | DropdownMenuRadioGroup,
185 | }
186 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import CustomLink from "@/components/custom-link"
2 | import { auth } from "auth"
3 |
4 | export default async function Index() {
5 | const session = await auth()
6 | return (
7 |
8 |
Auth.js Prisma Edge Example
9 |
10 | This is an example site to demonstrate how to use{" "}
11 | Auth.js with Prisma's new Edge-compatible
12 | client and adapters.
13 |
14 |
15 |
Current Session
16 |
{JSON.stringify(session, null, 2)}
17 |
18 |
19 |
20 |
21 |
22 |
23 | Prisma Announcement Blog Post
24 | {" "}
25 | |
26 |
27 | Prisma Edge Docs
28 | {" "}
29 | |
30 |
31 | Example Repo
32 |
33 |
34 |
35 |
36 |
37 |
45 | Prisma
46 |
47 |
52 |
53 |
54 |
60 | Neon
61 |
67 |
73 |
79 |
83 |
84 |
92 |
93 |
94 |
95 |
103 |
104 |
105 |
106 |
107 |
108 |
116 | Vercel
117 |
118 |
119 |
120 |
121 |
127 | CloudFrame Workers
128 |
129 |
136 |
137 |
138 |
139 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
160 |
161 |
162 |
163 |
170 |
171 |
172 |
173 |
174 |
181 |
182 |
183 |
184 |
191 |
192 |
193 |
194 |
201 |
202 |
203 |
204 |
205 |
206 |
210 |
215 |
220 |
224 |
228 |
232 |
237 |
242 |
243 |
244 |
251 | Turso
252 |
261 |
262 |
263 |
264 |
268 |
272 |
276 |
280 |
284 |
285 |
294 |
295 |
296 |
297 |
301 |
305 |
309 |
313 |
317 |
318 |
319 |
327 |
328 |
329 |
330 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 | )
347 | }
348 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@auth/prisma-adapter':
9 | specifier: ^1.5.2
10 | version: 1.5.2(@prisma/client@5.12.0)
11 | '@neondatabase/serverless':
12 | specifier: ^0.9.0
13 | version: 0.9.0
14 | '@prisma/adapter-neon':
15 | specifier: 5.12.0
16 | version: 5.12.0(@neondatabase/serverless@0.9.0)
17 | '@prisma/client':
18 | specifier: 5.12.0
19 | version: 5.12.0(prisma@5.12.0)
20 | '@radix-ui/react-avatar':
21 | specifier: ^1.0.4
22 | version: 1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
23 | '@radix-ui/react-collapsible':
24 | specifier: ^1.0.3
25 | version: 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
26 | '@radix-ui/react-dropdown-menu':
27 | specifier: ^2.0.6
28 | version: 2.0.6(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
29 | '@radix-ui/react-navigation-menu':
30 | specifier: ^1.1.4
31 | version: 1.1.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
32 | '@radix-ui/react-slot':
33 | specifier: ^1.0.2
34 | version: 1.0.2(@types/react@18.2.74)(react@18.2.0)
35 | class-variance-authority:
36 | specifier: ^0.7.0
37 | version: 0.7.0
38 | clsx:
39 | specifier: ^2.1.0
40 | version: 2.1.0
41 | lucide-react:
42 | specifier: ^0.364.0
43 | version: 0.364.0(react@18.2.0)
44 | next:
45 | specifier: 14.2.0-canary.56
46 | version: 14.2.0-canary.56(react-dom@18.2.0)(react@18.2.0)
47 | next-auth:
48 | specifier: 5.0.0-beta.16
49 | version: 5.0.0-beta.16(next@14.2.0-canary.56)(react@18.2.0)
50 | prisma:
51 | specifier: 5.12.0
52 | version: 5.12.0
53 | react:
54 | specifier: ^18.2.0
55 | version: 18.2.0
56 | react-dom:
57 | specifier: ^18.2.0
58 | version: 18.2.0(react@18.2.0)
59 | tailwind-merge:
60 | specifier: ^2.2.2
61 | version: 2.2.2
62 |
63 | devDependencies:
64 | '@types/node':
65 | specifier: ^20
66 | version: 20.12.3
67 | '@types/react':
68 | specifier: ^18.2.74
69 | version: 18.2.74
70 | '@types/react-dom':
71 | specifier: ^18.2.23
72 | version: 18.2.23
73 | autoprefixer:
74 | specifier: ^10.4.19
75 | version: 10.4.19(postcss@8.4.38)
76 | postcss:
77 | specifier: ^8.4.38
78 | version: 8.4.38
79 | prettier:
80 | specifier: ^3.2.5
81 | version: 3.2.5
82 | tailwindcss:
83 | specifier: ^3.4.3
84 | version: 3.4.3
85 | tailwindcss-animate:
86 | specifier: ^1.0.7
87 | version: 1.0.7(tailwindcss@3.4.3)
88 | typescript:
89 | specifier: ^5.4.3
90 | version: 5.4.3
91 |
92 | packages:
93 |
94 | /@alloc/quick-lru@5.2.0:
95 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
96 | engines: {node: '>=10'}
97 | dev: true
98 |
99 | /@auth/core@0.28.1:
100 | resolution: {integrity: sha512-gvp74mypYZADpTlfGRp6HE0G3pIHWvtJpy+KZ+8FvY0cmlIpHog+jdMOdd29dQtLtN25kF2YbfHsesCFuGUQbg==}
101 | peerDependencies:
102 | '@simplewebauthn/browser': ^9.0.1
103 | '@simplewebauthn/server': ^9.0.2
104 | nodemailer: ^6.8.0
105 | peerDependenciesMeta:
106 | '@simplewebauthn/browser':
107 | optional: true
108 | '@simplewebauthn/server':
109 | optional: true
110 | nodemailer:
111 | optional: true
112 | dependencies:
113 | '@panva/hkdf': 1.1.1
114 | '@types/cookie': 0.6.0
115 | cookie: 0.6.0
116 | jose: 5.2.2
117 | oauth4webapi: 2.10.3
118 | preact: 10.11.3
119 | preact-render-to-string: 5.2.3(preact@10.11.3)
120 | dev: false
121 |
122 | /@auth/core@0.28.2:
123 | resolution: {integrity: sha512-Rlvu6yKa4bKbhQESMaEm6jHOY5ncIrsrQkC8tcwVQmf+cBLk7ReI9DIJS2O/WkIDoOwvM9PHiXTi5b+b/eyXxw==}
124 | peerDependencies:
125 | '@simplewebauthn/browser': ^9.0.1
126 | '@simplewebauthn/server': ^9.0.2
127 | nodemailer: ^6.8.0
128 | peerDependenciesMeta:
129 | '@simplewebauthn/browser':
130 | optional: true
131 | '@simplewebauthn/server':
132 | optional: true
133 | nodemailer:
134 | optional: true
135 | dependencies:
136 | '@panva/hkdf': 1.1.1
137 | '@types/cookie': 0.6.0
138 | cookie: 0.6.0
139 | jose: 5.2.2
140 | oauth4webapi: 2.10.3
141 | preact: 10.11.3
142 | preact-render-to-string: 5.2.3(preact@10.11.3)
143 | dev: false
144 |
145 | /@auth/prisma-adapter@1.5.2(@prisma/client@5.12.0):
146 | resolution: {integrity: sha512-yP331ZtBvzrtKSqsJ7/LeojJVimiSvJ7CKeA4HfvAGtHhKvu2m5IVe8mnWa6yX1xWK8I5VyZMMlWPcaDtNKlwA==}
147 | peerDependencies:
148 | '@prisma/client': '>=2.26.0 || >=3 || >=4 || >=5'
149 | dependencies:
150 | '@auth/core': 0.28.2
151 | '@prisma/client': 5.12.0(prisma@5.12.0)
152 | transitivePeerDependencies:
153 | - '@simplewebauthn/browser'
154 | - '@simplewebauthn/server'
155 | - nodemailer
156 | dev: false
157 |
158 | /@babel/runtime@7.23.9:
159 | resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==}
160 | engines: {node: '>=6.9.0'}
161 | dependencies:
162 | regenerator-runtime: 0.14.1
163 | dev: false
164 |
165 | /@babel/runtime@7.24.1:
166 | resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==}
167 | engines: {node: '>=6.9.0'}
168 | dependencies:
169 | regenerator-runtime: 0.14.1
170 | dev: false
171 |
172 | /@floating-ui/core@1.6.0:
173 | resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==}
174 | dependencies:
175 | '@floating-ui/utils': 0.2.1
176 | dev: false
177 |
178 | /@floating-ui/dom@1.6.3:
179 | resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==}
180 | dependencies:
181 | '@floating-ui/core': 1.6.0
182 | '@floating-ui/utils': 0.2.1
183 | dev: false
184 |
185 | /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0):
186 | resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==}
187 | peerDependencies:
188 | react: '>=16.8.0'
189 | react-dom: '>=16.8.0'
190 | dependencies:
191 | '@floating-ui/dom': 1.6.3
192 | react: 18.2.0
193 | react-dom: 18.2.0(react@18.2.0)
194 | dev: false
195 |
196 | /@floating-ui/utils@0.2.1:
197 | resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==}
198 | dev: false
199 |
200 | /@isaacs/cliui@8.0.2:
201 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
202 | engines: {node: '>=12'}
203 | dependencies:
204 | string-width: 5.1.2
205 | string-width-cjs: /string-width@4.2.3
206 | strip-ansi: 7.1.0
207 | strip-ansi-cjs: /strip-ansi@6.0.1
208 | wrap-ansi: 8.1.0
209 | wrap-ansi-cjs: /wrap-ansi@7.0.0
210 | dev: true
211 |
212 | /@jridgewell/gen-mapping@0.3.3:
213 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
214 | engines: {node: '>=6.0.0'}
215 | dependencies:
216 | '@jridgewell/set-array': 1.1.2
217 | '@jridgewell/sourcemap-codec': 1.4.15
218 | '@jridgewell/trace-mapping': 0.3.22
219 | dev: true
220 |
221 | /@jridgewell/resolve-uri@3.1.2:
222 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
223 | engines: {node: '>=6.0.0'}
224 | dev: true
225 |
226 | /@jridgewell/set-array@1.1.2:
227 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
228 | engines: {node: '>=6.0.0'}
229 | dev: true
230 |
231 | /@jridgewell/sourcemap-codec@1.4.15:
232 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
233 | dev: true
234 |
235 | /@jridgewell/trace-mapping@0.3.22:
236 | resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
237 | dependencies:
238 | '@jridgewell/resolve-uri': 3.1.2
239 | '@jridgewell/sourcemap-codec': 1.4.15
240 | dev: true
241 |
242 | /@neondatabase/serverless@0.9.0:
243 | resolution: {integrity: sha512-mmJnUAzlzvxNSZuuhI6kgJjH+JgFdBMYUWxihtq/nj0Tjt+Y5UU3W+SvRFoucnd5NObYkuLYQzk+zV5DGFKGJg==}
244 | dependencies:
245 | '@types/pg': 8.6.6
246 | dev: false
247 |
248 | /@next/env@14.2.0-canary.56:
249 | resolution: {integrity: sha512-slHTSLx6xovPaNJd6j+SAgK3IZz0D4Go5Vj6hb7/UCYXii1G7xeVgO2EIHdwcuzNaeuug8iN6wvpqS9qjH67cA==}
250 | dev: false
251 |
252 | /@next/swc-darwin-arm64@14.2.0-canary.56:
253 | resolution: {integrity: sha512-9d162Qzls1eDrw2a7e6IiK5bzBm2LVD5Fh2DP67rggPFqgl15hJMDfjv+vfiCbFhxaA95uv45S48Kj/X2p4Wrg==}
254 | engines: {node: '>= 10'}
255 | cpu: [arm64]
256 | os: [darwin]
257 | requiresBuild: true
258 | dev: false
259 | optional: true
260 |
261 | /@next/swc-darwin-x64@14.2.0-canary.56:
262 | resolution: {integrity: sha512-c3/9yRBCpbt5dF7KzdoI9gH4IMMciAaH1GHf97UOK7cuI7/ctvlld7X1IP+HlMnd8+p3+FHkjySUM/Rm+t//Mw==}
263 | engines: {node: '>= 10'}
264 | cpu: [x64]
265 | os: [darwin]
266 | requiresBuild: true
267 | dev: false
268 | optional: true
269 |
270 | /@next/swc-linux-arm64-gnu@14.2.0-canary.56:
271 | resolution: {integrity: sha512-Pv83XZ/Fyk6uz6pDA6Uywp2LT7+E9IXJtWgHXp0rsLTjSuyvXz76kEX9ZoQrakhMRF3ki4+f1AXysPkehuazNQ==}
272 | engines: {node: '>= 10'}
273 | cpu: [arm64]
274 | os: [linux]
275 | requiresBuild: true
276 | dev: false
277 | optional: true
278 |
279 | /@next/swc-linux-arm64-musl@14.2.0-canary.56:
280 | resolution: {integrity: sha512-ytP9AAbMYXIye6dQ1RoFV7Eb2k+yu+nMlny4COYMWhNto+30dx0mmNjjJ464c7XU5KvcLTqdj2pcBGFi2Uj0vw==}
281 | engines: {node: '>= 10'}
282 | cpu: [arm64]
283 | os: [linux]
284 | requiresBuild: true
285 | dev: false
286 | optional: true
287 |
288 | /@next/swc-linux-x64-gnu@14.2.0-canary.56:
289 | resolution: {integrity: sha512-/V6ngDidzDYkK8120PfRWDCi/26y9WywaZ/lWJY+345sXaB3CGLnFd3tyfdIpzHxDOvRYDHCTLh8lYd0XJF+uA==}
290 | engines: {node: '>= 10'}
291 | cpu: [x64]
292 | os: [linux]
293 | requiresBuild: true
294 | dev: false
295 | optional: true
296 |
297 | /@next/swc-linux-x64-musl@14.2.0-canary.56:
298 | resolution: {integrity: sha512-YEwoiErfzmmXRrqoInPDItJ0X+PZbeTQVkR9UpYgUstgrwr0/aFILLI/wLT52r9NWX3yMiqONB/Owv5LefkQlg==}
299 | engines: {node: '>= 10'}
300 | cpu: [x64]
301 | os: [linux]
302 | requiresBuild: true
303 | dev: false
304 | optional: true
305 |
306 | /@next/swc-win32-arm64-msvc@14.2.0-canary.56:
307 | resolution: {integrity: sha512-gEIxu949cO8xTnapS5p+EVg3fr8dzQgsybjIVC/FIl8dfBDMMHHiUIJm2lNUvi9zRc4OgrJ7WC+0tA58h9JRfA==}
308 | engines: {node: '>= 10'}
309 | cpu: [arm64]
310 | os: [win32]
311 | requiresBuild: true
312 | dev: false
313 | optional: true
314 |
315 | /@next/swc-win32-ia32-msvc@14.2.0-canary.56:
316 | resolution: {integrity: sha512-3EYXk812fRXuwhID9IYG+xodNr25IPkoEbCLTdKOzS8okZrRzRHo+WmhIqF2ylS4LDFt18yVWGibN2pPJISjVg==}
317 | engines: {node: '>= 10'}
318 | cpu: [ia32]
319 | os: [win32]
320 | requiresBuild: true
321 | dev: false
322 | optional: true
323 |
324 | /@next/swc-win32-x64-msvc@14.2.0-canary.56:
325 | resolution: {integrity: sha512-FvsUo8nh9Hc6qvK0uqoinEfZbw+q16Jj6qewA0fdUQ+QY0i6ECo7c8Wsc6Jm/dGmW/CAA1zAVUX00L9h+MGyZw==}
326 | engines: {node: '>= 10'}
327 | cpu: [x64]
328 | os: [win32]
329 | requiresBuild: true
330 | dev: false
331 | optional: true
332 |
333 | /@nodelib/fs.scandir@2.1.5:
334 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
335 | engines: {node: '>= 8'}
336 | dependencies:
337 | '@nodelib/fs.stat': 2.0.5
338 | run-parallel: 1.2.0
339 | dev: true
340 |
341 | /@nodelib/fs.stat@2.0.5:
342 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
343 | engines: {node: '>= 8'}
344 | dev: true
345 |
346 | /@nodelib/fs.walk@1.2.8:
347 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
348 | engines: {node: '>= 8'}
349 | dependencies:
350 | '@nodelib/fs.scandir': 2.1.5
351 | fastq: 1.17.1
352 | dev: true
353 |
354 | /@panva/hkdf@1.1.1:
355 | resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==}
356 | dev: false
357 |
358 | /@pkgjs/parseargs@0.11.0:
359 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
360 | engines: {node: '>=14'}
361 | requiresBuild: true
362 | dev: true
363 | optional: true
364 |
365 | /@prisma/adapter-neon@5.12.0(@neondatabase/serverless@0.9.0):
366 | resolution: {integrity: sha512-kcS/hVp6qvby/ghlhAc3rYYWPZBmEcRpNdq7/XBnoU9VZhZ24pPOOSO3SOscftToZglnUfmUH+tFVN5o+yhdeA==}
367 | peerDependencies:
368 | '@neondatabase/serverless': ^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0
369 | dependencies:
370 | '@neondatabase/serverless': 0.9.0
371 | '@prisma/driver-adapter-utils': 5.12.0
372 | postgres-array: 3.0.2
373 | dev: false
374 |
375 | /@prisma/client@5.12.0(prisma@5.12.0):
376 | resolution: {integrity: sha512-bk/+KPpRm0+IzqFCtAxrj+/TNiHzulspnO+OkysaYY/atc/eX0Gx8V3tTLxbHKVX0LKD4Hi8KKCcSbU1U72n7Q==}
377 | engines: {node: '>=16.13'}
378 | requiresBuild: true
379 | peerDependencies:
380 | prisma: '*'
381 | peerDependenciesMeta:
382 | prisma:
383 | optional: true
384 | dependencies:
385 | prisma: 5.12.0
386 | dev: false
387 |
388 | /@prisma/debug@5.12.0:
389 | resolution: {integrity: sha512-wK3fQLxPLMqf5riT5ZIhl8NffPSzFUwtzFX5CH7z/oI9Swmo9UhQlUgZABIVgdXSJ5OAlmRcDZtDKaMApIl8sg==}
390 | dev: false
391 |
392 | /@prisma/driver-adapter-utils@5.12.0:
393 | resolution: {integrity: sha512-B57KUrKmRlax4sE4pc2VKPtG5U9XGm5kjtqSWBUd83NopIZVuvKunH3ETrOShwBCqWZXZolHvdDjDwHyiT2HRQ==}
394 | dependencies:
395 | '@prisma/debug': 5.12.0
396 | dev: false
397 |
398 | /@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab:
399 | resolution: {integrity: sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==}
400 | dev: false
401 |
402 | /@prisma/engines@5.12.0:
403 | resolution: {integrity: sha512-rFNRul9JGu0d3tf8etBgmDQ4NVoDwgGrRguvQOc8i+c6g7xPjRuu4aKzMMvHWUuccvRx5+fs1KMBxQ0x2THt+Q==}
404 | requiresBuild: true
405 | dependencies:
406 | '@prisma/debug': 5.12.0
407 | '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab
408 | '@prisma/fetch-engine': 5.12.0
409 | '@prisma/get-platform': 5.12.0
410 | dev: false
411 |
412 | /@prisma/fetch-engine@5.12.0:
413 | resolution: {integrity: sha512-qkHQbZ1hspvOwcImvqY4yj7+FUlw0+uP+6tu3g24V4ULHOXLLkvr5ZZc6vy26OF0hkbD3kcDJCeutFis3poKgg==}
414 | dependencies:
415 | '@prisma/debug': 5.12.0
416 | '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab
417 | '@prisma/get-platform': 5.12.0
418 | dev: false
419 |
420 | /@prisma/get-platform@5.12.0:
421 | resolution: {integrity: sha512-81Ptv9YJnwTArEBPQ2Lvu58sZPxy4OixKxVVgysFan6A3bFP7q8gIg15WTjsRuH4WXh6B667EM9sqoMTNu0fLQ==}
422 | dependencies:
423 | '@prisma/debug': 5.12.0
424 | dev: false
425 |
426 | /@radix-ui/primitive@1.0.1:
427 | resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==}
428 | dependencies:
429 | '@babel/runtime': 7.23.9
430 | dev: false
431 |
432 | /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
433 | resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==}
434 | peerDependencies:
435 | '@types/react': '*'
436 | '@types/react-dom': '*'
437 | react: ^16.8 || ^17.0 || ^18.0
438 | react-dom: ^16.8 || ^17.0 || ^18.0
439 | peerDependenciesMeta:
440 | '@types/react':
441 | optional: true
442 | '@types/react-dom':
443 | optional: true
444 | dependencies:
445 | '@babel/runtime': 7.23.9
446 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
447 | '@types/react': 18.2.74
448 | '@types/react-dom': 18.2.23
449 | react: 18.2.0
450 | react-dom: 18.2.0(react@18.2.0)
451 | dev: false
452 |
453 | /@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
454 | resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==}
455 | peerDependencies:
456 | '@types/react': '*'
457 | '@types/react-dom': '*'
458 | react: ^16.8 || ^17.0 || ^18.0
459 | react-dom: ^16.8 || ^17.0 || ^18.0
460 | peerDependenciesMeta:
461 | '@types/react':
462 | optional: true
463 | '@types/react-dom':
464 | optional: true
465 | dependencies:
466 | '@babel/runtime': 7.23.9
467 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
468 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
469 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
470 | '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
471 | '@types/react': 18.2.74
472 | '@types/react-dom': 18.2.23
473 | react: 18.2.0
474 | react-dom: 18.2.0(react@18.2.0)
475 | dev: false
476 |
477 | /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
478 | resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==}
479 | peerDependencies:
480 | '@types/react': '*'
481 | '@types/react-dom': '*'
482 | react: ^16.8 || ^17.0 || ^18.0
483 | react-dom: ^16.8 || ^17.0 || ^18.0
484 | peerDependenciesMeta:
485 | '@types/react':
486 | optional: true
487 | '@types/react-dom':
488 | optional: true
489 | dependencies:
490 | '@babel/runtime': 7.23.9
491 | '@radix-ui/primitive': 1.0.1
492 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
493 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
494 | '@radix-ui/react-id': 1.0.1(@types/react@18.2.74)(react@18.2.0)
495 | '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
496 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
497 | '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.74)(react@18.2.0)
498 | '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
499 | '@types/react': 18.2.74
500 | '@types/react-dom': 18.2.23
501 | react: 18.2.0
502 | react-dom: 18.2.0(react@18.2.0)
503 | dev: false
504 |
505 | /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
506 | resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==}
507 | peerDependencies:
508 | '@types/react': '*'
509 | '@types/react-dom': '*'
510 | react: ^16.8 || ^17.0 || ^18.0
511 | react-dom: ^16.8 || ^17.0 || ^18.0
512 | peerDependenciesMeta:
513 | '@types/react':
514 | optional: true
515 | '@types/react-dom':
516 | optional: true
517 | dependencies:
518 | '@babel/runtime': 7.23.9
519 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
520 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
521 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
522 | '@radix-ui/react-slot': 1.0.2(@types/react@18.2.74)(react@18.2.0)
523 | '@types/react': 18.2.74
524 | '@types/react-dom': 18.2.23
525 | react: 18.2.0
526 | react-dom: 18.2.0(react@18.2.0)
527 | dev: false
528 |
529 | /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.74)(react@18.2.0):
530 | resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==}
531 | peerDependencies:
532 | '@types/react': '*'
533 | react: ^16.8 || ^17.0 || ^18.0
534 | peerDependenciesMeta:
535 | '@types/react':
536 | optional: true
537 | dependencies:
538 | '@babel/runtime': 7.23.9
539 | '@types/react': 18.2.74
540 | react: 18.2.0
541 | dev: false
542 |
543 | /@radix-ui/react-context@1.0.1(@types/react@18.2.74)(react@18.2.0):
544 | resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==}
545 | peerDependencies:
546 | '@types/react': '*'
547 | react: ^16.8 || ^17.0 || ^18.0
548 | peerDependenciesMeta:
549 | '@types/react':
550 | optional: true
551 | dependencies:
552 | '@babel/runtime': 7.23.9
553 | '@types/react': 18.2.74
554 | react: 18.2.0
555 | dev: false
556 |
557 | /@radix-ui/react-direction@1.0.1(@types/react@18.2.74)(react@18.2.0):
558 | resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==}
559 | peerDependencies:
560 | '@types/react': '*'
561 | react: ^16.8 || ^17.0 || ^18.0
562 | peerDependenciesMeta:
563 | '@types/react':
564 | optional: true
565 | dependencies:
566 | '@babel/runtime': 7.23.9
567 | '@types/react': 18.2.74
568 | react: 18.2.0
569 | dev: false
570 |
571 | /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
572 | resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==}
573 | peerDependencies:
574 | '@types/react': '*'
575 | '@types/react-dom': '*'
576 | react: ^16.8 || ^17.0 || ^18.0
577 | react-dom: ^16.8 || ^17.0 || ^18.0
578 | peerDependenciesMeta:
579 | '@types/react':
580 | optional: true
581 | '@types/react-dom':
582 | optional: true
583 | dependencies:
584 | '@babel/runtime': 7.23.9
585 | '@radix-ui/primitive': 1.0.1
586 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
587 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
588 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
589 | '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.74)(react@18.2.0)
590 | '@types/react': 18.2.74
591 | '@types/react-dom': 18.2.23
592 | react: 18.2.0
593 | react-dom: 18.2.0(react@18.2.0)
594 | dev: false
595 |
596 | /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
597 | resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==}
598 | peerDependencies:
599 | '@types/react': '*'
600 | '@types/react-dom': '*'
601 | react: ^16.8 || ^17.0 || ^18.0
602 | react-dom: ^16.8 || ^17.0 || ^18.0
603 | peerDependenciesMeta:
604 | '@types/react':
605 | optional: true
606 | '@types/react-dom':
607 | optional: true
608 | dependencies:
609 | '@babel/runtime': 7.23.9
610 | '@radix-ui/primitive': 1.0.1
611 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
612 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
613 | '@radix-ui/react-id': 1.0.1(@types/react@18.2.74)(react@18.2.0)
614 | '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
615 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
616 | '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.74)(react@18.2.0)
617 | '@types/react': 18.2.74
618 | '@types/react-dom': 18.2.23
619 | react: 18.2.0
620 | react-dom: 18.2.0(react@18.2.0)
621 | dev: false
622 |
623 | /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.74)(react@18.2.0):
624 | resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==}
625 | peerDependencies:
626 | '@types/react': '*'
627 | react: ^16.8 || ^17.0 || ^18.0
628 | peerDependenciesMeta:
629 | '@types/react':
630 | optional: true
631 | dependencies:
632 | '@babel/runtime': 7.23.9
633 | '@types/react': 18.2.74
634 | react: 18.2.0
635 | dev: false
636 |
637 | /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
638 | resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==}
639 | peerDependencies:
640 | '@types/react': '*'
641 | '@types/react-dom': '*'
642 | react: ^16.8 || ^17.0 || ^18.0
643 | react-dom: ^16.8 || ^17.0 || ^18.0
644 | peerDependenciesMeta:
645 | '@types/react':
646 | optional: true
647 | '@types/react-dom':
648 | optional: true
649 | dependencies:
650 | '@babel/runtime': 7.23.9
651 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
652 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
653 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
654 | '@types/react': 18.2.74
655 | '@types/react-dom': 18.2.23
656 | react: 18.2.0
657 | react-dom: 18.2.0(react@18.2.0)
658 | dev: false
659 |
660 | /@radix-ui/react-id@1.0.1(@types/react@18.2.74)(react@18.2.0):
661 | resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==}
662 | peerDependencies:
663 | '@types/react': '*'
664 | react: ^16.8 || ^17.0 || ^18.0
665 | peerDependenciesMeta:
666 | '@types/react':
667 | optional: true
668 | dependencies:
669 | '@babel/runtime': 7.23.9
670 | '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
671 | '@types/react': 18.2.74
672 | react: 18.2.0
673 | dev: false
674 |
675 | /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
676 | resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==}
677 | peerDependencies:
678 | '@types/react': '*'
679 | '@types/react-dom': '*'
680 | react: ^16.8 || ^17.0 || ^18.0
681 | react-dom: ^16.8 || ^17.0 || ^18.0
682 | peerDependenciesMeta:
683 | '@types/react':
684 | optional: true
685 | '@types/react-dom':
686 | optional: true
687 | dependencies:
688 | '@babel/runtime': 7.23.9
689 | '@radix-ui/primitive': 1.0.1
690 | '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
691 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
692 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
693 | '@radix-ui/react-direction': 1.0.1(@types/react@18.2.74)(react@18.2.0)
694 | '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
695 | '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.74)(react@18.2.0)
696 | '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
697 | '@radix-ui/react-id': 1.0.1(@types/react@18.2.74)(react@18.2.0)
698 | '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
699 | '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
700 | '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
701 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
702 | '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
703 | '@radix-ui/react-slot': 1.0.2(@types/react@18.2.74)(react@18.2.0)
704 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
705 | '@types/react': 18.2.74
706 | '@types/react-dom': 18.2.23
707 | aria-hidden: 1.2.3
708 | react: 18.2.0
709 | react-dom: 18.2.0(react@18.2.0)
710 | react-remove-scroll: 2.5.5(@types/react@18.2.74)(react@18.2.0)
711 | dev: false
712 |
713 | /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
714 | resolution: {integrity: sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==}
715 | peerDependencies:
716 | '@types/react': '*'
717 | '@types/react-dom': '*'
718 | react: ^16.8 || ^17.0 || ^18.0
719 | react-dom: ^16.8 || ^17.0 || ^18.0
720 | peerDependenciesMeta:
721 | '@types/react':
722 | optional: true
723 | '@types/react-dom':
724 | optional: true
725 | dependencies:
726 | '@babel/runtime': 7.23.9
727 | '@radix-ui/primitive': 1.0.1
728 | '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
729 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
730 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
731 | '@radix-ui/react-direction': 1.0.1(@types/react@18.2.74)(react@18.2.0)
732 | '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
733 | '@radix-ui/react-id': 1.0.1(@types/react@18.2.74)(react@18.2.0)
734 | '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
735 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
736 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
737 | '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.74)(react@18.2.0)
738 | '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
739 | '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.74)(react@18.2.0)
740 | '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
741 | '@types/react': 18.2.74
742 | '@types/react-dom': 18.2.23
743 | react: 18.2.0
744 | react-dom: 18.2.0(react@18.2.0)
745 | dev: false
746 |
747 | /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
748 | resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==}
749 | peerDependencies:
750 | '@types/react': '*'
751 | '@types/react-dom': '*'
752 | react: ^16.8 || ^17.0 || ^18.0
753 | react-dom: ^16.8 || ^17.0 || ^18.0
754 | peerDependenciesMeta:
755 | '@types/react':
756 | optional: true
757 | '@types/react-dom':
758 | optional: true
759 | dependencies:
760 | '@babel/runtime': 7.23.9
761 | '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0)
762 | '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
763 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
764 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
765 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
766 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
767 | '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
768 | '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
769 | '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.74)(react@18.2.0)
770 | '@radix-ui/rect': 1.0.1
771 | '@types/react': 18.2.74
772 | '@types/react-dom': 18.2.23
773 | react: 18.2.0
774 | react-dom: 18.2.0(react@18.2.0)
775 | dev: false
776 |
777 | /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
778 | resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==}
779 | peerDependencies:
780 | '@types/react': '*'
781 | '@types/react-dom': '*'
782 | react: ^16.8 || ^17.0 || ^18.0
783 | react-dom: ^16.8 || ^17.0 || ^18.0
784 | peerDependenciesMeta:
785 | '@types/react':
786 | optional: true
787 | '@types/react-dom':
788 | optional: true
789 | dependencies:
790 | '@babel/runtime': 7.23.9
791 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
792 | '@types/react': 18.2.74
793 | '@types/react-dom': 18.2.23
794 | react: 18.2.0
795 | react-dom: 18.2.0(react@18.2.0)
796 | dev: false
797 |
798 | /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
799 | resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==}
800 | peerDependencies:
801 | '@types/react': '*'
802 | '@types/react-dom': '*'
803 | react: ^16.8 || ^17.0 || ^18.0
804 | react-dom: ^16.8 || ^17.0 || ^18.0
805 | peerDependenciesMeta:
806 | '@types/react':
807 | optional: true
808 | '@types/react-dom':
809 | optional: true
810 | dependencies:
811 | '@babel/runtime': 7.23.9
812 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
813 | '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
814 | '@types/react': 18.2.74
815 | '@types/react-dom': 18.2.23
816 | react: 18.2.0
817 | react-dom: 18.2.0(react@18.2.0)
818 | dev: false
819 |
820 | /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
821 | resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==}
822 | peerDependencies:
823 | '@types/react': '*'
824 | '@types/react-dom': '*'
825 | react: ^16.8 || ^17.0 || ^18.0
826 | react-dom: ^16.8 || ^17.0 || ^18.0
827 | peerDependenciesMeta:
828 | '@types/react':
829 | optional: true
830 | '@types/react-dom':
831 | optional: true
832 | dependencies:
833 | '@babel/runtime': 7.23.9
834 | '@radix-ui/react-slot': 1.0.2(@types/react@18.2.74)(react@18.2.0)
835 | '@types/react': 18.2.74
836 | '@types/react-dom': 18.2.23
837 | react: 18.2.0
838 | react-dom: 18.2.0(react@18.2.0)
839 | dev: false
840 |
841 | /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
842 | resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==}
843 | peerDependencies:
844 | '@types/react': '*'
845 | '@types/react-dom': '*'
846 | react: ^16.8 || ^17.0 || ^18.0
847 | react-dom: ^16.8 || ^17.0 || ^18.0
848 | peerDependenciesMeta:
849 | '@types/react':
850 | optional: true
851 | '@types/react-dom':
852 | optional: true
853 | dependencies:
854 | '@babel/runtime': 7.23.9
855 | '@radix-ui/primitive': 1.0.1
856 | '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
857 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
858 | '@radix-ui/react-context': 1.0.1(@types/react@18.2.74)(react@18.2.0)
859 | '@radix-ui/react-direction': 1.0.1(@types/react@18.2.74)(react@18.2.0)
860 | '@radix-ui/react-id': 1.0.1(@types/react@18.2.74)(react@18.2.0)
861 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
862 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
863 | '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.74)(react@18.2.0)
864 | '@types/react': 18.2.74
865 | '@types/react-dom': 18.2.23
866 | react: 18.2.0
867 | react-dom: 18.2.0(react@18.2.0)
868 | dev: false
869 |
870 | /@radix-ui/react-slot@1.0.2(@types/react@18.2.74)(react@18.2.0):
871 | resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
872 | peerDependencies:
873 | '@types/react': '*'
874 | react: ^16.8 || ^17.0 || ^18.0
875 | peerDependenciesMeta:
876 | '@types/react':
877 | optional: true
878 | dependencies:
879 | '@babel/runtime': 7.23.9
880 | '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.74)(react@18.2.0)
881 | '@types/react': 18.2.74
882 | react: 18.2.0
883 | dev: false
884 |
885 | /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.74)(react@18.2.0):
886 | resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==}
887 | peerDependencies:
888 | '@types/react': '*'
889 | react: ^16.8 || ^17.0 || ^18.0
890 | peerDependenciesMeta:
891 | '@types/react':
892 | optional: true
893 | dependencies:
894 | '@babel/runtime': 7.23.9
895 | '@types/react': 18.2.74
896 | react: 18.2.0
897 | dev: false
898 |
899 | /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.74)(react@18.2.0):
900 | resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==}
901 | peerDependencies:
902 | '@types/react': '*'
903 | react: ^16.8 || ^17.0 || ^18.0
904 | peerDependenciesMeta:
905 | '@types/react':
906 | optional: true
907 | dependencies:
908 | '@babel/runtime': 7.23.9
909 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
910 | '@types/react': 18.2.74
911 | react: 18.2.0
912 | dev: false
913 |
914 | /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.74)(react@18.2.0):
915 | resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==}
916 | peerDependencies:
917 | '@types/react': '*'
918 | react: ^16.8 || ^17.0 || ^18.0
919 | peerDependenciesMeta:
920 | '@types/react':
921 | optional: true
922 | dependencies:
923 | '@babel/runtime': 7.23.9
924 | '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.74)(react@18.2.0)
925 | '@types/react': 18.2.74
926 | react: 18.2.0
927 | dev: false
928 |
929 | /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.74)(react@18.2.0):
930 | resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==}
931 | peerDependencies:
932 | '@types/react': '*'
933 | react: ^16.8 || ^17.0 || ^18.0
934 | peerDependenciesMeta:
935 | '@types/react':
936 | optional: true
937 | dependencies:
938 | '@babel/runtime': 7.23.9
939 | '@types/react': 18.2.74
940 | react: 18.2.0
941 | dev: false
942 |
943 | /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.74)(react@18.2.0):
944 | resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==}
945 | peerDependencies:
946 | '@types/react': '*'
947 | react: ^16.8 || ^17.0 || ^18.0
948 | peerDependenciesMeta:
949 | '@types/react':
950 | optional: true
951 | dependencies:
952 | '@babel/runtime': 7.23.9
953 | '@types/react': 18.2.74
954 | react: 18.2.0
955 | dev: false
956 |
957 | /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.74)(react@18.2.0):
958 | resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==}
959 | peerDependencies:
960 | '@types/react': '*'
961 | react: ^16.8 || ^17.0 || ^18.0
962 | peerDependenciesMeta:
963 | '@types/react':
964 | optional: true
965 | dependencies:
966 | '@babel/runtime': 7.23.9
967 | '@radix-ui/rect': 1.0.1
968 | '@types/react': 18.2.74
969 | react: 18.2.0
970 | dev: false
971 |
972 | /@radix-ui/react-use-size@1.0.1(@types/react@18.2.74)(react@18.2.0):
973 | resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==}
974 | peerDependencies:
975 | '@types/react': '*'
976 | react: ^16.8 || ^17.0 || ^18.0
977 | peerDependenciesMeta:
978 | '@types/react':
979 | optional: true
980 | dependencies:
981 | '@babel/runtime': 7.23.9
982 | '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.74)(react@18.2.0)
983 | '@types/react': 18.2.74
984 | react: 18.2.0
985 | dev: false
986 |
987 | /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0):
988 | resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==}
989 | peerDependencies:
990 | '@types/react': '*'
991 | '@types/react-dom': '*'
992 | react: ^16.8 || ^17.0 || ^18.0
993 | react-dom: ^16.8 || ^17.0 || ^18.0
994 | peerDependenciesMeta:
995 | '@types/react':
996 | optional: true
997 | '@types/react-dom':
998 | optional: true
999 | dependencies:
1000 | '@babel/runtime': 7.23.9
1001 | '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0)
1002 | '@types/react': 18.2.74
1003 | '@types/react-dom': 18.2.23
1004 | react: 18.2.0
1005 | react-dom: 18.2.0(react@18.2.0)
1006 | dev: false
1007 |
1008 | /@radix-ui/rect@1.0.1:
1009 | resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==}
1010 | dependencies:
1011 | '@babel/runtime': 7.23.9
1012 | dev: false
1013 |
1014 | /@swc/counter@0.1.3:
1015 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
1016 | dev: false
1017 |
1018 | /@swc/helpers@0.5.5:
1019 | resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
1020 | dependencies:
1021 | '@swc/counter': 0.1.3
1022 | tslib: 2.6.2
1023 | dev: false
1024 |
1025 | /@types/cookie@0.6.0:
1026 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
1027 | dev: false
1028 |
1029 | /@types/node@20.12.3:
1030 | resolution: {integrity: sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw==}
1031 | dependencies:
1032 | undici-types: 5.26.5
1033 |
1034 | /@types/pg@8.6.6:
1035 | resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==}
1036 | dependencies:
1037 | '@types/node': 20.12.3
1038 | pg-protocol: 1.6.0
1039 | pg-types: 2.2.0
1040 | dev: false
1041 |
1042 | /@types/prop-types@15.7.11:
1043 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==}
1044 |
1045 | /@types/react-dom@18.2.23:
1046 | resolution: {integrity: sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==}
1047 | dependencies:
1048 | '@types/react': 18.2.74
1049 |
1050 | /@types/react@18.2.74:
1051 | resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==}
1052 | dependencies:
1053 | '@types/prop-types': 15.7.11
1054 | csstype: 3.1.3
1055 |
1056 | /ansi-regex@5.0.1:
1057 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1058 | engines: {node: '>=8'}
1059 | dev: true
1060 |
1061 | /ansi-regex@6.0.1:
1062 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
1063 | engines: {node: '>=12'}
1064 | dev: true
1065 |
1066 | /ansi-styles@4.3.0:
1067 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1068 | engines: {node: '>=8'}
1069 | dependencies:
1070 | color-convert: 2.0.1
1071 | dev: true
1072 |
1073 | /ansi-styles@6.2.1:
1074 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
1075 | engines: {node: '>=12'}
1076 | dev: true
1077 |
1078 | /any-promise@1.3.0:
1079 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
1080 | dev: true
1081 |
1082 | /anymatch@3.1.3:
1083 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
1084 | engines: {node: '>= 8'}
1085 | dependencies:
1086 | normalize-path: 3.0.0
1087 | picomatch: 2.3.1
1088 | dev: true
1089 |
1090 | /arg@5.0.2:
1091 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
1092 | dev: true
1093 |
1094 | /aria-hidden@1.2.3:
1095 | resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==}
1096 | engines: {node: '>=10'}
1097 | dependencies:
1098 | tslib: 2.6.2
1099 | dev: false
1100 |
1101 | /autoprefixer@10.4.19(postcss@8.4.38):
1102 | resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==}
1103 | engines: {node: ^10 || ^12 || >=14}
1104 | hasBin: true
1105 | peerDependencies:
1106 | postcss: ^8.1.0
1107 | dependencies:
1108 | browserslist: 4.23.0
1109 | caniuse-lite: 1.0.30001605
1110 | fraction.js: 4.3.7
1111 | normalize-range: 0.1.2
1112 | picocolors: 1.0.0
1113 | postcss: 8.4.38
1114 | postcss-value-parser: 4.2.0
1115 | dev: true
1116 |
1117 | /balanced-match@1.0.2:
1118 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1119 | dev: true
1120 |
1121 | /binary-extensions@2.2.0:
1122 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
1123 | engines: {node: '>=8'}
1124 | dev: true
1125 |
1126 | /brace-expansion@2.0.1:
1127 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1128 | dependencies:
1129 | balanced-match: 1.0.2
1130 | dev: true
1131 |
1132 | /braces@3.0.2:
1133 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
1134 | engines: {node: '>=8'}
1135 | dependencies:
1136 | fill-range: 7.0.1
1137 | dev: true
1138 |
1139 | /browserslist@4.23.0:
1140 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
1141 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1142 | hasBin: true
1143 | dependencies:
1144 | caniuse-lite: 1.0.30001605
1145 | electron-to-chromium: 1.4.679
1146 | node-releases: 2.0.14
1147 | update-browserslist-db: 1.0.13(browserslist@4.23.0)
1148 | dev: true
1149 |
1150 | /busboy@1.6.0:
1151 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
1152 | engines: {node: '>=10.16.0'}
1153 | dependencies:
1154 | streamsearch: 1.1.0
1155 | dev: false
1156 |
1157 | /camelcase-css@2.0.1:
1158 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
1159 | engines: {node: '>= 6'}
1160 | dev: true
1161 |
1162 | /caniuse-lite@1.0.30001605:
1163 | resolution: {integrity: sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==}
1164 |
1165 | /chokidar@3.6.0:
1166 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
1167 | engines: {node: '>= 8.10.0'}
1168 | dependencies:
1169 | anymatch: 3.1.3
1170 | braces: 3.0.2
1171 | glob-parent: 5.1.2
1172 | is-binary-path: 2.1.0
1173 | is-glob: 4.0.3
1174 | normalize-path: 3.0.0
1175 | readdirp: 3.6.0
1176 | optionalDependencies:
1177 | fsevents: 2.3.3
1178 | dev: true
1179 |
1180 | /class-variance-authority@0.7.0:
1181 | resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==}
1182 | dependencies:
1183 | clsx: 2.0.0
1184 | dev: false
1185 |
1186 | /client-only@0.0.1:
1187 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
1188 | dev: false
1189 |
1190 | /clsx@2.0.0:
1191 | resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
1192 | engines: {node: '>=6'}
1193 | dev: false
1194 |
1195 | /clsx@2.1.0:
1196 | resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==}
1197 | engines: {node: '>=6'}
1198 | dev: false
1199 |
1200 | /color-convert@2.0.1:
1201 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1202 | engines: {node: '>=7.0.0'}
1203 | dependencies:
1204 | color-name: 1.1.4
1205 | dev: true
1206 |
1207 | /color-name@1.1.4:
1208 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1209 | dev: true
1210 |
1211 | /commander@4.1.1:
1212 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
1213 | engines: {node: '>= 6'}
1214 | dev: true
1215 |
1216 | /cookie@0.6.0:
1217 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
1218 | engines: {node: '>= 0.6'}
1219 | dev: false
1220 |
1221 | /cross-spawn@7.0.3:
1222 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1223 | engines: {node: '>= 8'}
1224 | dependencies:
1225 | path-key: 3.1.1
1226 | shebang-command: 2.0.0
1227 | which: 2.0.2
1228 | dev: true
1229 |
1230 | /cssesc@3.0.0:
1231 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
1232 | engines: {node: '>=4'}
1233 | hasBin: true
1234 | dev: true
1235 |
1236 | /csstype@3.1.3:
1237 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
1238 |
1239 | /detect-node-es@1.1.0:
1240 | resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
1241 | dev: false
1242 |
1243 | /didyoumean@1.2.2:
1244 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
1245 | dev: true
1246 |
1247 | /dlv@1.1.3:
1248 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
1249 | dev: true
1250 |
1251 | /eastasianwidth@0.2.0:
1252 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
1253 | dev: true
1254 |
1255 | /electron-to-chromium@1.4.679:
1256 | resolution: {integrity: sha512-NhQMsz5k0d6m9z3qAxnsOR/ebal4NAGsrNVRwcDo4Kc/zQ7KdsTKZUxZoygHcVRb0QDW3waEDIcE3isZ79RP6g==}
1257 | dev: true
1258 |
1259 | /emoji-regex@8.0.0:
1260 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1261 | dev: true
1262 |
1263 | /emoji-regex@9.2.2:
1264 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1265 | dev: true
1266 |
1267 | /escalade@3.1.2:
1268 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
1269 | engines: {node: '>=6'}
1270 | dev: true
1271 |
1272 | /fast-glob@3.3.2:
1273 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
1274 | engines: {node: '>=8.6.0'}
1275 | dependencies:
1276 | '@nodelib/fs.stat': 2.0.5
1277 | '@nodelib/fs.walk': 1.2.8
1278 | glob-parent: 5.1.2
1279 | merge2: 1.4.1
1280 | micromatch: 4.0.5
1281 | dev: true
1282 |
1283 | /fastq@1.17.1:
1284 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
1285 | dependencies:
1286 | reusify: 1.0.4
1287 | dev: true
1288 |
1289 | /fill-range@7.0.1:
1290 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1291 | engines: {node: '>=8'}
1292 | dependencies:
1293 | to-regex-range: 5.0.1
1294 | dev: true
1295 |
1296 | /foreground-child@3.1.1:
1297 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
1298 | engines: {node: '>=14'}
1299 | dependencies:
1300 | cross-spawn: 7.0.3
1301 | signal-exit: 4.1.0
1302 | dev: true
1303 |
1304 | /fraction.js@4.3.7:
1305 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
1306 | dev: true
1307 |
1308 | /fsevents@2.3.3:
1309 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1310 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1311 | os: [darwin]
1312 | requiresBuild: true
1313 | dev: true
1314 | optional: true
1315 |
1316 | /function-bind@1.1.2:
1317 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1318 | dev: true
1319 |
1320 | /get-nonce@1.0.1:
1321 | resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
1322 | engines: {node: '>=6'}
1323 | dev: false
1324 |
1325 | /glob-parent@5.1.2:
1326 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1327 | engines: {node: '>= 6'}
1328 | dependencies:
1329 | is-glob: 4.0.3
1330 | dev: true
1331 |
1332 | /glob-parent@6.0.2:
1333 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1334 | engines: {node: '>=10.13.0'}
1335 | dependencies:
1336 | is-glob: 4.0.3
1337 | dev: true
1338 |
1339 | /glob@10.3.10:
1340 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
1341 | engines: {node: '>=16 || 14 >=14.17'}
1342 | hasBin: true
1343 | dependencies:
1344 | foreground-child: 3.1.1
1345 | jackspeak: 2.3.6
1346 | minimatch: 9.0.3
1347 | minipass: 7.0.4
1348 | path-scurry: 1.10.1
1349 | dev: true
1350 |
1351 | /graceful-fs@4.2.11:
1352 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1353 | dev: false
1354 |
1355 | /hasown@2.0.1:
1356 | resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
1357 | engines: {node: '>= 0.4'}
1358 | dependencies:
1359 | function-bind: 1.1.2
1360 | dev: true
1361 |
1362 | /invariant@2.2.4:
1363 | resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
1364 | dependencies:
1365 | loose-envify: 1.4.0
1366 | dev: false
1367 |
1368 | /is-binary-path@2.1.0:
1369 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1370 | engines: {node: '>=8'}
1371 | dependencies:
1372 | binary-extensions: 2.2.0
1373 | dev: true
1374 |
1375 | /is-core-module@2.13.1:
1376 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
1377 | dependencies:
1378 | hasown: 2.0.1
1379 | dev: true
1380 |
1381 | /is-extglob@2.1.1:
1382 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1383 | engines: {node: '>=0.10.0'}
1384 | dev: true
1385 |
1386 | /is-fullwidth-code-point@3.0.0:
1387 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1388 | engines: {node: '>=8'}
1389 | dev: true
1390 |
1391 | /is-glob@4.0.3:
1392 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1393 | engines: {node: '>=0.10.0'}
1394 | dependencies:
1395 | is-extglob: 2.1.1
1396 | dev: true
1397 |
1398 | /is-number@7.0.0:
1399 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1400 | engines: {node: '>=0.12.0'}
1401 | dev: true
1402 |
1403 | /isexe@2.0.0:
1404 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1405 | dev: true
1406 |
1407 | /jackspeak@2.3.6:
1408 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
1409 | engines: {node: '>=14'}
1410 | dependencies:
1411 | '@isaacs/cliui': 8.0.2
1412 | optionalDependencies:
1413 | '@pkgjs/parseargs': 0.11.0
1414 | dev: true
1415 |
1416 | /jiti@1.21.0:
1417 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
1418 | hasBin: true
1419 | dev: true
1420 |
1421 | /jose@5.2.2:
1422 | resolution: {integrity: sha512-/WByRr4jDcsKlvMd1dRJnPfS1GVO3WuKyaurJ/vvXcOaUQO8rnNObCQMlv/5uCceVQIq5Q4WLF44ohsdiTohdg==}
1423 | dev: false
1424 |
1425 | /js-tokens@4.0.0:
1426 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1427 | dev: false
1428 |
1429 | /lilconfig@2.1.0:
1430 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
1431 | engines: {node: '>=10'}
1432 | dev: true
1433 |
1434 | /lilconfig@3.1.1:
1435 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
1436 | engines: {node: '>=14'}
1437 | dev: true
1438 |
1439 | /lines-and-columns@1.2.4:
1440 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1441 | dev: true
1442 |
1443 | /loose-envify@1.4.0:
1444 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1445 | hasBin: true
1446 | dependencies:
1447 | js-tokens: 4.0.0
1448 | dev: false
1449 |
1450 | /lru-cache@10.2.0:
1451 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
1452 | engines: {node: 14 || >=16.14}
1453 | dev: true
1454 |
1455 | /lucide-react@0.364.0(react@18.2.0):
1456 | resolution: {integrity: sha512-eHfdbJExWtTaZ0tBMGtI7PA/MbqV5wt+o4/yitDce17tadH/75Gq3Tq8jSteb3LhLr0eay/j5YUuN4yXjnI3aw==}
1457 | peerDependencies:
1458 | react: ^16.5.1 || ^17.0.0 || ^18.0.0
1459 | dependencies:
1460 | react: 18.2.0
1461 | dev: false
1462 |
1463 | /merge2@1.4.1:
1464 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1465 | engines: {node: '>= 8'}
1466 | dev: true
1467 |
1468 | /micromatch@4.0.5:
1469 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1470 | engines: {node: '>=8.6'}
1471 | dependencies:
1472 | braces: 3.0.2
1473 | picomatch: 2.3.1
1474 | dev: true
1475 |
1476 | /minimatch@9.0.3:
1477 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
1478 | engines: {node: '>=16 || 14 >=14.17'}
1479 | dependencies:
1480 | brace-expansion: 2.0.1
1481 | dev: true
1482 |
1483 | /minipass@7.0.4:
1484 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
1485 | engines: {node: '>=16 || 14 >=14.17'}
1486 | dev: true
1487 |
1488 | /mz@2.7.0:
1489 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1490 | dependencies:
1491 | any-promise: 1.3.0
1492 | object-assign: 4.1.1
1493 | thenify-all: 1.6.0
1494 | dev: true
1495 |
1496 | /nanoid@3.3.7:
1497 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
1498 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1499 | hasBin: true
1500 |
1501 | /next-auth@5.0.0-beta.16(next@14.2.0-canary.56)(react@18.2.0):
1502 | resolution: {integrity: sha512-dX2snB+ezN23tFzSes3n3uosT9iBf0eILPYWH/R2fd9n3ZzdMQlRzq7JIOPeS1aLc84IuRlyuyXyx9XmmZB6og==}
1503 | peerDependencies:
1504 | '@simplewebauthn/browser': ^9.0.1
1505 | '@simplewebauthn/server': ^9.0.2
1506 | next: ^14
1507 | nodemailer: ^6.6.5
1508 | react: ^18.2.0
1509 | peerDependenciesMeta:
1510 | '@simplewebauthn/browser':
1511 | optional: true
1512 | '@simplewebauthn/server':
1513 | optional: true
1514 | nodemailer:
1515 | optional: true
1516 | dependencies:
1517 | '@auth/core': 0.28.1
1518 | next: 14.2.0-canary.56(react-dom@18.2.0)(react@18.2.0)
1519 | react: 18.2.0
1520 | dev: false
1521 |
1522 | /next@14.2.0-canary.56(react-dom@18.2.0)(react@18.2.0):
1523 | resolution: {integrity: sha512-o5/GGmNwGY3y3At/K9Y/9Vmuhjk7lwXPh7W/feePYeqpYu7/jp47NDg+EKczNj3ueOdKPFJr2kiwYfD3rT2RBQ==}
1524 | engines: {node: '>=18.17.0'}
1525 | hasBin: true
1526 | peerDependencies:
1527 | '@opentelemetry/api': ^1.1.0
1528 | '@playwright/test': ^1.41.2
1529 | react: ^18.2.0
1530 | react-dom: ^18.2.0
1531 | sass: ^1.3.0
1532 | peerDependenciesMeta:
1533 | '@opentelemetry/api':
1534 | optional: true
1535 | '@playwright/test':
1536 | optional: true
1537 | sass:
1538 | optional: true
1539 | dependencies:
1540 | '@next/env': 14.2.0-canary.56
1541 | '@swc/helpers': 0.5.5
1542 | busboy: 1.6.0
1543 | caniuse-lite: 1.0.30001605
1544 | graceful-fs: 4.2.11
1545 | postcss: 8.4.31
1546 | react: 18.2.0
1547 | react-dom: 18.2.0(react@18.2.0)
1548 | styled-jsx: 5.1.1(react@18.2.0)
1549 | optionalDependencies:
1550 | '@next/swc-darwin-arm64': 14.2.0-canary.56
1551 | '@next/swc-darwin-x64': 14.2.0-canary.56
1552 | '@next/swc-linux-arm64-gnu': 14.2.0-canary.56
1553 | '@next/swc-linux-arm64-musl': 14.2.0-canary.56
1554 | '@next/swc-linux-x64-gnu': 14.2.0-canary.56
1555 | '@next/swc-linux-x64-musl': 14.2.0-canary.56
1556 | '@next/swc-win32-arm64-msvc': 14.2.0-canary.56
1557 | '@next/swc-win32-ia32-msvc': 14.2.0-canary.56
1558 | '@next/swc-win32-x64-msvc': 14.2.0-canary.56
1559 | transitivePeerDependencies:
1560 | - '@babel/core'
1561 | - babel-plugin-macros
1562 | dev: false
1563 |
1564 | /node-releases@2.0.14:
1565 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
1566 | dev: true
1567 |
1568 | /normalize-path@3.0.0:
1569 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1570 | engines: {node: '>=0.10.0'}
1571 | dev: true
1572 |
1573 | /normalize-range@0.1.2:
1574 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1575 | engines: {node: '>=0.10.0'}
1576 | dev: true
1577 |
1578 | /oauth4webapi@2.10.3:
1579 | resolution: {integrity: sha512-9FkXEXfzVKzH63GUOZz1zMr3wBaICSzk6DLXx+CGdrQ10ItNk2ePWzYYc1fdmKq1ayGFb2aX97sRCoZ2s0mkDw==}
1580 | dev: false
1581 |
1582 | /object-assign@4.1.1:
1583 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1584 | engines: {node: '>=0.10.0'}
1585 | dev: true
1586 |
1587 | /object-hash@3.0.0:
1588 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1589 | engines: {node: '>= 6'}
1590 | dev: true
1591 |
1592 | /path-key@3.1.1:
1593 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1594 | engines: {node: '>=8'}
1595 | dev: true
1596 |
1597 | /path-parse@1.0.7:
1598 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1599 | dev: true
1600 |
1601 | /path-scurry@1.10.1:
1602 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
1603 | engines: {node: '>=16 || 14 >=14.17'}
1604 | dependencies:
1605 | lru-cache: 10.2.0
1606 | minipass: 7.0.4
1607 | dev: true
1608 |
1609 | /pg-int8@1.0.1:
1610 | resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
1611 | engines: {node: '>=4.0.0'}
1612 | dev: false
1613 |
1614 | /pg-protocol@1.6.0:
1615 | resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==}
1616 | dev: false
1617 |
1618 | /pg-types@2.2.0:
1619 | resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
1620 | engines: {node: '>=4'}
1621 | dependencies:
1622 | pg-int8: 1.0.1
1623 | postgres-array: 2.0.0
1624 | postgres-bytea: 1.0.0
1625 | postgres-date: 1.0.7
1626 | postgres-interval: 1.2.0
1627 | dev: false
1628 |
1629 | /picocolors@1.0.0:
1630 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1631 |
1632 | /picomatch@2.3.1:
1633 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1634 | engines: {node: '>=8.6'}
1635 | dev: true
1636 |
1637 | /pify@2.3.0:
1638 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1639 | engines: {node: '>=0.10.0'}
1640 | dev: true
1641 |
1642 | /pirates@4.0.6:
1643 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1644 | engines: {node: '>= 6'}
1645 | dev: true
1646 |
1647 | /postcss-import@15.1.0(postcss@8.4.38):
1648 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
1649 | engines: {node: '>=14.0.0'}
1650 | peerDependencies:
1651 | postcss: ^8.0.0
1652 | dependencies:
1653 | postcss: 8.4.38
1654 | postcss-value-parser: 4.2.0
1655 | read-cache: 1.0.0
1656 | resolve: 1.22.8
1657 | dev: true
1658 |
1659 | /postcss-js@4.0.1(postcss@8.4.38):
1660 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
1661 | engines: {node: ^12 || ^14 || >= 16}
1662 | peerDependencies:
1663 | postcss: ^8.4.21
1664 | dependencies:
1665 | camelcase-css: 2.0.1
1666 | postcss: 8.4.38
1667 | dev: true
1668 |
1669 | /postcss-load-config@4.0.2(postcss@8.4.38):
1670 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
1671 | engines: {node: '>= 14'}
1672 | peerDependencies:
1673 | postcss: '>=8.0.9'
1674 | ts-node: '>=9.0.0'
1675 | peerDependenciesMeta:
1676 | postcss:
1677 | optional: true
1678 | ts-node:
1679 | optional: true
1680 | dependencies:
1681 | lilconfig: 3.1.1
1682 | postcss: 8.4.38
1683 | yaml: 2.3.4
1684 | dev: true
1685 |
1686 | /postcss-nested@6.0.1(postcss@8.4.38):
1687 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
1688 | engines: {node: '>=12.0'}
1689 | peerDependencies:
1690 | postcss: ^8.2.14
1691 | dependencies:
1692 | postcss: 8.4.38
1693 | postcss-selector-parser: 6.0.15
1694 | dev: true
1695 |
1696 | /postcss-selector-parser@6.0.15:
1697 | resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==}
1698 | engines: {node: '>=4'}
1699 | dependencies:
1700 | cssesc: 3.0.0
1701 | util-deprecate: 1.0.2
1702 | dev: true
1703 |
1704 | /postcss-value-parser@4.2.0:
1705 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1706 | dev: true
1707 |
1708 | /postcss@8.4.31:
1709 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
1710 | engines: {node: ^10 || ^12 || >=14}
1711 | dependencies:
1712 | nanoid: 3.3.7
1713 | picocolors: 1.0.0
1714 | source-map-js: 1.2.0
1715 | dev: false
1716 |
1717 | /postcss@8.4.38:
1718 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
1719 | engines: {node: ^10 || ^12 || >=14}
1720 | dependencies:
1721 | nanoid: 3.3.7
1722 | picocolors: 1.0.0
1723 | source-map-js: 1.2.0
1724 | dev: true
1725 |
1726 | /postgres-array@2.0.0:
1727 | resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
1728 | engines: {node: '>=4'}
1729 | dev: false
1730 |
1731 | /postgres-array@3.0.2:
1732 | resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==}
1733 | engines: {node: '>=12'}
1734 | dev: false
1735 |
1736 | /postgres-bytea@1.0.0:
1737 | resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
1738 | engines: {node: '>=0.10.0'}
1739 | dev: false
1740 |
1741 | /postgres-date@1.0.7:
1742 | resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
1743 | engines: {node: '>=0.10.0'}
1744 | dev: false
1745 |
1746 | /postgres-interval@1.2.0:
1747 | resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
1748 | engines: {node: '>=0.10.0'}
1749 | dependencies:
1750 | xtend: 4.0.2
1751 | dev: false
1752 |
1753 | /preact-render-to-string@5.2.3(preact@10.11.3):
1754 | resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==}
1755 | peerDependencies:
1756 | preact: '>=10'
1757 | dependencies:
1758 | preact: 10.11.3
1759 | pretty-format: 3.8.0
1760 | dev: false
1761 |
1762 | /preact@10.11.3:
1763 | resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==}
1764 | dev: false
1765 |
1766 | /prettier@3.2.5:
1767 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
1768 | engines: {node: '>=14'}
1769 | hasBin: true
1770 | dev: true
1771 |
1772 | /pretty-format@3.8.0:
1773 | resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
1774 | dev: false
1775 |
1776 | /prisma@5.12.0:
1777 | resolution: {integrity: sha512-zxw4WSIvpsyNbpv8r7Fxgm7nwTFVmD6wbN6VuH13lClOceSANDOMl4jO3oxE6VzhjxmnEJqOGZjON2T2UpmLag==}
1778 | engines: {node: '>=16.13'}
1779 | hasBin: true
1780 | requiresBuild: true
1781 | dependencies:
1782 | '@prisma/engines': 5.12.0
1783 | dev: false
1784 |
1785 | /queue-microtask@1.2.3:
1786 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1787 | dev: true
1788 |
1789 | /react-dom@18.2.0(react@18.2.0):
1790 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
1791 | peerDependencies:
1792 | react: ^18.2.0
1793 | dependencies:
1794 | loose-envify: 1.4.0
1795 | react: 18.2.0
1796 | scheduler: 0.23.0
1797 | dev: false
1798 |
1799 | /react-remove-scroll-bar@2.3.5(@types/react@18.2.74)(react@18.2.0):
1800 | resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==}
1801 | engines: {node: '>=10'}
1802 | peerDependencies:
1803 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
1804 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1805 | peerDependenciesMeta:
1806 | '@types/react':
1807 | optional: true
1808 | dependencies:
1809 | '@types/react': 18.2.74
1810 | react: 18.2.0
1811 | react-style-singleton: 2.2.1(@types/react@18.2.74)(react@18.2.0)
1812 | tslib: 2.6.2
1813 | dev: false
1814 |
1815 | /react-remove-scroll@2.5.5(@types/react@18.2.74)(react@18.2.0):
1816 | resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
1817 | engines: {node: '>=10'}
1818 | peerDependencies:
1819 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
1820 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1821 | peerDependenciesMeta:
1822 | '@types/react':
1823 | optional: true
1824 | dependencies:
1825 | '@types/react': 18.2.74
1826 | react: 18.2.0
1827 | react-remove-scroll-bar: 2.3.5(@types/react@18.2.74)(react@18.2.0)
1828 | react-style-singleton: 2.2.1(@types/react@18.2.74)(react@18.2.0)
1829 | tslib: 2.6.2
1830 | use-callback-ref: 1.3.1(@types/react@18.2.74)(react@18.2.0)
1831 | use-sidecar: 1.1.2(@types/react@18.2.74)(react@18.2.0)
1832 | dev: false
1833 |
1834 | /react-style-singleton@2.2.1(@types/react@18.2.74)(react@18.2.0):
1835 | resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
1836 | engines: {node: '>=10'}
1837 | peerDependencies:
1838 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
1839 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
1840 | peerDependenciesMeta:
1841 | '@types/react':
1842 | optional: true
1843 | dependencies:
1844 | '@types/react': 18.2.74
1845 | get-nonce: 1.0.1
1846 | invariant: 2.2.4
1847 | react: 18.2.0
1848 | tslib: 2.6.2
1849 | dev: false
1850 |
1851 | /react@18.2.0:
1852 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
1853 | engines: {node: '>=0.10.0'}
1854 | dependencies:
1855 | loose-envify: 1.4.0
1856 | dev: false
1857 |
1858 | /read-cache@1.0.0:
1859 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1860 | dependencies:
1861 | pify: 2.3.0
1862 | dev: true
1863 |
1864 | /readdirp@3.6.0:
1865 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1866 | engines: {node: '>=8.10.0'}
1867 | dependencies:
1868 | picomatch: 2.3.1
1869 | dev: true
1870 |
1871 | /regenerator-runtime@0.14.1:
1872 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
1873 | dev: false
1874 |
1875 | /resolve@1.22.8:
1876 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
1877 | hasBin: true
1878 | dependencies:
1879 | is-core-module: 2.13.1
1880 | path-parse: 1.0.7
1881 | supports-preserve-symlinks-flag: 1.0.0
1882 | dev: true
1883 |
1884 | /reusify@1.0.4:
1885 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1886 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1887 | dev: true
1888 |
1889 | /run-parallel@1.2.0:
1890 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1891 | dependencies:
1892 | queue-microtask: 1.2.3
1893 | dev: true
1894 |
1895 | /scheduler@0.23.0:
1896 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
1897 | dependencies:
1898 | loose-envify: 1.4.0
1899 | dev: false
1900 |
1901 | /shebang-command@2.0.0:
1902 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1903 | engines: {node: '>=8'}
1904 | dependencies:
1905 | shebang-regex: 3.0.0
1906 | dev: true
1907 |
1908 | /shebang-regex@3.0.0:
1909 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1910 | engines: {node: '>=8'}
1911 | dev: true
1912 |
1913 | /signal-exit@4.1.0:
1914 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1915 | engines: {node: '>=14'}
1916 | dev: true
1917 |
1918 | /source-map-js@1.2.0:
1919 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
1920 | engines: {node: '>=0.10.0'}
1921 |
1922 | /streamsearch@1.1.0:
1923 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1924 | engines: {node: '>=10.0.0'}
1925 | dev: false
1926 |
1927 | /string-width@4.2.3:
1928 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1929 | engines: {node: '>=8'}
1930 | dependencies:
1931 | emoji-regex: 8.0.0
1932 | is-fullwidth-code-point: 3.0.0
1933 | strip-ansi: 6.0.1
1934 | dev: true
1935 |
1936 | /string-width@5.1.2:
1937 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1938 | engines: {node: '>=12'}
1939 | dependencies:
1940 | eastasianwidth: 0.2.0
1941 | emoji-regex: 9.2.2
1942 | strip-ansi: 7.1.0
1943 | dev: true
1944 |
1945 | /strip-ansi@6.0.1:
1946 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1947 | engines: {node: '>=8'}
1948 | dependencies:
1949 | ansi-regex: 5.0.1
1950 | dev: true
1951 |
1952 | /strip-ansi@7.1.0:
1953 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1954 | engines: {node: '>=12'}
1955 | dependencies:
1956 | ansi-regex: 6.0.1
1957 | dev: true
1958 |
1959 | /styled-jsx@5.1.1(react@18.2.0):
1960 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
1961 | engines: {node: '>= 12.0.0'}
1962 | peerDependencies:
1963 | '@babel/core': '*'
1964 | babel-plugin-macros: '*'
1965 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
1966 | peerDependenciesMeta:
1967 | '@babel/core':
1968 | optional: true
1969 | babel-plugin-macros:
1970 | optional: true
1971 | dependencies:
1972 | client-only: 0.0.1
1973 | react: 18.2.0
1974 | dev: false
1975 |
1976 | /sucrase@3.35.0:
1977 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1978 | engines: {node: '>=16 || 14 >=14.17'}
1979 | hasBin: true
1980 | dependencies:
1981 | '@jridgewell/gen-mapping': 0.3.3
1982 | commander: 4.1.1
1983 | glob: 10.3.10
1984 | lines-and-columns: 1.2.4
1985 | mz: 2.7.0
1986 | pirates: 4.0.6
1987 | ts-interface-checker: 0.1.13
1988 | dev: true
1989 |
1990 | /supports-preserve-symlinks-flag@1.0.0:
1991 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1992 | engines: {node: '>= 0.4'}
1993 | dev: true
1994 |
1995 | /tailwind-merge@2.2.2:
1996 | resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==}
1997 | dependencies:
1998 | '@babel/runtime': 7.24.1
1999 | dev: false
2000 |
2001 | /tailwindcss-animate@1.0.7(tailwindcss@3.4.3):
2002 | resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
2003 | peerDependencies:
2004 | tailwindcss: '>=3.0.0 || insiders'
2005 | dependencies:
2006 | tailwindcss: 3.4.3
2007 | dev: true
2008 |
2009 | /tailwindcss@3.4.3:
2010 | resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==}
2011 | engines: {node: '>=14.0.0'}
2012 | hasBin: true
2013 | dependencies:
2014 | '@alloc/quick-lru': 5.2.0
2015 | arg: 5.0.2
2016 | chokidar: 3.6.0
2017 | didyoumean: 1.2.2
2018 | dlv: 1.1.3
2019 | fast-glob: 3.3.2
2020 | glob-parent: 6.0.2
2021 | is-glob: 4.0.3
2022 | jiti: 1.21.0
2023 | lilconfig: 2.1.0
2024 | micromatch: 4.0.5
2025 | normalize-path: 3.0.0
2026 | object-hash: 3.0.0
2027 | picocolors: 1.0.0
2028 | postcss: 8.4.38
2029 | postcss-import: 15.1.0(postcss@8.4.38)
2030 | postcss-js: 4.0.1(postcss@8.4.38)
2031 | postcss-load-config: 4.0.2(postcss@8.4.38)
2032 | postcss-nested: 6.0.1(postcss@8.4.38)
2033 | postcss-selector-parser: 6.0.15
2034 | resolve: 1.22.8
2035 | sucrase: 3.35.0
2036 | transitivePeerDependencies:
2037 | - ts-node
2038 | dev: true
2039 |
2040 | /thenify-all@1.6.0:
2041 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
2042 | engines: {node: '>=0.8'}
2043 | dependencies:
2044 | thenify: 3.3.1
2045 | dev: true
2046 |
2047 | /thenify@3.3.1:
2048 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
2049 | dependencies:
2050 | any-promise: 1.3.0
2051 | dev: true
2052 |
2053 | /to-regex-range@5.0.1:
2054 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2055 | engines: {node: '>=8.0'}
2056 | dependencies:
2057 | is-number: 7.0.0
2058 | dev: true
2059 |
2060 | /ts-interface-checker@0.1.13:
2061 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
2062 | dev: true
2063 |
2064 | /tslib@2.6.2:
2065 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
2066 | dev: false
2067 |
2068 | /typescript@5.4.3:
2069 | resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==}
2070 | engines: {node: '>=14.17'}
2071 | hasBin: true
2072 | dev: true
2073 |
2074 | /undici-types@5.26.5:
2075 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
2076 |
2077 | /update-browserslist-db@1.0.13(browserslist@4.23.0):
2078 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
2079 | hasBin: true
2080 | peerDependencies:
2081 | browserslist: '>= 4.21.0'
2082 | dependencies:
2083 | browserslist: 4.23.0
2084 | escalade: 3.1.2
2085 | picocolors: 1.0.0
2086 | dev: true
2087 |
2088 | /use-callback-ref@1.3.1(@types/react@18.2.74)(react@18.2.0):
2089 | resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==}
2090 | engines: {node: '>=10'}
2091 | peerDependencies:
2092 | '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
2093 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
2094 | peerDependenciesMeta:
2095 | '@types/react':
2096 | optional: true
2097 | dependencies:
2098 | '@types/react': 18.2.74
2099 | react: 18.2.0
2100 | tslib: 2.6.2
2101 | dev: false
2102 |
2103 | /use-sidecar@1.1.2(@types/react@18.2.74)(react@18.2.0):
2104 | resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
2105 | engines: {node: '>=10'}
2106 | peerDependencies:
2107 | '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
2108 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
2109 | peerDependenciesMeta:
2110 | '@types/react':
2111 | optional: true
2112 | dependencies:
2113 | '@types/react': 18.2.74
2114 | detect-node-es: 1.1.0
2115 | react: 18.2.0
2116 | tslib: 2.6.2
2117 | dev: false
2118 |
2119 | /util-deprecate@1.0.2:
2120 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2121 | dev: true
2122 |
2123 | /which@2.0.2:
2124 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2125 | engines: {node: '>= 8'}
2126 | hasBin: true
2127 | dependencies:
2128 | isexe: 2.0.0
2129 | dev: true
2130 |
2131 | /wrap-ansi@7.0.0:
2132 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2133 | engines: {node: '>=10'}
2134 | dependencies:
2135 | ansi-styles: 4.3.0
2136 | string-width: 4.2.3
2137 | strip-ansi: 6.0.1
2138 | dev: true
2139 |
2140 | /wrap-ansi@8.1.0:
2141 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
2142 | engines: {node: '>=12'}
2143 | dependencies:
2144 | ansi-styles: 6.2.1
2145 | string-width: 5.1.2
2146 | strip-ansi: 7.1.0
2147 | dev: true
2148 |
2149 | /xtend@4.0.2:
2150 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
2151 | engines: {node: '>=0.4'}
2152 | dev: false
2153 |
2154 | /yaml@2.3.4:
2155 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
2156 | engines: {node: '>= 14'}
2157 | dev: true
2158 |
--------------------------------------------------------------------------------