├── .env.example
├── .gitignore
├── .vscode
└── settings.json
├── LICENSE.md
├── README.md
├── app
├── (dashboard)
│ ├── actions.ts
│ ├── customers
│ │ └── page.tsx
│ ├── error.tsx
│ ├── layout.tsx
│ ├── nav-item.tsx
│ ├── page.tsx
│ ├── product.tsx
│ ├── products-table.tsx
│ ├── providers.tsx
│ ├── search.tsx
│ └── user.tsx
├── api
│ ├── auth
│ │ └── [...nextauth]
│ │ │ └── route.ts
│ └── seed
│ │ └── route.ts
├── favicon.ico
├── globals.css
├── layout.tsx
└── login
│ └── page.tsx
├── components.json
├── components
├── icons.tsx
└── ui
│ ├── badge.tsx
│ ├── breadcrumb.tsx
│ ├── button.tsx
│ ├── card.tsx
│ ├── dropdown-menu.tsx
│ ├── input.tsx
│ ├── sheet.tsx
│ ├── table.tsx
│ ├── tabs.tsx
│ └── tooltip.tsx
├── lib
├── auth.ts
├── db.ts
└── utils.ts
├── middleware.ts
├── next.config.ts
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── public
├── placeholder-user.jpg
└── placeholder.svg
├── tailwind.config.ts
└── tsconfig.json
/.env.example:
--------------------------------------------------------------------------------
1 | # https://vercel.com/docs/storage/vercel-postgres
2 | POSTGRES_URL=
3 |
4 | NEXTAUTH_URL=http://localhost:3000
5 | AUTH_SECRET= # https://generate-secret.vercel.app/32
6 |
7 | # https://authjs.dev/getting-started/providers/github
8 | AUTH_GITHUB_ID=
9 | AUTH_GITHUB_SECRET=
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 | .pnpm-debug.log*
27 |
28 | # env files
29 | .env*
30 | !.env.example
31 |
32 | # vercel
33 | .vercel
34 |
35 | # typescript
36 | *.tsbuildinfo
37 | next-env.d.ts
38 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "typescript.tsdk": "node_modules/typescript/lib",
3 | "typescript.enablePromptUseWorkspaceTsdk": true
4 | }
5 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2025 Vercel, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Next.js 15 Admin Dashboard Template
2 | Built with the Next.js App Router
3 |
4 |
10 |
11 | ## Overview
12 |
13 | This is a starter template using the following stack:
14 |
15 | - Framework - [Next.js (App Router)](https://nextjs.org)
16 | - Language - [TypeScript](https://www.typescriptlang.org)
17 | - Auth - [Auth.js](https://authjs.dev)
18 | - Database - [Postgres](https://vercel.com/postgres)
19 | - Deployment - [Vercel](https://vercel.com/docs/concepts/next.js/overview)
20 | - Styling - [Tailwind CSS](https://tailwindcss.com)
21 | - Components - [Shadcn UI](https://ui.shadcn.com/)
22 | - Analytics - [Vercel Analytics](https://vercel.com/analytics)
23 | - Formatting - [Prettier](https://prettier.io)
24 |
25 | This template uses the new Next.js App Router. This includes support for enhanced layouts, colocation of components, tests, and styles, component-level data fetching, and more.
26 |
27 | ## Getting Started
28 |
29 | During the deployment, Vercel will prompt you to create a new Postgres database. This will add the necessary environment variables to your project.
30 |
31 | Inside the Vercel Postgres dashboard, create a table based on the schema defined in this repository.
32 |
33 | ```
34 | CREATE TYPE status AS ENUM ('active', 'inactive', 'archived');
35 |
36 | CREATE TABLE products (
37 | id SERIAL PRIMARY KEY,
38 | image_url TEXT NOT NULL,
39 | name TEXT NOT NULL,
40 | status status NOT NULL,
41 | price NUMERIC(10, 2) NOT NULL,
42 | stock INTEGER NOT NULL,
43 | available_at TIMESTAMP NOT NULL
44 | );
45 | ```
46 |
47 | Then, uncomment `app/api/seed.ts` and hit `http://localhost:3000/api/seed` to seed the database with products.
48 |
49 | Next, copy the `.env.example` file to `.env` and update the values. Follow the instructions in the `.env.example` file to set up your GitHub OAuth application.
50 |
51 | ```bash
52 | npm i -g vercel
53 | vercel link
54 | vercel env pull
55 | ```
56 |
57 | Finally, run the following commands to start the development server:
58 |
59 | ```
60 | pnpm install
61 | pnpm dev
62 | ```
63 |
64 | You should now be able to access the application at http://localhost:3000.
65 |
--------------------------------------------------------------------------------
/app/(dashboard)/actions.ts:
--------------------------------------------------------------------------------
1 | 'use server';
2 |
3 | import { deleteProductById } from '@/lib/db';
4 | import { revalidatePath } from 'next/cache';
5 |
6 | export async function deleteProduct(formData: FormData) {
7 | // let id = Number(formData.get('id'));
8 | // await deleteProductById(id);
9 | // revalidatePath('/');
10 | }
11 |
--------------------------------------------------------------------------------
/app/(dashboard)/customers/page.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Card,
3 | CardContent,
4 | CardDescription,
5 | CardHeader,
6 | CardTitle
7 | } from '@/components/ui/card';
8 |
9 | export default function CustomersPage() {
10 | return (
11 |
12 |
13 | Customers
14 | View all customers and their orders.
15 |
16 |
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/app/(dashboard)/error.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import { useEffect } from 'react';
4 |
5 | export default function Error({
6 | error,
7 | reset
8 | }: {
9 | error: Error & { digest?: string };
10 | reset: () => void;
11 | }) {
12 | useEffect(() => {
13 | // Log the error to an error reporting service
14 | console.error(error);
15 | }, [error]);
16 |
17 | return (
18 |
19 |
20 |
21 | Please complete setup
22 |
23 |
24 | Inside the Vercel Postgres dashboard, create a table based on the
25 | schema defined in this repository.
26 |
27 |
28 |
29 | {`CREATE TABLE users (
30 | id SERIAL PRIMARY KEY,
31 | email VARCHAR(255) NOT NULL,
32 | name VARCHAR(255),
33 | username VARCHAR(255)
34 | );`}
35 |
36 |
37 |
Insert a row for testing:
38 |
39 |
40 | {`INSERT INTO users (id, email, name, username) VALUES (1, 'me@site.com', 'Me', 'username');`}
41 |
42 |
43 |
44 |
45 | );
46 | }
47 |
--------------------------------------------------------------------------------
/app/(dashboard)/layout.tsx:
--------------------------------------------------------------------------------
1 | import Link from 'next/link';
2 | import {
3 | Home,
4 | LineChart,
5 | Package,
6 | Package2,
7 | PanelLeft,
8 | Settings,
9 | ShoppingCart,
10 | Users2
11 | } from 'lucide-react';
12 |
13 | import {
14 | Breadcrumb,
15 | BreadcrumbItem,
16 | BreadcrumbLink,
17 | BreadcrumbList,
18 | BreadcrumbPage,
19 | BreadcrumbSeparator
20 | } from '@/components/ui/breadcrumb';
21 | import { Button } from '@/components/ui/button';
22 | import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet';
23 | import {
24 | Tooltip,
25 | TooltipContent,
26 | TooltipTrigger
27 | } from '@/components/ui/tooltip';
28 | import { Analytics } from '@vercel/analytics/react';
29 | import { User } from './user';
30 | import { VercelLogo } from '@/components/icons';
31 | import Providers from './providers';
32 | import { NavItem } from './nav-item';
33 | import { SearchInput } from './search';
34 |
35 | export default function DashboardLayout({
36 | children
37 | }: {
38 | children: React.ReactNode;
39 | }) {
40 | return (
41 |
42 |
43 |
44 |
45 |
51 |
52 | {children}
53 |
54 |
55 |
56 |
57 |
58 | );
59 | }
60 |
61 | function DesktopNav() {
62 | return (
63 |
108 | );
109 | }
110 |
111 | function MobileNav() {
112 | return (
113 |
114 |
115 |
119 |
120 |
121 |
165 |
166 |
167 | );
168 | }
169 |
170 | function DashboardBreadcrumb() {
171 | return (
172 |
173 |
174 |
175 |
176 | Dashboard
177 |
178 |
179 |
180 |
181 |
182 | Products
183 |
184 |
185 |
186 |
187 | All Products
188 |
189 |
190 |
191 | );
192 | }
193 |
--------------------------------------------------------------------------------
/app/(dashboard)/nav-item.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import {
4 | Tooltip,
5 | TooltipContent,
6 | TooltipTrigger
7 | } from '@/components/ui/tooltip';
8 | import clsx from 'clsx';
9 | import Link from 'next/link';
10 | import { usePathname } from 'next/navigation';
11 |
12 | export function NavItem({
13 | href,
14 | label,
15 | children
16 | }: {
17 | href: string;
18 | label: string;
19 | children: React.ReactNode;
20 | }) {
21 | const pathname = usePathname();
22 |
23 | return (
24 |
25 |
26 |
35 | {children}
36 | {label}
37 |
38 |
39 | {label}
40 |
41 | );
42 | }
43 |
--------------------------------------------------------------------------------
/app/(dashboard)/page.tsx:
--------------------------------------------------------------------------------
1 | import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
2 | import { File, PlusCircle } from 'lucide-react';
3 | import { Button } from '@/components/ui/button';
4 | import { ProductsTable } from './products-table';
5 | import { getProducts } from '@/lib/db';
6 |
7 | export default async function ProductsPage(
8 | props: {
9 | searchParams: Promise<{ q: string; offset: string }>;
10 | }
11 | ) {
12 | const searchParams = await props.searchParams;
13 | const search = searchParams.q ?? '';
14 | const offset = searchParams.offset ?? 0;
15 | const { products, newOffset, totalProducts } = await getProducts(
16 | search,
17 | Number(offset)
18 | );
19 |
20 | return (
21 |
22 |
23 |
24 | All
25 | Active
26 | Draft
27 |
28 | Archived
29 |
30 |
31 |
32 |
38 |
44 |
45 |
46 |
47 |
52 |
53 |
54 | );
55 | }
56 |
--------------------------------------------------------------------------------
/app/(dashboard)/product.tsx:
--------------------------------------------------------------------------------
1 | import Image from 'next/image';
2 | import { Badge } from '@/components/ui/badge';
3 | import { Button } from '@/components/ui/button';
4 | import {
5 | DropdownMenu,
6 | DropdownMenuContent,
7 | DropdownMenuItem,
8 | DropdownMenuLabel,
9 | DropdownMenuTrigger
10 | } from '@/components/ui/dropdown-menu';
11 | import { MoreHorizontal } from 'lucide-react';
12 | import { TableCell, TableRow } from '@/components/ui/table';
13 | import { SelectProduct } from '@/lib/db';
14 | import { deleteProduct } from './actions';
15 |
16 | export function Product({ product }: { product: SelectProduct }) {
17 | return (
18 |
19 |
20 |
27 |
28 | {product.name}
29 |
30 |
31 | {product.status}
32 |
33 |
34 | {`$${product.price}`}
35 | {product.stock}
36 |
37 | {product.availableAt.toLocaleDateString("en-US")}
38 |
39 |
40 |
41 |
42 |
46 |
47 |
48 | Actions
49 | Edit
50 |
51 |
54 |
55 |
56 |
57 |
58 |
59 | );
60 | }
61 |
--------------------------------------------------------------------------------
/app/(dashboard)/products-table.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import {
4 | TableHead,
5 | TableRow,
6 | TableHeader,
7 | TableBody,
8 | Table
9 | } from '@/components/ui/table';
10 | import {
11 | Card,
12 | CardContent,
13 | CardDescription,
14 | CardFooter,
15 | CardHeader,
16 | CardTitle
17 | } from '@/components/ui/card';
18 | import { Product } from './product';
19 | import { SelectProduct } from '@/lib/db';
20 | import { useRouter } from 'next/navigation';
21 | import { ChevronLeft, ChevronRight } from 'lucide-react';
22 | import { Button } from '@/components/ui/button';
23 |
24 | export function ProductsTable({
25 | products,
26 | offset,
27 | totalProducts
28 | }: {
29 | products: SelectProduct[];
30 | offset: number;
31 | totalProducts: number;
32 | }) {
33 | let router = useRouter();
34 | let productsPerPage = 5;
35 |
36 | function prevPage() {
37 | router.back();
38 | }
39 |
40 | function nextPage() {
41 | router.push(`/?offset=${offset}`, { scroll: false });
42 | }
43 |
44 | return (
45 |
46 |
47 | Products
48 |
49 | Manage your products and view their sales performance.
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Image
58 |
59 | Name
60 | Status
61 | Price
62 |
63 | Total Sales
64 |
65 | Created at
66 |
67 | Actions
68 |
69 |
70 |
71 |
72 | {products.map((product) => (
73 |
74 | ))}
75 |
76 |
77 |
78 |
79 |
110 |
111 |
112 | );
113 | }
114 |
--------------------------------------------------------------------------------
/app/(dashboard)/providers.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import { TooltipProvider } from '@/components/ui/tooltip';
4 |
5 | export default function Providers({ children }: { children: React.ReactNode }) {
6 | return {children};
7 | }
8 |
--------------------------------------------------------------------------------
/app/(dashboard)/search.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import { useTransition } from 'react';
4 | import { useRouter } from 'next/navigation';
5 | import { Input } from '@/components/ui/input';
6 | import { Spinner } from '@/components/icons';
7 | import { Search } from 'lucide-react';
8 |
9 | export function SearchInput() {
10 | const router = useRouter();
11 | const [isPending, startTransition] = useTransition();
12 |
13 | function searchAction(formData: FormData) {
14 | let value = formData.get('q') as string;
15 | let params = new URLSearchParams({ q: value });
16 | startTransition(() => {
17 | router.replace(`/?${params.toString()}`);
18 | });
19 | }
20 |
21 | return (
22 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/app/(dashboard)/user.tsx:
--------------------------------------------------------------------------------
1 | import { Button } from '@/components/ui/button';
2 | import { auth, signOut } from '@/lib/auth';
3 | import Image from 'next/image';
4 | import {
5 | DropdownMenu,
6 | DropdownMenuContent,
7 | DropdownMenuItem,
8 | DropdownMenuLabel,
9 | DropdownMenuSeparator,
10 | DropdownMenuTrigger
11 | } from '@/components/ui/dropdown-menu';
12 | import Link from 'next/link';
13 |
14 | export async function User() {
15 | let session = await auth();
16 | let user = session?.user;
17 |
18 | return (
19 |
20 |
21 |
34 |
35 |
36 | My Account
37 |
38 | Settings
39 | Support
40 |
41 | {user ? (
42 |
43 |
51 |
52 | ) : (
53 |
54 | Sign In
55 |
56 | )}
57 |
58 |
59 | );
60 | }
61 |
--------------------------------------------------------------------------------
/app/api/auth/[...nextauth]/route.ts:
--------------------------------------------------------------------------------
1 | import { handlers } from '@/lib/auth';
2 | export const { GET, POST } = handlers;
3 |
--------------------------------------------------------------------------------
/app/api/seed/route.ts:
--------------------------------------------------------------------------------
1 | // import { db, products } from 'lib/db';
2 |
3 | export const dynamic = 'force-dynamic';
4 |
5 | export async function GET() {
6 | return Response.json({
7 | message: 'Uncomment to seed data after DB is set up.'
8 | });
9 |
10 | // await db.insert(products).values([
11 | // {
12 | // id: 1,
13 | // imageUrl:
14 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/smartphone-gaPvyZW6aww0IhD3dOpaU6gBGILtcJ.webp',
15 | // name: 'Smartphone X Pro',
16 | // status: 'active',
17 | // price: '999.00',
18 | // stock: 150,
19 | // availableAt: new Date()
20 | // },
21 | // {
22 | // id: 2,
23 | // imageUrl:
24 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/earbuds-3rew4JGdIK81KNlR8Edr8NBBhFTOtX.webp',
25 | // name: 'Wireless Earbuds Ultra',
26 | // status: 'active',
27 | // price: '199.00',
28 | // stock: 300,
29 | // availableAt: new Date()
30 | // },
31 | // {
32 | // id: 3,
33 | // imageUrl:
34 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/home-iTeNnmKSMnrykOS9IYyJvnLFgap7Vw.webp',
35 | // name: 'Smart Home Hub',
36 | // status: 'active',
37 | // price: '149.00',
38 | // stock: 200,
39 | // availableAt: new Date()
40 | // },
41 | // {
42 | // id: 4,
43 | // imageUrl:
44 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/tv-H4l26crxtm9EQHLWc0ddrsXZ0V0Ofw.webp',
45 | // name: '4K Ultra HD Smart TV',
46 | // status: 'active',
47 | // price: '799.00',
48 | // stock: 50,
49 | // availableAt: new Date()
50 | // },
51 | // {
52 | // id: 5,
53 | // imageUrl:
54 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/laptop-9bgUhjY491hkxiMDeSgqb9R5I3lHNL.webp',
55 | // name: 'Gaming Laptop Pro',
56 | // status: 'active',
57 | // price: '1299.00',
58 | // stock: 75,
59 | // availableAt: new Date()
60 | // },
61 | // {
62 | // id: 6,
63 | // imageUrl:
64 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/headset-lYnRnpjDbZkB78lS7nnqEJFYFAUDg6.webp',
65 | // name: 'VR Headset Plus',
66 | // status: 'active',
67 | // price: '349.00',
68 | // stock: 120,
69 | // availableAt: new Date()
70 | // },
71 | // {
72 | // id: 7,
73 | // imageUrl:
74 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/watch-S2VeARK6sEM9QFg4yNQNjHFaHc3sXv.webp',
75 | // name: 'Smartwatch Elite',
76 | // status: 'active',
77 | // price: '249.00',
78 | // stock: 250,
79 | // availableAt: new Date()
80 | // },
81 | // {
82 | // id: 8,
83 | // imageUrl:
84 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/speaker-4Zk0Ctx5AvxnwNNTFWVK4Gtpru4YEf.webp',
85 | // name: 'Bluetooth Speaker Max',
86 | // status: 'active',
87 | // price: '99.00',
88 | // stock: 400,
89 | // availableAt: new Date()
90 | // },
91 | // {
92 | // id: 9,
93 | // imageUrl:
94 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/charger-GzRr0NSkCj0ZYWkTMvxXGZQu47w9r5.webp',
95 | // name: 'Portable Charger Super',
96 | // status: 'active',
97 | // price: '59.00',
98 | // stock: 500,
99 | // availableAt: new Date()
100 | // },
101 | // {
102 | // id: 10,
103 | // imageUrl:
104 | // 'https://uwja77bygk2kgfqe.public.blob.vercel-storage.com/thermostat-8GnK2LDE3lZAjUVtiBk61RrSuqSTF7.webp',
105 | // name: 'Smart Thermostat Pro',
106 | // status: 'active',
107 | // price: '199.00',
108 | // stock: 175,
109 | // availableAt: new Date()
110 | // }
111 | // ]);
112 | }
113 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vercel/nextjs-postgres-nextauth-tailwindcss-template/0311ed573ba8dd6e78799ff68d3d113a377fe37a/app/favicon.ico
--------------------------------------------------------------------------------
/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 |
78 | /* Chrome, Safari, Edge, Opera */
79 | input[type='search']::-webkit-search-cancel-button {
80 | -webkit-appearance: none;
81 | appearance: none;
82 | }
83 |
84 | /* Firefox */
85 | input[type='search']::-moz-search-cancel-button {
86 | display: none;
87 | }
88 |
89 | /* Microsoft Edge */
90 | input[type='search']::-ms-clear {
91 | display: none;
92 | }
93 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import './globals.css';
2 |
3 | import { Analytics } from '@vercel/analytics/react';
4 |
5 | export const metadata = {
6 | title: 'Next.js App Router + NextAuth + Tailwind CSS',
7 | description:
8 | 'A user admin dashboard configured with Next.js, Postgres, NextAuth, Tailwind CSS, TypeScript, and Prettier.'
9 | };
10 |
11 | export default function RootLayout({
12 | children
13 | }: {
14 | children: React.ReactNode;
15 | }) {
16 | return (
17 |
18 | {children}
19 |
20 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/app/login/page.tsx:
--------------------------------------------------------------------------------
1 | import { Button } from '@/components/ui/button';
2 | import {
3 | Card,
4 | CardDescription,
5 | CardFooter,
6 | CardHeader,
7 | CardTitle
8 | } from '@/components/ui/card';
9 | import { signIn } from '@/lib/auth';
10 |
11 | export default function LoginPage() {
12 | return (
13 |
14 |
15 |
16 | Login
17 |
18 | This demo uses GitHub for authentication.
19 |
20 |
21 |
22 |
33 |
34 |
35 |
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/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 | "prefix": ""
12 | },
13 | "aliases": {
14 | "components": "@/components",
15 | "utils": "@/lib/utils"
16 | }
17 | }
--------------------------------------------------------------------------------
/components/icons.tsx:
--------------------------------------------------------------------------------
1 | export function UsersIcon(props: React.SVGProps) {
2 | return (
3 |
20 | );
21 | }
22 |
23 | export function SettingsIcon(props: React.SVGProps) {
24 | return (
25 |
40 | );
41 | }
42 |
43 | export function SearchIcon(props: React.SVGProps) {
44 | return (
45 |
60 | );
61 | }
62 |
63 | export function Spinner() {
64 | return (
65 |
87 | );
88 | }
89 |
90 | export function Logo() {
91 | return (
92 |
108 | );
109 | }
110 |
111 | export function VercelLogo(props: React.SVGProps) {
112 | return (
113 |
125 | );
126 | }
127 |
--------------------------------------------------------------------------------
/components/ui/badge.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { cva, type VariantProps } from "class-variance-authority"
3 |
4 | import { cn } from "@/lib/utils"
5 |
6 | const badgeVariants = cva(
7 | "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8 | {
9 | variants: {
10 | variant: {
11 | default:
12 | "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
13 | secondary:
14 | "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
15 | destructive:
16 | "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
17 | outline: "text-foreground",
18 | },
19 | },
20 | defaultVariants: {
21 | variant: "default",
22 | },
23 | }
24 | )
25 |
26 | export interface BadgeProps
27 | extends React.HTMLAttributes,
28 | VariantProps {}
29 |
30 | function Badge({ className, variant, ...props }: BadgeProps) {
31 | return (
32 |
33 | )
34 | }
35 |
36 | export { Badge, badgeVariants }
37 |
--------------------------------------------------------------------------------
/components/ui/breadcrumb.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { Slot } from "@radix-ui/react-slot"
3 | import { ChevronRight, MoreHorizontal } from "lucide-react"
4 |
5 | import { cn } from "@/lib/utils"
6 |
7 | const Breadcrumb = React.forwardRef<
8 | HTMLElement,
9 | React.ComponentPropsWithoutRef<"nav"> & {
10 | separator?: React.ReactNode
11 | }
12 | >(({ ...props }, ref) => )
13 | Breadcrumb.displayName = "Breadcrumb"
14 |
15 | const BreadcrumbList = React.forwardRef<
16 | HTMLOListElement,
17 | React.ComponentPropsWithoutRef<"ol">
18 | >(({ className, ...props }, ref) => (
19 |
27 | ))
28 | BreadcrumbList.displayName = "BreadcrumbList"
29 |
30 | const BreadcrumbItem = React.forwardRef<
31 | HTMLLIElement,
32 | React.ComponentPropsWithoutRef<"li">
33 | >(({ className, ...props }, ref) => (
34 |
39 | ))
40 | BreadcrumbItem.displayName = "BreadcrumbItem"
41 |
42 | const BreadcrumbLink = React.forwardRef<
43 | HTMLAnchorElement,
44 | React.ComponentPropsWithoutRef<"a"> & {
45 | asChild?: boolean
46 | }
47 | >(({ asChild, className, ...props }, ref) => {
48 | const Comp = asChild ? Slot : "a"
49 |
50 | return (
51 |
56 | )
57 | })
58 | BreadcrumbLink.displayName = "BreadcrumbLink"
59 |
60 | const BreadcrumbPage = React.forwardRef<
61 | HTMLSpanElement,
62 | React.ComponentPropsWithoutRef<"span">
63 | >(({ className, ...props }, ref) => (
64 |
72 | ))
73 | BreadcrumbPage.displayName = "BreadcrumbPage"
74 |
75 | const BreadcrumbSeparator = ({
76 | children,
77 | className,
78 | ...props
79 | }: React.ComponentProps<"li">) => (
80 | svg]:size-3.5", className)}
84 | {...props}
85 | >
86 | {children ?? }
87 |
88 | )
89 | BreadcrumbSeparator.displayName = "BreadcrumbSeparator"
90 |
91 | const BreadcrumbEllipsis = ({
92 | className,
93 | ...props
94 | }: React.ComponentProps<"span">) => (
95 |
101 |
102 | More
103 |
104 | )
105 | BreadcrumbEllipsis.displayName = "BreadcrumbElipssis"
106 |
107 | export {
108 | Breadcrumb,
109 | BreadcrumbList,
110 | BreadcrumbItem,
111 | BreadcrumbLink,
112 | BreadcrumbPage,
113 | BreadcrumbSeparator,
114 | BreadcrumbEllipsis,
115 | }
116 |
--------------------------------------------------------------------------------
/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 whitespace-nowrap 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:
14 | 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
15 | outline:
16 | 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',
17 | secondary:
18 | 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
19 | ghost: 'hover:bg-accent hover:text-accent-foreground',
20 | link: 'text-primary underline-offset-4 hover:underline'
21 | },
22 | size: {
23 | default: 'h-10 px-4 py-2',
24 | sm: 'h-9 rounded-md px-3',
25 | lg: 'h-11 rounded-md px-8',
26 | icon: 'h-10 w-10'
27 | }
28 | },
29 | defaultVariants: {
30 | variant: 'default',
31 | size: 'default'
32 | }
33 | }
34 | );
35 |
36 | export interface ButtonProps
37 | extends React.ButtonHTMLAttributes,
38 | VariantProps {
39 | asChild?: boolean;
40 | formAction?: any;
41 | }
42 |
43 | const Button = React.forwardRef(
44 | ({ className, variant, size, asChild = false, ...props }, ref) => {
45 | const Comp = asChild ? Slot : 'button';
46 | return (
47 |
52 | );
53 | }
54 | );
55 | Button.displayName = 'Button';
56 |
57 | export { Button, buttonVariants };
58 |
--------------------------------------------------------------------------------
/components/ui/card.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | const Card = React.forwardRef<
6 | HTMLDivElement,
7 | React.HTMLAttributes
8 | >(({ className, ...props }, ref) => (
9 |
17 | ))
18 | Card.displayName = "Card"
19 |
20 | const CardHeader = React.forwardRef<
21 | HTMLDivElement,
22 | React.HTMLAttributes
23 | >(({ className, ...props }, ref) => (
24 |
29 | ))
30 | CardHeader.displayName = "CardHeader"
31 |
32 | const CardTitle = React.forwardRef<
33 | HTMLParagraphElement,
34 | React.HTMLAttributes
35 | >(({ className, ...props }, ref) => (
36 |
44 | ))
45 | CardTitle.displayName = "CardTitle"
46 |
47 | const CardDescription = React.forwardRef<
48 | HTMLParagraphElement,
49 | React.HTMLAttributes
50 | >(({ className, ...props }, ref) => (
51 |
56 | ))
57 | CardDescription.displayName = "CardDescription"
58 |
59 | const CardContent = React.forwardRef<
60 | HTMLDivElement,
61 | React.HTMLAttributes
62 | >(({ className, ...props }, ref) => (
63 |
64 | ))
65 | CardContent.displayName = "CardContent"
66 |
67 | const CardFooter = React.forwardRef<
68 | HTMLDivElement,
69 | React.HTMLAttributes
70 | >(({ className, ...props }, ref) => (
71 |
76 | ))
77 | CardFooter.displayName = "CardFooter"
78 |
79 | export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
80 |
--------------------------------------------------------------------------------
/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 =
41 | DropdownMenuPrimitive.SubTrigger.displayName
42 |
43 | const DropdownMenuSubContent = React.forwardRef<
44 | React.ElementRef,
45 | React.ComponentPropsWithoutRef
46 | >(({ className, ...props }, ref) => (
47 |
55 | ))
56 | DropdownMenuSubContent.displayName =
57 | DropdownMenuPrimitive.SubContent.displayName
58 |
59 | const DropdownMenuContent = React.forwardRef<
60 | React.ElementRef,
61 | React.ComponentPropsWithoutRef
62 | >(({ className, sideOffset = 4, ...props }, ref) => (
63 |
64 |
73 |
74 | ))
75 | DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
76 |
77 | const DropdownMenuItem = React.forwardRef<
78 | React.ElementRef,
79 | React.ComponentPropsWithoutRef & {
80 | inset?: boolean
81 | }
82 | >(({ className, inset, ...props }, ref) => (
83 |
92 | ))
93 | DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
94 |
95 | const DropdownMenuCheckboxItem = React.forwardRef<
96 | React.ElementRef,
97 | React.ComponentPropsWithoutRef
98 | >(({ className, children, checked, ...props }, ref) => (
99 |
108 |
109 |
110 |
111 |
112 |
113 | {children}
114 |
115 | ))
116 | DropdownMenuCheckboxItem.displayName =
117 | DropdownMenuPrimitive.CheckboxItem.displayName
118 |
119 | const DropdownMenuRadioItem = React.forwardRef<
120 | React.ElementRef,
121 | React.ComponentPropsWithoutRef
122 | >(({ className, children, ...props }, ref) => (
123 |
131 |
132 |
133 |
134 |
135 |
136 | {children}
137 |
138 | ))
139 | DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
140 |
141 | const DropdownMenuLabel = React.forwardRef<
142 | React.ElementRef,
143 | React.ComponentPropsWithoutRef & {
144 | inset?: boolean
145 | }
146 | >(({ className, inset, ...props }, ref) => (
147 |
156 | ))
157 | DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
158 |
159 | const DropdownMenuSeparator = React.forwardRef<
160 | React.ElementRef,
161 | React.ComponentPropsWithoutRef
162 | >(({ className, ...props }, ref) => (
163 |
168 | ))
169 | DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
170 |
171 | const DropdownMenuShortcut = ({
172 | className,
173 | ...props
174 | }: React.HTMLAttributes) => {
175 | return (
176 |
180 | )
181 | }
182 | DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
183 |
184 | export {
185 | DropdownMenu,
186 | DropdownMenuTrigger,
187 | DropdownMenuContent,
188 | DropdownMenuItem,
189 | DropdownMenuCheckboxItem,
190 | DropdownMenuRadioItem,
191 | DropdownMenuLabel,
192 | DropdownMenuSeparator,
193 | DropdownMenuShortcut,
194 | DropdownMenuGroup,
195 | DropdownMenuPortal,
196 | DropdownMenuSub,
197 | DropdownMenuSubContent,
198 | DropdownMenuSubTrigger,
199 | DropdownMenuRadioGroup,
200 | }
201 |
--------------------------------------------------------------------------------
/components/ui/input.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 |
3 | import { cn } from '@/lib/utils';
4 |
5 | export interface InputProps
6 | extends React.InputHTMLAttributes {}
7 |
8 | const Input = React.forwardRef(
9 | ({ className, type, ...props }, ref) => {
10 | return (
11 |
20 | );
21 | }
22 | );
23 | Input.displayName = 'Input';
24 |
25 | export { Input };
26 |
--------------------------------------------------------------------------------
/components/ui/sheet.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as SheetPrimitive from "@radix-ui/react-dialog"
5 | import { cva, type VariantProps } from "class-variance-authority"
6 | import { X } from "lucide-react"
7 |
8 | import { cn } from "@/lib/utils"
9 |
10 | const Sheet = SheetPrimitive.Root
11 |
12 | const SheetTrigger = SheetPrimitive.Trigger
13 |
14 | const SheetClose = SheetPrimitive.Close
15 |
16 | const SheetPortal = SheetPrimitive.Portal
17 |
18 | const SheetOverlay = React.forwardRef<
19 | React.ElementRef,
20 | React.ComponentPropsWithoutRef
21 | >(({ className, ...props }, ref) => (
22 |
30 | ))
31 | SheetOverlay.displayName = SheetPrimitive.Overlay.displayName
32 |
33 | const sheetVariants = cva(
34 | "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
35 | {
36 | variants: {
37 | side: {
38 | top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
39 | bottom:
40 | "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
41 | left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
42 | right:
43 | "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
44 | },
45 | },
46 | defaultVariants: {
47 | side: "right",
48 | },
49 | }
50 | )
51 |
52 | interface SheetContentProps
53 | extends React.ComponentPropsWithoutRef,
54 | VariantProps {}
55 |
56 | const SheetContent = React.forwardRef<
57 | React.ElementRef,
58 | SheetContentProps
59 | >(({ side = "right", className, children, ...props }, ref) => (
60 |
61 |
62 |
67 | {children}
68 |
69 |
70 | Close
71 |
72 |
73 |
74 | ))
75 | SheetContent.displayName = SheetPrimitive.Content.displayName
76 |
77 | const SheetHeader = ({
78 | className,
79 | ...props
80 | }: React.HTMLAttributes) => (
81 |
88 | )
89 | SheetHeader.displayName = "SheetHeader"
90 |
91 | const SheetFooter = ({
92 | className,
93 | ...props
94 | }: React.HTMLAttributes) => (
95 |
102 | )
103 | SheetFooter.displayName = "SheetFooter"
104 |
105 | const SheetTitle = React.forwardRef<
106 | React.ElementRef,
107 | React.ComponentPropsWithoutRef
108 | >(({ className, ...props }, ref) => (
109 |
114 | ))
115 | SheetTitle.displayName = SheetPrimitive.Title.displayName
116 |
117 | const SheetDescription = React.forwardRef<
118 | React.ElementRef,
119 | React.ComponentPropsWithoutRef
120 | >(({ className, ...props }, ref) => (
121 |
126 | ))
127 | SheetDescription.displayName = SheetPrimitive.Description.displayName
128 |
129 | export {
130 | Sheet,
131 | SheetPortal,
132 | SheetOverlay,
133 | SheetTrigger,
134 | SheetClose,
135 | SheetContent,
136 | SheetHeader,
137 | SheetFooter,
138 | SheetTitle,
139 | SheetDescription,
140 | }
141 |
--------------------------------------------------------------------------------
/components/ui/table.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | const Table = React.forwardRef<
6 | HTMLTableElement,
7 | React.HTMLAttributes
8 | >(({ className, ...props }, ref) => (
9 |
16 | ))
17 | Table.displayName = "Table"
18 |
19 | const TableHeader = React.forwardRef<
20 | HTMLTableSectionElement,
21 | React.HTMLAttributes
22 | >(({ className, ...props }, ref) => (
23 |
24 | ))
25 | TableHeader.displayName = "TableHeader"
26 |
27 | const TableBody = React.forwardRef<
28 | HTMLTableSectionElement,
29 | React.HTMLAttributes
30 | >(({ className, ...props }, ref) => (
31 |
36 | ))
37 | TableBody.displayName = "TableBody"
38 |
39 | const TableFooter = React.forwardRef<
40 | HTMLTableSectionElement,
41 | React.HTMLAttributes
42 | >(({ className, ...props }, ref) => (
43 | tr]:last:border-b-0",
47 | className
48 | )}
49 | {...props}
50 | />
51 | ))
52 | TableFooter.displayName = "TableFooter"
53 |
54 | const TableRow = React.forwardRef<
55 | HTMLTableRowElement,
56 | React.HTMLAttributes
57 | >(({ className, ...props }, ref) => (
58 |
66 | ))
67 | TableRow.displayName = "TableRow"
68 |
69 | const TableHead = React.forwardRef<
70 | HTMLTableCellElement,
71 | React.ThHTMLAttributes
72 | >(({ className, ...props }, ref) => (
73 | |
81 | ))
82 | TableHead.displayName = "TableHead"
83 |
84 | const TableCell = React.forwardRef<
85 | HTMLTableCellElement,
86 | React.TdHTMLAttributes
87 | >(({ className, ...props }, ref) => (
88 | |
93 | ))
94 | TableCell.displayName = "TableCell"
95 |
96 | const TableCaption = React.forwardRef<
97 | HTMLTableCaptionElement,
98 | React.HTMLAttributes
99 | >(({ className, ...props }, ref) => (
100 |
105 | ))
106 | TableCaption.displayName = "TableCaption"
107 |
108 | export {
109 | Table,
110 | TableHeader,
111 | TableBody,
112 | TableFooter,
113 | TableHead,
114 | TableRow,
115 | TableCell,
116 | TableCaption,
117 | }
118 |
--------------------------------------------------------------------------------
/components/ui/tabs.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as TabsPrimitive from "@radix-ui/react-tabs"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Tabs = TabsPrimitive.Root
9 |
10 | const TabsList = React.forwardRef<
11 | React.ElementRef,
12 | React.ComponentPropsWithoutRef
13 | >(({ className, ...props }, ref) => (
14 |
22 | ))
23 | TabsList.displayName = TabsPrimitive.List.displayName
24 |
25 | const TabsTrigger = React.forwardRef<
26 | React.ElementRef,
27 | React.ComponentPropsWithoutRef
28 | >(({ className, ...props }, ref) => (
29 |
37 | ))
38 | TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
39 |
40 | const TabsContent = React.forwardRef<
41 | React.ElementRef,
42 | React.ComponentPropsWithoutRef
43 | >(({ className, ...props }, ref) => (
44 |
52 | ))
53 | TabsContent.displayName = TabsPrimitive.Content.displayName
54 |
55 | export { Tabs, TabsList, TabsTrigger, TabsContent }
56 |
--------------------------------------------------------------------------------
/components/ui/tooltip.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as TooltipPrimitive from "@radix-ui/react-tooltip"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const TooltipProvider = TooltipPrimitive.Provider
9 |
10 | const Tooltip = TooltipPrimitive.Root
11 |
12 | const TooltipTrigger = TooltipPrimitive.Trigger
13 |
14 | const TooltipContent = React.forwardRef<
15 | React.ElementRef,
16 | React.ComponentPropsWithoutRef
17 | >(({ className, sideOffset = 4, ...props }, ref) => (
18 |
27 | ))
28 | TooltipContent.displayName = TooltipPrimitive.Content.displayName
29 |
30 | export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
31 |
--------------------------------------------------------------------------------
/lib/auth.ts:
--------------------------------------------------------------------------------
1 | import NextAuth from 'next-auth';
2 | import GitHub from 'next-auth/providers/github';
3 |
4 | export const { handlers, signIn, signOut, auth } = NextAuth({
5 | providers: [GitHub]
6 | });
7 |
--------------------------------------------------------------------------------
/lib/db.ts:
--------------------------------------------------------------------------------
1 | import 'server-only';
2 |
3 | import { neon } from '@neondatabase/serverless';
4 | import { drizzle } from 'drizzle-orm/neon-http';
5 | import {
6 | pgTable,
7 | text,
8 | numeric,
9 | integer,
10 | timestamp,
11 | pgEnum,
12 | serial
13 | } from 'drizzle-orm/pg-core';
14 | import { count, eq, ilike } from 'drizzle-orm';
15 | import { createInsertSchema } from 'drizzle-zod';
16 |
17 | export const db = drizzle(neon(process.env.POSTGRES_URL!));
18 |
19 | export const statusEnum = pgEnum('status', ['active', 'inactive', 'archived']);
20 |
21 | export const products = pgTable('products', {
22 | id: serial('id').primaryKey(),
23 | imageUrl: text('image_url').notNull(),
24 | name: text('name').notNull(),
25 | status: statusEnum('status').notNull(),
26 | price: numeric('price', { precision: 10, scale: 2 }).notNull(),
27 | stock: integer('stock').notNull(),
28 | availableAt: timestamp('available_at').notNull()
29 | });
30 |
31 | export type SelectProduct = typeof products.$inferSelect;
32 | export const insertProductSchema = createInsertSchema(products);
33 |
34 | export async function getProducts(
35 | search: string,
36 | offset: number
37 | ): Promise<{
38 | products: SelectProduct[];
39 | newOffset: number | null;
40 | totalProducts: number;
41 | }> {
42 | // Always search the full table, not per page
43 | if (search) {
44 | return {
45 | products: await db
46 | .select()
47 | .from(products)
48 | .where(ilike(products.name, `%${search}%`))
49 | .limit(1000),
50 | newOffset: null,
51 | totalProducts: 0
52 | };
53 | }
54 |
55 | if (offset === null) {
56 | return { products: [], newOffset: null, totalProducts: 0 };
57 | }
58 |
59 | let totalProducts = await db.select({ count: count() }).from(products);
60 | let moreProducts = await db.select().from(products).limit(5).offset(offset);
61 | let newOffset = moreProducts.length >= 5 ? offset + 5 : null;
62 |
63 | return {
64 | products: moreProducts,
65 | newOffset,
66 | totalProducts: totalProducts[0].count
67 | };
68 | }
69 |
70 | export async function deleteProductById(id: number) {
71 | await db.delete(products).where(eq(products.id, id));
72 | }
73 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/middleware.ts:
--------------------------------------------------------------------------------
1 | export { auth as middleware } from '@/lib/auth';
2 |
3 | // Don't invoke Middleware on some paths
4 | export const config = {
5 | matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)']
6 | };
7 |
--------------------------------------------------------------------------------
/next.config.ts:
--------------------------------------------------------------------------------
1 | export default {
2 | images: {
3 | remotePatterns: [
4 | {
5 | protocol: 'https',
6 | hostname: 'avatars.githubusercontent.com',
7 | search: ''
8 | },
9 | {
10 | protocol: 'https',
11 | hostname: '*.public.blob.vercel-storage.com',
12 | search: ''
13 | }
14 | ]
15 | }
16 | };
17 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "next dev --turbopack",
5 | "build": "next build",
6 | "start": "next start"
7 | },
8 | "dependencies": {
9 | "@neondatabase/serverless": "^0.9.5",
10 | "@radix-ui/react-dialog": "^1.1.4",
11 | "@radix-ui/react-dropdown-menu": "^2.1.4",
12 | "@radix-ui/react-slot": "^1.1.1",
13 | "@radix-ui/react-tabs": "^1.1.2",
14 | "@radix-ui/react-tooltip": "^1.1.6",
15 | "@types/node": "20.17.6",
16 | "@types/react": "19.0.0",
17 | "@types/react-dom": "19.0.0",
18 | "@vercel/analytics": "^1.4.1",
19 | "autoprefixer": "^10.4.20",
20 | "class-variance-authority": "^0.7.1",
21 | "clsx": "^2.1.1",
22 | "drizzle-kit": "^0.22.8",
23 | "drizzle-orm": "^0.31.4",
24 | "drizzle-zod": "^0.5.1",
25 | "lucide-react": "^0.400.0",
26 | "next": "15.1.3",
27 | "next-auth": "5.0.0-beta.25",
28 | "postcss": "^8.4.49",
29 | "prettier": "^3.4.2",
30 | "prop-types": "^15.8.1",
31 | "react": "19.0.0",
32 | "react-dom": "19.0.0",
33 | "server-only": "^0.0.1",
34 | "tailwind-merge": "^2.6.0",
35 | "tailwindcss": "^3.4.17",
36 | "tailwindcss-animate": "^1.0.7",
37 | "typescript": "5.7.2",
38 | "zod": "^3.24.1"
39 | },
40 | "prettier": {
41 | "arrowParens": "always",
42 | "singleQuote": true,
43 | "tabWidth": 2,
44 | "trailingComma": "none"
45 | }
46 | }
47 |
48 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@neondatabase/serverless':
12 | specifier: ^0.9.5
13 | version: 0.9.5
14 | '@radix-ui/react-dialog':
15 | specifier: ^1.1.4
16 | version: 1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
17 | '@radix-ui/react-dropdown-menu':
18 | specifier: ^2.1.4
19 | version: 2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
20 | '@radix-ui/react-slot':
21 | specifier: ^1.1.1
22 | version: 1.1.1(@types/react@19.0.0)(react@19.0.0)
23 | '@radix-ui/react-tabs':
24 | specifier: ^1.1.2
25 | version: 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
26 | '@radix-ui/react-tooltip':
27 | specifier: ^1.1.6
28 | version: 1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
29 | '@types/node':
30 | specifier: 20.17.6
31 | version: 20.17.6
32 | '@types/react':
33 | specifier: 19.0.0
34 | version: 19.0.0
35 | '@types/react-dom':
36 | specifier: 19.0.0
37 | version: 19.0.0
38 | '@vercel/analytics':
39 | specifier: ^1.4.1
40 | version: 1.4.1(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
41 | autoprefixer:
42 | specifier: ^10.4.20
43 | version: 10.4.20(postcss@8.4.49)
44 | class-variance-authority:
45 | specifier: ^0.7.1
46 | version: 0.7.1
47 | clsx:
48 | specifier: ^2.1.1
49 | version: 2.1.1
50 | drizzle-kit:
51 | specifier: ^0.22.8
52 | version: 0.22.8
53 | drizzle-orm:
54 | specifier: ^0.31.4
55 | version: 0.31.4(@neondatabase/serverless@0.9.5)(@types/pg@8.11.6)(@types/react@19.0.0)(react@19.0.0)
56 | drizzle-zod:
57 | specifier: ^0.5.1
58 | version: 0.5.1(drizzle-orm@0.31.4(@neondatabase/serverless@0.9.5)(@types/pg@8.11.6)(@types/react@19.0.0)(react@19.0.0))(zod@3.24.1)
59 | lucide-react:
60 | specifier: ^0.400.0
61 | version: 0.400.0(react@19.0.0)
62 | next:
63 | specifier: 15.1.3
64 | version: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
65 | next-auth:
66 | specifier: 5.0.0-beta.25
67 | version: 5.0.0-beta.25(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
68 | postcss:
69 | specifier: ^8.4.49
70 | version: 8.4.49
71 | prettier:
72 | specifier: ^3.4.2
73 | version: 3.4.2
74 | prop-types:
75 | specifier: ^15.8.1
76 | version: 15.8.1
77 | react:
78 | specifier: 19.0.0
79 | version: 19.0.0
80 | react-dom:
81 | specifier: 19.0.0
82 | version: 19.0.0(react@19.0.0)
83 | server-only:
84 | specifier: ^0.0.1
85 | version: 0.0.1
86 | tailwind-merge:
87 | specifier: ^2.6.0
88 | version: 2.6.0
89 | tailwindcss:
90 | specifier: ^3.4.17
91 | version: 3.4.17
92 | tailwindcss-animate:
93 | specifier: ^1.0.7
94 | version: 1.0.7(tailwindcss@3.4.17)
95 | typescript:
96 | specifier: 5.7.2
97 | version: 5.7.2
98 | zod:
99 | specifier: ^3.24.1
100 | version: 3.24.1
101 |
102 | packages:
103 |
104 | '@alloc/quick-lru@5.2.0':
105 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
106 | engines: {node: '>=10'}
107 |
108 | '@auth/core@0.37.2':
109 | resolution: {integrity: sha512-kUvzyvkcd6h1vpeMAojK2y7+PAV5H+0Cc9+ZlKYDFhDY31AlvsB+GW5vNO4qE3Y07KeQgvNO9U0QUx/fN62kBw==}
110 | peerDependencies:
111 | '@simplewebauthn/browser': ^9.0.1
112 | '@simplewebauthn/server': ^9.0.2
113 | nodemailer: ^6.8.0
114 | peerDependenciesMeta:
115 | '@simplewebauthn/browser':
116 | optional: true
117 | '@simplewebauthn/server':
118 | optional: true
119 | nodemailer:
120 | optional: true
121 |
122 | '@emnapi/runtime@1.3.1':
123 | resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
124 |
125 | '@esbuild-kit/core-utils@3.3.2':
126 | resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
127 | deprecated: 'Merged into tsx: https://tsx.is'
128 |
129 | '@esbuild-kit/esm-loader@2.6.5':
130 | resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
131 | deprecated: 'Merged into tsx: https://tsx.is'
132 |
133 | '@esbuild/aix-ppc64@0.19.12':
134 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
135 | engines: {node: '>=12'}
136 | cpu: [ppc64]
137 | os: [aix]
138 |
139 | '@esbuild/android-arm64@0.18.20':
140 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
141 | engines: {node: '>=12'}
142 | cpu: [arm64]
143 | os: [android]
144 |
145 | '@esbuild/android-arm64@0.19.12':
146 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
147 | engines: {node: '>=12'}
148 | cpu: [arm64]
149 | os: [android]
150 |
151 | '@esbuild/android-arm@0.18.20':
152 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
153 | engines: {node: '>=12'}
154 | cpu: [arm]
155 | os: [android]
156 |
157 | '@esbuild/android-arm@0.19.12':
158 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
159 | engines: {node: '>=12'}
160 | cpu: [arm]
161 | os: [android]
162 |
163 | '@esbuild/android-x64@0.18.20':
164 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
165 | engines: {node: '>=12'}
166 | cpu: [x64]
167 | os: [android]
168 |
169 | '@esbuild/android-x64@0.19.12':
170 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
171 | engines: {node: '>=12'}
172 | cpu: [x64]
173 | os: [android]
174 |
175 | '@esbuild/darwin-arm64@0.18.20':
176 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
177 | engines: {node: '>=12'}
178 | cpu: [arm64]
179 | os: [darwin]
180 |
181 | '@esbuild/darwin-arm64@0.19.12':
182 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
183 | engines: {node: '>=12'}
184 | cpu: [arm64]
185 | os: [darwin]
186 |
187 | '@esbuild/darwin-x64@0.18.20':
188 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
189 | engines: {node: '>=12'}
190 | cpu: [x64]
191 | os: [darwin]
192 |
193 | '@esbuild/darwin-x64@0.19.12':
194 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
195 | engines: {node: '>=12'}
196 | cpu: [x64]
197 | os: [darwin]
198 |
199 | '@esbuild/freebsd-arm64@0.18.20':
200 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
201 | engines: {node: '>=12'}
202 | cpu: [arm64]
203 | os: [freebsd]
204 |
205 | '@esbuild/freebsd-arm64@0.19.12':
206 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
207 | engines: {node: '>=12'}
208 | cpu: [arm64]
209 | os: [freebsd]
210 |
211 | '@esbuild/freebsd-x64@0.18.20':
212 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
213 | engines: {node: '>=12'}
214 | cpu: [x64]
215 | os: [freebsd]
216 |
217 | '@esbuild/freebsd-x64@0.19.12':
218 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
219 | engines: {node: '>=12'}
220 | cpu: [x64]
221 | os: [freebsd]
222 |
223 | '@esbuild/linux-arm64@0.18.20':
224 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
225 | engines: {node: '>=12'}
226 | cpu: [arm64]
227 | os: [linux]
228 |
229 | '@esbuild/linux-arm64@0.19.12':
230 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
231 | engines: {node: '>=12'}
232 | cpu: [arm64]
233 | os: [linux]
234 |
235 | '@esbuild/linux-arm@0.18.20':
236 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
237 | engines: {node: '>=12'}
238 | cpu: [arm]
239 | os: [linux]
240 |
241 | '@esbuild/linux-arm@0.19.12':
242 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
243 | engines: {node: '>=12'}
244 | cpu: [arm]
245 | os: [linux]
246 |
247 | '@esbuild/linux-ia32@0.18.20':
248 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
249 | engines: {node: '>=12'}
250 | cpu: [ia32]
251 | os: [linux]
252 |
253 | '@esbuild/linux-ia32@0.19.12':
254 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
255 | engines: {node: '>=12'}
256 | cpu: [ia32]
257 | os: [linux]
258 |
259 | '@esbuild/linux-loong64@0.18.20':
260 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
261 | engines: {node: '>=12'}
262 | cpu: [loong64]
263 | os: [linux]
264 |
265 | '@esbuild/linux-loong64@0.19.12':
266 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
267 | engines: {node: '>=12'}
268 | cpu: [loong64]
269 | os: [linux]
270 |
271 | '@esbuild/linux-mips64el@0.18.20':
272 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
273 | engines: {node: '>=12'}
274 | cpu: [mips64el]
275 | os: [linux]
276 |
277 | '@esbuild/linux-mips64el@0.19.12':
278 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
279 | engines: {node: '>=12'}
280 | cpu: [mips64el]
281 | os: [linux]
282 |
283 | '@esbuild/linux-ppc64@0.18.20':
284 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
285 | engines: {node: '>=12'}
286 | cpu: [ppc64]
287 | os: [linux]
288 |
289 | '@esbuild/linux-ppc64@0.19.12':
290 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
291 | engines: {node: '>=12'}
292 | cpu: [ppc64]
293 | os: [linux]
294 |
295 | '@esbuild/linux-riscv64@0.18.20':
296 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
297 | engines: {node: '>=12'}
298 | cpu: [riscv64]
299 | os: [linux]
300 |
301 | '@esbuild/linux-riscv64@0.19.12':
302 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
303 | engines: {node: '>=12'}
304 | cpu: [riscv64]
305 | os: [linux]
306 |
307 | '@esbuild/linux-s390x@0.18.20':
308 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
309 | engines: {node: '>=12'}
310 | cpu: [s390x]
311 | os: [linux]
312 |
313 | '@esbuild/linux-s390x@0.19.12':
314 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
315 | engines: {node: '>=12'}
316 | cpu: [s390x]
317 | os: [linux]
318 |
319 | '@esbuild/linux-x64@0.18.20':
320 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
321 | engines: {node: '>=12'}
322 | cpu: [x64]
323 | os: [linux]
324 |
325 | '@esbuild/linux-x64@0.19.12':
326 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
327 | engines: {node: '>=12'}
328 | cpu: [x64]
329 | os: [linux]
330 |
331 | '@esbuild/netbsd-x64@0.18.20':
332 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
333 | engines: {node: '>=12'}
334 | cpu: [x64]
335 | os: [netbsd]
336 |
337 | '@esbuild/netbsd-x64@0.19.12':
338 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
339 | engines: {node: '>=12'}
340 | cpu: [x64]
341 | os: [netbsd]
342 |
343 | '@esbuild/openbsd-x64@0.18.20':
344 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
345 | engines: {node: '>=12'}
346 | cpu: [x64]
347 | os: [openbsd]
348 |
349 | '@esbuild/openbsd-x64@0.19.12':
350 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
351 | engines: {node: '>=12'}
352 | cpu: [x64]
353 | os: [openbsd]
354 |
355 | '@esbuild/sunos-x64@0.18.20':
356 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
357 | engines: {node: '>=12'}
358 | cpu: [x64]
359 | os: [sunos]
360 |
361 | '@esbuild/sunos-x64@0.19.12':
362 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
363 | engines: {node: '>=12'}
364 | cpu: [x64]
365 | os: [sunos]
366 |
367 | '@esbuild/win32-arm64@0.18.20':
368 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
369 | engines: {node: '>=12'}
370 | cpu: [arm64]
371 | os: [win32]
372 |
373 | '@esbuild/win32-arm64@0.19.12':
374 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
375 | engines: {node: '>=12'}
376 | cpu: [arm64]
377 | os: [win32]
378 |
379 | '@esbuild/win32-ia32@0.18.20':
380 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
381 | engines: {node: '>=12'}
382 | cpu: [ia32]
383 | os: [win32]
384 |
385 | '@esbuild/win32-ia32@0.19.12':
386 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
387 | engines: {node: '>=12'}
388 | cpu: [ia32]
389 | os: [win32]
390 |
391 | '@esbuild/win32-x64@0.18.20':
392 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
393 | engines: {node: '>=12'}
394 | cpu: [x64]
395 | os: [win32]
396 |
397 | '@esbuild/win32-x64@0.19.12':
398 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
399 | engines: {node: '>=12'}
400 | cpu: [x64]
401 | os: [win32]
402 |
403 | '@floating-ui/core@1.6.8':
404 | resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
405 |
406 | '@floating-ui/dom@1.6.12':
407 | resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==}
408 |
409 | '@floating-ui/react-dom@2.1.2':
410 | resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
411 | peerDependencies:
412 | react: '>=16.8.0'
413 | react-dom: '>=16.8.0'
414 |
415 | '@floating-ui/utils@0.2.8':
416 | resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
417 |
418 | '@img/sharp-darwin-arm64@0.33.5':
419 | resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
420 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
421 | cpu: [arm64]
422 | os: [darwin]
423 |
424 | '@img/sharp-darwin-x64@0.33.5':
425 | resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
426 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
427 | cpu: [x64]
428 | os: [darwin]
429 |
430 | '@img/sharp-libvips-darwin-arm64@1.0.4':
431 | resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
432 | cpu: [arm64]
433 | os: [darwin]
434 |
435 | '@img/sharp-libvips-darwin-x64@1.0.4':
436 | resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
437 | cpu: [x64]
438 | os: [darwin]
439 |
440 | '@img/sharp-libvips-linux-arm64@1.0.4':
441 | resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
442 | cpu: [arm64]
443 | os: [linux]
444 |
445 | '@img/sharp-libvips-linux-arm@1.0.5':
446 | resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
447 | cpu: [arm]
448 | os: [linux]
449 |
450 | '@img/sharp-libvips-linux-s390x@1.0.4':
451 | resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
452 | cpu: [s390x]
453 | os: [linux]
454 |
455 | '@img/sharp-libvips-linux-x64@1.0.4':
456 | resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
457 | cpu: [x64]
458 | os: [linux]
459 |
460 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
461 | resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
462 | cpu: [arm64]
463 | os: [linux]
464 |
465 | '@img/sharp-libvips-linuxmusl-x64@1.0.4':
466 | resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
467 | cpu: [x64]
468 | os: [linux]
469 |
470 | '@img/sharp-linux-arm64@0.33.5':
471 | resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
472 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
473 | cpu: [arm64]
474 | os: [linux]
475 |
476 | '@img/sharp-linux-arm@0.33.5':
477 | resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
478 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
479 | cpu: [arm]
480 | os: [linux]
481 |
482 | '@img/sharp-linux-s390x@0.33.5':
483 | resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
484 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
485 | cpu: [s390x]
486 | os: [linux]
487 |
488 | '@img/sharp-linux-x64@0.33.5':
489 | resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
490 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
491 | cpu: [x64]
492 | os: [linux]
493 |
494 | '@img/sharp-linuxmusl-arm64@0.33.5':
495 | resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
496 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
497 | cpu: [arm64]
498 | os: [linux]
499 |
500 | '@img/sharp-linuxmusl-x64@0.33.5':
501 | resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
502 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
503 | cpu: [x64]
504 | os: [linux]
505 |
506 | '@img/sharp-wasm32@0.33.5':
507 | resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
508 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
509 | cpu: [wasm32]
510 |
511 | '@img/sharp-win32-ia32@0.33.5':
512 | resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
513 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
514 | cpu: [ia32]
515 | os: [win32]
516 |
517 | '@img/sharp-win32-x64@0.33.5':
518 | resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
519 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
520 | cpu: [x64]
521 | os: [win32]
522 |
523 | '@isaacs/cliui@8.0.2':
524 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
525 | engines: {node: '>=12'}
526 |
527 | '@jridgewell/gen-mapping@0.3.8':
528 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
529 | engines: {node: '>=6.0.0'}
530 |
531 | '@jridgewell/resolve-uri@3.1.2':
532 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
533 | engines: {node: '>=6.0.0'}
534 |
535 | '@jridgewell/set-array@1.2.1':
536 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
537 | engines: {node: '>=6.0.0'}
538 |
539 | '@jridgewell/sourcemap-codec@1.5.0':
540 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
541 |
542 | '@jridgewell/trace-mapping@0.3.25':
543 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
544 |
545 | '@neondatabase/serverless@0.9.5':
546 | resolution: {integrity: sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==}
547 |
548 | '@next/env@15.1.3':
549 | resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==}
550 |
551 | '@next/swc-darwin-arm64@15.1.3':
552 | resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==}
553 | engines: {node: '>= 10'}
554 | cpu: [arm64]
555 | os: [darwin]
556 |
557 | '@next/swc-darwin-x64@15.1.3':
558 | resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==}
559 | engines: {node: '>= 10'}
560 | cpu: [x64]
561 | os: [darwin]
562 |
563 | '@next/swc-linux-arm64-gnu@15.1.3':
564 | resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==}
565 | engines: {node: '>= 10'}
566 | cpu: [arm64]
567 | os: [linux]
568 |
569 | '@next/swc-linux-arm64-musl@15.1.3':
570 | resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==}
571 | engines: {node: '>= 10'}
572 | cpu: [arm64]
573 | os: [linux]
574 |
575 | '@next/swc-linux-x64-gnu@15.1.3':
576 | resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==}
577 | engines: {node: '>= 10'}
578 | cpu: [x64]
579 | os: [linux]
580 |
581 | '@next/swc-linux-x64-musl@15.1.3':
582 | resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==}
583 | engines: {node: '>= 10'}
584 | cpu: [x64]
585 | os: [linux]
586 |
587 | '@next/swc-win32-arm64-msvc@15.1.3':
588 | resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==}
589 | engines: {node: '>= 10'}
590 | cpu: [arm64]
591 | os: [win32]
592 |
593 | '@next/swc-win32-x64-msvc@15.1.3':
594 | resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==}
595 | engines: {node: '>= 10'}
596 | cpu: [x64]
597 | os: [win32]
598 |
599 | '@nodelib/fs.scandir@2.1.5':
600 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
601 | engines: {node: '>= 8'}
602 |
603 | '@nodelib/fs.stat@2.0.5':
604 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
605 | engines: {node: '>= 8'}
606 |
607 | '@nodelib/fs.walk@1.2.8':
608 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
609 | engines: {node: '>= 8'}
610 |
611 | '@panva/hkdf@1.2.1':
612 | resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
613 |
614 | '@pkgjs/parseargs@0.11.0':
615 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
616 | engines: {node: '>=14'}
617 |
618 | '@radix-ui/primitive@1.1.1':
619 | resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==}
620 |
621 | '@radix-ui/react-arrow@1.1.1':
622 | resolution: {integrity: sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==}
623 | peerDependencies:
624 | '@types/react': '*'
625 | '@types/react-dom': '*'
626 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
627 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
628 | peerDependenciesMeta:
629 | '@types/react':
630 | optional: true
631 | '@types/react-dom':
632 | optional: true
633 |
634 | '@radix-ui/react-collection@1.1.1':
635 | resolution: {integrity: sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==}
636 | peerDependencies:
637 | '@types/react': '*'
638 | '@types/react-dom': '*'
639 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
640 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
641 | peerDependenciesMeta:
642 | '@types/react':
643 | optional: true
644 | '@types/react-dom':
645 | optional: true
646 |
647 | '@radix-ui/react-compose-refs@1.1.1':
648 | resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==}
649 | peerDependencies:
650 | '@types/react': '*'
651 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
652 | peerDependenciesMeta:
653 | '@types/react':
654 | optional: true
655 |
656 | '@radix-ui/react-context@1.1.1':
657 | resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==}
658 | peerDependencies:
659 | '@types/react': '*'
660 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
661 | peerDependenciesMeta:
662 | '@types/react':
663 | optional: true
664 |
665 | '@radix-ui/react-dialog@1.1.4':
666 | resolution: {integrity: sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA==}
667 | peerDependencies:
668 | '@types/react': '*'
669 | '@types/react-dom': '*'
670 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
671 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
672 | peerDependenciesMeta:
673 | '@types/react':
674 | optional: true
675 | '@types/react-dom':
676 | optional: true
677 |
678 | '@radix-ui/react-direction@1.1.0':
679 | resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==}
680 | peerDependencies:
681 | '@types/react': '*'
682 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
683 | peerDependenciesMeta:
684 | '@types/react':
685 | optional: true
686 |
687 | '@radix-ui/react-dismissable-layer@1.1.3':
688 | resolution: {integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==}
689 | peerDependencies:
690 | '@types/react': '*'
691 | '@types/react-dom': '*'
692 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
693 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
694 | peerDependenciesMeta:
695 | '@types/react':
696 | optional: true
697 | '@types/react-dom':
698 | optional: true
699 |
700 | '@radix-ui/react-dropdown-menu@2.1.4':
701 | resolution: {integrity: sha512-iXU1Ab5ecM+yEepGAWK8ZhMyKX4ubFdCNtol4sT9D0OVErG9PNElfx3TQhjw7n7BC5nFVz68/5//clWy+8TXzA==}
702 | peerDependencies:
703 | '@types/react': '*'
704 | '@types/react-dom': '*'
705 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
706 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
707 | peerDependenciesMeta:
708 | '@types/react':
709 | optional: true
710 | '@types/react-dom':
711 | optional: true
712 |
713 | '@radix-ui/react-focus-guards@1.1.1':
714 | resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==}
715 | peerDependencies:
716 | '@types/react': '*'
717 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
718 | peerDependenciesMeta:
719 | '@types/react':
720 | optional: true
721 |
722 | '@radix-ui/react-focus-scope@1.1.1':
723 | resolution: {integrity: sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==}
724 | peerDependencies:
725 | '@types/react': '*'
726 | '@types/react-dom': '*'
727 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
728 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
729 | peerDependenciesMeta:
730 | '@types/react':
731 | optional: true
732 | '@types/react-dom':
733 | optional: true
734 |
735 | '@radix-ui/react-id@1.1.0':
736 | resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
737 | peerDependencies:
738 | '@types/react': '*'
739 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
740 | peerDependenciesMeta:
741 | '@types/react':
742 | optional: true
743 |
744 | '@radix-ui/react-menu@2.1.4':
745 | resolution: {integrity: sha512-BnOgVoL6YYdHAG6DtXONaR29Eq4nvbi8rutrV/xlr3RQCMMb3yqP85Qiw/3NReozrSW+4dfLkK+rc1hb4wPU/A==}
746 | peerDependencies:
747 | '@types/react': '*'
748 | '@types/react-dom': '*'
749 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
750 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
751 | peerDependenciesMeta:
752 | '@types/react':
753 | optional: true
754 | '@types/react-dom':
755 | optional: true
756 |
757 | '@radix-ui/react-popper@1.2.1':
758 | resolution: {integrity: sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==}
759 | peerDependencies:
760 | '@types/react': '*'
761 | '@types/react-dom': '*'
762 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
763 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
764 | peerDependenciesMeta:
765 | '@types/react':
766 | optional: true
767 | '@types/react-dom':
768 | optional: true
769 |
770 | '@radix-ui/react-portal@1.1.3':
771 | resolution: {integrity: sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==}
772 | peerDependencies:
773 | '@types/react': '*'
774 | '@types/react-dom': '*'
775 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
776 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
777 | peerDependenciesMeta:
778 | '@types/react':
779 | optional: true
780 | '@types/react-dom':
781 | optional: true
782 |
783 | '@radix-ui/react-presence@1.1.2':
784 | resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==}
785 | peerDependencies:
786 | '@types/react': '*'
787 | '@types/react-dom': '*'
788 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
789 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
790 | peerDependenciesMeta:
791 | '@types/react':
792 | optional: true
793 | '@types/react-dom':
794 | optional: true
795 |
796 | '@radix-ui/react-primitive@2.0.1':
797 | resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==}
798 | peerDependencies:
799 | '@types/react': '*'
800 | '@types/react-dom': '*'
801 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
802 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
803 | peerDependenciesMeta:
804 | '@types/react':
805 | optional: true
806 | '@types/react-dom':
807 | optional: true
808 |
809 | '@radix-ui/react-roving-focus@1.1.1':
810 | resolution: {integrity: sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==}
811 | peerDependencies:
812 | '@types/react': '*'
813 | '@types/react-dom': '*'
814 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
815 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
816 | peerDependenciesMeta:
817 | '@types/react':
818 | optional: true
819 | '@types/react-dom':
820 | optional: true
821 |
822 | '@radix-ui/react-slot@1.1.1':
823 | resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==}
824 | peerDependencies:
825 | '@types/react': '*'
826 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
827 | peerDependenciesMeta:
828 | '@types/react':
829 | optional: true
830 |
831 | '@radix-ui/react-tabs@1.1.2':
832 | resolution: {integrity: sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==}
833 | peerDependencies:
834 | '@types/react': '*'
835 | '@types/react-dom': '*'
836 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
837 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
838 | peerDependenciesMeta:
839 | '@types/react':
840 | optional: true
841 | '@types/react-dom':
842 | optional: true
843 |
844 | '@radix-ui/react-tooltip@1.1.6':
845 | resolution: {integrity: sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==}
846 | peerDependencies:
847 | '@types/react': '*'
848 | '@types/react-dom': '*'
849 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
850 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
851 | peerDependenciesMeta:
852 | '@types/react':
853 | optional: true
854 | '@types/react-dom':
855 | optional: true
856 |
857 | '@radix-ui/react-use-callback-ref@1.1.0':
858 | resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
859 | peerDependencies:
860 | '@types/react': '*'
861 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
862 | peerDependenciesMeta:
863 | '@types/react':
864 | optional: true
865 |
866 | '@radix-ui/react-use-controllable-state@1.1.0':
867 | resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
868 | peerDependencies:
869 | '@types/react': '*'
870 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
871 | peerDependenciesMeta:
872 | '@types/react':
873 | optional: true
874 |
875 | '@radix-ui/react-use-escape-keydown@1.1.0':
876 | resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
877 | peerDependencies:
878 | '@types/react': '*'
879 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
880 | peerDependenciesMeta:
881 | '@types/react':
882 | optional: true
883 |
884 | '@radix-ui/react-use-layout-effect@1.1.0':
885 | resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
886 | peerDependencies:
887 | '@types/react': '*'
888 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
889 | peerDependenciesMeta:
890 | '@types/react':
891 | optional: true
892 |
893 | '@radix-ui/react-use-rect@1.1.0':
894 | resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
895 | peerDependencies:
896 | '@types/react': '*'
897 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
898 | peerDependenciesMeta:
899 | '@types/react':
900 | optional: true
901 |
902 | '@radix-ui/react-use-size@1.1.0':
903 | resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
904 | peerDependencies:
905 | '@types/react': '*'
906 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
907 | peerDependenciesMeta:
908 | '@types/react':
909 | optional: true
910 |
911 | '@radix-ui/react-visually-hidden@1.1.1':
912 | resolution: {integrity: sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==}
913 | peerDependencies:
914 | '@types/react': '*'
915 | '@types/react-dom': '*'
916 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
917 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
918 | peerDependenciesMeta:
919 | '@types/react':
920 | optional: true
921 | '@types/react-dom':
922 | optional: true
923 |
924 | '@radix-ui/rect@1.1.0':
925 | resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
926 |
927 | '@swc/counter@0.1.3':
928 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
929 |
930 | '@swc/helpers@0.5.15':
931 | resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
932 |
933 | '@types/cookie@0.6.0':
934 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
935 |
936 | '@types/node@20.17.6':
937 | resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==}
938 |
939 | '@types/pg@8.11.6':
940 | resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
941 |
942 | '@types/react-dom@19.0.0':
943 | resolution: {integrity: sha512-1KfiQKsH1o00p9m5ag12axHQSb3FOU9H20UTrujVSkNhuCrRHiQWFqgEnTNK5ZNfnzZv8UWrnXVqCmCF9fgY3w==}
944 |
945 | '@types/react@19.0.0':
946 | resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==}
947 |
948 | '@vercel/analytics@1.4.1':
949 | resolution: {integrity: sha512-ekpL4ReX2TH3LnrRZTUKjHHNpNy9S1I7QmS+g/RQXoSUQ8ienzosuX7T9djZ/s8zPhBx1mpHP/Rw5875N+zQIQ==}
950 | peerDependencies:
951 | '@remix-run/react': ^2
952 | '@sveltejs/kit': ^1 || ^2
953 | next: '>= 13'
954 | react: ^18 || ^19 || ^19.0.0-rc
955 | svelte: '>= 4'
956 | vue: ^3
957 | vue-router: ^4
958 | peerDependenciesMeta:
959 | '@remix-run/react':
960 | optional: true
961 | '@sveltejs/kit':
962 | optional: true
963 | next:
964 | optional: true
965 | react:
966 | optional: true
967 | svelte:
968 | optional: true
969 | vue:
970 | optional: true
971 | vue-router:
972 | optional: true
973 |
974 | ansi-regex@5.0.1:
975 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
976 | engines: {node: '>=8'}
977 |
978 | ansi-regex@6.1.0:
979 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
980 | engines: {node: '>=12'}
981 |
982 | ansi-styles@4.3.0:
983 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
984 | engines: {node: '>=8'}
985 |
986 | ansi-styles@6.2.1:
987 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
988 | engines: {node: '>=12'}
989 |
990 | any-promise@1.3.0:
991 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
992 |
993 | anymatch@3.1.3:
994 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
995 | engines: {node: '>= 8'}
996 |
997 | arg@5.0.2:
998 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
999 |
1000 | aria-hidden@1.2.4:
1001 | resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
1002 | engines: {node: '>=10'}
1003 |
1004 | autoprefixer@10.4.20:
1005 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
1006 | engines: {node: ^10 || ^12 || >=14}
1007 | hasBin: true
1008 | peerDependencies:
1009 | postcss: ^8.1.0
1010 |
1011 | balanced-match@1.0.2:
1012 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1013 |
1014 | binary-extensions@2.3.0:
1015 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
1016 | engines: {node: '>=8'}
1017 |
1018 | brace-expansion@2.0.1:
1019 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1020 |
1021 | braces@3.0.3:
1022 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
1023 | engines: {node: '>=8'}
1024 |
1025 | browserslist@4.24.3:
1026 | resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==}
1027 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1028 | hasBin: true
1029 |
1030 | buffer-from@1.1.2:
1031 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1032 |
1033 | busboy@1.6.0:
1034 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
1035 | engines: {node: '>=10.16.0'}
1036 |
1037 | camelcase-css@2.0.1:
1038 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
1039 | engines: {node: '>= 6'}
1040 |
1041 | caniuse-lite@1.0.30001690:
1042 | resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==}
1043 |
1044 | chokidar@3.6.0:
1045 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
1046 | engines: {node: '>= 8.10.0'}
1047 |
1048 | class-variance-authority@0.7.1:
1049 | resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
1050 |
1051 | client-only@0.0.1:
1052 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
1053 |
1054 | clsx@2.1.1:
1055 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
1056 | engines: {node: '>=6'}
1057 |
1058 | color-convert@2.0.1:
1059 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1060 | engines: {node: '>=7.0.0'}
1061 |
1062 | color-name@1.1.4:
1063 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1064 |
1065 | color-string@1.9.1:
1066 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
1067 |
1068 | color@4.2.3:
1069 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
1070 | engines: {node: '>=12.5.0'}
1071 |
1072 | commander@4.1.1:
1073 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
1074 | engines: {node: '>= 6'}
1075 |
1076 | cookie@0.7.1:
1077 | resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
1078 | engines: {node: '>= 0.6'}
1079 |
1080 | cross-spawn@7.0.6:
1081 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
1082 | engines: {node: '>= 8'}
1083 |
1084 | cssesc@3.0.0:
1085 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
1086 | engines: {node: '>=4'}
1087 | hasBin: true
1088 |
1089 | csstype@3.1.3:
1090 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
1091 |
1092 | debug@4.4.0:
1093 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
1094 | engines: {node: '>=6.0'}
1095 | peerDependencies:
1096 | supports-color: '*'
1097 | peerDependenciesMeta:
1098 | supports-color:
1099 | optional: true
1100 |
1101 | detect-libc@2.0.3:
1102 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
1103 | engines: {node: '>=8'}
1104 |
1105 | detect-node-es@1.1.0:
1106 | resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
1107 |
1108 | didyoumean@1.2.2:
1109 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
1110 |
1111 | dlv@1.1.3:
1112 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
1113 |
1114 | drizzle-kit@0.22.8:
1115 | resolution: {integrity: sha512-VjI4wsJjk3hSqHSa3TwBf+uvH6M6pRHyxyoVbt935GUzP9tUR/BRZ+MhEJNgryqbzN2Za1KP0eJMTgKEPsalYQ==}
1116 | hasBin: true
1117 |
1118 | drizzle-orm@0.31.4:
1119 | resolution: {integrity: sha512-VGD9SH9aStF2z4QOTnVlVX/WghV/EnuEzTmsH3fSVp2E4fFgc8jl3viQrS/XUJx1ekW4rVVLJMH42SfGQdjX3Q==}
1120 | peerDependencies:
1121 | '@aws-sdk/client-rds-data': '>=3'
1122 | '@cloudflare/workers-types': '>=3'
1123 | '@electric-sql/pglite': '>=0.1.1'
1124 | '@libsql/client': '*'
1125 | '@neondatabase/serverless': '>=0.1'
1126 | '@op-engineering/op-sqlite': '>=2'
1127 | '@opentelemetry/api': ^1.4.1
1128 | '@planetscale/database': '>=1'
1129 | '@prisma/client': '*'
1130 | '@tidbcloud/serverless': '*'
1131 | '@types/better-sqlite3': '*'
1132 | '@types/pg': '*'
1133 | '@types/react': '>=18'
1134 | '@types/sql.js': '*'
1135 | '@vercel/postgres': '>=0.8.0'
1136 | '@xata.io/client': '*'
1137 | better-sqlite3: '>=7'
1138 | bun-types: '*'
1139 | expo-sqlite: '>=13.2.0'
1140 | knex: '*'
1141 | kysely: '*'
1142 | mysql2: '>=2'
1143 | pg: '>=8'
1144 | postgres: '>=3'
1145 | prisma: '*'
1146 | react: '>=18'
1147 | sql.js: '>=1'
1148 | sqlite3: '>=5'
1149 | peerDependenciesMeta:
1150 | '@aws-sdk/client-rds-data':
1151 | optional: true
1152 | '@cloudflare/workers-types':
1153 | optional: true
1154 | '@electric-sql/pglite':
1155 | optional: true
1156 | '@libsql/client':
1157 | optional: true
1158 | '@neondatabase/serverless':
1159 | optional: true
1160 | '@op-engineering/op-sqlite':
1161 | optional: true
1162 | '@opentelemetry/api':
1163 | optional: true
1164 | '@planetscale/database':
1165 | optional: true
1166 | '@prisma/client':
1167 | optional: true
1168 | '@tidbcloud/serverless':
1169 | optional: true
1170 | '@types/better-sqlite3':
1171 | optional: true
1172 | '@types/pg':
1173 | optional: true
1174 | '@types/react':
1175 | optional: true
1176 | '@types/sql.js':
1177 | optional: true
1178 | '@vercel/postgres':
1179 | optional: true
1180 | '@xata.io/client':
1181 | optional: true
1182 | better-sqlite3:
1183 | optional: true
1184 | bun-types:
1185 | optional: true
1186 | expo-sqlite:
1187 | optional: true
1188 | knex:
1189 | optional: true
1190 | kysely:
1191 | optional: true
1192 | mysql2:
1193 | optional: true
1194 | pg:
1195 | optional: true
1196 | postgres:
1197 | optional: true
1198 | prisma:
1199 | optional: true
1200 | react:
1201 | optional: true
1202 | sql.js:
1203 | optional: true
1204 | sqlite3:
1205 | optional: true
1206 |
1207 | drizzle-zod@0.5.1:
1208 | resolution: {integrity: sha512-C/8bvzUH/zSnVfwdSibOgFjLhtDtbKYmkbPbUCq46QZyZCH6kODIMSOgZ8R7rVjoI+tCj3k06MRJMDqsIeoS4A==}
1209 | peerDependencies:
1210 | drizzle-orm: '>=0.23.13'
1211 | zod: '*'
1212 |
1213 | eastasianwidth@0.2.0:
1214 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
1215 |
1216 | electron-to-chromium@1.5.76:
1217 | resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==}
1218 |
1219 | emoji-regex@8.0.0:
1220 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1221 |
1222 | emoji-regex@9.2.2:
1223 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1224 |
1225 | esbuild-register@3.6.0:
1226 | resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
1227 | peerDependencies:
1228 | esbuild: '>=0.12 <1'
1229 |
1230 | esbuild@0.18.20:
1231 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
1232 | engines: {node: '>=12'}
1233 | hasBin: true
1234 |
1235 | esbuild@0.19.12:
1236 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
1237 | engines: {node: '>=12'}
1238 | hasBin: true
1239 |
1240 | escalade@3.2.0:
1241 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1242 | engines: {node: '>=6'}
1243 |
1244 | fast-glob@3.3.2:
1245 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
1246 | engines: {node: '>=8.6.0'}
1247 |
1248 | fastq@1.18.0:
1249 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==}
1250 |
1251 | fill-range@7.1.1:
1252 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1253 | engines: {node: '>=8'}
1254 |
1255 | foreground-child@3.3.0:
1256 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
1257 | engines: {node: '>=14'}
1258 |
1259 | fraction.js@4.3.7:
1260 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
1261 |
1262 | fsevents@2.3.3:
1263 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1264 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1265 | os: [darwin]
1266 |
1267 | function-bind@1.1.2:
1268 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1269 |
1270 | get-nonce@1.0.1:
1271 | resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
1272 | engines: {node: '>=6'}
1273 |
1274 | get-tsconfig@4.8.1:
1275 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
1276 |
1277 | glob-parent@5.1.2:
1278 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1279 | engines: {node: '>= 6'}
1280 |
1281 | glob-parent@6.0.2:
1282 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1283 | engines: {node: '>=10.13.0'}
1284 |
1285 | glob@10.4.5:
1286 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
1287 | hasBin: true
1288 |
1289 | hasown@2.0.2:
1290 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1291 | engines: {node: '>= 0.4'}
1292 |
1293 | is-arrayish@0.3.2:
1294 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
1295 |
1296 | is-binary-path@2.1.0:
1297 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1298 | engines: {node: '>=8'}
1299 |
1300 | is-core-module@2.16.1:
1301 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1302 | engines: {node: '>= 0.4'}
1303 |
1304 | is-extglob@2.1.1:
1305 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1306 | engines: {node: '>=0.10.0'}
1307 |
1308 | is-fullwidth-code-point@3.0.0:
1309 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1310 | engines: {node: '>=8'}
1311 |
1312 | is-glob@4.0.3:
1313 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1314 | engines: {node: '>=0.10.0'}
1315 |
1316 | is-number@7.0.0:
1317 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1318 | engines: {node: '>=0.12.0'}
1319 |
1320 | isexe@2.0.0:
1321 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1322 |
1323 | jackspeak@3.4.3:
1324 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1325 |
1326 | jiti@1.21.7:
1327 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
1328 | hasBin: true
1329 |
1330 | jose@5.9.6:
1331 | resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==}
1332 |
1333 | js-tokens@4.0.0:
1334 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1335 |
1336 | lilconfig@3.1.3:
1337 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
1338 | engines: {node: '>=14'}
1339 |
1340 | lines-and-columns@1.2.4:
1341 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1342 |
1343 | loose-envify@1.4.0:
1344 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1345 | hasBin: true
1346 |
1347 | lru-cache@10.4.3:
1348 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1349 |
1350 | lucide-react@0.400.0:
1351 | resolution: {integrity: sha512-rpp7pFHh3Xd93KHixNgB0SqThMHpYNzsGUu69UaQbSZ75Q/J3m5t6EhKyMT3m4w2WOxmJ2mY0tD3vebnXqQryQ==}
1352 | peerDependencies:
1353 | react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
1354 |
1355 | merge2@1.4.1:
1356 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1357 | engines: {node: '>= 8'}
1358 |
1359 | micromatch@4.0.8:
1360 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1361 | engines: {node: '>=8.6'}
1362 |
1363 | minimatch@9.0.5:
1364 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1365 | engines: {node: '>=16 || 14 >=14.17'}
1366 |
1367 | minipass@7.1.2:
1368 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1369 | engines: {node: '>=16 || 14 >=14.17'}
1370 |
1371 | ms@2.1.3:
1372 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1373 |
1374 | mz@2.7.0:
1375 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1376 |
1377 | nanoid@3.3.8:
1378 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1379 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1380 | hasBin: true
1381 |
1382 | next-auth@5.0.0-beta.25:
1383 | resolution: {integrity: sha512-2dJJw1sHQl2qxCrRk+KTQbeH+izFbGFPuJj5eGgBZFYyiYYtvlrBeUw1E/OJJxTRjuxbSYGnCTkUIRsIIW0bog==}
1384 | peerDependencies:
1385 | '@simplewebauthn/browser': ^9.0.1
1386 | '@simplewebauthn/server': ^9.0.2
1387 | next: ^14.0.0-0 || ^15.0.0-0
1388 | nodemailer: ^6.6.5
1389 | react: ^18.2.0 || ^19.0.0-0
1390 | peerDependenciesMeta:
1391 | '@simplewebauthn/browser':
1392 | optional: true
1393 | '@simplewebauthn/server':
1394 | optional: true
1395 | nodemailer:
1396 | optional: true
1397 |
1398 | next@15.1.3:
1399 | resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==}
1400 | engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
1401 | hasBin: true
1402 | peerDependencies:
1403 | '@opentelemetry/api': ^1.1.0
1404 | '@playwright/test': ^1.41.2
1405 | babel-plugin-react-compiler: '*'
1406 | react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
1407 | react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
1408 | sass: ^1.3.0
1409 | peerDependenciesMeta:
1410 | '@opentelemetry/api':
1411 | optional: true
1412 | '@playwright/test':
1413 | optional: true
1414 | babel-plugin-react-compiler:
1415 | optional: true
1416 | sass:
1417 | optional: true
1418 |
1419 | node-releases@2.0.19:
1420 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1421 |
1422 | normalize-path@3.0.0:
1423 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1424 | engines: {node: '>=0.10.0'}
1425 |
1426 | normalize-range@0.1.2:
1427 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1428 | engines: {node: '>=0.10.0'}
1429 |
1430 | oauth4webapi@3.1.4:
1431 | resolution: {integrity: sha512-eVfN3nZNbok2s/ROifO0UAc5G8nRoLSbrcKJ09OqmucgnhXEfdIQOR4gq1eJH1rN3gV7rNw62bDEgftsgFtBEg==}
1432 |
1433 | object-assign@4.1.1:
1434 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1435 | engines: {node: '>=0.10.0'}
1436 |
1437 | object-hash@3.0.0:
1438 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1439 | engines: {node: '>= 6'}
1440 |
1441 | obuf@1.1.2:
1442 | resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
1443 |
1444 | package-json-from-dist@1.0.1:
1445 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1446 |
1447 | path-key@3.1.1:
1448 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1449 | engines: {node: '>=8'}
1450 |
1451 | path-parse@1.0.7:
1452 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1453 |
1454 | path-scurry@1.11.1:
1455 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1456 | engines: {node: '>=16 || 14 >=14.18'}
1457 |
1458 | pg-int8@1.0.1:
1459 | resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
1460 | engines: {node: '>=4.0.0'}
1461 |
1462 | pg-numeric@1.0.2:
1463 | resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==}
1464 | engines: {node: '>=4'}
1465 |
1466 | pg-protocol@1.7.0:
1467 | resolution: {integrity: sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==}
1468 |
1469 | pg-types@4.0.2:
1470 | resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==}
1471 | engines: {node: '>=10'}
1472 |
1473 | picocolors@1.1.1:
1474 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1475 |
1476 | picomatch@2.3.1:
1477 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1478 | engines: {node: '>=8.6'}
1479 |
1480 | pify@2.3.0:
1481 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1482 | engines: {node: '>=0.10.0'}
1483 |
1484 | pirates@4.0.6:
1485 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1486 | engines: {node: '>= 6'}
1487 |
1488 | postcss-import@15.1.0:
1489 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
1490 | engines: {node: '>=14.0.0'}
1491 | peerDependencies:
1492 | postcss: ^8.0.0
1493 |
1494 | postcss-js@4.0.1:
1495 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
1496 | engines: {node: ^12 || ^14 || >= 16}
1497 | peerDependencies:
1498 | postcss: ^8.4.21
1499 |
1500 | postcss-load-config@4.0.2:
1501 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
1502 | engines: {node: '>= 14'}
1503 | peerDependencies:
1504 | postcss: '>=8.0.9'
1505 | ts-node: '>=9.0.0'
1506 | peerDependenciesMeta:
1507 | postcss:
1508 | optional: true
1509 | ts-node:
1510 | optional: true
1511 |
1512 | postcss-nested@6.2.0:
1513 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
1514 | engines: {node: '>=12.0'}
1515 | peerDependencies:
1516 | postcss: ^8.2.14
1517 |
1518 | postcss-selector-parser@6.1.2:
1519 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
1520 | engines: {node: '>=4'}
1521 |
1522 | postcss-value-parser@4.2.0:
1523 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1524 |
1525 | postcss@8.4.31:
1526 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
1527 | engines: {node: ^10 || ^12 || >=14}
1528 |
1529 | postcss@8.4.49:
1530 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
1531 | engines: {node: ^10 || ^12 || >=14}
1532 |
1533 | postgres-array@3.0.2:
1534 | resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==}
1535 | engines: {node: '>=12'}
1536 |
1537 | postgres-bytea@3.0.0:
1538 | resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==}
1539 | engines: {node: '>= 6'}
1540 |
1541 | postgres-date@2.1.0:
1542 | resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==}
1543 | engines: {node: '>=12'}
1544 |
1545 | postgres-interval@3.0.0:
1546 | resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==}
1547 | engines: {node: '>=12'}
1548 |
1549 | postgres-range@1.1.4:
1550 | resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==}
1551 |
1552 | preact-render-to-string@5.2.3:
1553 | resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==}
1554 | peerDependencies:
1555 | preact: '>=10'
1556 |
1557 | preact@10.11.3:
1558 | resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==}
1559 |
1560 | prettier@3.4.2:
1561 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==}
1562 | engines: {node: '>=14'}
1563 | hasBin: true
1564 |
1565 | pretty-format@3.8.0:
1566 | resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
1567 |
1568 | prop-types@15.8.1:
1569 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1570 |
1571 | queue-microtask@1.2.3:
1572 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1573 |
1574 | react-dom@19.0.0:
1575 | resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
1576 | peerDependencies:
1577 | react: ^19.0.0
1578 |
1579 | react-is@16.13.1:
1580 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1581 |
1582 | react-remove-scroll-bar@2.3.8:
1583 | resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
1584 | engines: {node: '>=10'}
1585 | peerDependencies:
1586 | '@types/react': '*'
1587 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
1588 | peerDependenciesMeta:
1589 | '@types/react':
1590 | optional: true
1591 |
1592 | react-remove-scroll@2.6.2:
1593 | resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==}
1594 | engines: {node: '>=10'}
1595 | peerDependencies:
1596 | '@types/react': '*'
1597 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1598 | peerDependenciesMeta:
1599 | '@types/react':
1600 | optional: true
1601 |
1602 | react-style-singleton@2.2.3:
1603 | resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
1604 | engines: {node: '>=10'}
1605 | peerDependencies:
1606 | '@types/react': '*'
1607 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1608 | peerDependenciesMeta:
1609 | '@types/react':
1610 | optional: true
1611 |
1612 | react@19.0.0:
1613 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
1614 | engines: {node: '>=0.10.0'}
1615 |
1616 | read-cache@1.0.0:
1617 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1618 |
1619 | readdirp@3.6.0:
1620 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1621 | engines: {node: '>=8.10.0'}
1622 |
1623 | resolve-pkg-maps@1.0.0:
1624 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
1625 |
1626 | resolve@1.22.10:
1627 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1628 | engines: {node: '>= 0.4'}
1629 | hasBin: true
1630 |
1631 | reusify@1.0.4:
1632 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1633 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1634 |
1635 | run-parallel@1.2.0:
1636 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1637 |
1638 | scheduler@0.25.0:
1639 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
1640 |
1641 | semver@7.6.3:
1642 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
1643 | engines: {node: '>=10'}
1644 | hasBin: true
1645 |
1646 | server-only@0.0.1:
1647 | resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
1648 |
1649 | sharp@0.33.5:
1650 | resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
1651 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
1652 |
1653 | shebang-command@2.0.0:
1654 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1655 | engines: {node: '>=8'}
1656 |
1657 | shebang-regex@3.0.0:
1658 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1659 | engines: {node: '>=8'}
1660 |
1661 | signal-exit@4.1.0:
1662 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1663 | engines: {node: '>=14'}
1664 |
1665 | simple-swizzle@0.2.2:
1666 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
1667 |
1668 | source-map-js@1.2.1:
1669 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1670 | engines: {node: '>=0.10.0'}
1671 |
1672 | source-map-support@0.5.21:
1673 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1674 |
1675 | source-map@0.6.1:
1676 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1677 | engines: {node: '>=0.10.0'}
1678 |
1679 | streamsearch@1.1.0:
1680 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1681 | engines: {node: '>=10.0.0'}
1682 |
1683 | string-width@4.2.3:
1684 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1685 | engines: {node: '>=8'}
1686 |
1687 | string-width@5.1.2:
1688 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1689 | engines: {node: '>=12'}
1690 |
1691 | strip-ansi@6.0.1:
1692 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1693 | engines: {node: '>=8'}
1694 |
1695 | strip-ansi@7.1.0:
1696 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1697 | engines: {node: '>=12'}
1698 |
1699 | styled-jsx@5.1.6:
1700 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
1701 | engines: {node: '>= 12.0.0'}
1702 | peerDependencies:
1703 | '@babel/core': '*'
1704 | babel-plugin-macros: '*'
1705 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
1706 | peerDependenciesMeta:
1707 | '@babel/core':
1708 | optional: true
1709 | babel-plugin-macros:
1710 | optional: true
1711 |
1712 | sucrase@3.35.0:
1713 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1714 | engines: {node: '>=16 || 14 >=14.17'}
1715 | hasBin: true
1716 |
1717 | supports-preserve-symlinks-flag@1.0.0:
1718 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1719 | engines: {node: '>= 0.4'}
1720 |
1721 | tailwind-merge@2.6.0:
1722 | resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
1723 |
1724 | tailwindcss-animate@1.0.7:
1725 | resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
1726 | peerDependencies:
1727 | tailwindcss: '>=3.0.0 || insiders'
1728 |
1729 | tailwindcss@3.4.17:
1730 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
1731 | engines: {node: '>=14.0.0'}
1732 | hasBin: true
1733 |
1734 | thenify-all@1.6.0:
1735 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1736 | engines: {node: '>=0.8'}
1737 |
1738 | thenify@3.3.1:
1739 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1740 |
1741 | to-regex-range@5.0.1:
1742 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1743 | engines: {node: '>=8.0'}
1744 |
1745 | ts-interface-checker@0.1.13:
1746 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1747 |
1748 | tslib@2.8.1:
1749 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1750 |
1751 | typescript@5.7.2:
1752 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
1753 | engines: {node: '>=14.17'}
1754 | hasBin: true
1755 |
1756 | undici-types@6.19.8:
1757 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
1758 |
1759 | update-browserslist-db@1.1.1:
1760 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
1761 | hasBin: true
1762 | peerDependencies:
1763 | browserslist: '>= 4.21.0'
1764 |
1765 | use-callback-ref@1.3.3:
1766 | resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
1767 | engines: {node: '>=10'}
1768 | peerDependencies:
1769 | '@types/react': '*'
1770 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1771 | peerDependenciesMeta:
1772 | '@types/react':
1773 | optional: true
1774 |
1775 | use-sidecar@1.1.3:
1776 | resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
1777 | engines: {node: '>=10'}
1778 | peerDependencies:
1779 | '@types/react': '*'
1780 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1781 | peerDependenciesMeta:
1782 | '@types/react':
1783 | optional: true
1784 |
1785 | util-deprecate@1.0.2:
1786 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1787 |
1788 | which@2.0.2:
1789 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1790 | engines: {node: '>= 8'}
1791 | hasBin: true
1792 |
1793 | wrap-ansi@7.0.0:
1794 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1795 | engines: {node: '>=10'}
1796 |
1797 | wrap-ansi@8.1.0:
1798 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1799 | engines: {node: '>=12'}
1800 |
1801 | yaml@2.7.0:
1802 | resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
1803 | engines: {node: '>= 14'}
1804 | hasBin: true
1805 |
1806 | zod@3.24.1:
1807 | resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==}
1808 |
1809 | snapshots:
1810 |
1811 | '@alloc/quick-lru@5.2.0': {}
1812 |
1813 | '@auth/core@0.37.2':
1814 | dependencies:
1815 | '@panva/hkdf': 1.2.1
1816 | '@types/cookie': 0.6.0
1817 | cookie: 0.7.1
1818 | jose: 5.9.6
1819 | oauth4webapi: 3.1.4
1820 | preact: 10.11.3
1821 | preact-render-to-string: 5.2.3(preact@10.11.3)
1822 |
1823 | '@emnapi/runtime@1.3.1':
1824 | dependencies:
1825 | tslib: 2.8.1
1826 | optional: true
1827 |
1828 | '@esbuild-kit/core-utils@3.3.2':
1829 | dependencies:
1830 | esbuild: 0.18.20
1831 | source-map-support: 0.5.21
1832 |
1833 | '@esbuild-kit/esm-loader@2.6.5':
1834 | dependencies:
1835 | '@esbuild-kit/core-utils': 3.3.2
1836 | get-tsconfig: 4.8.1
1837 |
1838 | '@esbuild/aix-ppc64@0.19.12':
1839 | optional: true
1840 |
1841 | '@esbuild/android-arm64@0.18.20':
1842 | optional: true
1843 |
1844 | '@esbuild/android-arm64@0.19.12':
1845 | optional: true
1846 |
1847 | '@esbuild/android-arm@0.18.20':
1848 | optional: true
1849 |
1850 | '@esbuild/android-arm@0.19.12':
1851 | optional: true
1852 |
1853 | '@esbuild/android-x64@0.18.20':
1854 | optional: true
1855 |
1856 | '@esbuild/android-x64@0.19.12':
1857 | optional: true
1858 |
1859 | '@esbuild/darwin-arm64@0.18.20':
1860 | optional: true
1861 |
1862 | '@esbuild/darwin-arm64@0.19.12':
1863 | optional: true
1864 |
1865 | '@esbuild/darwin-x64@0.18.20':
1866 | optional: true
1867 |
1868 | '@esbuild/darwin-x64@0.19.12':
1869 | optional: true
1870 |
1871 | '@esbuild/freebsd-arm64@0.18.20':
1872 | optional: true
1873 |
1874 | '@esbuild/freebsd-arm64@0.19.12':
1875 | optional: true
1876 |
1877 | '@esbuild/freebsd-x64@0.18.20':
1878 | optional: true
1879 |
1880 | '@esbuild/freebsd-x64@0.19.12':
1881 | optional: true
1882 |
1883 | '@esbuild/linux-arm64@0.18.20':
1884 | optional: true
1885 |
1886 | '@esbuild/linux-arm64@0.19.12':
1887 | optional: true
1888 |
1889 | '@esbuild/linux-arm@0.18.20':
1890 | optional: true
1891 |
1892 | '@esbuild/linux-arm@0.19.12':
1893 | optional: true
1894 |
1895 | '@esbuild/linux-ia32@0.18.20':
1896 | optional: true
1897 |
1898 | '@esbuild/linux-ia32@0.19.12':
1899 | optional: true
1900 |
1901 | '@esbuild/linux-loong64@0.18.20':
1902 | optional: true
1903 |
1904 | '@esbuild/linux-loong64@0.19.12':
1905 | optional: true
1906 |
1907 | '@esbuild/linux-mips64el@0.18.20':
1908 | optional: true
1909 |
1910 | '@esbuild/linux-mips64el@0.19.12':
1911 | optional: true
1912 |
1913 | '@esbuild/linux-ppc64@0.18.20':
1914 | optional: true
1915 |
1916 | '@esbuild/linux-ppc64@0.19.12':
1917 | optional: true
1918 |
1919 | '@esbuild/linux-riscv64@0.18.20':
1920 | optional: true
1921 |
1922 | '@esbuild/linux-riscv64@0.19.12':
1923 | optional: true
1924 |
1925 | '@esbuild/linux-s390x@0.18.20':
1926 | optional: true
1927 |
1928 | '@esbuild/linux-s390x@0.19.12':
1929 | optional: true
1930 |
1931 | '@esbuild/linux-x64@0.18.20':
1932 | optional: true
1933 |
1934 | '@esbuild/linux-x64@0.19.12':
1935 | optional: true
1936 |
1937 | '@esbuild/netbsd-x64@0.18.20':
1938 | optional: true
1939 |
1940 | '@esbuild/netbsd-x64@0.19.12':
1941 | optional: true
1942 |
1943 | '@esbuild/openbsd-x64@0.18.20':
1944 | optional: true
1945 |
1946 | '@esbuild/openbsd-x64@0.19.12':
1947 | optional: true
1948 |
1949 | '@esbuild/sunos-x64@0.18.20':
1950 | optional: true
1951 |
1952 | '@esbuild/sunos-x64@0.19.12':
1953 | optional: true
1954 |
1955 | '@esbuild/win32-arm64@0.18.20':
1956 | optional: true
1957 |
1958 | '@esbuild/win32-arm64@0.19.12':
1959 | optional: true
1960 |
1961 | '@esbuild/win32-ia32@0.18.20':
1962 | optional: true
1963 |
1964 | '@esbuild/win32-ia32@0.19.12':
1965 | optional: true
1966 |
1967 | '@esbuild/win32-x64@0.18.20':
1968 | optional: true
1969 |
1970 | '@esbuild/win32-x64@0.19.12':
1971 | optional: true
1972 |
1973 | '@floating-ui/core@1.6.8':
1974 | dependencies:
1975 | '@floating-ui/utils': 0.2.8
1976 |
1977 | '@floating-ui/dom@1.6.12':
1978 | dependencies:
1979 | '@floating-ui/core': 1.6.8
1980 | '@floating-ui/utils': 0.2.8
1981 |
1982 | '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
1983 | dependencies:
1984 | '@floating-ui/dom': 1.6.12
1985 | react: 19.0.0
1986 | react-dom: 19.0.0(react@19.0.0)
1987 |
1988 | '@floating-ui/utils@0.2.8': {}
1989 |
1990 | '@img/sharp-darwin-arm64@0.33.5':
1991 | optionalDependencies:
1992 | '@img/sharp-libvips-darwin-arm64': 1.0.4
1993 | optional: true
1994 |
1995 | '@img/sharp-darwin-x64@0.33.5':
1996 | optionalDependencies:
1997 | '@img/sharp-libvips-darwin-x64': 1.0.4
1998 | optional: true
1999 |
2000 | '@img/sharp-libvips-darwin-arm64@1.0.4':
2001 | optional: true
2002 |
2003 | '@img/sharp-libvips-darwin-x64@1.0.4':
2004 | optional: true
2005 |
2006 | '@img/sharp-libvips-linux-arm64@1.0.4':
2007 | optional: true
2008 |
2009 | '@img/sharp-libvips-linux-arm@1.0.5':
2010 | optional: true
2011 |
2012 | '@img/sharp-libvips-linux-s390x@1.0.4':
2013 | optional: true
2014 |
2015 | '@img/sharp-libvips-linux-x64@1.0.4':
2016 | optional: true
2017 |
2018 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
2019 | optional: true
2020 |
2021 | '@img/sharp-libvips-linuxmusl-x64@1.0.4':
2022 | optional: true
2023 |
2024 | '@img/sharp-linux-arm64@0.33.5':
2025 | optionalDependencies:
2026 | '@img/sharp-libvips-linux-arm64': 1.0.4
2027 | optional: true
2028 |
2029 | '@img/sharp-linux-arm@0.33.5':
2030 | optionalDependencies:
2031 | '@img/sharp-libvips-linux-arm': 1.0.5
2032 | optional: true
2033 |
2034 | '@img/sharp-linux-s390x@0.33.5':
2035 | optionalDependencies:
2036 | '@img/sharp-libvips-linux-s390x': 1.0.4
2037 | optional: true
2038 |
2039 | '@img/sharp-linux-x64@0.33.5':
2040 | optionalDependencies:
2041 | '@img/sharp-libvips-linux-x64': 1.0.4
2042 | optional: true
2043 |
2044 | '@img/sharp-linuxmusl-arm64@0.33.5':
2045 | optionalDependencies:
2046 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
2047 | optional: true
2048 |
2049 | '@img/sharp-linuxmusl-x64@0.33.5':
2050 | optionalDependencies:
2051 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4
2052 | optional: true
2053 |
2054 | '@img/sharp-wasm32@0.33.5':
2055 | dependencies:
2056 | '@emnapi/runtime': 1.3.1
2057 | optional: true
2058 |
2059 | '@img/sharp-win32-ia32@0.33.5':
2060 | optional: true
2061 |
2062 | '@img/sharp-win32-x64@0.33.5':
2063 | optional: true
2064 |
2065 | '@isaacs/cliui@8.0.2':
2066 | dependencies:
2067 | string-width: 5.1.2
2068 | string-width-cjs: string-width@4.2.3
2069 | strip-ansi: 7.1.0
2070 | strip-ansi-cjs: strip-ansi@6.0.1
2071 | wrap-ansi: 8.1.0
2072 | wrap-ansi-cjs: wrap-ansi@7.0.0
2073 |
2074 | '@jridgewell/gen-mapping@0.3.8':
2075 | dependencies:
2076 | '@jridgewell/set-array': 1.2.1
2077 | '@jridgewell/sourcemap-codec': 1.5.0
2078 | '@jridgewell/trace-mapping': 0.3.25
2079 |
2080 | '@jridgewell/resolve-uri@3.1.2': {}
2081 |
2082 | '@jridgewell/set-array@1.2.1': {}
2083 |
2084 | '@jridgewell/sourcemap-codec@1.5.0': {}
2085 |
2086 | '@jridgewell/trace-mapping@0.3.25':
2087 | dependencies:
2088 | '@jridgewell/resolve-uri': 3.1.2
2089 | '@jridgewell/sourcemap-codec': 1.5.0
2090 |
2091 | '@neondatabase/serverless@0.9.5':
2092 | dependencies:
2093 | '@types/pg': 8.11.6
2094 |
2095 | '@next/env@15.1.3': {}
2096 |
2097 | '@next/swc-darwin-arm64@15.1.3':
2098 | optional: true
2099 |
2100 | '@next/swc-darwin-x64@15.1.3':
2101 | optional: true
2102 |
2103 | '@next/swc-linux-arm64-gnu@15.1.3':
2104 | optional: true
2105 |
2106 | '@next/swc-linux-arm64-musl@15.1.3':
2107 | optional: true
2108 |
2109 | '@next/swc-linux-x64-gnu@15.1.3':
2110 | optional: true
2111 |
2112 | '@next/swc-linux-x64-musl@15.1.3':
2113 | optional: true
2114 |
2115 | '@next/swc-win32-arm64-msvc@15.1.3':
2116 | optional: true
2117 |
2118 | '@next/swc-win32-x64-msvc@15.1.3':
2119 | optional: true
2120 |
2121 | '@nodelib/fs.scandir@2.1.5':
2122 | dependencies:
2123 | '@nodelib/fs.stat': 2.0.5
2124 | run-parallel: 1.2.0
2125 |
2126 | '@nodelib/fs.stat@2.0.5': {}
2127 |
2128 | '@nodelib/fs.walk@1.2.8':
2129 | dependencies:
2130 | '@nodelib/fs.scandir': 2.1.5
2131 | fastq: 1.18.0
2132 |
2133 | '@panva/hkdf@1.2.1': {}
2134 |
2135 | '@pkgjs/parseargs@0.11.0':
2136 | optional: true
2137 |
2138 | '@radix-ui/primitive@1.1.1': {}
2139 |
2140 | '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2141 | dependencies:
2142 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2143 | react: 19.0.0
2144 | react-dom: 19.0.0(react@19.0.0)
2145 | optionalDependencies:
2146 | '@types/react': 19.0.0
2147 | '@types/react-dom': 19.0.0
2148 |
2149 | '@radix-ui/react-collection@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2150 | dependencies:
2151 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2152 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2153 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2154 | '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2155 | react: 19.0.0
2156 | react-dom: 19.0.0(react@19.0.0)
2157 | optionalDependencies:
2158 | '@types/react': 19.0.0
2159 | '@types/react-dom': 19.0.0
2160 |
2161 | '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.0)(react@19.0.0)':
2162 | dependencies:
2163 | react: 19.0.0
2164 | optionalDependencies:
2165 | '@types/react': 19.0.0
2166 |
2167 | '@radix-ui/react-context@1.1.1(@types/react@19.0.0)(react@19.0.0)':
2168 | dependencies:
2169 | react: 19.0.0
2170 | optionalDependencies:
2171 | '@types/react': 19.0.0
2172 |
2173 | '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2174 | dependencies:
2175 | '@radix-ui/primitive': 1.1.1
2176 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2177 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2178 | '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2179 | '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2180 | '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2181 | '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2182 | '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2183 | '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2184 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2185 | '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2186 | '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2187 | aria-hidden: 1.2.4
2188 | react: 19.0.0
2189 | react-dom: 19.0.0(react@19.0.0)
2190 | react-remove-scroll: 2.6.2(@types/react@19.0.0)(react@19.0.0)
2191 | optionalDependencies:
2192 | '@types/react': 19.0.0
2193 | '@types/react-dom': 19.0.0
2194 |
2195 | '@radix-ui/react-direction@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2196 | dependencies:
2197 | react: 19.0.0
2198 | optionalDependencies:
2199 | '@types/react': 19.0.0
2200 |
2201 | '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2202 | dependencies:
2203 | '@radix-ui/primitive': 1.1.1
2204 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2205 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2206 | '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2207 | '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2208 | react: 19.0.0
2209 | react-dom: 19.0.0(react@19.0.0)
2210 | optionalDependencies:
2211 | '@types/react': 19.0.0
2212 | '@types/react-dom': 19.0.0
2213 |
2214 | '@radix-ui/react-dropdown-menu@2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2215 | dependencies:
2216 | '@radix-ui/primitive': 1.1.1
2217 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2218 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2219 | '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2220 | '@radix-ui/react-menu': 2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2221 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2222 | '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2223 | react: 19.0.0
2224 | react-dom: 19.0.0(react@19.0.0)
2225 | optionalDependencies:
2226 | '@types/react': 19.0.0
2227 | '@types/react-dom': 19.0.0
2228 |
2229 | '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.0)(react@19.0.0)':
2230 | dependencies:
2231 | react: 19.0.0
2232 | optionalDependencies:
2233 | '@types/react': 19.0.0
2234 |
2235 | '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2236 | dependencies:
2237 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2238 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2239 | '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2240 | react: 19.0.0
2241 | react-dom: 19.0.0(react@19.0.0)
2242 | optionalDependencies:
2243 | '@types/react': 19.0.0
2244 | '@types/react-dom': 19.0.0
2245 |
2246 | '@radix-ui/react-id@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2247 | dependencies:
2248 | '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2249 | react: 19.0.0
2250 | optionalDependencies:
2251 | '@types/react': 19.0.0
2252 |
2253 | '@radix-ui/react-menu@2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2254 | dependencies:
2255 | '@radix-ui/primitive': 1.1.1
2256 | '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2257 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2258 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2259 | '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2260 | '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2261 | '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2262 | '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2263 | '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2264 | '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2265 | '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2266 | '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2267 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2268 | '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2269 | '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2270 | '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2271 | aria-hidden: 1.2.4
2272 | react: 19.0.0
2273 | react-dom: 19.0.0(react@19.0.0)
2274 | react-remove-scroll: 2.6.2(@types/react@19.0.0)(react@19.0.0)
2275 | optionalDependencies:
2276 | '@types/react': 19.0.0
2277 | '@types/react-dom': 19.0.0
2278 |
2279 | '@radix-ui/react-popper@1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2280 | dependencies:
2281 | '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2282 | '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2283 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2284 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2285 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2286 | '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2287 | '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2288 | '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2289 | '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2290 | '@radix-ui/rect': 1.1.0
2291 | react: 19.0.0
2292 | react-dom: 19.0.0(react@19.0.0)
2293 | optionalDependencies:
2294 | '@types/react': 19.0.0
2295 | '@types/react-dom': 19.0.0
2296 |
2297 | '@radix-ui/react-portal@1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2298 | dependencies:
2299 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2300 | '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2301 | react: 19.0.0
2302 | react-dom: 19.0.0(react@19.0.0)
2303 | optionalDependencies:
2304 | '@types/react': 19.0.0
2305 | '@types/react-dom': 19.0.0
2306 |
2307 | '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2308 | dependencies:
2309 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2310 | '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2311 | react: 19.0.0
2312 | react-dom: 19.0.0(react@19.0.0)
2313 | optionalDependencies:
2314 | '@types/react': 19.0.0
2315 | '@types/react-dom': 19.0.0
2316 |
2317 | '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2318 | dependencies:
2319 | '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2320 | react: 19.0.0
2321 | react-dom: 19.0.0(react@19.0.0)
2322 | optionalDependencies:
2323 | '@types/react': 19.0.0
2324 | '@types/react-dom': 19.0.0
2325 |
2326 | '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2327 | dependencies:
2328 | '@radix-ui/primitive': 1.1.1
2329 | '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2330 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2331 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2332 | '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2333 | '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2334 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2335 | '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2336 | '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2337 | react: 19.0.0
2338 | react-dom: 19.0.0(react@19.0.0)
2339 | optionalDependencies:
2340 | '@types/react': 19.0.0
2341 | '@types/react-dom': 19.0.0
2342 |
2343 | '@radix-ui/react-slot@1.1.1(@types/react@19.0.0)(react@19.0.0)':
2344 | dependencies:
2345 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2346 | react: 19.0.0
2347 | optionalDependencies:
2348 | '@types/react': 19.0.0
2349 |
2350 | '@radix-ui/react-tabs@1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2351 | dependencies:
2352 | '@radix-ui/primitive': 1.1.1
2353 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2354 | '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2355 | '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2356 | '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2357 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2358 | '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2359 | '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2360 | react: 19.0.0
2361 | react-dom: 19.0.0(react@19.0.0)
2362 | optionalDependencies:
2363 | '@types/react': 19.0.0
2364 | '@types/react-dom': 19.0.0
2365 |
2366 | '@radix-ui/react-tooltip@1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2367 | dependencies:
2368 | '@radix-ui/primitive': 1.1.1
2369 | '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2370 | '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2371 | '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2372 | '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2373 | '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2374 | '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2375 | '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2376 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2377 | '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0)
2378 | '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2379 | '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2380 | react: 19.0.0
2381 | react-dom: 19.0.0(react@19.0.0)
2382 | optionalDependencies:
2383 | '@types/react': 19.0.0
2384 | '@types/react-dom': 19.0.0
2385 |
2386 | '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2387 | dependencies:
2388 | react: 19.0.0
2389 | optionalDependencies:
2390 | '@types/react': 19.0.0
2391 |
2392 | '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2393 | dependencies:
2394 | '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2395 | react: 19.0.0
2396 | optionalDependencies:
2397 | '@types/react': 19.0.0
2398 |
2399 | '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2400 | dependencies:
2401 | '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2402 | react: 19.0.0
2403 | optionalDependencies:
2404 | '@types/react': 19.0.0
2405 |
2406 | '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2407 | dependencies:
2408 | react: 19.0.0
2409 | optionalDependencies:
2410 | '@types/react': 19.0.0
2411 |
2412 | '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2413 | dependencies:
2414 | '@radix-ui/rect': 1.1.0
2415 | react: 19.0.0
2416 | optionalDependencies:
2417 | '@types/react': 19.0.0
2418 |
2419 | '@radix-ui/react-use-size@1.1.0(@types/react@19.0.0)(react@19.0.0)':
2420 | dependencies:
2421 | '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0)
2422 | react: 19.0.0
2423 | optionalDependencies:
2424 | '@types/react': 19.0.0
2425 |
2426 | '@radix-ui/react-visually-hidden@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
2427 | dependencies:
2428 | '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2429 | react: 19.0.0
2430 | react-dom: 19.0.0(react@19.0.0)
2431 | optionalDependencies:
2432 | '@types/react': 19.0.0
2433 | '@types/react-dom': 19.0.0
2434 |
2435 | '@radix-ui/rect@1.1.0': {}
2436 |
2437 | '@swc/counter@0.1.3': {}
2438 |
2439 | '@swc/helpers@0.5.15':
2440 | dependencies:
2441 | tslib: 2.8.1
2442 |
2443 | '@types/cookie@0.6.0': {}
2444 |
2445 | '@types/node@20.17.6':
2446 | dependencies:
2447 | undici-types: 6.19.8
2448 |
2449 | '@types/pg@8.11.6':
2450 | dependencies:
2451 | '@types/node': 20.17.6
2452 | pg-protocol: 1.7.0
2453 | pg-types: 4.0.2
2454 |
2455 | '@types/react-dom@19.0.0':
2456 | dependencies:
2457 | '@types/react': 19.0.0
2458 |
2459 | '@types/react@19.0.0':
2460 | dependencies:
2461 | csstype: 3.1.3
2462 |
2463 | '@vercel/analytics@1.4.1(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
2464 | optionalDependencies:
2465 | next: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2466 | react: 19.0.0
2467 |
2468 | ansi-regex@5.0.1: {}
2469 |
2470 | ansi-regex@6.1.0: {}
2471 |
2472 | ansi-styles@4.3.0:
2473 | dependencies:
2474 | color-convert: 2.0.1
2475 |
2476 | ansi-styles@6.2.1: {}
2477 |
2478 | any-promise@1.3.0: {}
2479 |
2480 | anymatch@3.1.3:
2481 | dependencies:
2482 | normalize-path: 3.0.0
2483 | picomatch: 2.3.1
2484 |
2485 | arg@5.0.2: {}
2486 |
2487 | aria-hidden@1.2.4:
2488 | dependencies:
2489 | tslib: 2.8.1
2490 |
2491 | autoprefixer@10.4.20(postcss@8.4.49):
2492 | dependencies:
2493 | browserslist: 4.24.3
2494 | caniuse-lite: 1.0.30001690
2495 | fraction.js: 4.3.7
2496 | normalize-range: 0.1.2
2497 | picocolors: 1.1.1
2498 | postcss: 8.4.49
2499 | postcss-value-parser: 4.2.0
2500 |
2501 | balanced-match@1.0.2: {}
2502 |
2503 | binary-extensions@2.3.0: {}
2504 |
2505 | brace-expansion@2.0.1:
2506 | dependencies:
2507 | balanced-match: 1.0.2
2508 |
2509 | braces@3.0.3:
2510 | dependencies:
2511 | fill-range: 7.1.1
2512 |
2513 | browserslist@4.24.3:
2514 | dependencies:
2515 | caniuse-lite: 1.0.30001690
2516 | electron-to-chromium: 1.5.76
2517 | node-releases: 2.0.19
2518 | update-browserslist-db: 1.1.1(browserslist@4.24.3)
2519 |
2520 | buffer-from@1.1.2: {}
2521 |
2522 | busboy@1.6.0:
2523 | dependencies:
2524 | streamsearch: 1.1.0
2525 |
2526 | camelcase-css@2.0.1: {}
2527 |
2528 | caniuse-lite@1.0.30001690: {}
2529 |
2530 | chokidar@3.6.0:
2531 | dependencies:
2532 | anymatch: 3.1.3
2533 | braces: 3.0.3
2534 | glob-parent: 5.1.2
2535 | is-binary-path: 2.1.0
2536 | is-glob: 4.0.3
2537 | normalize-path: 3.0.0
2538 | readdirp: 3.6.0
2539 | optionalDependencies:
2540 | fsevents: 2.3.3
2541 |
2542 | class-variance-authority@0.7.1:
2543 | dependencies:
2544 | clsx: 2.1.1
2545 |
2546 | client-only@0.0.1: {}
2547 |
2548 | clsx@2.1.1: {}
2549 |
2550 | color-convert@2.0.1:
2551 | dependencies:
2552 | color-name: 1.1.4
2553 |
2554 | color-name@1.1.4: {}
2555 |
2556 | color-string@1.9.1:
2557 | dependencies:
2558 | color-name: 1.1.4
2559 | simple-swizzle: 0.2.2
2560 | optional: true
2561 |
2562 | color@4.2.3:
2563 | dependencies:
2564 | color-convert: 2.0.1
2565 | color-string: 1.9.1
2566 | optional: true
2567 |
2568 | commander@4.1.1: {}
2569 |
2570 | cookie@0.7.1: {}
2571 |
2572 | cross-spawn@7.0.6:
2573 | dependencies:
2574 | path-key: 3.1.1
2575 | shebang-command: 2.0.0
2576 | which: 2.0.2
2577 |
2578 | cssesc@3.0.0: {}
2579 |
2580 | csstype@3.1.3: {}
2581 |
2582 | debug@4.4.0:
2583 | dependencies:
2584 | ms: 2.1.3
2585 |
2586 | detect-libc@2.0.3:
2587 | optional: true
2588 |
2589 | detect-node-es@1.1.0: {}
2590 |
2591 | didyoumean@1.2.2: {}
2592 |
2593 | dlv@1.1.3: {}
2594 |
2595 | drizzle-kit@0.22.8:
2596 | dependencies:
2597 | '@esbuild-kit/esm-loader': 2.6.5
2598 | esbuild: 0.19.12
2599 | esbuild-register: 3.6.0(esbuild@0.19.12)
2600 | transitivePeerDependencies:
2601 | - supports-color
2602 |
2603 | drizzle-orm@0.31.4(@neondatabase/serverless@0.9.5)(@types/pg@8.11.6)(@types/react@19.0.0)(react@19.0.0):
2604 | optionalDependencies:
2605 | '@neondatabase/serverless': 0.9.5
2606 | '@types/pg': 8.11.6
2607 | '@types/react': 19.0.0
2608 | react: 19.0.0
2609 |
2610 | drizzle-zod@0.5.1(drizzle-orm@0.31.4(@neondatabase/serverless@0.9.5)(@types/pg@8.11.6)(@types/react@19.0.0)(react@19.0.0))(zod@3.24.1):
2611 | dependencies:
2612 | drizzle-orm: 0.31.4(@neondatabase/serverless@0.9.5)(@types/pg@8.11.6)(@types/react@19.0.0)(react@19.0.0)
2613 | zod: 3.24.1
2614 |
2615 | eastasianwidth@0.2.0: {}
2616 |
2617 | electron-to-chromium@1.5.76: {}
2618 |
2619 | emoji-regex@8.0.0: {}
2620 |
2621 | emoji-regex@9.2.2: {}
2622 |
2623 | esbuild-register@3.6.0(esbuild@0.19.12):
2624 | dependencies:
2625 | debug: 4.4.0
2626 | esbuild: 0.19.12
2627 | transitivePeerDependencies:
2628 | - supports-color
2629 |
2630 | esbuild@0.18.20:
2631 | optionalDependencies:
2632 | '@esbuild/android-arm': 0.18.20
2633 | '@esbuild/android-arm64': 0.18.20
2634 | '@esbuild/android-x64': 0.18.20
2635 | '@esbuild/darwin-arm64': 0.18.20
2636 | '@esbuild/darwin-x64': 0.18.20
2637 | '@esbuild/freebsd-arm64': 0.18.20
2638 | '@esbuild/freebsd-x64': 0.18.20
2639 | '@esbuild/linux-arm': 0.18.20
2640 | '@esbuild/linux-arm64': 0.18.20
2641 | '@esbuild/linux-ia32': 0.18.20
2642 | '@esbuild/linux-loong64': 0.18.20
2643 | '@esbuild/linux-mips64el': 0.18.20
2644 | '@esbuild/linux-ppc64': 0.18.20
2645 | '@esbuild/linux-riscv64': 0.18.20
2646 | '@esbuild/linux-s390x': 0.18.20
2647 | '@esbuild/linux-x64': 0.18.20
2648 | '@esbuild/netbsd-x64': 0.18.20
2649 | '@esbuild/openbsd-x64': 0.18.20
2650 | '@esbuild/sunos-x64': 0.18.20
2651 | '@esbuild/win32-arm64': 0.18.20
2652 | '@esbuild/win32-ia32': 0.18.20
2653 | '@esbuild/win32-x64': 0.18.20
2654 |
2655 | esbuild@0.19.12:
2656 | optionalDependencies:
2657 | '@esbuild/aix-ppc64': 0.19.12
2658 | '@esbuild/android-arm': 0.19.12
2659 | '@esbuild/android-arm64': 0.19.12
2660 | '@esbuild/android-x64': 0.19.12
2661 | '@esbuild/darwin-arm64': 0.19.12
2662 | '@esbuild/darwin-x64': 0.19.12
2663 | '@esbuild/freebsd-arm64': 0.19.12
2664 | '@esbuild/freebsd-x64': 0.19.12
2665 | '@esbuild/linux-arm': 0.19.12
2666 | '@esbuild/linux-arm64': 0.19.12
2667 | '@esbuild/linux-ia32': 0.19.12
2668 | '@esbuild/linux-loong64': 0.19.12
2669 | '@esbuild/linux-mips64el': 0.19.12
2670 | '@esbuild/linux-ppc64': 0.19.12
2671 | '@esbuild/linux-riscv64': 0.19.12
2672 | '@esbuild/linux-s390x': 0.19.12
2673 | '@esbuild/linux-x64': 0.19.12
2674 | '@esbuild/netbsd-x64': 0.19.12
2675 | '@esbuild/openbsd-x64': 0.19.12
2676 | '@esbuild/sunos-x64': 0.19.12
2677 | '@esbuild/win32-arm64': 0.19.12
2678 | '@esbuild/win32-ia32': 0.19.12
2679 | '@esbuild/win32-x64': 0.19.12
2680 |
2681 | escalade@3.2.0: {}
2682 |
2683 | fast-glob@3.3.2:
2684 | dependencies:
2685 | '@nodelib/fs.stat': 2.0.5
2686 | '@nodelib/fs.walk': 1.2.8
2687 | glob-parent: 5.1.2
2688 | merge2: 1.4.1
2689 | micromatch: 4.0.8
2690 |
2691 | fastq@1.18.0:
2692 | dependencies:
2693 | reusify: 1.0.4
2694 |
2695 | fill-range@7.1.1:
2696 | dependencies:
2697 | to-regex-range: 5.0.1
2698 |
2699 | foreground-child@3.3.0:
2700 | dependencies:
2701 | cross-spawn: 7.0.6
2702 | signal-exit: 4.1.0
2703 |
2704 | fraction.js@4.3.7: {}
2705 |
2706 | fsevents@2.3.3:
2707 | optional: true
2708 |
2709 | function-bind@1.1.2: {}
2710 |
2711 | get-nonce@1.0.1: {}
2712 |
2713 | get-tsconfig@4.8.1:
2714 | dependencies:
2715 | resolve-pkg-maps: 1.0.0
2716 |
2717 | glob-parent@5.1.2:
2718 | dependencies:
2719 | is-glob: 4.0.3
2720 |
2721 | glob-parent@6.0.2:
2722 | dependencies:
2723 | is-glob: 4.0.3
2724 |
2725 | glob@10.4.5:
2726 | dependencies:
2727 | foreground-child: 3.3.0
2728 | jackspeak: 3.4.3
2729 | minimatch: 9.0.5
2730 | minipass: 7.1.2
2731 | package-json-from-dist: 1.0.1
2732 | path-scurry: 1.11.1
2733 |
2734 | hasown@2.0.2:
2735 | dependencies:
2736 | function-bind: 1.1.2
2737 |
2738 | is-arrayish@0.3.2:
2739 | optional: true
2740 |
2741 | is-binary-path@2.1.0:
2742 | dependencies:
2743 | binary-extensions: 2.3.0
2744 |
2745 | is-core-module@2.16.1:
2746 | dependencies:
2747 | hasown: 2.0.2
2748 |
2749 | is-extglob@2.1.1: {}
2750 |
2751 | is-fullwidth-code-point@3.0.0: {}
2752 |
2753 | is-glob@4.0.3:
2754 | dependencies:
2755 | is-extglob: 2.1.1
2756 |
2757 | is-number@7.0.0: {}
2758 |
2759 | isexe@2.0.0: {}
2760 |
2761 | jackspeak@3.4.3:
2762 | dependencies:
2763 | '@isaacs/cliui': 8.0.2
2764 | optionalDependencies:
2765 | '@pkgjs/parseargs': 0.11.0
2766 |
2767 | jiti@1.21.7: {}
2768 |
2769 | jose@5.9.6: {}
2770 |
2771 | js-tokens@4.0.0: {}
2772 |
2773 | lilconfig@3.1.3: {}
2774 |
2775 | lines-and-columns@1.2.4: {}
2776 |
2777 | loose-envify@1.4.0:
2778 | dependencies:
2779 | js-tokens: 4.0.0
2780 |
2781 | lru-cache@10.4.3: {}
2782 |
2783 | lucide-react@0.400.0(react@19.0.0):
2784 | dependencies:
2785 | react: 19.0.0
2786 |
2787 | merge2@1.4.1: {}
2788 |
2789 | micromatch@4.0.8:
2790 | dependencies:
2791 | braces: 3.0.3
2792 | picomatch: 2.3.1
2793 |
2794 | minimatch@9.0.5:
2795 | dependencies:
2796 | brace-expansion: 2.0.1
2797 |
2798 | minipass@7.1.2: {}
2799 |
2800 | ms@2.1.3: {}
2801 |
2802 | mz@2.7.0:
2803 | dependencies:
2804 | any-promise: 1.3.0
2805 | object-assign: 4.1.1
2806 | thenify-all: 1.6.0
2807 |
2808 | nanoid@3.3.8: {}
2809 |
2810 | next-auth@5.0.0-beta.25(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0):
2811 | dependencies:
2812 | '@auth/core': 0.37.2
2813 | next: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
2814 | react: 19.0.0
2815 |
2816 | next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
2817 | dependencies:
2818 | '@next/env': 15.1.3
2819 | '@swc/counter': 0.1.3
2820 | '@swc/helpers': 0.5.15
2821 | busboy: 1.6.0
2822 | caniuse-lite: 1.0.30001690
2823 | postcss: 8.4.31
2824 | react: 19.0.0
2825 | react-dom: 19.0.0(react@19.0.0)
2826 | styled-jsx: 5.1.6(react@19.0.0)
2827 | optionalDependencies:
2828 | '@next/swc-darwin-arm64': 15.1.3
2829 | '@next/swc-darwin-x64': 15.1.3
2830 | '@next/swc-linux-arm64-gnu': 15.1.3
2831 | '@next/swc-linux-arm64-musl': 15.1.3
2832 | '@next/swc-linux-x64-gnu': 15.1.3
2833 | '@next/swc-linux-x64-musl': 15.1.3
2834 | '@next/swc-win32-arm64-msvc': 15.1.3
2835 | '@next/swc-win32-x64-msvc': 15.1.3
2836 | sharp: 0.33.5
2837 | transitivePeerDependencies:
2838 | - '@babel/core'
2839 | - babel-plugin-macros
2840 |
2841 | node-releases@2.0.19: {}
2842 |
2843 | normalize-path@3.0.0: {}
2844 |
2845 | normalize-range@0.1.2: {}
2846 |
2847 | oauth4webapi@3.1.4: {}
2848 |
2849 | object-assign@4.1.1: {}
2850 |
2851 | object-hash@3.0.0: {}
2852 |
2853 | obuf@1.1.2: {}
2854 |
2855 | package-json-from-dist@1.0.1: {}
2856 |
2857 | path-key@3.1.1: {}
2858 |
2859 | path-parse@1.0.7: {}
2860 |
2861 | path-scurry@1.11.1:
2862 | dependencies:
2863 | lru-cache: 10.4.3
2864 | minipass: 7.1.2
2865 |
2866 | pg-int8@1.0.1: {}
2867 |
2868 | pg-numeric@1.0.2: {}
2869 |
2870 | pg-protocol@1.7.0: {}
2871 |
2872 | pg-types@4.0.2:
2873 | dependencies:
2874 | pg-int8: 1.0.1
2875 | pg-numeric: 1.0.2
2876 | postgres-array: 3.0.2
2877 | postgres-bytea: 3.0.0
2878 | postgres-date: 2.1.0
2879 | postgres-interval: 3.0.0
2880 | postgres-range: 1.1.4
2881 |
2882 | picocolors@1.1.1: {}
2883 |
2884 | picomatch@2.3.1: {}
2885 |
2886 | pify@2.3.0: {}
2887 |
2888 | pirates@4.0.6: {}
2889 |
2890 | postcss-import@15.1.0(postcss@8.4.49):
2891 | dependencies:
2892 | postcss: 8.4.49
2893 | postcss-value-parser: 4.2.0
2894 | read-cache: 1.0.0
2895 | resolve: 1.22.10
2896 |
2897 | postcss-js@4.0.1(postcss@8.4.49):
2898 | dependencies:
2899 | camelcase-css: 2.0.1
2900 | postcss: 8.4.49
2901 |
2902 | postcss-load-config@4.0.2(postcss@8.4.49):
2903 | dependencies:
2904 | lilconfig: 3.1.3
2905 | yaml: 2.7.0
2906 | optionalDependencies:
2907 | postcss: 8.4.49
2908 |
2909 | postcss-nested@6.2.0(postcss@8.4.49):
2910 | dependencies:
2911 | postcss: 8.4.49
2912 | postcss-selector-parser: 6.1.2
2913 |
2914 | postcss-selector-parser@6.1.2:
2915 | dependencies:
2916 | cssesc: 3.0.0
2917 | util-deprecate: 1.0.2
2918 |
2919 | postcss-value-parser@4.2.0: {}
2920 |
2921 | postcss@8.4.31:
2922 | dependencies:
2923 | nanoid: 3.3.8
2924 | picocolors: 1.1.1
2925 | source-map-js: 1.2.1
2926 |
2927 | postcss@8.4.49:
2928 | dependencies:
2929 | nanoid: 3.3.8
2930 | picocolors: 1.1.1
2931 | source-map-js: 1.2.1
2932 |
2933 | postgres-array@3.0.2: {}
2934 |
2935 | postgres-bytea@3.0.0:
2936 | dependencies:
2937 | obuf: 1.1.2
2938 |
2939 | postgres-date@2.1.0: {}
2940 |
2941 | postgres-interval@3.0.0: {}
2942 |
2943 | postgres-range@1.1.4: {}
2944 |
2945 | preact-render-to-string@5.2.3(preact@10.11.3):
2946 | dependencies:
2947 | preact: 10.11.3
2948 | pretty-format: 3.8.0
2949 |
2950 | preact@10.11.3: {}
2951 |
2952 | prettier@3.4.2: {}
2953 |
2954 | pretty-format@3.8.0: {}
2955 |
2956 | prop-types@15.8.1:
2957 | dependencies:
2958 | loose-envify: 1.4.0
2959 | object-assign: 4.1.1
2960 | react-is: 16.13.1
2961 |
2962 | queue-microtask@1.2.3: {}
2963 |
2964 | react-dom@19.0.0(react@19.0.0):
2965 | dependencies:
2966 | react: 19.0.0
2967 | scheduler: 0.25.0
2968 |
2969 | react-is@16.13.1: {}
2970 |
2971 | react-remove-scroll-bar@2.3.8(@types/react@19.0.0)(react@19.0.0):
2972 | dependencies:
2973 | react: 19.0.0
2974 | react-style-singleton: 2.2.3(@types/react@19.0.0)(react@19.0.0)
2975 | tslib: 2.8.1
2976 | optionalDependencies:
2977 | '@types/react': 19.0.0
2978 |
2979 | react-remove-scroll@2.6.2(@types/react@19.0.0)(react@19.0.0):
2980 | dependencies:
2981 | react: 19.0.0
2982 | react-remove-scroll-bar: 2.3.8(@types/react@19.0.0)(react@19.0.0)
2983 | react-style-singleton: 2.2.3(@types/react@19.0.0)(react@19.0.0)
2984 | tslib: 2.8.1
2985 | use-callback-ref: 1.3.3(@types/react@19.0.0)(react@19.0.0)
2986 | use-sidecar: 1.1.3(@types/react@19.0.0)(react@19.0.0)
2987 | optionalDependencies:
2988 | '@types/react': 19.0.0
2989 |
2990 | react-style-singleton@2.2.3(@types/react@19.0.0)(react@19.0.0):
2991 | dependencies:
2992 | get-nonce: 1.0.1
2993 | react: 19.0.0
2994 | tslib: 2.8.1
2995 | optionalDependencies:
2996 | '@types/react': 19.0.0
2997 |
2998 | react@19.0.0: {}
2999 |
3000 | read-cache@1.0.0:
3001 | dependencies:
3002 | pify: 2.3.0
3003 |
3004 | readdirp@3.6.0:
3005 | dependencies:
3006 | picomatch: 2.3.1
3007 |
3008 | resolve-pkg-maps@1.0.0: {}
3009 |
3010 | resolve@1.22.10:
3011 | dependencies:
3012 | is-core-module: 2.16.1
3013 | path-parse: 1.0.7
3014 | supports-preserve-symlinks-flag: 1.0.0
3015 |
3016 | reusify@1.0.4: {}
3017 |
3018 | run-parallel@1.2.0:
3019 | dependencies:
3020 | queue-microtask: 1.2.3
3021 |
3022 | scheduler@0.25.0: {}
3023 |
3024 | semver@7.6.3:
3025 | optional: true
3026 |
3027 | server-only@0.0.1: {}
3028 |
3029 | sharp@0.33.5:
3030 | dependencies:
3031 | color: 4.2.3
3032 | detect-libc: 2.0.3
3033 | semver: 7.6.3
3034 | optionalDependencies:
3035 | '@img/sharp-darwin-arm64': 0.33.5
3036 | '@img/sharp-darwin-x64': 0.33.5
3037 | '@img/sharp-libvips-darwin-arm64': 1.0.4
3038 | '@img/sharp-libvips-darwin-x64': 1.0.4
3039 | '@img/sharp-libvips-linux-arm': 1.0.5
3040 | '@img/sharp-libvips-linux-arm64': 1.0.4
3041 | '@img/sharp-libvips-linux-s390x': 1.0.4
3042 | '@img/sharp-libvips-linux-x64': 1.0.4
3043 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
3044 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4
3045 | '@img/sharp-linux-arm': 0.33.5
3046 | '@img/sharp-linux-arm64': 0.33.5
3047 | '@img/sharp-linux-s390x': 0.33.5
3048 | '@img/sharp-linux-x64': 0.33.5
3049 | '@img/sharp-linuxmusl-arm64': 0.33.5
3050 | '@img/sharp-linuxmusl-x64': 0.33.5
3051 | '@img/sharp-wasm32': 0.33.5
3052 | '@img/sharp-win32-ia32': 0.33.5
3053 | '@img/sharp-win32-x64': 0.33.5
3054 | optional: true
3055 |
3056 | shebang-command@2.0.0:
3057 | dependencies:
3058 | shebang-regex: 3.0.0
3059 |
3060 | shebang-regex@3.0.0: {}
3061 |
3062 | signal-exit@4.1.0: {}
3063 |
3064 | simple-swizzle@0.2.2:
3065 | dependencies:
3066 | is-arrayish: 0.3.2
3067 | optional: true
3068 |
3069 | source-map-js@1.2.1: {}
3070 |
3071 | source-map-support@0.5.21:
3072 | dependencies:
3073 | buffer-from: 1.1.2
3074 | source-map: 0.6.1
3075 |
3076 | source-map@0.6.1: {}
3077 |
3078 | streamsearch@1.1.0: {}
3079 |
3080 | string-width@4.2.3:
3081 | dependencies:
3082 | emoji-regex: 8.0.0
3083 | is-fullwidth-code-point: 3.0.0
3084 | strip-ansi: 6.0.1
3085 |
3086 | string-width@5.1.2:
3087 | dependencies:
3088 | eastasianwidth: 0.2.0
3089 | emoji-regex: 9.2.2
3090 | strip-ansi: 7.1.0
3091 |
3092 | strip-ansi@6.0.1:
3093 | dependencies:
3094 | ansi-regex: 5.0.1
3095 |
3096 | strip-ansi@7.1.0:
3097 | dependencies:
3098 | ansi-regex: 6.1.0
3099 |
3100 | styled-jsx@5.1.6(react@19.0.0):
3101 | dependencies:
3102 | client-only: 0.0.1
3103 | react: 19.0.0
3104 |
3105 | sucrase@3.35.0:
3106 | dependencies:
3107 | '@jridgewell/gen-mapping': 0.3.8
3108 | commander: 4.1.1
3109 | glob: 10.4.5
3110 | lines-and-columns: 1.2.4
3111 | mz: 2.7.0
3112 | pirates: 4.0.6
3113 | ts-interface-checker: 0.1.13
3114 |
3115 | supports-preserve-symlinks-flag@1.0.0: {}
3116 |
3117 | tailwind-merge@2.6.0: {}
3118 |
3119 | tailwindcss-animate@1.0.7(tailwindcss@3.4.17):
3120 | dependencies:
3121 | tailwindcss: 3.4.17
3122 |
3123 | tailwindcss@3.4.17:
3124 | dependencies:
3125 | '@alloc/quick-lru': 5.2.0
3126 | arg: 5.0.2
3127 | chokidar: 3.6.0
3128 | didyoumean: 1.2.2
3129 | dlv: 1.1.3
3130 | fast-glob: 3.3.2
3131 | glob-parent: 6.0.2
3132 | is-glob: 4.0.3
3133 | jiti: 1.21.7
3134 | lilconfig: 3.1.3
3135 | micromatch: 4.0.8
3136 | normalize-path: 3.0.0
3137 | object-hash: 3.0.0
3138 | picocolors: 1.1.1
3139 | postcss: 8.4.49
3140 | postcss-import: 15.1.0(postcss@8.4.49)
3141 | postcss-js: 4.0.1(postcss@8.4.49)
3142 | postcss-load-config: 4.0.2(postcss@8.4.49)
3143 | postcss-nested: 6.2.0(postcss@8.4.49)
3144 | postcss-selector-parser: 6.1.2
3145 | resolve: 1.22.10
3146 | sucrase: 3.35.0
3147 | transitivePeerDependencies:
3148 | - ts-node
3149 |
3150 | thenify-all@1.6.0:
3151 | dependencies:
3152 | thenify: 3.3.1
3153 |
3154 | thenify@3.3.1:
3155 | dependencies:
3156 | any-promise: 1.3.0
3157 |
3158 | to-regex-range@5.0.1:
3159 | dependencies:
3160 | is-number: 7.0.0
3161 |
3162 | ts-interface-checker@0.1.13: {}
3163 |
3164 | tslib@2.8.1: {}
3165 |
3166 | typescript@5.7.2: {}
3167 |
3168 | undici-types@6.19.8: {}
3169 |
3170 | update-browserslist-db@1.1.1(browserslist@4.24.3):
3171 | dependencies:
3172 | browserslist: 4.24.3
3173 | escalade: 3.2.0
3174 | picocolors: 1.1.1
3175 |
3176 | use-callback-ref@1.3.3(@types/react@19.0.0)(react@19.0.0):
3177 | dependencies:
3178 | react: 19.0.0
3179 | tslib: 2.8.1
3180 | optionalDependencies:
3181 | '@types/react': 19.0.0
3182 |
3183 | use-sidecar@1.1.3(@types/react@19.0.0)(react@19.0.0):
3184 | dependencies:
3185 | detect-node-es: 1.1.0
3186 | react: 19.0.0
3187 | tslib: 2.8.1
3188 | optionalDependencies:
3189 | '@types/react': 19.0.0
3190 |
3191 | util-deprecate@1.0.2: {}
3192 |
3193 | which@2.0.2:
3194 | dependencies:
3195 | isexe: 2.0.0
3196 |
3197 | wrap-ansi@7.0.0:
3198 | dependencies:
3199 | ansi-styles: 4.3.0
3200 | string-width: 4.2.3
3201 | strip-ansi: 6.0.1
3202 |
3203 | wrap-ansi@8.1.0:
3204 | dependencies:
3205 | ansi-styles: 6.2.1
3206 | string-width: 5.1.2
3207 | strip-ansi: 7.1.0
3208 |
3209 | yaml@2.7.0: {}
3210 |
3211 | zod@3.24.1: {}
3212 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {}
5 | }
6 | };
7 |
--------------------------------------------------------------------------------
/public/placeholder-user.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vercel/nextjs-postgres-nextauth-tailwindcss-template/0311ed573ba8dd6e78799ff68d3d113a377fe37a/public/placeholder-user.jpg
--------------------------------------------------------------------------------
/public/placeholder.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss';
2 |
3 | export default {
4 | darkMode: ['class'],
5 | content: [
6 | './pages/**/*.{ts,tsx}',
7 | './components/**/*.{ts,tsx}',
8 | './app/**/*.{ts,tsx}',
9 | './src/**/*.{ts,tsx}'
10 | ],
11 | prefix: '',
12 | theme: {
13 | container: {
14 | center: true,
15 | padding: '2rem',
16 | screens: {
17 | '2xl': '1400px'
18 | }
19 | },
20 | extend: {
21 | colors: {
22 | border: 'hsl(var(--border))',
23 | input: 'hsl(var(--input))',
24 | ring: 'hsl(var(--ring))',
25 | background: 'hsl(var(--background))',
26 | foreground: 'hsl(var(--foreground))',
27 | primary: {
28 | DEFAULT: 'hsl(var(--primary))',
29 | foreground: 'hsl(var(--primary-foreground))'
30 | },
31 | secondary: {
32 | DEFAULT: 'hsl(var(--secondary))',
33 | foreground: 'hsl(var(--secondary-foreground))'
34 | },
35 | destructive: {
36 | DEFAULT: 'hsl(var(--destructive))',
37 | foreground: 'hsl(var(--destructive-foreground))'
38 | },
39 | muted: {
40 | DEFAULT: 'hsl(var(--muted))',
41 | foreground: 'hsl(var(--muted-foreground))'
42 | },
43 | accent: {
44 | DEFAULT: 'hsl(var(--accent))',
45 | foreground: 'hsl(var(--accent-foreground))'
46 | },
47 | popover: {
48 | DEFAULT: 'hsl(var(--popover))',
49 | foreground: 'hsl(var(--popover-foreground))'
50 | },
51 | card: {
52 | DEFAULT: 'hsl(var(--card))',
53 | foreground: 'hsl(var(--card-foreground))'
54 | }
55 | },
56 | borderRadius: {
57 | lg: 'var(--radius)',
58 | md: 'calc(var(--radius) - 2px)',
59 | sm: 'calc(var(--radius) - 4px)'
60 | },
61 | keyframes: {
62 | 'accordion-down': {
63 | from: { height: '0' },
64 | to: { height: 'var(--radix-accordion-content-height)' }
65 | },
66 | 'accordion-up': {
67 | from: { height: 'var(--radix-accordion-content-height)' },
68 | to: { height: '0' }
69 | }
70 | },
71 | animation: {
72 | 'accordion-down': 'accordion-down 0.2s ease-out',
73 | 'accordion-up': 'accordion-up 0.2s ease-out'
74 | }
75 | }
76 | },
77 | plugins: [require('tailwindcss-animate')]
78 | } satisfies Config;
79 |
--------------------------------------------------------------------------------
/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 | "baseUrl": ".",
18 | "paths": {
19 | "@/components/*": ["components/*"],
20 | "@/lib/*": ["lib/*"]
21 | },
22 | "plugins": [
23 | {
24 | "name": "next"
25 | }
26 | ]
27 | },
28 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
29 | "exclude": ["node_modules"]
30 | }
31 |
--------------------------------------------------------------------------------