├── .gitignore
├── README.md
├── app
├── (auth)
│ ├── layout.tsx
│ ├── sign-in
│ │ └── [[...sign-in]]
│ │ │ └── page.tsx
│ └── sign-up
│ │ └── [[...sign-up]]
│ │ └── page.tsx
├── (root)
│ ├── cart
│ │ └── page.tsx
│ ├── collections
│ │ └── [collectionId]
│ │ │ └── page.tsx
│ ├── layout.tsx
│ ├── orders
│ │ └── page.tsx
│ ├── page.tsx
│ ├── payment_success
│ │ └── page.tsx
│ ├── products
│ │ └── [productId]
│ │ │ └── page.tsx
│ ├── search
│ │ └── [query]
│ │ │ └── page.tsx
│ └── wishlist
│ │ └── page.tsx
├── api
│ └── users
│ │ ├── route.ts
│ │ └── wishlist
│ │ └── route.ts
├── favicon.ico
└── globals.css
├── components
├── Collections.tsx
├── Gallery.tsx
├── HeartFavorite.tsx
├── Loader.tsx
├── Navbar.tsx
├── ProductCard.tsx
├── ProductInfo.tsx
└── ProductList.tsx
├── lib
├── actions
│ └── actions.ts
├── hooks
│ └── useCart.tsx
├── models
│ └── User.ts
├── mongoDB.ts
├── providers
│ └── ToasterProvider.tsx
└── types.d.ts
├── middleware.ts
├── next.config.mjs
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── banner.png
└── logo.png
├── tailwind.config.ts
└── tsconfig.json
/.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 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 | .env
31 |
32 | # vercel
33 | .vercel
34 |
35 | # typescript
36 | *.tsbuildinfo
37 | next-env.d.ts
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Getting Started
4 |
5 | First, run the development server:
6 |
7 | ```bash
8 | npm run dev
9 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | # or
14 | bun dev
15 | ```
16 |
17 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18 |
19 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20 |
21 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
22 |
23 | ## Learn More
24 |
25 | To learn more about Next.js, take a look at the following resources:
26 |
27 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29 |
30 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
31 |
32 | ## Deploy on Vercel
33 |
34 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35 |
36 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
37 |
--------------------------------------------------------------------------------
/app/(auth)/layout.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from "next";
2 | import { Inter } from "next/font/google";
3 | import "../globals.css";
4 |
5 | import { ClerkProvider } from "@clerk/nextjs";
6 |
7 | const inter = Inter({ subsets: ["latin"] });
8 |
9 | export const metadata: Metadata = {
10 | title: "Borcelle - Store Auth",
11 | description: "Next.js 14 Borcelle Ecommerce store",
12 | };
13 |
14 | export default function RootLayout({
15 | children,
16 | }: Readonly<{
17 | children: React.ReactNode;
18 | }>) {
19 | return (
20 |
21 |
22 | {children}
23 |
24 |
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/app/(auth)/sign-in/[[...sign-in]]/page.tsx:
--------------------------------------------------------------------------------
1 | import { SignIn } from "@clerk/nextjs";
2 |
3 | export default function Page() {
4 | return (
5 |
6 |
7 |
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/app/(auth)/sign-up/[[...sign-up]]/page.tsx:
--------------------------------------------------------------------------------
1 | import { SignUp } from "@clerk/nextjs";
2 |
3 | export default function Page() {
4 | return (
5 |
6 |
7 |
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/app/(root)/cart/page.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import useCart from "@/lib/hooks/useCart";
4 |
5 | import { useUser } from "@clerk/nextjs";
6 | import { MinusCircle, PlusCircle, Trash } from "lucide-react";
7 | import Image from "next/image";
8 | import { useRouter } from "next/navigation";
9 |
10 | const Cart = () => {
11 | const router = useRouter();
12 | const { user } = useUser();
13 | const cart = useCart();
14 |
15 | const total = cart.cartItems.reduce(
16 | (acc, cartItem) => acc + cartItem.item.price * cartItem.quantity,
17 | 0
18 | );
19 | const totalRounded = parseFloat(total.toFixed(2));
20 |
21 | const customer = {
22 | clerkId: user?.id,
23 | email: user?.emailAddresses[0].emailAddress,
24 | name: user?.fullName,
25 | };
26 |
27 | const handleCheckout = async () => {
28 | try {
29 | if (!user) {
30 | router.push("sign-in");
31 | } else {
32 | const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/checkout`, {
33 | method: "POST",
34 | body: JSON.stringify({ cartItems: cart.cartItems, customer }),
35 | });
36 | const data = await res.json();
37 | window.location.href = data.url;
38 | console.log(data);
39 | }
40 | } catch (err) {
41 | console.log("[checkout_POST]", err);
42 | }
43 | };
44 |
45 | return (
46 |
47 |
48 |
Shopping Cart
49 |
50 |
51 | {cart.cartItems.length === 0 ? (
52 |
No item in cart
53 | ) : (
54 |
55 | {cart.cartItems.map((cartItem) => (
56 |
57 |
58 |
65 |
66 |
{cartItem.item.title}
67 | {cartItem.color && (
68 |
{cartItem.color}
69 | )}
70 | {cartItem.size && (
71 |
{cartItem.size}
72 | )}
73 |
${cartItem.item.price}
74 |
75 |
76 |
77 |
78 |
cart.decreaseQuantity(cartItem.item._id)}
81 | />
82 | {cartItem.quantity}
83 | cart.increaseQuantity(cartItem.item._id)}
86 | />
87 |
88 |
89 |
cart.removeItem(cartItem.item._id)}
92 | />
93 |
94 | ))}
95 |
96 | )}
97 |
98 |
99 |
100 |
101 | Summary{" "}
102 | {`(${cart.cartItems.length} ${
103 | cart.cartItems.length > 1 ? "items" : "item"
104 | })`}
105 |
106 |
107 | Total Amount
108 | $ {totalRounded}
109 |
110 |
116 |
117 |
118 | );
119 | };
120 |
121 | export default Cart;
122 |
--------------------------------------------------------------------------------
/app/(root)/collections/[collectionId]/page.tsx:
--------------------------------------------------------------------------------
1 | import ProductCard from "@/components/ProductCard";
2 | import { getCollectionDetails } from "@/lib/actions/actions";
3 | import Image from "next/image";
4 | import React from "react";
5 |
6 | const CollectionDetails = async ({
7 | params,
8 | }: {
9 | params: { collectionId: string };
10 | }) => {
11 | const collectionDetails = await getCollectionDetails(params.collectionId);
12 |
13 | return (
14 |
15 |
22 |
{collectionDetails.title}
23 |
{collectionDetails.description}
24 |
25 | {collectionDetails.products.map((product: ProductType) => (
26 |
27 | ))}
28 |
29 |
30 | );
31 | };
32 |
33 | export default CollectionDetails;
34 |
35 | export const dynamic = "force-dynamic";
36 |
37 |
--------------------------------------------------------------------------------
/app/(root)/layout.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from "next";
2 | import { Inter } from "next/font/google";
3 | import { ClerkProvider } from "@clerk/nextjs";
4 |
5 | import "../globals.css";
6 | import Navbar from "@/components/Navbar";
7 | import ToasterProvider from "@/lib/providers/ToasterProvider";
8 |
9 | const inter = Inter({ subsets: ["latin"] });
10 |
11 | export const metadata: Metadata = {
12 | title: "Borcelle Store",
13 | description: "Borcelle Ecommerce Store",
14 | };
15 |
16 | export default function RootLayout({
17 | children,
18 | }: Readonly<{
19 | children: React.ReactNode;
20 | }>) {
21 | return (
22 |
23 |
24 |
25 |
26 |
27 | {children}
28 |
29 |
30 |
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/app/(root)/orders/page.tsx:
--------------------------------------------------------------------------------
1 | import { getOrders } from "@/lib/actions/actions";
2 |
3 | import { auth } from "@clerk/nextjs";
4 | import Image from "next/image";
5 |
6 | const Orders = async () => {
7 | const { userId } = auth();
8 | const orders = await getOrders(userId as string);
9 |
10 | console.log(orders[0].products);
11 |
12 | return (
13 |
14 |
Your Orders
15 | {!orders ||
16 | (orders.length === 0 && (
17 |
You have no orders yet.
18 | ))}
19 |
20 |
21 | {orders?.map((order: OrderType) => (
22 |
23 |
24 |
Order ID: {order._id}
25 |
26 | Total Amount: ${order.totalAmount}
27 |
28 |
29 |
30 |
31 | {order.products.map((orderItem: OrderItemType) => (
32 |
33 |
40 |
41 |
42 | Title:{" "}
43 |
44 | {orderItem.product.title}
45 |
46 |
47 | {orderItem.color && (
48 |
49 | Color:{" "}
50 |
51 | {orderItem.color}
52 |
53 |
54 | )}
55 | {orderItem.size && (
56 |
57 | Size:{" "}
58 |
59 | {orderItem.size}
60 |
61 |
62 | )}
63 |
64 | Unit price:{" "}
65 | {orderItem.product.price}
66 |
67 |
68 | Quantity:{" "}
69 | {orderItem.quantity}
70 |
71 |
72 |
73 | ))}
74 |
75 |
76 | ))}
77 |
78 |
79 | );
80 | };
81 |
82 | export default Orders;
83 |
84 | export const dynamic = "force-dynamic";
85 |
--------------------------------------------------------------------------------
/app/(root)/page.tsx:
--------------------------------------------------------------------------------
1 | import Collections from "@/components/Collections";
2 | import ProductList from "@/components/ProductList";
3 |
4 | import Image from "next/image";
5 |
6 | export default function Home() {
7 | return (
8 | <>
9 |
10 |
11 |
12 | >
13 | );
14 | }
15 |
16 | export const dynamic = "force-dynamic";
17 |
18 |
--------------------------------------------------------------------------------
/app/(root)/payment_success/page.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import useCart from "@/lib/hooks/useCart";
4 | import Link from "next/link";
5 | import { useEffect } from "react";
6 |
7 | const SuccessfulPayment = () => {
8 | const cart = useCart();
9 |
10 | useEffect(() => {
11 | cart.clearCart();
12 | }, []);
13 |
14 | return (
15 |
16 |
Successful Payment
17 |
Thank you for your purchase
18 |
22 | CONTINUE TO SHOPPING
23 |
24 |
25 | );
26 | };
27 |
28 | export default SuccessfulPayment;
29 |
--------------------------------------------------------------------------------
/app/(root)/products/[productId]/page.tsx:
--------------------------------------------------------------------------------
1 | import Gallery from "@/components/Gallery"
2 | import ProductCard from "@/components/ProductCard"
3 | import ProductInfo from "@/components/ProductInfo"
4 | import { getProductDetails, getRelatedProducts } from "@/lib/actions/actions"
5 |
6 | const ProductDetails = async ({ params }: { params: { productId: string }}) => {
7 | const productDetails = await getProductDetails(params.productId)
8 | const relatedProducts = await getRelatedProducts(params.productId)
9 |
10 | return (
11 | <>
12 |
16 |
17 |
18 |
Related Products
19 |
20 | {relatedProducts?.map((product: ProductType) => (
21 |
22 | ))}
23 |
24 |
25 | >
26 | )
27 | }
28 |
29 | export const dynamic = "force-dynamic";
30 |
31 | export default ProductDetails
--------------------------------------------------------------------------------
/app/(root)/search/[query]/page.tsx:
--------------------------------------------------------------------------------
1 | import ProductCard from '@/components/ProductCard'
2 | import { getSearchedProducts } from '@/lib/actions/actions'
3 |
4 | const SearchPage = async ({ params }: { params: { query: string }}) => {
5 | const searchedProducts = await getSearchedProducts(params.query)
6 |
7 | const decodedQuery = decodeURIComponent(params.query)
8 |
9 | return (
10 |
11 |
Search results for {decodedQuery}
12 | {!searchedProducts || searchedProducts.length === 0 && (
13 |
No result found
14 | )}
15 |
16 | {searchedProducts?.map((product: ProductType) => (
17 |
18 | ))}
19 |
20 |
21 | )
22 | }
23 |
24 | export const dynamic = "force-dynamic";
25 |
26 | export default SearchPage
--------------------------------------------------------------------------------
/app/(root)/wishlist/page.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import Loader from "@/components/Loader"
4 | import ProductCard from "@/components/ProductCard"
5 | import { getProductDetails } from "@/lib/actions/actions"
6 | import { useUser } from "@clerk/nextjs"
7 | import { use, useEffect, useState } from "react"
8 |
9 | const Wishlist = () => {
10 | const { user } = useUser()
11 |
12 | const [loading, setLoading] = useState(true)
13 | const [signedInUser, setSignedInUser] = useState(null)
14 | const [wishlist, setWishlist] = useState([])
15 |
16 | const getUser = async () => {
17 | try {
18 | const res = await fetch("/api/users")
19 | const data = await res.json()
20 | setSignedInUser(data)
21 | setLoading(false)
22 | } catch (err) {
23 | console.log("[users_GET", err)
24 | }
25 | }
26 |
27 | useEffect(() => {
28 | if (user) {
29 | getUser()
30 | }
31 | }, [user])
32 |
33 | const getWishlistProducts = async () => {
34 | setLoading(true)
35 |
36 | if (!signedInUser) return
37 |
38 | const wishlistProducts = await Promise.all(signedInUser.wishlist.map(async (productId) => {
39 | const res = await getProductDetails(productId)
40 | return res
41 | }))
42 |
43 | setWishlist(wishlistProducts)
44 | setLoading(false)
45 | }
46 |
47 | useEffect(() => {
48 | if (signedInUser) {
49 | getWishlistProducts()
50 | }
51 | }, [signedInUser])
52 |
53 | const updateSignedInUser = (updatedUser: UserType) => {
54 | setSignedInUser(updatedUser)
55 | }
56 |
57 |
58 | return loading ? : (
59 |
60 |
Your Wishlist
61 | {wishlist.length === 0 && (
62 |
No items in your wishlist
63 | )}
64 |
65 |
66 | {wishlist.map((product) => (
67 |
68 | ))}
69 |
70 |
71 | )
72 | }
73 |
74 | export const dynamic = "force-dynamic";
75 |
76 | export default Wishlist
--------------------------------------------------------------------------------
/app/api/users/route.ts:
--------------------------------------------------------------------------------
1 | import User from "@/lib/models/User";
2 | import { connectToDB } from "@/lib/mongoDB";
3 | import { auth } from "@clerk/nextjs";
4 |
5 | import { NextRequest, NextResponse } from "next/server";
6 |
7 | export const GET = async (req: NextRequest) => {
8 | try {
9 | const { userId } = auth()
10 |
11 | if (!userId) {
12 | return new NextResponse(JSON.stringify({ message: "Unauthorized" }), { status: 401 })
13 | }
14 |
15 | await connectToDB()
16 |
17 | let user = await User.findOne({ clerkId: userId })
18 |
19 | // When the user sign-in for the 1st, immediately we will create a new user for them
20 | if (!user) {
21 | user = await User.create({ clerkId: userId })
22 | await user.save()
23 | }
24 |
25 | return NextResponse.json(user, { status: 200 })
26 | } catch (err) {
27 | console.log("[users_GET]", err)
28 | return new NextResponse("Internal Server Error", { status: 500 })
29 | }
30 | }
--------------------------------------------------------------------------------
/app/api/users/wishlist/route.ts:
--------------------------------------------------------------------------------
1 | import User from "@/lib/models/User";
2 | import { connectToDB } from "@/lib/mongoDB";
3 |
4 | import { auth } from "@clerk/nextjs";
5 | import { revalidatePath } from "next/cache";
6 | import { NextRequest, NextResponse } from "next/server";
7 |
8 | export const POST = async (req: NextRequest) => {
9 | try {
10 | const { userId } = auth()
11 |
12 | if (!userId) {
13 | return new NextResponse("Unauthorized", { status: 401 })
14 | }
15 |
16 | await connectToDB()
17 |
18 | const user = await User.findOne({ clerkId: userId })
19 |
20 | if (!user) {
21 | return new NextResponse("User not found", { status: 404 })
22 | }
23 |
24 | const { productId } = await req.json()
25 |
26 | if (!productId) {
27 | return new NextResponse("Product Id required", { status: 400 })
28 | }
29 |
30 | const isLiked = user.wishlist.includes(productId)
31 |
32 | if (isLiked) {
33 | // Dislike
34 | user.wishlist = user.wishlist.filter((id: string) => id !== productId)
35 | } else {
36 | // Like
37 | user.wishlist.push(productId)
38 | }
39 |
40 | await user.save()
41 |
42 | return NextResponse.json(user, { status: 200 })
43 | } catch (err) {
44 | console.log("[wishlist_POST]", err);
45 | return new NextResponse("Internal Server Error", { status: 500 });
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phuc-mai/borcella_store/021882c465116f9c43becdf29fe0eef42778ddf2/app/favicon.ico
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | html,
6 | body,
7 | :root {
8 | height: 100%;
9 | }
--------------------------------------------------------------------------------
/components/Collections.tsx:
--------------------------------------------------------------------------------
1 | import { getCollections } from "@/lib/actions/actions";
2 | import Image from "next/image";
3 | import Link from "next/link";
4 |
5 | const Collections = async () => {
6 | const collections = await getCollections();
7 |
8 | return (
9 |
10 |
Collections
11 | {!collections || collections.length === 0 ? (
12 |
No collections found
13 | ) : (
14 |
15 | {collections.map((collection: CollectionType) => (
16 |
17 |
25 |
26 | ))}
27 |
28 | )}
29 |
30 | );
31 | };
32 |
33 | export default Collections;
34 |
--------------------------------------------------------------------------------
/components/Gallery.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import Image from "next/image";
4 | import React, { useState } from "react";
5 |
6 | const Gallery = ({ productMedia }: { productMedia: string[] }) => {
7 | const [mainImage, setMainImage] = useState(productMedia[0]);
8 |
9 | return (
10 |
11 |
18 |
19 | {productMedia.map((image, index) => (
20 | setMainImage(image)}
28 | />
29 | ))}
30 |
31 |
32 | );
33 | };
34 |
35 | export default Gallery;
36 |
--------------------------------------------------------------------------------
/components/HeartFavorite.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useUser } from "@clerk/nextjs";
4 | import { Heart } from "lucide-react";
5 | import { useRouter } from "next/navigation";
6 | import { useEffect, useState } from "react";
7 |
8 | interface HeartFavoriteProps {
9 | product: ProductType;
10 | updateSignedInUser?: (updatedUser: UserType) => void;
11 | }
12 |
13 | const HeartFavorite = ({ product, updateSignedInUser }: HeartFavoriteProps) => {
14 | const router = useRouter();
15 | const { user } = useUser();
16 |
17 | const [loading, setLoading] = useState(false);
18 | const [isLiked, setIsLiked] = useState(false);
19 |
20 | const getUser = async () => {
21 | try {
22 | setLoading(true);
23 | const res = await fetch("/api/users");
24 | const data = await res.json();
25 | setIsLiked(data.wishlist.includes(product._id));
26 | setLoading(false);
27 | } catch (err) {
28 | console.log("[users_GET]", err);
29 | }
30 | };
31 |
32 | useEffect(() => {
33 | if (user) {
34 | getUser();
35 | }
36 | }, [user]);
37 |
38 | const handleLike = async (e: React.MouseEvent) => {
39 | e.preventDefault();
40 | try {
41 | if (!user) {
42 | router.push("/sign-in");
43 | return;
44 | } else {
45 | const res = await fetch("/api/users/wishlist", {
46 | method: "POST",
47 | body: JSON.stringify({ productId: product._id }),
48 | });
49 | const updatedUser = await res.json();
50 | setIsLiked(updatedUser.wishlist.includes(product._id));
51 | updateSignedInUser && updateSignedInUser(updatedUser);
52 | }
53 | } catch (err) {
54 | console.log("[wishlist_POST]", err);
55 | }
56 | };
57 |
58 | return (
59 |
62 | );
63 | };
64 |
65 | export default HeartFavorite;
66 |
--------------------------------------------------------------------------------
/components/Loader.tsx:
--------------------------------------------------------------------------------
1 | const Loader = () => {
2 | return (
3 |
6 | );
7 | }
8 |
9 | export default Loader;
--------------------------------------------------------------------------------
/components/Navbar.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import useCart from "@/lib/hooks/useCart";
4 |
5 | import { UserButton, useUser } from "@clerk/nextjs";
6 | import { CircleUserRound, Menu, Search, ShoppingCart } from "lucide-react";
7 | import Image from "next/image";
8 | import Link from "next/link";
9 | import { usePathname, useRouter } from "next/navigation";
10 | import { useState } from "react";
11 |
12 | const Navbar = () => {
13 | const pathname = usePathname();
14 | const router = useRouter();
15 | const { user } = useUser();
16 | const cart = useCart();
17 |
18 | const [dropdownMenu, setDropdownMenu] = useState(false);
19 | const [query, setQuery] = useState("");
20 |
21 | return (
22 |
23 |
24 |
25 |
26 |
27 |
28 |
34 | Home
35 |
36 |
42 | Wishlist
43 |
44 |
50 | Orders
51 |
52 |
53 |
54 |
55 | setQuery(e.target.value)}
60 | />
61 |
67 |
68 |
69 |
70 |
74 |
75 |
Cart ({cart.cartItems.length})
76 |
77 |
78 |
118 |
119 | );
120 | };
121 |
122 | export default Navbar;
123 |
--------------------------------------------------------------------------------
/components/ProductCard.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import Image from "next/image";
4 | import Link from "next/link";
5 | import HeartFavorite from "./HeartFavorite";
6 |
7 | interface ProductCardProps {
8 | product: ProductType;
9 | updateSignedInUser?: (updatedUser: UserType) => void;
10 | }
11 |
12 | const ProductCard = ({ product, updateSignedInUser }: ProductCardProps ) => {
13 | return (
14 |
18 |
25 |
26 |
{product.title}
27 |
{product.category}
28 |
29 |
30 |
${product.price}
31 |
32 |
33 |
34 | );
35 | };
36 |
37 | export default ProductCard;
38 |
--------------------------------------------------------------------------------
/components/ProductInfo.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useState } from "react";
4 | import HeartFavorite from "./HeartFavorite";
5 | import { MinusCircle, PlusCircle } from "lucide-react";
6 |
7 | import useCart from "@/lib/hooks/useCart";
8 |
9 | const ProductInfo = ({ productInfo }: { productInfo: ProductType }) => {
10 | const [selectedColor, setSelectedColor] = useState(
11 | productInfo.colors[0]
12 | );
13 | const [selectedSize, setSelectedSize] = useState(
14 | productInfo.sizes[0]
15 | );
16 | const [quantity, setQuantity] = useState(1);
17 |
18 | const cart = useCart();
19 |
20 | return (
21 |
22 |
23 |
{productInfo.title}
24 |
25 |
26 |
27 |
28 |
Category:
29 |
{productInfo.category}
30 |
31 |
32 |
$ {productInfo.price}
33 |
34 |
35 |
Description:
36 |
{productInfo.description}
37 |
38 |
39 | {productInfo.colors.length > 0 && (
40 |
41 |
Colors:
42 |
43 | {productInfo.colors.map((color, index) => (
44 |
setSelectedColor(color)}
50 | >
51 | {color}
52 |
53 | ))}
54 |
55 |
56 | )}
57 |
58 | {productInfo.sizes.length > 0 && (
59 |
60 |
Sizes:
61 |
62 | {productInfo.sizes.map((size, index) => (
63 |
setSelectedSize(size)}
69 | >
70 | {size}
71 |
72 | ))}
73 |
74 |
75 | )}
76 |
77 |
78 |
Quantity:
79 |
80 |
quantity > 1 && setQuantity(quantity - 1)}
83 | />
84 | {quantity}
85 | setQuantity(quantity + 1)}
88 | />
89 |
90 |
91 |
92 |
105 |
106 | );
107 | };
108 |
109 | export default ProductInfo;
110 |
--------------------------------------------------------------------------------
/components/ProductList.tsx:
--------------------------------------------------------------------------------
1 | import { getProducts } from "@/lib/actions/actions";
2 | import ProductCard from "./ProductCard";
3 |
4 | const ProductList = async () => {
5 | const products = await getProducts();
6 |
7 | return (
8 |
9 |
Products
10 | {!products || products.length === 0 ? (
11 |
No products found
12 | ) : (
13 |
14 | {products.map((product: ProductType) => (
15 |
16 | ))}
17 |
18 | )}
19 |
20 | );
21 | };
22 |
23 | export default ProductList;
24 |
--------------------------------------------------------------------------------
/lib/actions/actions.ts:
--------------------------------------------------------------------------------
1 | export const getCollections = async () => {
2 | const collections = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/collections`)
3 | return await collections.json()
4 | }
5 |
6 | export const getCollectionDetails = async (collectionId: string) => {
7 | const collection = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/collections/${collectionId}`)
8 | return await collection.json()
9 | }
10 |
11 | export const getProducts = async () => {
12 | const products = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/products`)
13 | return await products.json()
14 | }
15 |
16 | export const getProductDetails = async (productId: string) => {
17 | const product = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/products/${productId}`)
18 | return await product.json()
19 | }
20 |
21 | export const getSearchedProducts = async (query: string) => {
22 | const searchedProducts = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/search/${query}`)
23 | return await searchedProducts.json()
24 | }
25 |
26 | export const getOrders = async (customerId: string) => {
27 | const orders = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/orders/customers/${customerId}`)
28 | return await orders.json()
29 | }
30 |
31 | export const getRelatedProducts = async (productId: string) => {
32 | const relatedProducts = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/products/${productId}/related`)
33 | return await relatedProducts.json()
34 | }
--------------------------------------------------------------------------------
/lib/hooks/useCart.tsx:
--------------------------------------------------------------------------------
1 | import { create } from "zustand";
2 | import { toast } from "react-hot-toast";
3 | import { persist, createJSONStorage } from "zustand/middleware";
4 |
5 | interface CartItem {
6 | item: ProductType;
7 | quantity: number;
8 | color?: string; // ? means optional
9 | size?: string; // ? means optional
10 | }
11 |
12 | interface CartStore {
13 | cartItems: CartItem[];
14 | addItem: (item: CartItem) => void;
15 | removeItem: (idToRemove: string) => void;
16 | increaseQuantity: (idToIncrease: string) => void;
17 | decreaseQuantity: (idToDecrease: string) => void;
18 | clearCart: () => void;
19 | }
20 |
21 | const useCart = create(
22 | persist(
23 | (set, get) => ({
24 | cartItems: [],
25 | addItem: (data: CartItem) => {
26 | const { item, quantity, color, size } = data;
27 | const currentItems = get().cartItems; // all the items already in cart
28 | const isExisting = currentItems.find(
29 | (cartItem) => cartItem.item._id === item._id
30 | );
31 |
32 | if (isExisting) {
33 | return toast("Item already in cart");
34 | }
35 |
36 | set({ cartItems: [...currentItems, { item, quantity, color, size }] });
37 | toast.success("Item added to cart", { icon: "🛒" });
38 | },
39 | removeItem: (idToRemove: String) => {
40 | const newCartItems = get().cartItems.filter(
41 | (cartItem) => cartItem.item._id !== idToRemove
42 | );
43 | set({ cartItems: newCartItems });
44 | toast.success("Item removed from cart");
45 | },
46 | increaseQuantity: (idToIncrease: String) => {
47 | const newCartItems = get().cartItems.map((cartItem) =>
48 | cartItem.item._id === idToIncrease
49 | ? { ...cartItem, quantity: cartItem.quantity + 1 }
50 | : cartItem
51 | );
52 | set({ cartItems: newCartItems });
53 | toast.success("Item quantity increased");
54 | },
55 | decreaseQuantity: (idToDecrease: String) => {
56 | const newCartItems = get().cartItems.map((cartItem) =>
57 | cartItem.item._id === idToDecrease
58 | ? { ...cartItem, quantity: cartItem.quantity - 1 }
59 | : cartItem
60 | );
61 | set({ cartItems: newCartItems });
62 | toast.success("Item quantity decreased");
63 | },
64 | clearCart: () => set({ cartItems: [] }),
65 | }),
66 | {
67 | name: "cart-storage",
68 | storage: createJSONStorage(() => localStorage),
69 | }
70 | )
71 | );
72 |
73 | export default useCart;
74 |
75 |
--------------------------------------------------------------------------------
/lib/models/User.ts:
--------------------------------------------------------------------------------
1 | import mongoose from "mongoose";
2 |
3 | const userSchema = new mongoose.Schema({
4 | clerkId: String,
5 | wishlist: {
6 | type: Array,
7 | default: []
8 | },
9 | createdAt: {
10 | type: Date,
11 | default: Date.now
12 | },
13 | updatedAt: {
14 | type: Date,
15 | default: Date.now
16 | }
17 | });
18 |
19 | const User = mongoose.models.User || mongoose.model("User", userSchema);
20 |
21 | export default User;
--------------------------------------------------------------------------------
/lib/mongoDB.ts:
--------------------------------------------------------------------------------
1 | import mongoose from "mongoose";
2 |
3 | let isConnected: boolean = false;
4 |
5 | export const connectToDB = async (): Promise => {
6 | mongoose.set("strictQuery", true)
7 |
8 | if (isConnected) {
9 | console.log("MongoDB is already connected");
10 | return;
11 | }
12 |
13 | try {
14 | await mongoose.connect(process.env.MONGODB_URL || "", {
15 | dbName: "Borcelle_Store"
16 | })
17 |
18 | isConnected = true;
19 | console.log("MongoDB is connected");
20 | } catch (err) {
21 | console.log(err)
22 | }
23 | }
--------------------------------------------------------------------------------
/lib/providers/ToasterProvider.tsx:
--------------------------------------------------------------------------------
1 | import { Toaster } from "react-hot-toast";
2 |
3 | const ToasterProvider = () => {
4 | return ;
5 | }
6 |
7 | export default ToasterProvider;
--------------------------------------------------------------------------------
/lib/types.d.ts:
--------------------------------------------------------------------------------
1 | type CollectionType = {
2 | _id: string;
3 | title: string;
4 | products: number;
5 | image: string;
6 | };
7 |
8 | type ProductType = {
9 | _id: string;
10 | title: string;
11 | description: string;
12 | media: [string];
13 | category: string;
14 | collections: [string];
15 | tags: [string];
16 | price: number;
17 | cost: number;
18 | sizes: [string];
19 | colors: [string];
20 | createdAt: string;
21 | updatedAt: string;
22 | };
23 |
24 | type UserType = {
25 | clerkId: string;
26 | wishlist: [string];
27 | createdAt: string;
28 | updatedAt: string;
29 | };
30 |
31 | type OrderType = {
32 | shippingAddress: Object;
33 | _id: string;
34 | customerClerkId: string;
35 | products: [OrderItemType]
36 | shippingRate: string;
37 | totalAmount: number
38 | }
39 |
40 | type OrderItemType = {
41 | product: ProductType;
42 | color: string;
43 | size: string;
44 | quantity: number;
45 | _id: string;
46 | }
--------------------------------------------------------------------------------
/middleware.ts:
--------------------------------------------------------------------------------
1 | import { authMiddleware } from "@clerk/nextjs";
2 |
3 | export default authMiddleware({
4 | publicRoutes: ["/:path*"]
5 | });
6 |
7 | export const config = {
8 | matcher: ["/((?!.+\\.[\\w]+$|_next).*)", "/", "/(api|trpc)(.*)"],
9 | };
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | images: {
4 | remotePatterns: [
5 | {
6 | hostname: "res.cloudinary.com",
7 | },
8 | ],
9 | },
10 | };
11 |
12 | export default nextConfig;
13 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "borcella_store",
3 | "version": "0.1.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "borcella_store",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "@clerk/nextjs": "^4.29.7",
12 | "@stripe/stripe-js": "^3.0.6",
13 | "lucide-react": "^0.341.0",
14 | "mongoose": "^8.2.0",
15 | "next": "14.1.0",
16 | "react": "^18",
17 | "react-dom": "^18",
18 | "react-hot-toast": "^2.4.1",
19 | "stripe": "^14.18.0",
20 | "tailwind-scrollbar-hide": "^1.1.7",
21 | "zustand": "^4.5.1"
22 | },
23 | "devDependencies": {
24 | "@types/node": "^20",
25 | "@types/react": "^18",
26 | "@types/react-dom": "^18",
27 | "autoprefixer": "^10.0.1",
28 | "postcss": "^8",
29 | "tailwindcss": "^3.3.0",
30 | "typescript": "^5"
31 | }
32 | },
33 | "node_modules/@alloc/quick-lru": {
34 | "version": "5.2.0",
35 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
36 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
37 | "dev": true,
38 | "engines": {
39 | "node": ">=10"
40 | },
41 | "funding": {
42 | "url": "https://github.com/sponsors/sindresorhus"
43 | }
44 | },
45 | "node_modules/@clerk/backend": {
46 | "version": "0.38.1",
47 | "resolved": "https://registry.npmjs.org/@clerk/backend/-/backend-0.38.1.tgz",
48 | "integrity": "sha512-Nnr+j2V0RwFp/CFjlp7VenGPACilhAVD2j1c49fxjQUuAWeLd/z/5efb9mp7kgZup8oxpOHoMDjO2ndWY4rPqA==",
49 | "dependencies": {
50 | "@clerk/shared": "1.3.1",
51 | "@clerk/types": "3.62.0",
52 | "@peculiar/webcrypto": "1.4.1",
53 | "@types/node": "16.18.6",
54 | "cookie": "0.5.0",
55 | "deepmerge": "4.2.2",
56 | "node-fetch-native": "1.0.1",
57 | "snakecase-keys": "5.4.4",
58 | "tslib": "2.4.1"
59 | },
60 | "engines": {
61 | "node": ">=14"
62 | }
63 | },
64 | "node_modules/@clerk/backend/node_modules/@types/node": {
65 | "version": "16.18.6",
66 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.6.tgz",
67 | "integrity": "sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA=="
68 | },
69 | "node_modules/@clerk/backend/node_modules/tslib": {
70 | "version": "2.4.1",
71 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
72 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
73 | },
74 | "node_modules/@clerk/clerk-react": {
75 | "version": "4.30.5",
76 | "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-4.30.5.tgz",
77 | "integrity": "sha512-jWSbgjWW3ny+ctQKpz/c8CwascliDtaa/8FyHX7tqKlV7vFeR9N/AjaZIUKHrbeGpRk+b/RM2xHLoZS4nZ4V6A==",
78 | "dependencies": {
79 | "@clerk/shared": "1.3.1",
80 | "@clerk/types": "3.62.0",
81 | "tslib": "2.4.1"
82 | },
83 | "engines": {
84 | "node": ">=14"
85 | },
86 | "peerDependencies": {
87 | "react": ">=16"
88 | }
89 | },
90 | "node_modules/@clerk/clerk-react/node_modules/tslib": {
91 | "version": "2.4.1",
92 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
93 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
94 | },
95 | "node_modules/@clerk/clerk-sdk-node": {
96 | "version": "4.13.9",
97 | "resolved": "https://registry.npmjs.org/@clerk/clerk-sdk-node/-/clerk-sdk-node-4.13.9.tgz",
98 | "integrity": "sha512-SRATpmPcN5IkdewasiJyvSoKNnNnk+Igb/tpjNV6hM9zS3tbWwJx/haUtR76tTjmloUQemVBl5oVr0hnZTq3kg==",
99 | "dependencies": {
100 | "@clerk/backend": "0.38.1",
101 | "@clerk/shared": "1.3.1",
102 | "@clerk/types": "3.62.0",
103 | "@types/cookies": "0.7.7",
104 | "@types/express": "4.17.14",
105 | "@types/node-fetch": "2.6.2",
106 | "camelcase-keys": "6.2.2",
107 | "snakecase-keys": "3.2.1",
108 | "tslib": "2.4.1"
109 | },
110 | "engines": {
111 | "node": ">=14"
112 | }
113 | },
114 | "node_modules/@clerk/clerk-sdk-node/node_modules/snakecase-keys": {
115 | "version": "3.2.1",
116 | "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-3.2.1.tgz",
117 | "integrity": "sha512-CjU5pyRfwOtaOITYv5C8DzpZ8XA/ieRsDpr93HI2r6e3YInC6moZpSQbmUtg8cTk58tq2x3jcG2gv+p1IZGmMA==",
118 | "dependencies": {
119 | "map-obj": "^4.1.0",
120 | "to-snake-case": "^1.0.0"
121 | },
122 | "engines": {
123 | "node": ">=8"
124 | }
125 | },
126 | "node_modules/@clerk/clerk-sdk-node/node_modules/tslib": {
127 | "version": "2.4.1",
128 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
129 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
130 | },
131 | "node_modules/@clerk/nextjs": {
132 | "version": "4.29.7",
133 | "resolved": "https://registry.npmjs.org/@clerk/nextjs/-/nextjs-4.29.7.tgz",
134 | "integrity": "sha512-tPvIp4GXCsjcKankLRpPPQGDWmpmlB2tm+p656/OUUmzPMeDnk5Euc86HjSk+5C9BAHVatrveRth6fHa4yzNhQ==",
135 | "dependencies": {
136 | "@clerk/backend": "0.38.1",
137 | "@clerk/clerk-react": "4.30.5",
138 | "@clerk/clerk-sdk-node": "4.13.9",
139 | "@clerk/shared": "1.3.1",
140 | "@clerk/types": "3.62.0",
141 | "path-to-regexp": "6.2.1",
142 | "tslib": "2.4.1"
143 | },
144 | "engines": {
145 | "node": ">=14"
146 | },
147 | "peerDependencies": {
148 | "next": ">=10",
149 | "react": "^17.0.2 || ^18.0.0-0",
150 | "react-dom": "^17.0.2 || ^18.0.0-0"
151 | }
152 | },
153 | "node_modules/@clerk/nextjs/node_modules/tslib": {
154 | "version": "2.4.1",
155 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
156 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
157 | },
158 | "node_modules/@clerk/shared": {
159 | "version": "1.3.1",
160 | "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-1.3.1.tgz",
161 | "integrity": "sha512-nzv4+uA90I/eQp55zfK9a1Po9VgCYlzlNhuZnKqyRsPyJ38l4gpIf3B3qSHHdN0+MTx9cWGFrik1CnpftdOBXQ==",
162 | "dependencies": {
163 | "glob-to-regexp": "0.4.1",
164 | "js-cookie": "3.0.1",
165 | "swr": "2.2.0"
166 | },
167 | "peerDependencies": {
168 | "react": ">=16"
169 | },
170 | "peerDependenciesMeta": {
171 | "react": {
172 | "optional": true
173 | }
174 | }
175 | },
176 | "node_modules/@clerk/shared/node_modules/swr": {
177 | "version": "2.2.0",
178 | "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.0.tgz",
179 | "integrity": "sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==",
180 | "dependencies": {
181 | "use-sync-external-store": "^1.2.0"
182 | },
183 | "peerDependencies": {
184 | "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
185 | }
186 | },
187 | "node_modules/@clerk/types": {
188 | "version": "3.62.0",
189 | "resolved": "https://registry.npmjs.org/@clerk/types/-/types-3.62.0.tgz",
190 | "integrity": "sha512-rjtdPqNJtfayCrqOCi20i46rw7X5yzAiOoh0Dzl7KX8kdBWQn06UxpgREPEp/3gFS2imVFRyXtx+fUGRwOGjaw==",
191 | "dependencies": {
192 | "csstype": "3.1.1"
193 | },
194 | "engines": {
195 | "node": ">=14"
196 | }
197 | },
198 | "node_modules/@clerk/types/node_modules/csstype": {
199 | "version": "3.1.1",
200 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
201 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
202 | },
203 | "node_modules/@isaacs/cliui": {
204 | "version": "8.0.2",
205 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
206 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
207 | "dev": true,
208 | "dependencies": {
209 | "string-width": "^5.1.2",
210 | "string-width-cjs": "npm:string-width@^4.2.0",
211 | "strip-ansi": "^7.0.1",
212 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
213 | "wrap-ansi": "^8.1.0",
214 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
215 | },
216 | "engines": {
217 | "node": ">=12"
218 | }
219 | },
220 | "node_modules/@jridgewell/gen-mapping": {
221 | "version": "0.3.4",
222 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz",
223 | "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==",
224 | "dev": true,
225 | "dependencies": {
226 | "@jridgewell/set-array": "^1.0.1",
227 | "@jridgewell/sourcemap-codec": "^1.4.10",
228 | "@jridgewell/trace-mapping": "^0.3.9"
229 | },
230 | "engines": {
231 | "node": ">=6.0.0"
232 | }
233 | },
234 | "node_modules/@jridgewell/resolve-uri": {
235 | "version": "3.1.2",
236 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
237 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
238 | "dev": true,
239 | "engines": {
240 | "node": ">=6.0.0"
241 | }
242 | },
243 | "node_modules/@jridgewell/set-array": {
244 | "version": "1.1.2",
245 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
246 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
247 | "dev": true,
248 | "engines": {
249 | "node": ">=6.0.0"
250 | }
251 | },
252 | "node_modules/@jridgewell/sourcemap-codec": {
253 | "version": "1.4.15",
254 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
255 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
256 | "dev": true
257 | },
258 | "node_modules/@jridgewell/trace-mapping": {
259 | "version": "0.3.23",
260 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz",
261 | "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==",
262 | "dev": true,
263 | "dependencies": {
264 | "@jridgewell/resolve-uri": "^3.1.0",
265 | "@jridgewell/sourcemap-codec": "^1.4.14"
266 | }
267 | },
268 | "node_modules/@mongodb-js/saslprep": {
269 | "version": "1.1.4",
270 | "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz",
271 | "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==",
272 | "dependencies": {
273 | "sparse-bitfield": "^3.0.3"
274 | }
275 | },
276 | "node_modules/@next/env": {
277 | "version": "14.1.0",
278 | "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz",
279 | "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw=="
280 | },
281 | "node_modules/@next/swc-darwin-arm64": {
282 | "version": "14.1.0",
283 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz",
284 | "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==",
285 | "cpu": [
286 | "arm64"
287 | ],
288 | "optional": true,
289 | "os": [
290 | "darwin"
291 | ],
292 | "engines": {
293 | "node": ">= 10"
294 | }
295 | },
296 | "node_modules/@next/swc-darwin-x64": {
297 | "version": "14.1.0",
298 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz",
299 | "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==",
300 | "cpu": [
301 | "x64"
302 | ],
303 | "optional": true,
304 | "os": [
305 | "darwin"
306 | ],
307 | "engines": {
308 | "node": ">= 10"
309 | }
310 | },
311 | "node_modules/@next/swc-linux-arm64-gnu": {
312 | "version": "14.1.0",
313 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz",
314 | "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==",
315 | "cpu": [
316 | "arm64"
317 | ],
318 | "optional": true,
319 | "os": [
320 | "linux"
321 | ],
322 | "engines": {
323 | "node": ">= 10"
324 | }
325 | },
326 | "node_modules/@next/swc-linux-arm64-musl": {
327 | "version": "14.1.0",
328 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz",
329 | "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==",
330 | "cpu": [
331 | "arm64"
332 | ],
333 | "optional": true,
334 | "os": [
335 | "linux"
336 | ],
337 | "engines": {
338 | "node": ">= 10"
339 | }
340 | },
341 | "node_modules/@next/swc-linux-x64-gnu": {
342 | "version": "14.1.0",
343 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz",
344 | "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==",
345 | "cpu": [
346 | "x64"
347 | ],
348 | "optional": true,
349 | "os": [
350 | "linux"
351 | ],
352 | "engines": {
353 | "node": ">= 10"
354 | }
355 | },
356 | "node_modules/@next/swc-linux-x64-musl": {
357 | "version": "14.1.0",
358 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz",
359 | "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==",
360 | "cpu": [
361 | "x64"
362 | ],
363 | "optional": true,
364 | "os": [
365 | "linux"
366 | ],
367 | "engines": {
368 | "node": ">= 10"
369 | }
370 | },
371 | "node_modules/@next/swc-win32-arm64-msvc": {
372 | "version": "14.1.0",
373 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz",
374 | "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==",
375 | "cpu": [
376 | "arm64"
377 | ],
378 | "optional": true,
379 | "os": [
380 | "win32"
381 | ],
382 | "engines": {
383 | "node": ">= 10"
384 | }
385 | },
386 | "node_modules/@next/swc-win32-ia32-msvc": {
387 | "version": "14.1.0",
388 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz",
389 | "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==",
390 | "cpu": [
391 | "ia32"
392 | ],
393 | "optional": true,
394 | "os": [
395 | "win32"
396 | ],
397 | "engines": {
398 | "node": ">= 10"
399 | }
400 | },
401 | "node_modules/@next/swc-win32-x64-msvc": {
402 | "version": "14.1.0",
403 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz",
404 | "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==",
405 | "cpu": [
406 | "x64"
407 | ],
408 | "optional": true,
409 | "os": [
410 | "win32"
411 | ],
412 | "engines": {
413 | "node": ">= 10"
414 | }
415 | },
416 | "node_modules/@nodelib/fs.scandir": {
417 | "version": "2.1.5",
418 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
419 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
420 | "dev": true,
421 | "dependencies": {
422 | "@nodelib/fs.stat": "2.0.5",
423 | "run-parallel": "^1.1.9"
424 | },
425 | "engines": {
426 | "node": ">= 8"
427 | }
428 | },
429 | "node_modules/@nodelib/fs.stat": {
430 | "version": "2.0.5",
431 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
432 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
433 | "dev": true,
434 | "engines": {
435 | "node": ">= 8"
436 | }
437 | },
438 | "node_modules/@nodelib/fs.walk": {
439 | "version": "1.2.8",
440 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
441 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
442 | "dev": true,
443 | "dependencies": {
444 | "@nodelib/fs.scandir": "2.1.5",
445 | "fastq": "^1.6.0"
446 | },
447 | "engines": {
448 | "node": ">= 8"
449 | }
450 | },
451 | "node_modules/@peculiar/asn1-schema": {
452 | "version": "2.3.8",
453 | "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz",
454 | "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==",
455 | "dependencies": {
456 | "asn1js": "^3.0.5",
457 | "pvtsutils": "^1.3.5",
458 | "tslib": "^2.6.2"
459 | }
460 | },
461 | "node_modules/@peculiar/json-schema": {
462 | "version": "1.1.12",
463 | "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz",
464 | "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==",
465 | "dependencies": {
466 | "tslib": "^2.0.0"
467 | },
468 | "engines": {
469 | "node": ">=8.0.0"
470 | }
471 | },
472 | "node_modules/@peculiar/webcrypto": {
473 | "version": "1.4.1",
474 | "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.1.tgz",
475 | "integrity": "sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw==",
476 | "dependencies": {
477 | "@peculiar/asn1-schema": "^2.3.0",
478 | "@peculiar/json-schema": "^1.1.12",
479 | "pvtsutils": "^1.3.2",
480 | "tslib": "^2.4.1",
481 | "webcrypto-core": "^1.7.4"
482 | },
483 | "engines": {
484 | "node": ">=10.12.0"
485 | }
486 | },
487 | "node_modules/@pkgjs/parseargs": {
488 | "version": "0.11.0",
489 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
490 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
491 | "dev": true,
492 | "optional": true,
493 | "engines": {
494 | "node": ">=14"
495 | }
496 | },
497 | "node_modules/@stripe/stripe-js": {
498 | "version": "3.0.6",
499 | "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-3.0.6.tgz",
500 | "integrity": "sha512-Ef3A0/zvgKbiMdCPT+rZgQBQqhNZ66wuR6Eg2w9YUuqykcIFFKU4nYApBr05WTvInrge8GuOqY5acSDiv6DOjA==",
501 | "engines": {
502 | "node": ">=12.16"
503 | }
504 | },
505 | "node_modules/@swc/helpers": {
506 | "version": "0.5.2",
507 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
508 | "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
509 | "dependencies": {
510 | "tslib": "^2.4.0"
511 | }
512 | },
513 | "node_modules/@types/body-parser": {
514 | "version": "1.19.5",
515 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
516 | "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
517 | "dependencies": {
518 | "@types/connect": "*",
519 | "@types/node": "*"
520 | }
521 | },
522 | "node_modules/@types/connect": {
523 | "version": "3.4.38",
524 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
525 | "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
526 | "dependencies": {
527 | "@types/node": "*"
528 | }
529 | },
530 | "node_modules/@types/cookies": {
531 | "version": "0.7.7",
532 | "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz",
533 | "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==",
534 | "dependencies": {
535 | "@types/connect": "*",
536 | "@types/express": "*",
537 | "@types/keygrip": "*",
538 | "@types/node": "*"
539 | }
540 | },
541 | "node_modules/@types/express": {
542 | "version": "4.17.14",
543 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz",
544 | "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==",
545 | "dependencies": {
546 | "@types/body-parser": "*",
547 | "@types/express-serve-static-core": "^4.17.18",
548 | "@types/qs": "*",
549 | "@types/serve-static": "*"
550 | }
551 | },
552 | "node_modules/@types/express-serve-static-core": {
553 | "version": "4.17.43",
554 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz",
555 | "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==",
556 | "dependencies": {
557 | "@types/node": "*",
558 | "@types/qs": "*",
559 | "@types/range-parser": "*",
560 | "@types/send": "*"
561 | }
562 | },
563 | "node_modules/@types/http-errors": {
564 | "version": "2.0.4",
565 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
566 | "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="
567 | },
568 | "node_modules/@types/keygrip": {
569 | "version": "1.0.6",
570 | "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz",
571 | "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ=="
572 | },
573 | "node_modules/@types/mime": {
574 | "version": "1.3.5",
575 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
576 | "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
577 | },
578 | "node_modules/@types/node": {
579 | "version": "20.11.20",
580 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz",
581 | "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==",
582 | "dependencies": {
583 | "undici-types": "~5.26.4"
584 | }
585 | },
586 | "node_modules/@types/node-fetch": {
587 | "version": "2.6.2",
588 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz",
589 | "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==",
590 | "dependencies": {
591 | "@types/node": "*",
592 | "form-data": "^3.0.0"
593 | }
594 | },
595 | "node_modules/@types/prop-types": {
596 | "version": "15.7.11",
597 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
598 | "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
599 | "devOptional": true
600 | },
601 | "node_modules/@types/qs": {
602 | "version": "6.9.11",
603 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
604 | "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ=="
605 | },
606 | "node_modules/@types/range-parser": {
607 | "version": "1.2.7",
608 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
609 | "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="
610 | },
611 | "node_modules/@types/react": {
612 | "version": "18.2.59",
613 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.59.tgz",
614 | "integrity": "sha512-DE+F6BYEC8VtajY85Qr7mmhTd/79rJKIHCg99MU9SWPB4xvLb6D1za2vYflgZfmPqQVEr6UqJTnLXEwzpVPuOg==",
615 | "devOptional": true,
616 | "dependencies": {
617 | "@types/prop-types": "*",
618 | "@types/scheduler": "*",
619 | "csstype": "^3.0.2"
620 | }
621 | },
622 | "node_modules/@types/react-dom": {
623 | "version": "18.2.19",
624 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz",
625 | "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==",
626 | "dev": true,
627 | "dependencies": {
628 | "@types/react": "*"
629 | }
630 | },
631 | "node_modules/@types/scheduler": {
632 | "version": "0.16.8",
633 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
634 | "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
635 | "devOptional": true
636 | },
637 | "node_modules/@types/send": {
638 | "version": "0.17.4",
639 | "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
640 | "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
641 | "dependencies": {
642 | "@types/mime": "^1",
643 | "@types/node": "*"
644 | }
645 | },
646 | "node_modules/@types/serve-static": {
647 | "version": "1.15.5",
648 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
649 | "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
650 | "dependencies": {
651 | "@types/http-errors": "*",
652 | "@types/mime": "*",
653 | "@types/node": "*"
654 | }
655 | },
656 | "node_modules/@types/webidl-conversions": {
657 | "version": "7.0.3",
658 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
659 | "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
660 | },
661 | "node_modules/@types/whatwg-url": {
662 | "version": "11.0.4",
663 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz",
664 | "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==",
665 | "dependencies": {
666 | "@types/webidl-conversions": "*"
667 | }
668 | },
669 | "node_modules/ansi-regex": {
670 | "version": "6.0.1",
671 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
672 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
673 | "dev": true,
674 | "engines": {
675 | "node": ">=12"
676 | },
677 | "funding": {
678 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
679 | }
680 | },
681 | "node_modules/ansi-styles": {
682 | "version": "6.2.1",
683 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
684 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
685 | "dev": true,
686 | "engines": {
687 | "node": ">=12"
688 | },
689 | "funding": {
690 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
691 | }
692 | },
693 | "node_modules/any-promise": {
694 | "version": "1.3.0",
695 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
696 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
697 | "dev": true
698 | },
699 | "node_modules/anymatch": {
700 | "version": "3.1.3",
701 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
702 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
703 | "dev": true,
704 | "dependencies": {
705 | "normalize-path": "^3.0.0",
706 | "picomatch": "^2.0.4"
707 | },
708 | "engines": {
709 | "node": ">= 8"
710 | }
711 | },
712 | "node_modules/arg": {
713 | "version": "5.0.2",
714 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
715 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
716 | "dev": true
717 | },
718 | "node_modules/asn1js": {
719 | "version": "3.0.5",
720 | "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz",
721 | "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==",
722 | "dependencies": {
723 | "pvtsutils": "^1.3.2",
724 | "pvutils": "^1.1.3",
725 | "tslib": "^2.4.0"
726 | },
727 | "engines": {
728 | "node": ">=12.0.0"
729 | }
730 | },
731 | "node_modules/asynckit": {
732 | "version": "0.4.0",
733 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
734 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
735 | },
736 | "node_modules/autoprefixer": {
737 | "version": "10.4.17",
738 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz",
739 | "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==",
740 | "dev": true,
741 | "funding": [
742 | {
743 | "type": "opencollective",
744 | "url": "https://opencollective.com/postcss/"
745 | },
746 | {
747 | "type": "tidelift",
748 | "url": "https://tidelift.com/funding/github/npm/autoprefixer"
749 | },
750 | {
751 | "type": "github",
752 | "url": "https://github.com/sponsors/ai"
753 | }
754 | ],
755 | "dependencies": {
756 | "browserslist": "^4.22.2",
757 | "caniuse-lite": "^1.0.30001578",
758 | "fraction.js": "^4.3.7",
759 | "normalize-range": "^0.1.2",
760 | "picocolors": "^1.0.0",
761 | "postcss-value-parser": "^4.2.0"
762 | },
763 | "bin": {
764 | "autoprefixer": "bin/autoprefixer"
765 | },
766 | "engines": {
767 | "node": "^10 || ^12 || >=14"
768 | },
769 | "peerDependencies": {
770 | "postcss": "^8.1.0"
771 | }
772 | },
773 | "node_modules/balanced-match": {
774 | "version": "1.0.2",
775 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
776 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
777 | "dev": true
778 | },
779 | "node_modules/binary-extensions": {
780 | "version": "2.2.0",
781 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
782 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
783 | "dev": true,
784 | "engines": {
785 | "node": ">=8"
786 | }
787 | },
788 | "node_modules/brace-expansion": {
789 | "version": "2.0.1",
790 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
791 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
792 | "dev": true,
793 | "dependencies": {
794 | "balanced-match": "^1.0.0"
795 | }
796 | },
797 | "node_modules/braces": {
798 | "version": "3.0.2",
799 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
800 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
801 | "dev": true,
802 | "dependencies": {
803 | "fill-range": "^7.0.1"
804 | },
805 | "engines": {
806 | "node": ">=8"
807 | }
808 | },
809 | "node_modules/browserslist": {
810 | "version": "4.23.0",
811 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
812 | "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
813 | "dev": true,
814 | "funding": [
815 | {
816 | "type": "opencollective",
817 | "url": "https://opencollective.com/browserslist"
818 | },
819 | {
820 | "type": "tidelift",
821 | "url": "https://tidelift.com/funding/github/npm/browserslist"
822 | },
823 | {
824 | "type": "github",
825 | "url": "https://github.com/sponsors/ai"
826 | }
827 | ],
828 | "dependencies": {
829 | "caniuse-lite": "^1.0.30001587",
830 | "electron-to-chromium": "^1.4.668",
831 | "node-releases": "^2.0.14",
832 | "update-browserslist-db": "^1.0.13"
833 | },
834 | "bin": {
835 | "browserslist": "cli.js"
836 | },
837 | "engines": {
838 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
839 | }
840 | },
841 | "node_modules/bson": {
842 | "version": "6.3.0",
843 | "resolved": "https://registry.npmjs.org/bson/-/bson-6.3.0.tgz",
844 | "integrity": "sha512-balJfqwwTBddxfnidJZagCBPP/f48zj9Sdp3OJswREOgsJzHiQSaOIAtApSgDQFYgHqAvFkp53AFSqjMDZoTFw==",
845 | "engines": {
846 | "node": ">=16.20.1"
847 | }
848 | },
849 | "node_modules/busboy": {
850 | "version": "1.6.0",
851 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
852 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
853 | "dependencies": {
854 | "streamsearch": "^1.1.0"
855 | },
856 | "engines": {
857 | "node": ">=10.16.0"
858 | }
859 | },
860 | "node_modules/call-bind": {
861 | "version": "1.0.7",
862 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
863 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
864 | "dependencies": {
865 | "es-define-property": "^1.0.0",
866 | "es-errors": "^1.3.0",
867 | "function-bind": "^1.1.2",
868 | "get-intrinsic": "^1.2.4",
869 | "set-function-length": "^1.2.1"
870 | },
871 | "engines": {
872 | "node": ">= 0.4"
873 | },
874 | "funding": {
875 | "url": "https://github.com/sponsors/ljharb"
876 | }
877 | },
878 | "node_modules/camelcase": {
879 | "version": "5.3.1",
880 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
881 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
882 | "engines": {
883 | "node": ">=6"
884 | }
885 | },
886 | "node_modules/camelcase-css": {
887 | "version": "2.0.1",
888 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
889 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
890 | "dev": true,
891 | "engines": {
892 | "node": ">= 6"
893 | }
894 | },
895 | "node_modules/camelcase-keys": {
896 | "version": "6.2.2",
897 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
898 | "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
899 | "dependencies": {
900 | "camelcase": "^5.3.1",
901 | "map-obj": "^4.0.0",
902 | "quick-lru": "^4.0.1"
903 | },
904 | "engines": {
905 | "node": ">=8"
906 | },
907 | "funding": {
908 | "url": "https://github.com/sponsors/sindresorhus"
909 | }
910 | },
911 | "node_modules/caniuse-lite": {
912 | "version": "1.0.30001589",
913 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
914 | "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==",
915 | "funding": [
916 | {
917 | "type": "opencollective",
918 | "url": "https://opencollective.com/browserslist"
919 | },
920 | {
921 | "type": "tidelift",
922 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
923 | },
924 | {
925 | "type": "github",
926 | "url": "https://github.com/sponsors/ai"
927 | }
928 | ]
929 | },
930 | "node_modules/chokidar": {
931 | "version": "3.6.0",
932 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
933 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
934 | "dev": true,
935 | "dependencies": {
936 | "anymatch": "~3.1.2",
937 | "braces": "~3.0.2",
938 | "glob-parent": "~5.1.2",
939 | "is-binary-path": "~2.1.0",
940 | "is-glob": "~4.0.1",
941 | "normalize-path": "~3.0.0",
942 | "readdirp": "~3.6.0"
943 | },
944 | "engines": {
945 | "node": ">= 8.10.0"
946 | },
947 | "funding": {
948 | "url": "https://paulmillr.com/funding/"
949 | },
950 | "optionalDependencies": {
951 | "fsevents": "~2.3.2"
952 | }
953 | },
954 | "node_modules/chokidar/node_modules/glob-parent": {
955 | "version": "5.1.2",
956 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
957 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
958 | "dev": true,
959 | "dependencies": {
960 | "is-glob": "^4.0.1"
961 | },
962 | "engines": {
963 | "node": ">= 6"
964 | }
965 | },
966 | "node_modules/client-only": {
967 | "version": "0.0.1",
968 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
969 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
970 | },
971 | "node_modules/color-convert": {
972 | "version": "2.0.1",
973 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
974 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
975 | "dev": true,
976 | "dependencies": {
977 | "color-name": "~1.1.4"
978 | },
979 | "engines": {
980 | "node": ">=7.0.0"
981 | }
982 | },
983 | "node_modules/color-name": {
984 | "version": "1.1.4",
985 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
986 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
987 | "dev": true
988 | },
989 | "node_modules/combined-stream": {
990 | "version": "1.0.8",
991 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
992 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
993 | "dependencies": {
994 | "delayed-stream": "~1.0.0"
995 | },
996 | "engines": {
997 | "node": ">= 0.8"
998 | }
999 | },
1000 | "node_modules/commander": {
1001 | "version": "4.1.1",
1002 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1003 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1004 | "dev": true,
1005 | "engines": {
1006 | "node": ">= 6"
1007 | }
1008 | },
1009 | "node_modules/cookie": {
1010 | "version": "0.5.0",
1011 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
1012 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
1013 | "engines": {
1014 | "node": ">= 0.6"
1015 | }
1016 | },
1017 | "node_modules/cross-spawn": {
1018 | "version": "7.0.3",
1019 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1020 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1021 | "dev": true,
1022 | "dependencies": {
1023 | "path-key": "^3.1.0",
1024 | "shebang-command": "^2.0.0",
1025 | "which": "^2.0.1"
1026 | },
1027 | "engines": {
1028 | "node": ">= 8"
1029 | }
1030 | },
1031 | "node_modules/cssesc": {
1032 | "version": "3.0.0",
1033 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1034 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1035 | "dev": true,
1036 | "bin": {
1037 | "cssesc": "bin/cssesc"
1038 | },
1039 | "engines": {
1040 | "node": ">=4"
1041 | }
1042 | },
1043 | "node_modules/csstype": {
1044 | "version": "3.1.3",
1045 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1046 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
1047 | },
1048 | "node_modules/debug": {
1049 | "version": "4.3.4",
1050 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1051 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1052 | "dependencies": {
1053 | "ms": "2.1.2"
1054 | },
1055 | "engines": {
1056 | "node": ">=6.0"
1057 | },
1058 | "peerDependenciesMeta": {
1059 | "supports-color": {
1060 | "optional": true
1061 | }
1062 | }
1063 | },
1064 | "node_modules/debug/node_modules/ms": {
1065 | "version": "2.1.2",
1066 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1067 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1068 | },
1069 | "node_modules/deepmerge": {
1070 | "version": "4.2.2",
1071 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
1072 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
1073 | "engines": {
1074 | "node": ">=0.10.0"
1075 | }
1076 | },
1077 | "node_modules/define-data-property": {
1078 | "version": "1.1.4",
1079 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
1080 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
1081 | "dependencies": {
1082 | "es-define-property": "^1.0.0",
1083 | "es-errors": "^1.3.0",
1084 | "gopd": "^1.0.1"
1085 | },
1086 | "engines": {
1087 | "node": ">= 0.4"
1088 | },
1089 | "funding": {
1090 | "url": "https://github.com/sponsors/ljharb"
1091 | }
1092 | },
1093 | "node_modules/delayed-stream": {
1094 | "version": "1.0.0",
1095 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1096 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
1097 | "engines": {
1098 | "node": ">=0.4.0"
1099 | }
1100 | },
1101 | "node_modules/didyoumean": {
1102 | "version": "1.2.2",
1103 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1104 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1105 | "dev": true
1106 | },
1107 | "node_modules/dlv": {
1108 | "version": "1.1.3",
1109 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1110 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1111 | "dev": true
1112 | },
1113 | "node_modules/dot-case": {
1114 | "version": "3.0.4",
1115 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
1116 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
1117 | "dependencies": {
1118 | "no-case": "^3.0.4",
1119 | "tslib": "^2.0.3"
1120 | }
1121 | },
1122 | "node_modules/eastasianwidth": {
1123 | "version": "0.2.0",
1124 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1125 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
1126 | "dev": true
1127 | },
1128 | "node_modules/electron-to-chromium": {
1129 | "version": "1.4.682",
1130 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz",
1131 | "integrity": "sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA==",
1132 | "dev": true
1133 | },
1134 | "node_modules/emoji-regex": {
1135 | "version": "9.2.2",
1136 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1137 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1138 | "dev": true
1139 | },
1140 | "node_modules/es-define-property": {
1141 | "version": "1.0.0",
1142 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
1143 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
1144 | "dependencies": {
1145 | "get-intrinsic": "^1.2.4"
1146 | },
1147 | "engines": {
1148 | "node": ">= 0.4"
1149 | }
1150 | },
1151 | "node_modules/es-errors": {
1152 | "version": "1.3.0",
1153 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1154 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1155 | "engines": {
1156 | "node": ">= 0.4"
1157 | }
1158 | },
1159 | "node_modules/escalade": {
1160 | "version": "3.1.2",
1161 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
1162 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
1163 | "dev": true,
1164 | "engines": {
1165 | "node": ">=6"
1166 | }
1167 | },
1168 | "node_modules/fast-glob": {
1169 | "version": "3.3.2",
1170 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
1171 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
1172 | "dev": true,
1173 | "dependencies": {
1174 | "@nodelib/fs.stat": "^2.0.2",
1175 | "@nodelib/fs.walk": "^1.2.3",
1176 | "glob-parent": "^5.1.2",
1177 | "merge2": "^1.3.0",
1178 | "micromatch": "^4.0.4"
1179 | },
1180 | "engines": {
1181 | "node": ">=8.6.0"
1182 | }
1183 | },
1184 | "node_modules/fast-glob/node_modules/glob-parent": {
1185 | "version": "5.1.2",
1186 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1187 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1188 | "dev": true,
1189 | "dependencies": {
1190 | "is-glob": "^4.0.1"
1191 | },
1192 | "engines": {
1193 | "node": ">= 6"
1194 | }
1195 | },
1196 | "node_modules/fastq": {
1197 | "version": "1.17.1",
1198 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
1199 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
1200 | "dev": true,
1201 | "dependencies": {
1202 | "reusify": "^1.0.4"
1203 | }
1204 | },
1205 | "node_modules/fill-range": {
1206 | "version": "7.0.1",
1207 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1208 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1209 | "dev": true,
1210 | "dependencies": {
1211 | "to-regex-range": "^5.0.1"
1212 | },
1213 | "engines": {
1214 | "node": ">=8"
1215 | }
1216 | },
1217 | "node_modules/foreground-child": {
1218 | "version": "3.1.1",
1219 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
1220 | "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
1221 | "dev": true,
1222 | "dependencies": {
1223 | "cross-spawn": "^7.0.0",
1224 | "signal-exit": "^4.0.1"
1225 | },
1226 | "engines": {
1227 | "node": ">=14"
1228 | },
1229 | "funding": {
1230 | "url": "https://github.com/sponsors/isaacs"
1231 | }
1232 | },
1233 | "node_modules/form-data": {
1234 | "version": "3.0.1",
1235 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
1236 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
1237 | "dependencies": {
1238 | "asynckit": "^0.4.0",
1239 | "combined-stream": "^1.0.8",
1240 | "mime-types": "^2.1.12"
1241 | },
1242 | "engines": {
1243 | "node": ">= 6"
1244 | }
1245 | },
1246 | "node_modules/fraction.js": {
1247 | "version": "4.3.7",
1248 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
1249 | "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
1250 | "dev": true,
1251 | "engines": {
1252 | "node": "*"
1253 | },
1254 | "funding": {
1255 | "type": "patreon",
1256 | "url": "https://github.com/sponsors/rawify"
1257 | }
1258 | },
1259 | "node_modules/fsevents": {
1260 | "version": "2.3.3",
1261 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1262 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1263 | "dev": true,
1264 | "hasInstallScript": true,
1265 | "optional": true,
1266 | "os": [
1267 | "darwin"
1268 | ],
1269 | "engines": {
1270 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1271 | }
1272 | },
1273 | "node_modules/function-bind": {
1274 | "version": "1.1.2",
1275 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1276 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1277 | "funding": {
1278 | "url": "https://github.com/sponsors/ljharb"
1279 | }
1280 | },
1281 | "node_modules/get-intrinsic": {
1282 | "version": "1.2.4",
1283 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
1284 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
1285 | "dependencies": {
1286 | "es-errors": "^1.3.0",
1287 | "function-bind": "^1.1.2",
1288 | "has-proto": "^1.0.1",
1289 | "has-symbols": "^1.0.3",
1290 | "hasown": "^2.0.0"
1291 | },
1292 | "engines": {
1293 | "node": ">= 0.4"
1294 | },
1295 | "funding": {
1296 | "url": "https://github.com/sponsors/ljharb"
1297 | }
1298 | },
1299 | "node_modules/glob": {
1300 | "version": "10.3.10",
1301 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
1302 | "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
1303 | "dev": true,
1304 | "dependencies": {
1305 | "foreground-child": "^3.1.0",
1306 | "jackspeak": "^2.3.5",
1307 | "minimatch": "^9.0.1",
1308 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
1309 | "path-scurry": "^1.10.1"
1310 | },
1311 | "bin": {
1312 | "glob": "dist/esm/bin.mjs"
1313 | },
1314 | "engines": {
1315 | "node": ">=16 || 14 >=14.17"
1316 | },
1317 | "funding": {
1318 | "url": "https://github.com/sponsors/isaacs"
1319 | }
1320 | },
1321 | "node_modules/glob-parent": {
1322 | "version": "6.0.2",
1323 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1324 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1325 | "dev": true,
1326 | "dependencies": {
1327 | "is-glob": "^4.0.3"
1328 | },
1329 | "engines": {
1330 | "node": ">=10.13.0"
1331 | }
1332 | },
1333 | "node_modules/glob-to-regexp": {
1334 | "version": "0.4.1",
1335 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
1336 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
1337 | },
1338 | "node_modules/goober": {
1339 | "version": "2.1.14",
1340 | "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.14.tgz",
1341 | "integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==",
1342 | "peerDependencies": {
1343 | "csstype": "^3.0.10"
1344 | }
1345 | },
1346 | "node_modules/gopd": {
1347 | "version": "1.0.1",
1348 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1349 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1350 | "dependencies": {
1351 | "get-intrinsic": "^1.1.3"
1352 | },
1353 | "funding": {
1354 | "url": "https://github.com/sponsors/ljharb"
1355 | }
1356 | },
1357 | "node_modules/graceful-fs": {
1358 | "version": "4.2.11",
1359 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1360 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
1361 | },
1362 | "node_modules/has-property-descriptors": {
1363 | "version": "1.0.2",
1364 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
1365 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
1366 | "dependencies": {
1367 | "es-define-property": "^1.0.0"
1368 | },
1369 | "funding": {
1370 | "url": "https://github.com/sponsors/ljharb"
1371 | }
1372 | },
1373 | "node_modules/has-proto": {
1374 | "version": "1.0.3",
1375 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
1376 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
1377 | "engines": {
1378 | "node": ">= 0.4"
1379 | },
1380 | "funding": {
1381 | "url": "https://github.com/sponsors/ljharb"
1382 | }
1383 | },
1384 | "node_modules/has-symbols": {
1385 | "version": "1.0.3",
1386 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1387 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
1388 | "engines": {
1389 | "node": ">= 0.4"
1390 | },
1391 | "funding": {
1392 | "url": "https://github.com/sponsors/ljharb"
1393 | }
1394 | },
1395 | "node_modules/hasown": {
1396 | "version": "2.0.1",
1397 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
1398 | "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
1399 | "dependencies": {
1400 | "function-bind": "^1.1.2"
1401 | },
1402 | "engines": {
1403 | "node": ">= 0.4"
1404 | }
1405 | },
1406 | "node_modules/is-binary-path": {
1407 | "version": "2.1.0",
1408 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1409 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1410 | "dev": true,
1411 | "dependencies": {
1412 | "binary-extensions": "^2.0.0"
1413 | },
1414 | "engines": {
1415 | "node": ">=8"
1416 | }
1417 | },
1418 | "node_modules/is-core-module": {
1419 | "version": "2.13.1",
1420 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
1421 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
1422 | "dev": true,
1423 | "dependencies": {
1424 | "hasown": "^2.0.0"
1425 | },
1426 | "funding": {
1427 | "url": "https://github.com/sponsors/ljharb"
1428 | }
1429 | },
1430 | "node_modules/is-extglob": {
1431 | "version": "2.1.1",
1432 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1433 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1434 | "dev": true,
1435 | "engines": {
1436 | "node": ">=0.10.0"
1437 | }
1438 | },
1439 | "node_modules/is-fullwidth-code-point": {
1440 | "version": "3.0.0",
1441 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1442 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1443 | "dev": true,
1444 | "engines": {
1445 | "node": ">=8"
1446 | }
1447 | },
1448 | "node_modules/is-glob": {
1449 | "version": "4.0.3",
1450 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1451 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1452 | "dev": true,
1453 | "dependencies": {
1454 | "is-extglob": "^2.1.1"
1455 | },
1456 | "engines": {
1457 | "node": ">=0.10.0"
1458 | }
1459 | },
1460 | "node_modules/is-number": {
1461 | "version": "7.0.0",
1462 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1463 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1464 | "dev": true,
1465 | "engines": {
1466 | "node": ">=0.12.0"
1467 | }
1468 | },
1469 | "node_modules/isexe": {
1470 | "version": "2.0.0",
1471 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1472 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1473 | "dev": true
1474 | },
1475 | "node_modules/jackspeak": {
1476 | "version": "2.3.6",
1477 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
1478 | "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
1479 | "dev": true,
1480 | "dependencies": {
1481 | "@isaacs/cliui": "^8.0.2"
1482 | },
1483 | "engines": {
1484 | "node": ">=14"
1485 | },
1486 | "funding": {
1487 | "url": "https://github.com/sponsors/isaacs"
1488 | },
1489 | "optionalDependencies": {
1490 | "@pkgjs/parseargs": "^0.11.0"
1491 | }
1492 | },
1493 | "node_modules/jiti": {
1494 | "version": "1.21.0",
1495 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
1496 | "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
1497 | "dev": true,
1498 | "bin": {
1499 | "jiti": "bin/jiti.js"
1500 | }
1501 | },
1502 | "node_modules/js-cookie": {
1503 | "version": "3.0.1",
1504 | "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz",
1505 | "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==",
1506 | "engines": {
1507 | "node": ">=12"
1508 | }
1509 | },
1510 | "node_modules/js-tokens": {
1511 | "version": "4.0.0",
1512 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1513 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1514 | },
1515 | "node_modules/kareem": {
1516 | "version": "2.5.1",
1517 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
1518 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
1519 | "engines": {
1520 | "node": ">=12.0.0"
1521 | }
1522 | },
1523 | "node_modules/lilconfig": {
1524 | "version": "2.1.0",
1525 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
1526 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
1527 | "dev": true,
1528 | "engines": {
1529 | "node": ">=10"
1530 | }
1531 | },
1532 | "node_modules/lines-and-columns": {
1533 | "version": "1.2.4",
1534 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1535 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
1536 | "dev": true
1537 | },
1538 | "node_modules/loose-envify": {
1539 | "version": "1.4.0",
1540 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1541 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1542 | "dependencies": {
1543 | "js-tokens": "^3.0.0 || ^4.0.0"
1544 | },
1545 | "bin": {
1546 | "loose-envify": "cli.js"
1547 | }
1548 | },
1549 | "node_modules/lower-case": {
1550 | "version": "2.0.2",
1551 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
1552 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
1553 | "dependencies": {
1554 | "tslib": "^2.0.3"
1555 | }
1556 | },
1557 | "node_modules/lru-cache": {
1558 | "version": "10.2.0",
1559 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
1560 | "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
1561 | "dev": true,
1562 | "engines": {
1563 | "node": "14 || >=16.14"
1564 | }
1565 | },
1566 | "node_modules/lucide-react": {
1567 | "version": "0.341.0",
1568 | "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.341.0.tgz",
1569 | "integrity": "sha512-fqI0TLU/VbzC3p90MHP3kdCRRUMTRT5qBfxwaXlllkZieYfRrMVd/RORXytqJUC2GBrvZdWYs6yvJIrqdsOmDQ==",
1570 | "peerDependencies": {
1571 | "react": "^16.5.1 || ^17.0.0 || ^18.0.0"
1572 | }
1573 | },
1574 | "node_modules/map-obj": {
1575 | "version": "4.3.0",
1576 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
1577 | "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
1578 | "engines": {
1579 | "node": ">=8"
1580 | },
1581 | "funding": {
1582 | "url": "https://github.com/sponsors/sindresorhus"
1583 | }
1584 | },
1585 | "node_modules/memory-pager": {
1586 | "version": "1.5.0",
1587 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
1588 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
1589 | },
1590 | "node_modules/merge2": {
1591 | "version": "1.4.1",
1592 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1593 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1594 | "dev": true,
1595 | "engines": {
1596 | "node": ">= 8"
1597 | }
1598 | },
1599 | "node_modules/micromatch": {
1600 | "version": "4.0.5",
1601 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1602 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1603 | "dev": true,
1604 | "dependencies": {
1605 | "braces": "^3.0.2",
1606 | "picomatch": "^2.3.1"
1607 | },
1608 | "engines": {
1609 | "node": ">=8.6"
1610 | }
1611 | },
1612 | "node_modules/mime-db": {
1613 | "version": "1.52.0",
1614 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1615 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1616 | "engines": {
1617 | "node": ">= 0.6"
1618 | }
1619 | },
1620 | "node_modules/mime-types": {
1621 | "version": "2.1.35",
1622 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1623 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1624 | "dependencies": {
1625 | "mime-db": "1.52.0"
1626 | },
1627 | "engines": {
1628 | "node": ">= 0.6"
1629 | }
1630 | },
1631 | "node_modules/minimatch": {
1632 | "version": "9.0.3",
1633 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
1634 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
1635 | "dev": true,
1636 | "dependencies": {
1637 | "brace-expansion": "^2.0.1"
1638 | },
1639 | "engines": {
1640 | "node": ">=16 || 14 >=14.17"
1641 | },
1642 | "funding": {
1643 | "url": "https://github.com/sponsors/isaacs"
1644 | }
1645 | },
1646 | "node_modules/minipass": {
1647 | "version": "7.0.4",
1648 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
1649 | "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
1650 | "dev": true,
1651 | "engines": {
1652 | "node": ">=16 || 14 >=14.17"
1653 | }
1654 | },
1655 | "node_modules/mongodb": {
1656 | "version": "6.3.0",
1657 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz",
1658 | "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==",
1659 | "dependencies": {
1660 | "@mongodb-js/saslprep": "^1.1.0",
1661 | "bson": "^6.2.0",
1662 | "mongodb-connection-string-url": "^3.0.0"
1663 | },
1664 | "engines": {
1665 | "node": ">=16.20.1"
1666 | },
1667 | "peerDependencies": {
1668 | "@aws-sdk/credential-providers": "^3.188.0",
1669 | "@mongodb-js/zstd": "^1.1.0",
1670 | "gcp-metadata": "^5.2.0",
1671 | "kerberos": "^2.0.1",
1672 | "mongodb-client-encryption": ">=6.0.0 <7",
1673 | "snappy": "^7.2.2",
1674 | "socks": "^2.7.1"
1675 | },
1676 | "peerDependenciesMeta": {
1677 | "@aws-sdk/credential-providers": {
1678 | "optional": true
1679 | },
1680 | "@mongodb-js/zstd": {
1681 | "optional": true
1682 | },
1683 | "gcp-metadata": {
1684 | "optional": true
1685 | },
1686 | "kerberos": {
1687 | "optional": true
1688 | },
1689 | "mongodb-client-encryption": {
1690 | "optional": true
1691 | },
1692 | "snappy": {
1693 | "optional": true
1694 | },
1695 | "socks": {
1696 | "optional": true
1697 | }
1698 | }
1699 | },
1700 | "node_modules/mongodb-connection-string-url": {
1701 | "version": "3.0.0",
1702 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz",
1703 | "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==",
1704 | "dependencies": {
1705 | "@types/whatwg-url": "^11.0.2",
1706 | "whatwg-url": "^13.0.0"
1707 | }
1708 | },
1709 | "node_modules/mongoose": {
1710 | "version": "8.2.0",
1711 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.0.tgz",
1712 | "integrity": "sha512-la93n6zCYRbPS+c5N9oTDAktvREy5OT9OCljp1Tah0y3+p8UPMTAoabWaLZMdzYruOtF9/9GRf6MasaZjiZP1A==",
1713 | "dependencies": {
1714 | "bson": "^6.2.0",
1715 | "kareem": "2.5.1",
1716 | "mongodb": "6.3.0",
1717 | "mpath": "0.9.0",
1718 | "mquery": "5.0.0",
1719 | "ms": "2.1.3",
1720 | "sift": "16.0.1"
1721 | },
1722 | "engines": {
1723 | "node": ">=16.20.1"
1724 | },
1725 | "funding": {
1726 | "type": "opencollective",
1727 | "url": "https://opencollective.com/mongoose"
1728 | }
1729 | },
1730 | "node_modules/mpath": {
1731 | "version": "0.9.0",
1732 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
1733 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
1734 | "engines": {
1735 | "node": ">=4.0.0"
1736 | }
1737 | },
1738 | "node_modules/mquery": {
1739 | "version": "5.0.0",
1740 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
1741 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
1742 | "dependencies": {
1743 | "debug": "4.x"
1744 | },
1745 | "engines": {
1746 | "node": ">=14.0.0"
1747 | }
1748 | },
1749 | "node_modules/ms": {
1750 | "version": "2.1.3",
1751 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1752 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1753 | },
1754 | "node_modules/mz": {
1755 | "version": "2.7.0",
1756 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
1757 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
1758 | "dev": true,
1759 | "dependencies": {
1760 | "any-promise": "^1.0.0",
1761 | "object-assign": "^4.0.1",
1762 | "thenify-all": "^1.0.0"
1763 | }
1764 | },
1765 | "node_modules/nanoid": {
1766 | "version": "3.3.7",
1767 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
1768 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
1769 | "funding": [
1770 | {
1771 | "type": "github",
1772 | "url": "https://github.com/sponsors/ai"
1773 | }
1774 | ],
1775 | "bin": {
1776 | "nanoid": "bin/nanoid.cjs"
1777 | },
1778 | "engines": {
1779 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1780 | }
1781 | },
1782 | "node_modules/next": {
1783 | "version": "14.1.0",
1784 | "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz",
1785 | "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==",
1786 | "dependencies": {
1787 | "@next/env": "14.1.0",
1788 | "@swc/helpers": "0.5.2",
1789 | "busboy": "1.6.0",
1790 | "caniuse-lite": "^1.0.30001579",
1791 | "graceful-fs": "^4.2.11",
1792 | "postcss": "8.4.31",
1793 | "styled-jsx": "5.1.1"
1794 | },
1795 | "bin": {
1796 | "next": "dist/bin/next"
1797 | },
1798 | "engines": {
1799 | "node": ">=18.17.0"
1800 | },
1801 | "optionalDependencies": {
1802 | "@next/swc-darwin-arm64": "14.1.0",
1803 | "@next/swc-darwin-x64": "14.1.0",
1804 | "@next/swc-linux-arm64-gnu": "14.1.0",
1805 | "@next/swc-linux-arm64-musl": "14.1.0",
1806 | "@next/swc-linux-x64-gnu": "14.1.0",
1807 | "@next/swc-linux-x64-musl": "14.1.0",
1808 | "@next/swc-win32-arm64-msvc": "14.1.0",
1809 | "@next/swc-win32-ia32-msvc": "14.1.0",
1810 | "@next/swc-win32-x64-msvc": "14.1.0"
1811 | },
1812 | "peerDependencies": {
1813 | "@opentelemetry/api": "^1.1.0",
1814 | "react": "^18.2.0",
1815 | "react-dom": "^18.2.0",
1816 | "sass": "^1.3.0"
1817 | },
1818 | "peerDependenciesMeta": {
1819 | "@opentelemetry/api": {
1820 | "optional": true
1821 | },
1822 | "sass": {
1823 | "optional": true
1824 | }
1825 | }
1826 | },
1827 | "node_modules/next/node_modules/postcss": {
1828 | "version": "8.4.31",
1829 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
1830 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
1831 | "funding": [
1832 | {
1833 | "type": "opencollective",
1834 | "url": "https://opencollective.com/postcss/"
1835 | },
1836 | {
1837 | "type": "tidelift",
1838 | "url": "https://tidelift.com/funding/github/npm/postcss"
1839 | },
1840 | {
1841 | "type": "github",
1842 | "url": "https://github.com/sponsors/ai"
1843 | }
1844 | ],
1845 | "dependencies": {
1846 | "nanoid": "^3.3.6",
1847 | "picocolors": "^1.0.0",
1848 | "source-map-js": "^1.0.2"
1849 | },
1850 | "engines": {
1851 | "node": "^10 || ^12 || >=14"
1852 | }
1853 | },
1854 | "node_modules/no-case": {
1855 | "version": "3.0.4",
1856 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
1857 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
1858 | "dependencies": {
1859 | "lower-case": "^2.0.2",
1860 | "tslib": "^2.0.3"
1861 | }
1862 | },
1863 | "node_modules/node-fetch-native": {
1864 | "version": "1.0.1",
1865 | "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.0.1.tgz",
1866 | "integrity": "sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg=="
1867 | },
1868 | "node_modules/node-releases": {
1869 | "version": "2.0.14",
1870 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
1871 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
1872 | "dev": true
1873 | },
1874 | "node_modules/normalize-path": {
1875 | "version": "3.0.0",
1876 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1877 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1878 | "dev": true,
1879 | "engines": {
1880 | "node": ">=0.10.0"
1881 | }
1882 | },
1883 | "node_modules/normalize-range": {
1884 | "version": "0.1.2",
1885 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
1886 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
1887 | "dev": true,
1888 | "engines": {
1889 | "node": ">=0.10.0"
1890 | }
1891 | },
1892 | "node_modules/object-assign": {
1893 | "version": "4.1.1",
1894 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1895 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1896 | "dev": true,
1897 | "engines": {
1898 | "node": ">=0.10.0"
1899 | }
1900 | },
1901 | "node_modules/object-hash": {
1902 | "version": "3.0.0",
1903 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1904 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1905 | "dev": true,
1906 | "engines": {
1907 | "node": ">= 6"
1908 | }
1909 | },
1910 | "node_modules/object-inspect": {
1911 | "version": "1.13.1",
1912 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
1913 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
1914 | "funding": {
1915 | "url": "https://github.com/sponsors/ljharb"
1916 | }
1917 | },
1918 | "node_modules/path-key": {
1919 | "version": "3.1.1",
1920 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1921 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1922 | "dev": true,
1923 | "engines": {
1924 | "node": ">=8"
1925 | }
1926 | },
1927 | "node_modules/path-parse": {
1928 | "version": "1.0.7",
1929 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1930 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1931 | "dev": true
1932 | },
1933 | "node_modules/path-scurry": {
1934 | "version": "1.10.1",
1935 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
1936 | "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
1937 | "dev": true,
1938 | "dependencies": {
1939 | "lru-cache": "^9.1.1 || ^10.0.0",
1940 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
1941 | },
1942 | "engines": {
1943 | "node": ">=16 || 14 >=14.17"
1944 | },
1945 | "funding": {
1946 | "url": "https://github.com/sponsors/isaacs"
1947 | }
1948 | },
1949 | "node_modules/path-to-regexp": {
1950 | "version": "6.2.1",
1951 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
1952 | "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw=="
1953 | },
1954 | "node_modules/picocolors": {
1955 | "version": "1.0.0",
1956 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1957 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1958 | },
1959 | "node_modules/picomatch": {
1960 | "version": "2.3.1",
1961 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1962 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1963 | "dev": true,
1964 | "engines": {
1965 | "node": ">=8.6"
1966 | },
1967 | "funding": {
1968 | "url": "https://github.com/sponsors/jonschlinkert"
1969 | }
1970 | },
1971 | "node_modules/pify": {
1972 | "version": "2.3.0",
1973 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1974 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1975 | "dev": true,
1976 | "engines": {
1977 | "node": ">=0.10.0"
1978 | }
1979 | },
1980 | "node_modules/pirates": {
1981 | "version": "4.0.6",
1982 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
1983 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
1984 | "dev": true,
1985 | "engines": {
1986 | "node": ">= 6"
1987 | }
1988 | },
1989 | "node_modules/postcss": {
1990 | "version": "8.4.35",
1991 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
1992 | "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
1993 | "dev": true,
1994 | "funding": [
1995 | {
1996 | "type": "opencollective",
1997 | "url": "https://opencollective.com/postcss/"
1998 | },
1999 | {
2000 | "type": "tidelift",
2001 | "url": "https://tidelift.com/funding/github/npm/postcss"
2002 | },
2003 | {
2004 | "type": "github",
2005 | "url": "https://github.com/sponsors/ai"
2006 | }
2007 | ],
2008 | "dependencies": {
2009 | "nanoid": "^3.3.7",
2010 | "picocolors": "^1.0.0",
2011 | "source-map-js": "^1.0.2"
2012 | },
2013 | "engines": {
2014 | "node": "^10 || ^12 || >=14"
2015 | }
2016 | },
2017 | "node_modules/postcss-import": {
2018 | "version": "15.1.0",
2019 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
2020 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
2021 | "dev": true,
2022 | "dependencies": {
2023 | "postcss-value-parser": "^4.0.0",
2024 | "read-cache": "^1.0.0",
2025 | "resolve": "^1.1.7"
2026 | },
2027 | "engines": {
2028 | "node": ">=14.0.0"
2029 | },
2030 | "peerDependencies": {
2031 | "postcss": "^8.0.0"
2032 | }
2033 | },
2034 | "node_modules/postcss-js": {
2035 | "version": "4.0.1",
2036 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
2037 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
2038 | "dev": true,
2039 | "dependencies": {
2040 | "camelcase-css": "^2.0.1"
2041 | },
2042 | "engines": {
2043 | "node": "^12 || ^14 || >= 16"
2044 | },
2045 | "funding": {
2046 | "type": "opencollective",
2047 | "url": "https://opencollective.com/postcss/"
2048 | },
2049 | "peerDependencies": {
2050 | "postcss": "^8.4.21"
2051 | }
2052 | },
2053 | "node_modules/postcss-load-config": {
2054 | "version": "4.0.2",
2055 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
2056 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
2057 | "dev": true,
2058 | "funding": [
2059 | {
2060 | "type": "opencollective",
2061 | "url": "https://opencollective.com/postcss/"
2062 | },
2063 | {
2064 | "type": "github",
2065 | "url": "https://github.com/sponsors/ai"
2066 | }
2067 | ],
2068 | "dependencies": {
2069 | "lilconfig": "^3.0.0",
2070 | "yaml": "^2.3.4"
2071 | },
2072 | "engines": {
2073 | "node": ">= 14"
2074 | },
2075 | "peerDependencies": {
2076 | "postcss": ">=8.0.9",
2077 | "ts-node": ">=9.0.0"
2078 | },
2079 | "peerDependenciesMeta": {
2080 | "postcss": {
2081 | "optional": true
2082 | },
2083 | "ts-node": {
2084 | "optional": true
2085 | }
2086 | }
2087 | },
2088 | "node_modules/postcss-load-config/node_modules/lilconfig": {
2089 | "version": "3.1.1",
2090 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
2091 | "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
2092 | "dev": true,
2093 | "engines": {
2094 | "node": ">=14"
2095 | },
2096 | "funding": {
2097 | "url": "https://github.com/sponsors/antonk52"
2098 | }
2099 | },
2100 | "node_modules/postcss-nested": {
2101 | "version": "6.0.1",
2102 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
2103 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
2104 | "dev": true,
2105 | "dependencies": {
2106 | "postcss-selector-parser": "^6.0.11"
2107 | },
2108 | "engines": {
2109 | "node": ">=12.0"
2110 | },
2111 | "funding": {
2112 | "type": "opencollective",
2113 | "url": "https://opencollective.com/postcss/"
2114 | },
2115 | "peerDependencies": {
2116 | "postcss": "^8.2.14"
2117 | }
2118 | },
2119 | "node_modules/postcss-selector-parser": {
2120 | "version": "6.0.15",
2121 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
2122 | "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
2123 | "dev": true,
2124 | "dependencies": {
2125 | "cssesc": "^3.0.0",
2126 | "util-deprecate": "^1.0.2"
2127 | },
2128 | "engines": {
2129 | "node": ">=4"
2130 | }
2131 | },
2132 | "node_modules/postcss-value-parser": {
2133 | "version": "4.2.0",
2134 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2135 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
2136 | "dev": true
2137 | },
2138 | "node_modules/punycode": {
2139 | "version": "2.3.1",
2140 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
2141 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
2142 | "engines": {
2143 | "node": ">=6"
2144 | }
2145 | },
2146 | "node_modules/pvtsutils": {
2147 | "version": "1.3.5",
2148 | "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz",
2149 | "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==",
2150 | "dependencies": {
2151 | "tslib": "^2.6.1"
2152 | }
2153 | },
2154 | "node_modules/pvutils": {
2155 | "version": "1.1.3",
2156 | "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz",
2157 | "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==",
2158 | "engines": {
2159 | "node": ">=6.0.0"
2160 | }
2161 | },
2162 | "node_modules/qs": {
2163 | "version": "6.11.2",
2164 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
2165 | "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
2166 | "dependencies": {
2167 | "side-channel": "^1.0.4"
2168 | },
2169 | "engines": {
2170 | "node": ">=0.6"
2171 | },
2172 | "funding": {
2173 | "url": "https://github.com/sponsors/ljharb"
2174 | }
2175 | },
2176 | "node_modules/queue-microtask": {
2177 | "version": "1.2.3",
2178 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2179 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2180 | "dev": true,
2181 | "funding": [
2182 | {
2183 | "type": "github",
2184 | "url": "https://github.com/sponsors/feross"
2185 | },
2186 | {
2187 | "type": "patreon",
2188 | "url": "https://www.patreon.com/feross"
2189 | },
2190 | {
2191 | "type": "consulting",
2192 | "url": "https://feross.org/support"
2193 | }
2194 | ]
2195 | },
2196 | "node_modules/quick-lru": {
2197 | "version": "4.0.1",
2198 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
2199 | "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
2200 | "engines": {
2201 | "node": ">=8"
2202 | }
2203 | },
2204 | "node_modules/react": {
2205 | "version": "18.2.0",
2206 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
2207 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
2208 | "dependencies": {
2209 | "loose-envify": "^1.1.0"
2210 | },
2211 | "engines": {
2212 | "node": ">=0.10.0"
2213 | }
2214 | },
2215 | "node_modules/react-dom": {
2216 | "version": "18.2.0",
2217 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
2218 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
2219 | "dependencies": {
2220 | "loose-envify": "^1.1.0",
2221 | "scheduler": "^0.23.0"
2222 | },
2223 | "peerDependencies": {
2224 | "react": "^18.2.0"
2225 | }
2226 | },
2227 | "node_modules/react-hot-toast": {
2228 | "version": "2.4.1",
2229 | "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz",
2230 | "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==",
2231 | "dependencies": {
2232 | "goober": "^2.1.10"
2233 | },
2234 | "engines": {
2235 | "node": ">=10"
2236 | },
2237 | "peerDependencies": {
2238 | "react": ">=16",
2239 | "react-dom": ">=16"
2240 | }
2241 | },
2242 | "node_modules/read-cache": {
2243 | "version": "1.0.0",
2244 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2245 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2246 | "dev": true,
2247 | "dependencies": {
2248 | "pify": "^2.3.0"
2249 | }
2250 | },
2251 | "node_modules/readdirp": {
2252 | "version": "3.6.0",
2253 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2254 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2255 | "dev": true,
2256 | "dependencies": {
2257 | "picomatch": "^2.2.1"
2258 | },
2259 | "engines": {
2260 | "node": ">=8.10.0"
2261 | }
2262 | },
2263 | "node_modules/resolve": {
2264 | "version": "1.22.8",
2265 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
2266 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
2267 | "dev": true,
2268 | "dependencies": {
2269 | "is-core-module": "^2.13.0",
2270 | "path-parse": "^1.0.7",
2271 | "supports-preserve-symlinks-flag": "^1.0.0"
2272 | },
2273 | "bin": {
2274 | "resolve": "bin/resolve"
2275 | },
2276 | "funding": {
2277 | "url": "https://github.com/sponsors/ljharb"
2278 | }
2279 | },
2280 | "node_modules/reusify": {
2281 | "version": "1.0.4",
2282 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2283 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2284 | "dev": true,
2285 | "engines": {
2286 | "iojs": ">=1.0.0",
2287 | "node": ">=0.10.0"
2288 | }
2289 | },
2290 | "node_modules/run-parallel": {
2291 | "version": "1.2.0",
2292 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2293 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2294 | "dev": true,
2295 | "funding": [
2296 | {
2297 | "type": "github",
2298 | "url": "https://github.com/sponsors/feross"
2299 | },
2300 | {
2301 | "type": "patreon",
2302 | "url": "https://www.patreon.com/feross"
2303 | },
2304 | {
2305 | "type": "consulting",
2306 | "url": "https://feross.org/support"
2307 | }
2308 | ],
2309 | "dependencies": {
2310 | "queue-microtask": "^1.2.2"
2311 | }
2312 | },
2313 | "node_modules/scheduler": {
2314 | "version": "0.23.0",
2315 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
2316 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
2317 | "dependencies": {
2318 | "loose-envify": "^1.1.0"
2319 | }
2320 | },
2321 | "node_modules/set-function-length": {
2322 | "version": "1.2.1",
2323 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
2324 | "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
2325 | "dependencies": {
2326 | "define-data-property": "^1.1.2",
2327 | "es-errors": "^1.3.0",
2328 | "function-bind": "^1.1.2",
2329 | "get-intrinsic": "^1.2.3",
2330 | "gopd": "^1.0.1",
2331 | "has-property-descriptors": "^1.0.1"
2332 | },
2333 | "engines": {
2334 | "node": ">= 0.4"
2335 | }
2336 | },
2337 | "node_modules/shebang-command": {
2338 | "version": "2.0.0",
2339 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2340 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2341 | "dev": true,
2342 | "dependencies": {
2343 | "shebang-regex": "^3.0.0"
2344 | },
2345 | "engines": {
2346 | "node": ">=8"
2347 | }
2348 | },
2349 | "node_modules/shebang-regex": {
2350 | "version": "3.0.0",
2351 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2352 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2353 | "dev": true,
2354 | "engines": {
2355 | "node": ">=8"
2356 | }
2357 | },
2358 | "node_modules/side-channel": {
2359 | "version": "1.0.5",
2360 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz",
2361 | "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
2362 | "dependencies": {
2363 | "call-bind": "^1.0.6",
2364 | "es-errors": "^1.3.0",
2365 | "get-intrinsic": "^1.2.4",
2366 | "object-inspect": "^1.13.1"
2367 | },
2368 | "engines": {
2369 | "node": ">= 0.4"
2370 | },
2371 | "funding": {
2372 | "url": "https://github.com/sponsors/ljharb"
2373 | }
2374 | },
2375 | "node_modules/sift": {
2376 | "version": "16.0.1",
2377 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
2378 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
2379 | },
2380 | "node_modules/signal-exit": {
2381 | "version": "4.1.0",
2382 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
2383 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
2384 | "dev": true,
2385 | "engines": {
2386 | "node": ">=14"
2387 | },
2388 | "funding": {
2389 | "url": "https://github.com/sponsors/isaacs"
2390 | }
2391 | },
2392 | "node_modules/snake-case": {
2393 | "version": "3.0.4",
2394 | "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
2395 | "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
2396 | "dependencies": {
2397 | "dot-case": "^3.0.4",
2398 | "tslib": "^2.0.3"
2399 | }
2400 | },
2401 | "node_modules/snakecase-keys": {
2402 | "version": "5.4.4",
2403 | "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-5.4.4.tgz",
2404 | "integrity": "sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA==",
2405 | "dependencies": {
2406 | "map-obj": "^4.1.0",
2407 | "snake-case": "^3.0.4",
2408 | "type-fest": "^2.5.2"
2409 | },
2410 | "engines": {
2411 | "node": ">=12"
2412 | }
2413 | },
2414 | "node_modules/source-map-js": {
2415 | "version": "1.0.2",
2416 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
2417 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
2418 | "engines": {
2419 | "node": ">=0.10.0"
2420 | }
2421 | },
2422 | "node_modules/sparse-bitfield": {
2423 | "version": "3.0.3",
2424 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
2425 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
2426 | "dependencies": {
2427 | "memory-pager": "^1.0.2"
2428 | }
2429 | },
2430 | "node_modules/streamsearch": {
2431 | "version": "1.1.0",
2432 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
2433 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
2434 | "engines": {
2435 | "node": ">=10.0.0"
2436 | }
2437 | },
2438 | "node_modules/string-width": {
2439 | "version": "5.1.2",
2440 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2441 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
2442 | "dev": true,
2443 | "dependencies": {
2444 | "eastasianwidth": "^0.2.0",
2445 | "emoji-regex": "^9.2.2",
2446 | "strip-ansi": "^7.0.1"
2447 | },
2448 | "engines": {
2449 | "node": ">=12"
2450 | },
2451 | "funding": {
2452 | "url": "https://github.com/sponsors/sindresorhus"
2453 | }
2454 | },
2455 | "node_modules/string-width-cjs": {
2456 | "name": "string-width",
2457 | "version": "4.2.3",
2458 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2459 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2460 | "dev": true,
2461 | "dependencies": {
2462 | "emoji-regex": "^8.0.0",
2463 | "is-fullwidth-code-point": "^3.0.0",
2464 | "strip-ansi": "^6.0.1"
2465 | },
2466 | "engines": {
2467 | "node": ">=8"
2468 | }
2469 | },
2470 | "node_modules/string-width-cjs/node_modules/ansi-regex": {
2471 | "version": "5.0.1",
2472 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2473 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2474 | "dev": true,
2475 | "engines": {
2476 | "node": ">=8"
2477 | }
2478 | },
2479 | "node_modules/string-width-cjs/node_modules/emoji-regex": {
2480 | "version": "8.0.0",
2481 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2482 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2483 | "dev": true
2484 | },
2485 | "node_modules/string-width-cjs/node_modules/strip-ansi": {
2486 | "version": "6.0.1",
2487 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2488 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2489 | "dev": true,
2490 | "dependencies": {
2491 | "ansi-regex": "^5.0.1"
2492 | },
2493 | "engines": {
2494 | "node": ">=8"
2495 | }
2496 | },
2497 | "node_modules/strip-ansi": {
2498 | "version": "7.1.0",
2499 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
2500 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
2501 | "dev": true,
2502 | "dependencies": {
2503 | "ansi-regex": "^6.0.1"
2504 | },
2505 | "engines": {
2506 | "node": ">=12"
2507 | },
2508 | "funding": {
2509 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
2510 | }
2511 | },
2512 | "node_modules/strip-ansi-cjs": {
2513 | "name": "strip-ansi",
2514 | "version": "6.0.1",
2515 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2516 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2517 | "dev": true,
2518 | "dependencies": {
2519 | "ansi-regex": "^5.0.1"
2520 | },
2521 | "engines": {
2522 | "node": ">=8"
2523 | }
2524 | },
2525 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
2526 | "version": "5.0.1",
2527 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2528 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2529 | "dev": true,
2530 | "engines": {
2531 | "node": ">=8"
2532 | }
2533 | },
2534 | "node_modules/stripe": {
2535 | "version": "14.18.0",
2536 | "resolved": "https://registry.npmjs.org/stripe/-/stripe-14.18.0.tgz",
2537 | "integrity": "sha512-yLqKPqYgGJbMxrQiE4+i2i00ZVA2NRIZbZ1rejzj5XR3F3Uc+1iy9QE133knZudhVGMw367b8vTpB8D9pYMETw==",
2538 | "dependencies": {
2539 | "@types/node": ">=8.1.0",
2540 | "qs": "^6.11.0"
2541 | },
2542 | "engines": {
2543 | "node": ">=12.*"
2544 | }
2545 | },
2546 | "node_modules/styled-jsx": {
2547 | "version": "5.1.1",
2548 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
2549 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
2550 | "dependencies": {
2551 | "client-only": "0.0.1"
2552 | },
2553 | "engines": {
2554 | "node": ">= 12.0.0"
2555 | },
2556 | "peerDependencies": {
2557 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
2558 | },
2559 | "peerDependenciesMeta": {
2560 | "@babel/core": {
2561 | "optional": true
2562 | },
2563 | "babel-plugin-macros": {
2564 | "optional": true
2565 | }
2566 | }
2567 | },
2568 | "node_modules/sucrase": {
2569 | "version": "3.35.0",
2570 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
2571 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
2572 | "dev": true,
2573 | "dependencies": {
2574 | "@jridgewell/gen-mapping": "^0.3.2",
2575 | "commander": "^4.0.0",
2576 | "glob": "^10.3.10",
2577 | "lines-and-columns": "^1.1.6",
2578 | "mz": "^2.7.0",
2579 | "pirates": "^4.0.1",
2580 | "ts-interface-checker": "^0.1.9"
2581 | },
2582 | "bin": {
2583 | "sucrase": "bin/sucrase",
2584 | "sucrase-node": "bin/sucrase-node"
2585 | },
2586 | "engines": {
2587 | "node": ">=16 || 14 >=14.17"
2588 | }
2589 | },
2590 | "node_modules/supports-preserve-symlinks-flag": {
2591 | "version": "1.0.0",
2592 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2593 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2594 | "dev": true,
2595 | "engines": {
2596 | "node": ">= 0.4"
2597 | },
2598 | "funding": {
2599 | "url": "https://github.com/sponsors/ljharb"
2600 | }
2601 | },
2602 | "node_modules/tailwind-scrollbar-hide": {
2603 | "version": "1.1.7",
2604 | "resolved": "https://registry.npmjs.org/tailwind-scrollbar-hide/-/tailwind-scrollbar-hide-1.1.7.tgz",
2605 | "integrity": "sha512-X324n9OtpTmOMqEgDUEA/RgLrNfBF/jwJdctaPZDzB3mppxJk7TLIDmOreEDm1Bq4R9LSPu4Epf8VSdovNU+iA=="
2606 | },
2607 | "node_modules/tailwindcss": {
2608 | "version": "3.4.1",
2609 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
2610 | "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==",
2611 | "dev": true,
2612 | "dependencies": {
2613 | "@alloc/quick-lru": "^5.2.0",
2614 | "arg": "^5.0.2",
2615 | "chokidar": "^3.5.3",
2616 | "didyoumean": "^1.2.2",
2617 | "dlv": "^1.1.3",
2618 | "fast-glob": "^3.3.0",
2619 | "glob-parent": "^6.0.2",
2620 | "is-glob": "^4.0.3",
2621 | "jiti": "^1.19.1",
2622 | "lilconfig": "^2.1.0",
2623 | "micromatch": "^4.0.5",
2624 | "normalize-path": "^3.0.0",
2625 | "object-hash": "^3.0.0",
2626 | "picocolors": "^1.0.0",
2627 | "postcss": "^8.4.23",
2628 | "postcss-import": "^15.1.0",
2629 | "postcss-js": "^4.0.1",
2630 | "postcss-load-config": "^4.0.1",
2631 | "postcss-nested": "^6.0.1",
2632 | "postcss-selector-parser": "^6.0.11",
2633 | "resolve": "^1.22.2",
2634 | "sucrase": "^3.32.0"
2635 | },
2636 | "bin": {
2637 | "tailwind": "lib/cli.js",
2638 | "tailwindcss": "lib/cli.js"
2639 | },
2640 | "engines": {
2641 | "node": ">=14.0.0"
2642 | }
2643 | },
2644 | "node_modules/thenify": {
2645 | "version": "3.3.1",
2646 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
2647 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
2648 | "dev": true,
2649 | "dependencies": {
2650 | "any-promise": "^1.0.0"
2651 | }
2652 | },
2653 | "node_modules/thenify-all": {
2654 | "version": "1.6.0",
2655 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
2656 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
2657 | "dev": true,
2658 | "dependencies": {
2659 | "thenify": ">= 3.1.0 < 4"
2660 | },
2661 | "engines": {
2662 | "node": ">=0.8"
2663 | }
2664 | },
2665 | "node_modules/to-no-case": {
2666 | "version": "1.0.2",
2667 | "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz",
2668 | "integrity": "sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg=="
2669 | },
2670 | "node_modules/to-regex-range": {
2671 | "version": "5.0.1",
2672 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2673 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2674 | "dev": true,
2675 | "dependencies": {
2676 | "is-number": "^7.0.0"
2677 | },
2678 | "engines": {
2679 | "node": ">=8.0"
2680 | }
2681 | },
2682 | "node_modules/to-snake-case": {
2683 | "version": "1.0.0",
2684 | "resolved": "https://registry.npmjs.org/to-snake-case/-/to-snake-case-1.0.0.tgz",
2685 | "integrity": "sha512-joRpzBAk1Bhi2eGEYBjukEWHOe/IvclOkiJl3DtA91jV6NwQ3MwXA4FHYeqk8BNp/D8bmi9tcNbRu/SozP0jbQ==",
2686 | "dependencies": {
2687 | "to-space-case": "^1.0.0"
2688 | }
2689 | },
2690 | "node_modules/to-space-case": {
2691 | "version": "1.0.0",
2692 | "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz",
2693 | "integrity": "sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==",
2694 | "dependencies": {
2695 | "to-no-case": "^1.0.0"
2696 | }
2697 | },
2698 | "node_modules/tr46": {
2699 | "version": "4.1.1",
2700 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz",
2701 | "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==",
2702 | "dependencies": {
2703 | "punycode": "^2.3.0"
2704 | },
2705 | "engines": {
2706 | "node": ">=14"
2707 | }
2708 | },
2709 | "node_modules/ts-interface-checker": {
2710 | "version": "0.1.13",
2711 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
2712 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
2713 | "dev": true
2714 | },
2715 | "node_modules/tslib": {
2716 | "version": "2.6.2",
2717 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
2718 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
2719 | },
2720 | "node_modules/type-fest": {
2721 | "version": "2.19.0",
2722 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
2723 | "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
2724 | "engines": {
2725 | "node": ">=12.20"
2726 | },
2727 | "funding": {
2728 | "url": "https://github.com/sponsors/sindresorhus"
2729 | }
2730 | },
2731 | "node_modules/typescript": {
2732 | "version": "5.3.3",
2733 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
2734 | "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
2735 | "dev": true,
2736 | "bin": {
2737 | "tsc": "bin/tsc",
2738 | "tsserver": "bin/tsserver"
2739 | },
2740 | "engines": {
2741 | "node": ">=14.17"
2742 | }
2743 | },
2744 | "node_modules/undici-types": {
2745 | "version": "5.26.5",
2746 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
2747 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
2748 | },
2749 | "node_modules/update-browserslist-db": {
2750 | "version": "1.0.13",
2751 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
2752 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
2753 | "dev": true,
2754 | "funding": [
2755 | {
2756 | "type": "opencollective",
2757 | "url": "https://opencollective.com/browserslist"
2758 | },
2759 | {
2760 | "type": "tidelift",
2761 | "url": "https://tidelift.com/funding/github/npm/browserslist"
2762 | },
2763 | {
2764 | "type": "github",
2765 | "url": "https://github.com/sponsors/ai"
2766 | }
2767 | ],
2768 | "dependencies": {
2769 | "escalade": "^3.1.1",
2770 | "picocolors": "^1.0.0"
2771 | },
2772 | "bin": {
2773 | "update-browserslist-db": "cli.js"
2774 | },
2775 | "peerDependencies": {
2776 | "browserslist": ">= 4.21.0"
2777 | }
2778 | },
2779 | "node_modules/use-sync-external-store": {
2780 | "version": "1.2.0",
2781 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
2782 | "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
2783 | "peerDependencies": {
2784 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
2785 | }
2786 | },
2787 | "node_modules/util-deprecate": {
2788 | "version": "1.0.2",
2789 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2790 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2791 | "dev": true
2792 | },
2793 | "node_modules/webcrypto-core": {
2794 | "version": "1.7.8",
2795 | "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz",
2796 | "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==",
2797 | "dependencies": {
2798 | "@peculiar/asn1-schema": "^2.3.8",
2799 | "@peculiar/json-schema": "^1.1.12",
2800 | "asn1js": "^3.0.1",
2801 | "pvtsutils": "^1.3.5",
2802 | "tslib": "^2.6.2"
2803 | }
2804 | },
2805 | "node_modules/webidl-conversions": {
2806 | "version": "7.0.0",
2807 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
2808 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
2809 | "engines": {
2810 | "node": ">=12"
2811 | }
2812 | },
2813 | "node_modules/whatwg-url": {
2814 | "version": "13.0.0",
2815 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz",
2816 | "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==",
2817 | "dependencies": {
2818 | "tr46": "^4.1.1",
2819 | "webidl-conversions": "^7.0.0"
2820 | },
2821 | "engines": {
2822 | "node": ">=16"
2823 | }
2824 | },
2825 | "node_modules/which": {
2826 | "version": "2.0.2",
2827 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2828 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2829 | "dev": true,
2830 | "dependencies": {
2831 | "isexe": "^2.0.0"
2832 | },
2833 | "bin": {
2834 | "node-which": "bin/node-which"
2835 | },
2836 | "engines": {
2837 | "node": ">= 8"
2838 | }
2839 | },
2840 | "node_modules/wrap-ansi": {
2841 | "version": "8.1.0",
2842 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2843 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2844 | "dev": true,
2845 | "dependencies": {
2846 | "ansi-styles": "^6.1.0",
2847 | "string-width": "^5.0.1",
2848 | "strip-ansi": "^7.0.1"
2849 | },
2850 | "engines": {
2851 | "node": ">=12"
2852 | },
2853 | "funding": {
2854 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2855 | }
2856 | },
2857 | "node_modules/wrap-ansi-cjs": {
2858 | "name": "wrap-ansi",
2859 | "version": "7.0.0",
2860 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2861 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2862 | "dev": true,
2863 | "dependencies": {
2864 | "ansi-styles": "^4.0.0",
2865 | "string-width": "^4.1.0",
2866 | "strip-ansi": "^6.0.0"
2867 | },
2868 | "engines": {
2869 | "node": ">=10"
2870 | },
2871 | "funding": {
2872 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2873 | }
2874 | },
2875 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
2876 | "version": "5.0.1",
2877 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2878 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2879 | "dev": true,
2880 | "engines": {
2881 | "node": ">=8"
2882 | }
2883 | },
2884 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
2885 | "version": "4.3.0",
2886 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2887 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2888 | "dev": true,
2889 | "dependencies": {
2890 | "color-convert": "^2.0.1"
2891 | },
2892 | "engines": {
2893 | "node": ">=8"
2894 | },
2895 | "funding": {
2896 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2897 | }
2898 | },
2899 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
2900 | "version": "8.0.0",
2901 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2902 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2903 | "dev": true
2904 | },
2905 | "node_modules/wrap-ansi-cjs/node_modules/string-width": {
2906 | "version": "4.2.3",
2907 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2908 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2909 | "dev": true,
2910 | "dependencies": {
2911 | "emoji-regex": "^8.0.0",
2912 | "is-fullwidth-code-point": "^3.0.0",
2913 | "strip-ansi": "^6.0.1"
2914 | },
2915 | "engines": {
2916 | "node": ">=8"
2917 | }
2918 | },
2919 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
2920 | "version": "6.0.1",
2921 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2922 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2923 | "dev": true,
2924 | "dependencies": {
2925 | "ansi-regex": "^5.0.1"
2926 | },
2927 | "engines": {
2928 | "node": ">=8"
2929 | }
2930 | },
2931 | "node_modules/yaml": {
2932 | "version": "2.4.0",
2933 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.0.tgz",
2934 | "integrity": "sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==",
2935 | "dev": true,
2936 | "bin": {
2937 | "yaml": "bin.mjs"
2938 | },
2939 | "engines": {
2940 | "node": ">= 14"
2941 | }
2942 | },
2943 | "node_modules/zustand": {
2944 | "version": "4.5.1",
2945 | "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.1.tgz",
2946 | "integrity": "sha512-XlauQmH64xXSC1qGYNv00ODaQ3B+tNPoy22jv2diYiP4eoDKr9LA+Bh5Bc3gplTrFdb6JVI+N4kc1DZ/tbtfPg==",
2947 | "dependencies": {
2948 | "use-sync-external-store": "1.2.0"
2949 | },
2950 | "engines": {
2951 | "node": ">=12.7.0"
2952 | },
2953 | "peerDependencies": {
2954 | "@types/react": ">=16.8",
2955 | "immer": ">=9.0.6",
2956 | "react": ">=16.8"
2957 | },
2958 | "peerDependenciesMeta": {
2959 | "@types/react": {
2960 | "optional": true
2961 | },
2962 | "immer": {
2963 | "optional": true
2964 | },
2965 | "react": {
2966 | "optional": true
2967 | }
2968 | }
2969 | }
2970 | }
2971 | }
2972 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "borcella_store",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@clerk/nextjs": "^4.29.7",
13 | "@stripe/stripe-js": "^3.0.6",
14 | "lucide-react": "^0.341.0",
15 | "mongoose": "^8.2.0",
16 | "next": "14.1.0",
17 | "react": "^18",
18 | "react-dom": "^18",
19 | "react-hot-toast": "^2.4.1",
20 | "stripe": "^14.18.0",
21 | "tailwind-scrollbar-hide": "^1.1.7",
22 | "zustand": "^4.5.1"
23 | },
24 | "devDependencies": {
25 | "@types/node": "^20",
26 | "@types/react": "^18",
27 | "@types/react-dom": "^18",
28 | "autoprefixer": "^10.0.1",
29 | "postcss": "^8",
30 | "tailwindcss": "^3.3.0",
31 | "typescript": "^5"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/public/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phuc-mai/borcella_store/021882c465116f9c43becdf29fe0eef42778ddf2/public/banner.png
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phuc-mai/borcella_store/021882c465116f9c43becdf29fe0eef42778ddf2/public/logo.png
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | const config: Config = {
4 | content: [
5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}",
6 | "./components/**/*.{js,ts,jsx,tsx,mdx}",
7 | "./app/**/*.{js,ts,jsx,tsx,mdx}",
8 | ],
9 | theme: {
10 | fontSize: {
11 | "heading1-bold": [
12 | "50px",
13 | {
14 | lineHeight: "100%",
15 | fontWeight: "700",
16 | },
17 | ],
18 | "heading2-bold": [
19 | "30px",
20 | {
21 | lineHeight: "100%",
22 | fontWeight: "700",
23 | },
24 | ],
25 | "heading3-bold": [
26 | "24px",
27 | {
28 | lineHeight: "100%",
29 | fontWeight: "700",
30 | },
31 | ],
32 | "heading4-bold": [
33 | "20px",
34 | {
35 | lineHeight: "100%",
36 | fontWeight: "700",
37 | },
38 | ],
39 | "body-bold": [
40 | "18px",
41 | {
42 | lineHeight: "100%",
43 | fontWeight: "700",
44 | },
45 | ],
46 | "body-semibold": [
47 | "18px",
48 | {
49 | lineHeight: "100%",
50 | fontWeight: "600",
51 | },
52 | ],
53 | "body-medium": [
54 | "18px",
55 | {
56 | lineHeight: "100%",
57 | fontWeight: "500",
58 | },
59 | ],
60 | "base-bold": [
61 | "16px",
62 | {
63 | lineHeight: "100%",
64 | fontWeight: "600",
65 | },
66 | ],
67 | "base-medium": [
68 | "16px",
69 | {
70 | lineHeight: "100%",
71 | fontWeight: "500",
72 | },
73 | ],
74 | "small-bold": [
75 | "14px",
76 | {
77 | lineHeight: "140%",
78 | fontWeight: "700",
79 | },
80 | ],
81 | "small-medium": [
82 | "14px",
83 | {
84 | lineHeight: "140%",
85 | fontWeight: "500",
86 | },
87 | ],
88 | },
89 | extend: {
90 | colors: {
91 | "red-1": "#FF0000",
92 | "grey-1": "#F7F7F7",
93 | "grey-2": "#8A8A8A",
94 | },
95 | },
96 | },
97 | plugins: [require("tailwind-scrollbar-hide")],
98 | };
99 | export default config;
100 |
101 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["dom", "dom.iterable", "esnext"],
4 | "allowJs": true,
5 | "skipLibCheck": true,
6 | "strict": true,
7 | "noEmit": true,
8 | "esModuleInterop": true,
9 | "module": "esnext",
10 | "moduleResolution": "bundler",
11 | "resolveJsonModule": true,
12 | "isolatedModules": true,
13 | "jsx": "preserve",
14 | "incremental": true,
15 | "plugins": [
16 | {
17 | "name": "next"
18 | }
19 | ],
20 | "paths": {
21 | "@/*": ["./*"]
22 | }
23 | },
24 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
25 | "exclude": ["node_modules"]
26 | }
27 |
--------------------------------------------------------------------------------