From 5b7689be80ab383c2cf113e50896e1edc3282c46 Mon Sep 17 00:00:00 2001 From: sadmann7 Date: Sun, 26 May 2024 08:43:21 +0600 Subject: [PATCH 1/3] feat: add tags --- drizzle.config.ts | 3 -- src/components/layouts/auth-dropdown.tsx | 10 ++-- src/components/layouts/sidebar-nav.tsx | 22 +++++---- src/db/schema/addresses.ts | 3 +- src/db/schema/carts.ts | 3 +- src/db/schema/categories.ts | 3 +- src/db/schema/index.ts | 2 + src/db/schema/notifications.ts | 3 +- src/db/schema/orders.ts | 17 ++++--- src/db/schema/payments.ts | 6 +-- src/db/schema/product-tags.ts | 36 +++++++++++++++ src/db/schema/product-variants.ts | 39 ++++++++++++++++ src/db/schema/products.ts | 24 ++++++---- src/db/schema/stores.ts | 4 +- src/db/schema/subcategories.ts | 10 ++-- src/db/schema/subscriptions.ts | 3 +- src/db/schema/tags.ts | 34 ++++++++++++++ src/db/utils.ts | 12 ----- src/lib/actions/product.ts | 1 - src/lib/actions/seed.ts | 59 ++++-------------------- src/lib/constants.ts | 2 - 21 files changed, 179 insertions(+), 117 deletions(-) create mode 100644 src/db/schema/product-tags.ts create mode 100644 src/db/schema/product-variants.ts create mode 100644 src/db/schema/tags.ts diff --git a/drizzle.config.ts b/drizzle.config.ts index 0a06b36e..789df8e2 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -1,8 +1,6 @@ import { env } from "@/env.js" import { type Config } from "drizzle-kit" -import { dbPrefix } from "@/lib/constants" - export default { schema: "./src/db/schema/index.ts", dialect: "postgresql", @@ -10,5 +8,4 @@ export default { dbCredentials: { url: env.DATABASE_URL, }, - tablesFilter: [`${dbPrefix}_*`], } satisfies Config diff --git a/src/components/layouts/auth-dropdown.tsx b/src/components/layouts/auth-dropdown.tsx index a56810ac..abedb326 100644 --- a/src/components/layouts/auth-dropdown.tsx +++ b/src/components/layouts/auth-dropdown.tsx @@ -76,9 +76,13 @@ export async function AuthDropdown({ ( - - ))} + fallback={ +
+ {Array.from({ length: 3 }).map((_, i) => ( + + ))} +
+ } >
diff --git a/src/components/layouts/sidebar-nav.tsx b/src/components/layouts/sidebar-nav.tsx index 32209584..5681d829 100644 --- a/src/components/layouts/sidebar-nav.tsx +++ b/src/components/layouts/sidebar-nav.tsx @@ -24,7 +24,19 @@ export function SidebarNav({ items, className, ...props }: SidebarNavProps) { {items.map((item, index) => { const Icon = Icons[item.icon ?? "chevronLeft"] - return item.href ? ( + if (!item.href) { + return ( + + + ) + } + + return ( {item.title} - ) : ( - - ) })} diff --git a/src/db/schema/addresses.ts b/src/db/schema/addresses.ts index 060ffe59..2d972b9f 100644 --- a/src/db/schema/addresses.ts +++ b/src/db/schema/addresses.ts @@ -1,5 +1,4 @@ -import { pgTable } from "@/db/utils" -import { varchar } from "drizzle-orm/pg-core" +import { pgTable, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" diff --git a/src/db/schema/carts.ts b/src/db/schema/carts.ts index 488940a1..c9485be7 100644 --- a/src/db/schema/carts.ts +++ b/src/db/schema/carts.ts @@ -1,5 +1,4 @@ -import { pgTable } from "@/db/utils" -import { boolean, json, varchar } from "drizzle-orm/pg-core" +import { boolean, json, pgTable, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" import { type CartItemSchema } from "@/lib/validations/cart" diff --git a/src/db/schema/categories.ts b/src/db/schema/categories.ts index 30a90730..796a7b32 100644 --- a/src/db/schema/categories.ts +++ b/src/db/schema/categories.ts @@ -1,6 +1,5 @@ -import { pgTable } from "@/db/utils" import { relations } from "drizzle-orm" -import { text, varchar } from "drizzle-orm/pg-core" +import { pgTable, text, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" diff --git a/src/db/schema/index.ts b/src/db/schema/index.ts index edc781da..2b83fada 100644 --- a/src/db/schema/index.ts +++ b/src/db/schema/index.ts @@ -1,7 +1,9 @@ export * from "./stores" +export * from "./tags" export * from "./products" export * from "./categories" export * from "./subcategories" +export * from "./product-tags" export * from "./carts" export * from "./subscriptions" export * from "./payments" diff --git a/src/db/schema/notifications.ts b/src/db/schema/notifications.ts index 95803be0..6d47a2b5 100644 --- a/src/db/schema/notifications.ts +++ b/src/db/schema/notifications.ts @@ -1,5 +1,4 @@ -import { pgTable } from "@/db/utils" -import { boolean, varchar } from "drizzle-orm/pg-core" +import { boolean, pgTable, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" diff --git a/src/db/schema/orders.ts b/src/db/schema/orders.ts index 8db345ae..86f58c2a 100644 --- a/src/db/schema/orders.ts +++ b/src/db/schema/orders.ts @@ -1,7 +1,12 @@ -import { pgTable } from "@/db/utils" -import { decimal, index, integer, json, varchar } from "drizzle-orm/pg-core" +import { + decimal, + index, + integer, + json, + pgTable, + varchar, +} from "drizzle-orm/pg-core" -import { dbPrefix } from "@/lib/constants" import { generateId } from "@/lib/id" import { type CheckoutItemSchema } from "@/lib/validations/cart" @@ -38,10 +43,8 @@ export const orders = pgTable( ...lifecycleDates, }, (table) => ({ - storeIdIdx: index(`${dbPrefix}_orders_store_id_idx`).on(table.storeId), - addressIdIdx: index(`${dbPrefix}_orders_address_id_idx`).on( - table.addressId - ), + storeIdIdx: index("orders_store_id_idx").on(table.storeId), + addressIdIdx: index("orders_address_id_idx").on(table.addressId), }) ) diff --git a/src/db/schema/payments.ts b/src/db/schema/payments.ts index 212c1483..98a0b0a8 100644 --- a/src/db/schema/payments.ts +++ b/src/db/schema/payments.ts @@ -1,8 +1,6 @@ -import { pgTable } from "@/db/utils" import { relations } from "drizzle-orm" -import { boolean, index, integer, varchar } from "drizzle-orm/pg-core" +import { boolean, index, integer, pgTable, varchar } from "drizzle-orm/pg-core" -import { dbPrefix } from "@/lib/constants" import { generateId } from "@/lib/id" import { stores } from "./stores" @@ -25,7 +23,7 @@ export const payments = pgTable( ...lifecycleDates, }, (table) => ({ - storeIdIdx: index(`${dbPrefix}_payments_store_id_idx`).on(table.storeId), + storeIdIdx: index("payments_store_id_idx").on(table.storeId), }) ) diff --git a/src/db/schema/product-tags.ts b/src/db/schema/product-tags.ts new file mode 100644 index 00000000..bb049b8e --- /dev/null +++ b/src/db/schema/product-tags.ts @@ -0,0 +1,36 @@ +import { relations } from "drizzle-orm" +import { index, pgTable, varchar } from "drizzle-orm/pg-core" + +import { products } from "./products" +import { tags } from "./tags" +import { lifecycleDates } from "./utils" + +export const productTags = pgTable( + "product_tags", + { + productId: varchar("product_id", { length: 30 }) + .references(() => products.id, { onDelete: "cascade" }) + .notNull(), + tagId: varchar("tag_id", { length: 30 }) + .references(() => tags.id, { onDelete: "cascade" }) + .notNull(), + ...lifecycleDates, + }, + (table) => ({ + productTagIdx: index("product_tags_product_id_tag_id_idx").on( + table.productId, + table.tagId + ), + }) +) + +export const productTagsRelations = relations(productTags, ({ one }) => ({ + product: one(products, { + fields: [productTags.productId], + references: [products.id], + }), + tag: one(tags, { fields: [productTags.tagId], references: [tags.id] }), +})) + +export type ProductTag = typeof productTags.$inferSelect +export type NewProductTag = typeof productTags.$inferInsert diff --git a/src/db/schema/product-variants.ts b/src/db/schema/product-variants.ts new file mode 100644 index 00000000..92645252 --- /dev/null +++ b/src/db/schema/product-variants.ts @@ -0,0 +1,39 @@ +import { relations } from "drizzle-orm" +import { decimal, index, integer, pgTable, varchar } from "drizzle-orm/pg-core" + +import { generateId } from "@/lib/id" + +import { products } from "./products" +import { lifecycleDates } from "./utils" + +export const productVariants = pgTable( + "product_variants", + { + id: varchar("id", { length: 30 }) + .$defaultFn(() => generateId()) + .primaryKey(), + productId: varchar("product_id", { length: 30 }) + .references(() => products.id, { onDelete: "cascade" }) + .notNull(), + name: varchar("name", { length: 256 }).notNull(), + price: decimal("price", { precision: 10, scale: 2 }).notNull().default("0"), + quantity: integer("quantity").notNull().default(0), + ...lifecycleDates, + }, + (table) => ({ + productIdIdx: index("product_variants_product_id_idx").on(table.productId), + }) +) + +export const productVariantsRelations = relations( + productVariants, + ({ one }) => ({ + product: one(products, { + fields: [productVariants.productId], + references: [products.id], + }), + }) +) + +export type ProductVariant = typeof productVariants.$inferSelect +export type NewProductVariant = typeof productVariants.$inferInsert diff --git a/src/db/schema/products.ts b/src/db/schema/products.ts index 584166a7..b63973cd 100644 --- a/src/db/schema/products.ts +++ b/src/db/schema/products.ts @@ -1,4 +1,3 @@ -import { pgTable } from "@/db/utils" import type { StoredFile } from "@/types" import { relations } from "drizzle-orm" import { @@ -6,11 +5,12 @@ import { index, integer, json, + pgEnum, + pgTable, text, varchar, } from "drizzle-orm/pg-core" -import { dbPrefix } from "@/lib/constants" import { generateId } from "@/lib/id" import { categories } from "./categories" @@ -18,6 +18,12 @@ import { stores } from "./stores" import { subcategories } from "./subcategories" import { lifecycleDates } from "./utils" +export const productStatusEnum = pgEnum("product_status", [ + "active", + "draft", + "archived", +]) + export const products = pgTable( "products", { @@ -39,20 +45,22 @@ export const products = pgTable( * @see https://www.postgresql.org/docs/current/datatype-numeric.html#:~:text=9223372036854775808%20to%20%2B9223372036854775807-,decimal,the%20decimal%20point%3B%20up%20to%2016383%20digits%20after%20the%20decimal%20point,-real */ price: decimal("price", { precision: 10, scale: 2 }).notNull().default("0"), + originalPrice: decimal("original_price", { + precision: 10, + scale: 2, + }).default("0"), inventory: integer("inventory").notNull().default(0), rating: integer("rating").notNull().default(0), - tags: json("tags").$type().default(null), + status: productStatusEnum("status").notNull().default("active"), storeId: varchar("store_id", { length: 30 }) .references(() => stores.id, { onDelete: "cascade" }) .notNull(), ...lifecycleDates, }, (table) => ({ - storeIdIdx: index(`${dbPrefix}_products_store_id_idx`).on(table.storeId), - categoryIdIdx: index(`${dbPrefix}_products_category_id_idx`).on( - table.categoryId - ), - subcategoryIdIdx: index(`${dbPrefix}_products_subcategory_id_idx`).on( + storeIdIdx: index("products_store_id_idx").on(table.storeId), + categoryIdIdx: index("products_category_id_idx").on(table.categoryId), + subcategoryIdIdx: index("products_subcategory_id_idx").on( table.subcategoryId ), }) diff --git a/src/db/schema/stores.ts b/src/db/schema/stores.ts index 4f56e158..f677cceb 100644 --- a/src/db/schema/stores.ts +++ b/src/db/schema/stores.ts @@ -1,6 +1,5 @@ -import { pgTable } from "@/db/utils" import { relations } from "drizzle-orm" -import { boolean, text, varchar } from "drizzle-orm/pg-core" +import { boolean, integer, pgTable, text, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" @@ -17,6 +16,7 @@ export const stores = pgTable("stores", { description: text("description"), slug: text("slug").unique(), active: boolean("active").notNull().default(false), + tagLimit: integer("tag_limit").notNull().default(5), stripeAccountId: varchar("stripe_account_id"), ...lifecycleDates, }) diff --git a/src/db/schema/subcategories.ts b/src/db/schema/subcategories.ts index 1148dd1a..c27cded8 100644 --- a/src/db/schema/subcategories.ts +++ b/src/db/schema/subcategories.ts @@ -1,8 +1,6 @@ -import { pgTable } from "@/db/utils" import { relations } from "drizzle-orm" -import { index, text, varchar } from "drizzle-orm/pg-core" +import { index, pgTable, text, varchar } from "drizzle-orm/pg-core" -import { dbPrefix } from "@/lib/constants" import { generateId } from "@/lib/id" import { categories } from "./categories" @@ -23,9 +21,9 @@ export const subcategories = pgTable( ...lifecycleDates, }, (table) => ({ - subcategoriesCategoryIdIdx: index( - `${dbPrefix}_subcategories_category_id_idx` - ).on(table.categoryId), + subcategoriesCategoryIdIdx: index("subcategories_category_id_idx").on( + table.categoryId + ), }) ) diff --git a/src/db/schema/subscriptions.ts b/src/db/schema/subscriptions.ts index f20e923c..1f7f8a2e 100644 --- a/src/db/schema/subscriptions.ts +++ b/src/db/schema/subscriptions.ts @@ -1,5 +1,4 @@ -import { pgTable } from "@/db/utils" -import { timestamp, varchar } from "drizzle-orm/pg-core" +import { pgTable, timestamp, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" diff --git a/src/db/schema/tags.ts b/src/db/schema/tags.ts new file mode 100644 index 00000000..370afa47 --- /dev/null +++ b/src/db/schema/tags.ts @@ -0,0 +1,34 @@ +import { relations } from "drizzle-orm" +import { index, pgTable, varchar } from "drizzle-orm/pg-core" + +import { generateId } from "@/lib/id" + +import { products } from "./products" +import { stores } from "./stores" + +export const tags = pgTable( + "tags", + { + id: varchar("id", { length: 30 }) + .$defaultFn(() => generateId()) + .primaryKey(), + name: varchar("name", { length: 50 }).notNull(), + color: varchar("color", { length: 50 }).notNull().default("#000000"), + storeId: varchar("store_id", { length: 30 }) + .references(() => stores.id, { onDelete: "cascade" }) + .notNull(), + }, + (table) => ({ + storeIdIdx: index("tags_store_id_idx").on(table.storeId), + }) +) + +export const tagsRelations = relations(tags, ({ one, many }) => ({ + store: one(stores, { fields: [tags.storeId], references: [stores.id] }), + products: many(products, { + relationName: "productTags", + }), +})) + +export type Tag = typeof tags.$inferSelect +export type NewTag = typeof tags.$inferInsert diff --git a/src/db/utils.ts b/src/db/utils.ts index ee58cfe3..f43145ee 100644 --- a/src/db/utils.ts +++ b/src/db/utils.ts @@ -1,15 +1,3 @@ -import { pgTableCreator } from "drizzle-orm/pg-core" - -import { dbPrefix } from "@/lib/constants" - -/** - * This lets us use the multi-project schema feature of Drizzle ORM. So the same - * database instance can be used for multiple projects. - * - * @see https://orm.drizzle.team/docs/goodies#multi-project-schema - */ -export const pgTable = pgTableCreator((name) => `${dbPrefix}_${name}`) - // @see https://gist.github.com/rphlmr/0d1722a794ed5a16da0fdf6652902b15 export function takeFirst(items: T[]) { diff --git a/src/lib/actions/product.ts b/src/lib/actions/product.ts index dc2813c3..74322255 100644 --- a/src/lib/actions/product.ts +++ b/src/lib/actions/product.ts @@ -89,7 +89,6 @@ export async function getProducts(input: SearchParams) { price: products.price, inventory: products.inventory, rating: products.rating, - tags: products.tags, storeId: products.storeId, createdAt: products.createdAt, updatedAt: products.updatedAt, diff --git a/src/lib/actions/seed.ts b/src/lib/actions/seed.ts index 9dc8c618..1c95ab1c 100644 --- a/src/lib/actions/seed.ts +++ b/src/lib/actions/seed.ts @@ -1,4 +1,3 @@ -import productsJson from "@/assets/data/products.json" import { db } from "@/db" import { categories, @@ -7,6 +6,7 @@ import { type Product, type Subcategory, } from "@/db/schema" +import { auth } from "@clerk/nextjs/server" import { faker } from "@faker-js/faker" import { eq } from "drizzle-orm" @@ -70,6 +70,12 @@ export async function seedProducts({ storeId: string count?: number }) { + const { userId } = auth() + + if (!userId) { + throw new Error("User not found") + } + const productCount = count ?? 10 const data: Product[] = [] @@ -92,13 +98,14 @@ export async function seedProducts({ name: faker.commerce.productName(), description: faker.commerce.productDescription(), price: faker.commerce.price(), + originalPrice: faker.commerce.price(), + status: faker.helpers.shuffle(products.status.enumValues)[0] ?? "active", images: null, categoryId: category, subcategoryId: faker.helpers.shuffle(allSubcategories)[0]?.id ?? null, storeId, inventory: faker.number.float({ min: 50, max: 100 }), rating: faker.number.float({ min: 0, max: 5 }), - tags: productConfig.tags.slice(0, faker.number.float({ min: 0, max: 5 })), createdAt: faker.date.past(), updatedAt: faker.date.past(), }) @@ -108,51 +115,3 @@ export async function seedProducts({ console.log(`📝 Inserting ${data.length} products`) await db.insert(products).values(data) } - -export async function seedCozyProducts({ storeId }: { storeId: string }) { - const data: Product[] = [] - - for (const product of productsJson) { - const category = await db.query.categories.findFirst({ - columns: { - id: true, - }, - where: eq(categories.slug, product.category), - }) - - if (!category) { - throw new Error(`Category not found: ${product.category}`) - } - - const subcategory = await db.query.subcategories.findFirst({ - columns: { - id: true, - }, - where: eq(subcategories.slug, product.subcategory), - }) - - data.push({ - id: product.id, - name: product.name, - description: product.description, - price: product.price, - images: product.images.map((image) => ({ - id: image.id, - name: image.name, - url: image.url, - })), - categoryId: category.id, - subcategoryId: subcategory?.id ?? null, - storeId, - inventory: product.inventory, - rating: product.rating, - tags: product.tags, - createdAt: new Date(), - updatedAt: new Date(), - }) - } - - await db.delete(products).where(eq(products.storeId, storeId)) - console.log(`📝 Inserting ${data.length} products`) - await db.insert(products).values(data) -} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index fbeaa55b..40a5a115 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -8,5 +8,3 @@ export const redirects = { toVerify: "/verify-email", afterVerify: "/dashboard/stores", } as const - -export const dbPrefix = "skateshop" From dee943553c5e5d695efd6112b6400cfdb9eb21ed Mon Sep 17 00:00:00 2001 From: sadmann7 Date: Sun, 26 May 2024 21:50:48 +0600 Subject: [PATCH 2/3] feat: update schema --- drizzle/0000_condemned_hedge_knight.sql | 169 -- drizzle/meta/0000_snapshot.json | 871 --------- drizzle/meta/_journal.json | 14 +- package.json | 28 +- pnpm-lock.yaml | 1595 +++++++++-------- .../dashboard/billing/_components/billing.tsx | 58 +- .../(dashboard)/dashboard/billing/page.tsx | 10 +- src/app/sitemap.ts | 2 +- ...cription-form.tsx => manage-plan-form.tsx} | 12 +- src/components/rate-limit-alert.tsx | 5 +- src/config/pricing.ts | 48 + src/config/subscription.ts | 27 - src/db/schema/addresses.ts | 14 +- src/db/schema/carts.ts | 4 +- src/db/schema/categories.ts | 4 +- src/db/schema/customers.ts | 40 + src/db/schema/index.ts | 21 +- src/db/schema/notifications.ts | 8 +- src/db/schema/orders.ts | 13 +- src/db/schema/payments.ts | 12 +- src/db/schema/product-tags.ts | 36 - src/db/schema/product-variants.ts | 39 - src/db/schema/products.ts | 2 +- src/db/schema/stocks.ts | 40 + src/db/schema/stores.ts | 32 +- src/db/schema/subcategories.ts | 4 +- src/db/schema/subscriptions.ts | 20 - src/db/schema/tags.ts | 53 +- src/db/schema/variants.ts | 122 ++ src/lib/actions/stripe.ts | 42 +- src/lib/queries/store.ts | 2 +- src/lib/queries/user.ts | 6 +- src/lib/subscription.ts | 18 +- src/lib/validations/stripe.ts | 2 +- src/types/index.ts | 16 +- 35 files changed, 1282 insertions(+), 2107 deletions(-) delete mode 100644 drizzle/0000_condemned_hedge_knight.sql delete mode 100644 drizzle/meta/0000_snapshot.json rename src/components/{manage-subscription-form.tsx => manage-plan-form.tsx} (76%) create mode 100644 src/config/pricing.ts delete mode 100644 src/config/subscription.ts create mode 100644 src/db/schema/customers.ts delete mode 100644 src/db/schema/product-tags.ts delete mode 100644 src/db/schema/product-variants.ts create mode 100644 src/db/schema/stocks.ts delete mode 100644 src/db/schema/subscriptions.ts create mode 100644 src/db/schema/variants.ts diff --git a/drizzle/0000_condemned_hedge_knight.sql b/drizzle/0000_condemned_hedge_knight.sql deleted file mode 100644 index b2bc73cc..00000000 --- a/drizzle/0000_condemned_hedge_knight.sql +++ /dev/null @@ -1,169 +0,0 @@ -CREATE TABLE IF NOT EXISTS "skateshop_stores" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "user_id" varchar(36), - "name" varchar NOT NULL, - "description" text, - "slug" text, - "active" boolean DEFAULT false NOT NULL, - "stripe_account_id" varchar, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp, - CONSTRAINT "skateshop_stores_slug_unique" UNIQUE("slug") -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_products" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "name" varchar(256) NOT NULL, - "description" text, - "images" json DEFAULT 'null'::json, - "category_id" varchar(30) NOT NULL, - "subcategory_id" varchar(30), - "price" numeric(10, 2) DEFAULT '0' NOT NULL, - "inventory" integer DEFAULT 0 NOT NULL, - "rating" integer DEFAULT 0 NOT NULL, - "tags" json DEFAULT 'null'::json, - "store_id" varchar(30) NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_categories" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "name" varchar(256) NOT NULL, - "slug" varchar(256) NOT NULL, - "description" text, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp, - CONSTRAINT "skateshop_categories_name_unique" UNIQUE("name"), - CONSTRAINT "skateshop_categories_slug_unique" UNIQUE("slug") -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_subcategories" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "name" varchar(256) NOT NULL, - "slug" varchar(256) NOT NULL, - "description" text, - "category_id" varchar(30) NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp, - CONSTRAINT "skateshop_subcategories_name_unique" UNIQUE("name"), - CONSTRAINT "skateshop_subcategories_slug_unique" UNIQUE("slug") -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_carts" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "payment_intent_id" varchar(256), - "client_secret" varchar(256), - "items" json DEFAULT 'null'::json, - "closed" boolean DEFAULT false NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_subscriptions" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "user_id" varchar(36), - "stripe_subscription_id" varchar(256), - "stripe_price_id" varchar(256), - "stripe_customer_id" varchar(256), - "stripe_current_period_end" timestamp, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_payments" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "store_id" varchar(30) NOT NULL, - "stripe_account_id" varchar(256) NOT NULL, - "stripe_account_created_at" integer, - "stripe_account_expires_at" integer, - "details_submitted" boolean DEFAULT false NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_addresses" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "line1" varchar(256), - "line2" varchar(256), - "city" varchar(256), - "state" varchar(256), - "postal_code" varchar(256), - "country" varchar(256), - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_orders" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "store_id" varchar(30) NOT NULL, - "items" json DEFAULT 'null'::json, - "quantity" integer, - "amount" numeric(10, 2) DEFAULT '0' NOT NULL, - "stripe_payment_intent_id" varchar(256) NOT NULL, - "stripe_payment_intent_status" varchar(256) NOT NULL, - "name" varchar(256) NOT NULL, - "email" varchar(256) NOT NULL, - "address_id" varchar(30) NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "skateshop_notifications" ( - "id" varchar(30) PRIMARY KEY NOT NULL, - "user_id" varchar(36), - "email" varchar(256) NOT NULL, - "token" varchar(256) NOT NULL, - "referred_by" varchar(256), - "communication" boolean DEFAULT false NOT NULL, - "newsletter" boolean DEFAULT false NOT NULL, - "marketing" boolean DEFAULT false NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT current_timestamp, - CONSTRAINT "skateshop_notifications_email_unique" UNIQUE("email"), - CONSTRAINT "skateshop_notifications_token_unique" UNIQUE("token") -); ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "skateshop_products" ADD CONSTRAINT "skateshop_products_subcategory_id_skateshop_subcategories_id_fk" FOREIGN KEY ("subcategory_id") REFERENCES "public"."skateshop_subcategories"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "skateshop_products" ADD CONSTRAINT "skateshop_products_store_id_skateshop_stores_id_fk" FOREIGN KEY ("store_id") REFERENCES "public"."skateshop_stores"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "skateshop_subcategories" ADD CONSTRAINT "skateshop_subcategories_category_id_skateshop_categories_id_fk" FOREIGN KEY ("category_id") REFERENCES "public"."skateshop_categories"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "skateshop_payments" ADD CONSTRAINT "skateshop_payments_store_id_skateshop_stores_id_fk" FOREIGN KEY ("store_id") REFERENCES "public"."skateshop_stores"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "skateshop_orders" ADD CONSTRAINT "skateshop_orders_store_id_skateshop_stores_id_fk" FOREIGN KEY ("store_id") REFERENCES "public"."skateshop_stores"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "skateshop_orders" ADD CONSTRAINT "skateshop_orders_address_id_skateshop_addresses_id_fk" FOREIGN KEY ("address_id") REFERENCES "public"."skateshop_addresses"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -CREATE INDEX IF NOT EXISTS "skateshop_products_store_id_idx" ON "skateshop_products" ("store_id");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "skateshop_products_category_id_idx" ON "skateshop_products" ("category_id");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "skateshop_products_subcategory_id_idx" ON "skateshop_products" ("subcategory_id");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "skateshop_subcategories_category_id_idx" ON "skateshop_subcategories" ("category_id");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "skateshop_payments_store_id_idx" ON "skateshop_payments" ("store_id");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "skateshop_orders_store_id_idx" ON "skateshop_orders" ("store_id");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "skateshop_orders_address_id_idx" ON "skateshop_orders" ("address_id"); \ No newline at end of file diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json deleted file mode 100644 index 2442a175..00000000 --- a/drizzle/meta/0000_snapshot.json +++ /dev/null @@ -1,871 +0,0 @@ -{ - "id": "431f1539-c8eb-4eea-b0b8-9a86b7c9b399", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "6", - "dialect": "postgresql", - "tables": { - "public.skateshop_stores": { - "name": "skateshop_stores", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar(36)", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "active": { - "name": "active", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "stripe_account_id": { - "name": "stripe_account_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "skateshop_stores_slug_unique": { - "name": "skateshop_stores_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - } - }, - "public.skateshop_products": { - "name": "skateshop_products", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "images": { - "name": "images", - "type": "json", - "primaryKey": false, - "notNull": false, - "default": "'null'::json" - }, - "category_id": { - "name": "category_id", - "type": "varchar(30)", - "primaryKey": false, - "notNull": true - }, - "subcategory_id": { - "name": "subcategory_id", - "type": "varchar(30)", - "primaryKey": false, - "notNull": false - }, - "price": { - "name": "price", - "type": "numeric(10, 2)", - "primaryKey": false, - "notNull": true, - "default": "'0'" - }, - "inventory": { - "name": "inventory", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "rating": { - "name": "rating", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "tags": { - "name": "tags", - "type": "json", - "primaryKey": false, - "notNull": false, - "default": "'null'::json" - }, - "store_id": { - "name": "store_id", - "type": "varchar(30)", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": { - "skateshop_products_store_id_idx": { - "name": "skateshop_products_store_id_idx", - "columns": [ - "store_id" - ], - "isUnique": false - }, - "skateshop_products_category_id_idx": { - "name": "skateshop_products_category_id_idx", - "columns": [ - "category_id" - ], - "isUnique": false - }, - "skateshop_products_subcategory_id_idx": { - "name": "skateshop_products_subcategory_id_idx", - "columns": [ - "subcategory_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "skateshop_products_subcategory_id_skateshop_subcategories_id_fk": { - "name": "skateshop_products_subcategory_id_skateshop_subcategories_id_fk", - "tableFrom": "skateshop_products", - "tableTo": "skateshop_subcategories", - "columnsFrom": [ - "subcategory_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "skateshop_products_store_id_skateshop_stores_id_fk": { - "name": "skateshop_products_store_id_skateshop_stores_id_fk", - "tableFrom": "skateshop_products", - "tableTo": "skateshop_stores", - "columnsFrom": [ - "store_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.skateshop_categories": { - "name": "skateshop_categories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "skateshop_categories_name_unique": { - "name": "skateshop_categories_name_unique", - "nullsNotDistinct": false, - "columns": [ - "name" - ] - }, - "skateshop_categories_slug_unique": { - "name": "skateshop_categories_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - } - }, - "public.skateshop_subcategories": { - "name": "skateshop_subcategories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "category_id": { - "name": "category_id", - "type": "varchar(30)", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": { - "skateshop_subcategories_category_id_idx": { - "name": "skateshop_subcategories_category_id_idx", - "columns": [ - "category_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "skateshop_subcategories_category_id_skateshop_categories_id_fk": { - "name": "skateshop_subcategories_category_id_skateshop_categories_id_fk", - "tableFrom": "skateshop_subcategories", - "tableTo": "skateshop_categories", - "columnsFrom": [ - "category_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "skateshop_subcategories_name_unique": { - "name": "skateshop_subcategories_name_unique", - "nullsNotDistinct": false, - "columns": [ - "name" - ] - }, - "skateshop_subcategories_slug_unique": { - "name": "skateshop_subcategories_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - } - }, - "public.skateshop_carts": { - "name": "skateshop_carts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "payment_intent_id": { - "name": "payment_intent_id", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "client_secret": { - "name": "client_secret", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "items": { - "name": "items", - "type": "json", - "primaryKey": false, - "notNull": false, - "default": "'null'::json" - }, - "closed": { - "name": "closed", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.skateshop_subscriptions": { - "name": "skateshop_subscriptions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar(36)", - "primaryKey": false, - "notNull": false - }, - "stripe_subscription_id": { - "name": "stripe_subscription_id", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "stripe_price_id": { - "name": "stripe_price_id", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "stripe_customer_id": { - "name": "stripe_customer_id", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "stripe_current_period_end": { - "name": "stripe_current_period_end", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.skateshop_payments": { - "name": "skateshop_payments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "store_id": { - "name": "store_id", - "type": "varchar(30)", - "primaryKey": false, - "notNull": true - }, - "stripe_account_id": { - "name": "stripe_account_id", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "stripe_account_created_at": { - "name": "stripe_account_created_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "stripe_account_expires_at": { - "name": "stripe_account_expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "details_submitted": { - "name": "details_submitted", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": { - "skateshop_payments_store_id_idx": { - "name": "skateshop_payments_store_id_idx", - "columns": [ - "store_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "skateshop_payments_store_id_skateshop_stores_id_fk": { - "name": "skateshop_payments_store_id_skateshop_stores_id_fk", - "tableFrom": "skateshop_payments", - "tableTo": "skateshop_stores", - "columnsFrom": [ - "store_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.skateshop_addresses": { - "name": "skateshop_addresses", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "line1": { - "name": "line1", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "line2": { - "name": "line2", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "city": { - "name": "city", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "state": { - "name": "state", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "postal_code": { - "name": "postal_code", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "country": { - "name": "country", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.skateshop_orders": { - "name": "skateshop_orders", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "store_id": { - "name": "store_id", - "type": "varchar(30)", - "primaryKey": false, - "notNull": true - }, - "items": { - "name": "items", - "type": "json", - "primaryKey": false, - "notNull": false, - "default": "'null'::json" - }, - "quantity": { - "name": "quantity", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "amount": { - "name": "amount", - "type": "numeric(10, 2)", - "primaryKey": false, - "notNull": true, - "default": "'0'" - }, - "stripe_payment_intent_id": { - "name": "stripe_payment_intent_id", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "stripe_payment_intent_status": { - "name": "stripe_payment_intent_status", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "address_id": { - "name": "address_id", - "type": "varchar(30)", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": { - "skateshop_orders_store_id_idx": { - "name": "skateshop_orders_store_id_idx", - "columns": [ - "store_id" - ], - "isUnique": false - }, - "skateshop_orders_address_id_idx": { - "name": "skateshop_orders_address_id_idx", - "columns": [ - "address_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "skateshop_orders_store_id_skateshop_stores_id_fk": { - "name": "skateshop_orders_store_id_skateshop_stores_id_fk", - "tableFrom": "skateshop_orders", - "tableTo": "skateshop_stores", - "columnsFrom": [ - "store_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "skateshop_orders_address_id_skateshop_addresses_id_fk": { - "name": "skateshop_orders_address_id_skateshop_addresses_id_fk", - "tableFrom": "skateshop_orders", - "tableTo": "skateshop_addresses", - "columnsFrom": [ - "address_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.skateshop_notifications": { - "name": "skateshop_notifications", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(30)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar(36)", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar(256)", - "primaryKey": false, - "notNull": true - }, - "referred_by": { - "name": "referred_by", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "communication": { - "name": "communication", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "newsletter": { - "name": "newsletter", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "marketing": { - "name": "marketing", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "current_timestamp" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "skateshop_notifications_email_unique": { - "name": "skateshop_notifications_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - }, - "skateshop_notifications_token_unique": { - "name": "skateshop_notifications_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - } - } - }, - "enums": {}, - "schemas": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index d6a089a8..9e5a7ddf 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -1,13 +1 @@ -{ - "version": "5", - "dialect": "mysql", - "entries": [ - { - "idx": 0, - "version": "6", - "when": 1715957988777, - "tag": "0000_condemned_hedge_knight", - "breakpoints": true - } - ] -} \ No newline at end of file +{"version":"5","dialect":"mysql","entries":[]} \ No newline at end of file diff --git a/package.json b/package.json index 350e964d..8bb393bb 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "unlighthouse": "pnpm dlx unlighthouse --site https://skateshop.sadmn.com" }, "dependencies": { - "@clerk/nextjs": "^5.1.0", + "@clerk/nextjs": "^5.1.2", "@clerk/themes": "^2.1.7", "@hookform/resolvers": "^3.4.2", "@loglib/tracker": "^0.8.0", @@ -52,18 +52,18 @@ "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", - "@react-email/components": "^0.0.18", - "@react-email/tailwind": "0.0.17", + "@react-email/components": "^0.0.19", + "@react-email/tailwind": "0.0.18", "@stripe/react-stripe-js": "^2.7.1", "@stripe/stripe-js": "^3.4.1", "@t3-oss/env-nextjs": "^0.10.1", "@tanstack/match-sorter-utils": "^8.15.1", "@tanstack/react-table": "^8.17.3", "@tremor/react": "^3.17.2", - "@uploadthing/react": "^6.5.4", + "@uploadthing/react": "^6.6.0", "@upstash/ratelimit": "^1.1.3", - "@upstash/redis": "^1.31.1", - "ai": "^3.1.12", + "@upstash/redis": "^1.31.2", + "ai": "^3.1.14", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.0.0", @@ -71,7 +71,7 @@ "date-fns": "^3.6.0", "drizzle-orm": "^0.30.10", "embla-carousel-react": "8.1.3", - "framer-motion": "^11.2.5", + "framer-motion": "^11.2.6", "geist": "^1.3.0", "input-otp": "^1.2.4", "nanoid": "^5.0.7", @@ -86,7 +86,7 @@ "react-day-picker": "^8.10.1", "react-dom": "18.3.1", "react-dropzone": "^14.2.3", - "react-email": "^2.1.3", + "react-email": "^2.1.4", "react-hook-form": "^7.51.5", "react-intersection-observer": "^9.10.2", "react-markdown": "^9.0.1", @@ -98,10 +98,10 @@ "resend": "^3.2.0", "server-only": "^0.0.1", "sonner": "^1.4.41", - "stripe": "^15.7.0", + "stripe": "^15.8.0", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", - "uploadthing": "^6.10.4", + "uploadthing": "^6.12.0", "vaul": "^0.9.1", "zod": "^3.23.8" }, @@ -113,18 +113,18 @@ "@total-typescript/ts-reset": "^0.5.1", "@types/eslint": "^8.56.10", "@types/node": "^20.12.12", - "@types/react": "^18.3.2", + "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@types/react-syntax-highlighter": "^15.5.13", "@typescript-eslint/eslint-plugin": "^7.10.0", "@typescript-eslint/parser": "^7.10.0", "autoprefixer": "^10.4.19", "dotenv-cli": "^7.4.2", - "drizzle-kit": "^0.21.2", + "drizzle-kit": "^0.21.4", "eslint": "^8.57.0", "eslint-config-next": "^14.2.3", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-tailwindcss": "^3.15.2", + "eslint-plugin-tailwindcss": "^3.17.0", "postcss": "^8.4.38", "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.5.14", @@ -139,7 +139,7 @@ "rimraf": "^5.0.7", "shiki": "^1.6.0", "tailwindcss": "^3.4.3", - "tsx": "^4.10.5", + "tsx": "^4.11.0", "typescript": "^5.4.5", "unist-builder": "^4.0.0", "unist-util-visit": "^5.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5e7d8a6..63d9478f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@clerk/nextjs': - specifier: ^5.1.0 - version: 5.1.0(next@14.2.3)(react-dom@18.3.1)(react@18.3.1) + specifier: ^5.1.2 + version: 5.1.2(next@14.2.3)(react-dom@18.3.1)(react@18.3.1) '@clerk/themes': specifier: ^2.1.7 version: 2.1.7 @@ -19,73 +19,73 @@ dependencies: version: 0.8.0(react@18.3.1) '@radix-ui/react-accordion': specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-alert-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-aspect-ratio': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-avatar': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-checkbox': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.0.6 - version: 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-hover-card': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@radix-ui/react-label': specifier: ^2.0.2 - version: 2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-navigation-menu': specifier: ^1.1.4 - version: 1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slider': specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.0.2 - version: 1.0.2(@types/react@18.3.2)(react@18.3.1) + version: 1.0.2(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@react-email/components': - specifier: ^0.0.18 - version: 0.0.18(@types/react@18.3.2)(react@18.3.1) + specifier: ^0.0.19 + version: 0.0.19(@types/react@18.3.3)(react@18.3.1) '@react-email/tailwind': - specifier: 0.0.17 - version: 0.0.17(react@18.3.1) + specifier: 0.0.18 + version: 0.0.18(react@18.3.1) '@stripe/react-stripe-js': specifier: ^2.7.1 version: 2.7.1(@stripe/stripe-js@3.4.1)(react-dom@18.3.1)(react@18.3.1) @@ -105,17 +105,17 @@ dependencies: specifier: ^3.17.2 version: 3.17.2(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.3) '@uploadthing/react': - specifier: ^6.5.4 - version: 6.5.4(next@14.2.3)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(uploadthing@6.10.4)(vue@3.4.27) + specifier: ^6.6.0 + version: 6.6.0(next@14.2.3)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(uploadthing@6.12.0)(vue@3.4.27) '@upstash/ratelimit': specifier: ^1.1.3 version: 1.1.3 '@upstash/redis': - specifier: ^1.31.1 - version: 1.31.1 + specifier: ^1.31.2 + version: 1.31.2 ai: - specifier: ^3.1.12 - version: 3.1.12(openai@4.47.1)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27)(zod@3.23.8) + specifier: ^3.1.14 + version: 3.1.14(openai@4.47.1)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27)(zod@3.23.8) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -124,22 +124,22 @@ dependencies: version: 2.1.1 cmdk: specifier: ^1.0.0 - version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) contentlayer: specifier: ^0.3.4 - version: 0.3.4(esbuild@0.21.3) + version: 0.3.4(esbuild@0.21.4) date-fns: specifier: ^3.6.0 version: 3.6.0 drizzle-orm: specifier: ^0.30.10 - version: 0.30.10(@opentelemetry/api@1.8.0)(@types/react@18.3.2)(pg@8.11.5)(postgres@3.4.4)(react@18.3.1) + version: 0.30.10(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(pg@8.11.5)(postgres@3.4.4)(react@18.3.1) embla-carousel-react: specifier: 8.1.3 version: 8.1.3(react@18.3.1) framer-motion: - specifier: ^11.2.5 - version: 11.2.5(react-dom@18.3.1)(react@18.3.1) + specifier: ^11.2.6 + version: 11.2.6(react-dom@18.3.1)(react@18.3.1) geist: specifier: ^1.3.0 version: 1.3.0(next@14.2.3) @@ -154,7 +154,7 @@ dependencies: version: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.8.0)(react-dom@18.3.1)(react@18.3.1) next-contentlayer: specifier: ^0.3.4 - version: 0.3.4(contentlayer@0.3.4)(esbuild@0.21.3)(next@14.2.3)(react-dom@18.3.1)(react@18.3.1) + version: 0.3.4(contentlayer@0.3.4)(esbuild@0.21.4)(next@14.2.3)(react-dom@18.3.1)(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1)(react@18.3.1) @@ -183,8 +183,8 @@ dependencies: specifier: ^14.2.3 version: 14.2.3(react@18.3.1) react-email: - specifier: ^2.1.3 - version: 2.1.3(@babel/core@7.24.5)(@opentelemetry/api@1.8.0)(eslint@8.57.0) + specifier: ^2.1.4 + version: 2.1.4(@opentelemetry/api@1.8.0)(eslint@8.57.0) react-hook-form: specifier: ^7.51.5 version: 7.51.5(react@18.3.1) @@ -193,7 +193,7 @@ dependencies: version: 9.10.2(react-dom@18.3.1)(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.3.2)(react@18.3.1) + version: 9.0.1(@types/react@18.3.3)(react@18.3.1) react-medium-image-zoom: specifier: ^5.2.4 version: 5.2.4(react-dom@18.3.1)(react@18.3.1) @@ -202,7 +202,7 @@ dependencies: version: 15.5.0(react@18.3.1) react-textarea-autosize: specifier: ^8.5.3 - version: 8.5.3(@types/react@18.3.2)(react@18.3.1) + version: 8.5.3(@types/react@18.3.3)(react@18.3.1) react-use-measure: specifier: ^2.1.1 version: 2.1.1(react-dom@18.3.1)(react@18.3.1) @@ -219,8 +219,8 @@ dependencies: specifier: ^1.4.41 version: 1.4.41(react-dom@18.3.1)(react@18.3.1) stripe: - specifier: ^15.7.0 - version: 15.7.0 + specifier: ^15.8.0 + version: 15.8.0 tailwind-merge: specifier: ^2.3.0 version: 2.3.0 @@ -228,11 +228,11 @@ dependencies: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.3) uploadthing: - specifier: ^6.10.4 - version: 6.10.4(next@14.2.3)(tailwindcss@3.4.3) + specifier: ^6.12.0 + version: 6.12.0(next@14.2.3)(tailwindcss@3.4.3) vaul: specifier: ^0.9.1 - version: 0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) zod: specifier: ^3.23.8 version: 3.23.8 @@ -260,8 +260,8 @@ devDependencies: specifier: ^20.12.12 version: 20.12.12 '@types/react': - specifier: ^18.3.2 - version: 18.3.2 + specifier: ^18.3.3 + version: 18.3.3 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -281,8 +281,8 @@ devDependencies: specifier: ^7.4.2 version: 7.4.2 drizzle-kit: - specifier: ^0.21.2 - version: 0.21.2 + specifier: ^0.21.4 + version: 0.21.4 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -293,8 +293,8 @@ devDependencies: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) eslint-plugin-tailwindcss: - specifier: ^3.15.2 - version: 3.15.2(tailwindcss@3.4.3) + specifier: ^3.17.0 + version: 3.17.0(tailwindcss@3.4.3) postcss: specifier: ^8.4.38 version: 8.4.38 @@ -335,8 +335,8 @@ devDependencies: specifier: ^3.4.3 version: 3.4.3 tsx: - specifier: ^4.10.5 - version: 4.10.5 + specifier: ^4.11.0 + version: 4.11.0 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -349,8 +349,8 @@ devDependencies: packages: - /@ai-sdk/provider-utils@0.0.8(zod@3.23.8): - resolution: {integrity: sha512-J/ZNvFhORd3gCeK3jFvNrxp1Dnvy6PvPq21RJ+OsIEjsoHeKQaHALCWG0aJunXDuzd+Mck/lCg7LqA0qmIbHIg==} + /@ai-sdk/provider-utils@0.0.9(zod@3.23.8): + resolution: {integrity: sha512-bZFTVp/GIZ3Yz4VejYs0B93bmnwfk+RoSHAQxAe9WamkQFrZLuNgd2ngAFjF6b4naLynWe1ZCk+dLWEtozCciw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -358,15 +358,15 @@ packages: zod: optional: true dependencies: - '@ai-sdk/provider': 0.0.5 + '@ai-sdk/provider': 0.0.6 eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 zod: 3.23.8 dev: false - /@ai-sdk/provider@0.0.5: - resolution: {integrity: sha512-TZDldBZ5clAsNwJ2PSeo/b1uILj9a2lvi0rnOj2RCNZDgaVqFRVIAnKyeHusCRv2lzhPIw03B3fiGI6VoLzOAA==} + /@ai-sdk/provider@0.0.6: + resolution: {integrity: sha512-kiPqIsSnUimckaUn87WepxfjPNdy8SXlPP7P6yWuG3e1NmyFHcyuH6EBBZxXLmu0oZtkb+QEeP3UDWGSc+wwKQ==} engines: {node: '>=18'} dependencies: json-schema: 0.4.0 @@ -383,15 +383,15 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.24.6: + resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.5 + '@babel/highlight': 7.24.6 picocolors: 1.0.1 - /@babel/compat-data@7.24.4: - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + /@babel/compat-data@7.24.6: + resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} engines: {node: '>=6.9.0'} /@babel/core@7.24.5: @@ -399,15 +399,15 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helpers': 7.24.5 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.5) + '@babel/helpers': 7.24.6 '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/template': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -415,164 +415,200 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: false - /@babel/generator@7.24.5: - resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} + /@babel/core@7.24.6: + resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helpers': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/template': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.24.6: + resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.24.6: + resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 + '@babel/compat-data': 7.24.6 + '@babel/helper-validator-option': 7.24.6 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + /@babel/helper-environment-visitor@7.24.6: + resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} engines: {node: '>=6.9.0'} - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + /@babel/helper-function-name@7.24.6: + resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/helper-hoist-variables@7.24.6: + resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + /@babel/helper-module-imports@7.24.6: + resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + /@babel/helper-module-transforms@7.24.6(@babel/core@7.24.5): + resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 - - /@babel/helper-simple-access@7.24.5: - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + dev: false + + /@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + dev: true + + /@babel/helper-simple-access@7.24.6: + resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 - /@babel/helper-split-export-declaration@7.24.5: - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + /@babel/helper-split-export-declaration@7.24.6: + resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + /@babel/helper-string-parser@7.24.6: + resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-validator-identifier@7.24.6: + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@babel/helper-validator-option@7.24.6: + resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.24.5: - resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + /@babel/helpers@7.24.6: + resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/highlight@7.24.6: + resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 - /@babel/parser@7.24.1: - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + /@babel/parser@7.24.5: + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 dev: false - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + /@babel/parser@7.24.6: + resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@babel/runtime@7.24.6: + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + /@babel/template@7.24.6: + resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 - /@babel/traverse@7.24.5: - resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} + /@babel/traverse@7.24.6: + resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + /@babel/types@7.24.6: + resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-string-parser': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 to-fast-properties: 2.0.0 - /@clerk/backend@1.2.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-TI3w7R2MGOHIl3ytWvyX60eiPIKD6XSz9tonqbek8sWrAgE1IR1AsPaND6Whc6ly5v1AiOrXJo9lJbRowIKXxA==} + /@clerk/backend@1.2.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-4NxL0VU042dgrhDTqvCFws9v5Kmg+VlA70fD0sQWWBQJxNr2pEnjHfKG21ta7qIqexXPk4Ftr0qZk2/wRiex3A==} engines: {node: '>=18.17.0'} dependencies: - '@clerk/shared': 2.2.0(react-dom@18.3.1)(react@18.3.1) + '@clerk/shared': 2.2.1(react-dom@18.3.1)(react@18.3.1) cookie: 0.5.0 snakecase-keys: 5.4.4 tslib: 2.4.1 @@ -581,31 +617,31 @@ packages: - react-dom dev: false - /@clerk/clerk-react@5.2.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-a3dus1JRK7sw7cJjnJQexMA0HGTlFDEjoK0/y+HhaDxzcfhoUgvhhTWLWHWfwCHfEtMYhzIvdkyvXJDZpWTpvQ==} + /@clerk/clerk-react@5.2.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-cWy5ZC1+6rSqD8YRoewEULFl0Gs0Sbg3f8coLJQamg60qbAMlc6SkBwOYXfs4B0npUZAJc2j68gXSjNtvAyeKQ==} engines: {node: '>=18.17.0'} peerDependencies: - react: '>=18' - react-dom: '>=18' + react: '>=18 || >=19.0.0-beta' + react-dom: '>=18 || >=19.0.0-beta' dependencies: - '@clerk/shared': 2.2.0(react-dom@18.3.1)(react@18.3.1) + '@clerk/shared': 2.2.1(react-dom@18.3.1)(react@18.3.1) '@clerk/types': 4.5.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.4.1 dev: false - /@clerk/nextjs@5.1.0(next@14.2.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-rIVGGKgYhM4+0ECWsB4iw/wzjHLIyoPlx9oR6mg4UPgxoR1TUOd0Gp6iBLc/k7fPf8gXBS7BAzPCQnkjCPO0Ag==} + /@clerk/nextjs@5.1.2(next@14.2.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-idZATPtjGNyjRf6Kj3me62cEM4WdfR+IgknPr5Xc7jlTB5j3mfzihfUv6ojgwk1Hix5JKcRgi91KdE1vjcK8lA==} engines: {node: '>=18.17.0'} peerDependencies: - next: ^13.5.4 || ^14.0.3 - react: '>=18' - react-dom: '>=18' + next: ^13.5.4 || ^14.0.3 || >=15.0.0-rc + react: '>=18 || >=19.0.0-beta' + react-dom: '>=18 || >=19.0.0-beta' dependencies: - '@clerk/backend': 1.2.0(react-dom@18.3.1)(react@18.3.1) - '@clerk/clerk-react': 5.2.0(react-dom@18.3.1)(react@18.3.1) - '@clerk/shared': 2.2.0(react-dom@18.3.1)(react@18.3.1) + '@clerk/backend': 1.2.1(react-dom@18.3.1)(react@18.3.1) + '@clerk/clerk-react': 5.2.1(react-dom@18.3.1)(react@18.3.1) + '@clerk/shared': 2.2.1(react-dom@18.3.1)(react@18.3.1) crypto-js: 4.2.0 next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.8.0)(react-dom@18.3.1)(react@18.3.1) path-to-regexp: 6.2.1 @@ -614,13 +650,13 @@ packages: tslib: 2.4.1 dev: false - /@clerk/shared@2.2.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-dqd/g8xTFEVYi0QDRyYI+YBT/EeTE1vIEoJbuP98C7Ybqmp7/RC0Cj88Ckam1wToD3okYYf9t13/qIJ+ux0XTg==} + /@clerk/shared@2.2.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-LtaHZLj/T2y9/MuB7IlVXs+HzX5eGkXkXqcBGgE//OlaNYw3zo1CueEVLG9Wm30FlPwVeSnaMYWklOUpSzMVng==} engines: {node: '>=18.17.0'} requiresBuild: true peerDependencies: - react: '>=18' - react-dom: '>=18' + react: '>=18 || >=19.0.0-beta' + react-dom: '>=18 || >=19.0.0-beta' peerDependenciesMeta: react: optional: true @@ -649,10 +685,10 @@ packages: dependencies: csstype: 3.1.1 - /@contentlayer/cli@0.3.4(esbuild@0.21.3): + /@contentlayer/cli@0.3.4(esbuild@0.21.4): resolution: {integrity: sha512-vNDwgLuhYNu+m70NZ3XK9kexKNguuxPXg7Yvzj3B34cEilQjjzSrcTY/i+AIQm9V7uT5GGshx9ukzPf+SmoszQ==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.3) + '@contentlayer/core': 0.3.4(esbuild@0.21.4) '@contentlayer/utils': 0.3.4 clipanion: 3.2.1(typanion@3.14.0) typanion: 3.14.0 @@ -663,10 +699,10 @@ packages: - supports-color dev: false - /@contentlayer/client@0.3.4(esbuild@0.21.3): + /@contentlayer/client@0.3.4(esbuild@0.21.4): resolution: {integrity: sha512-QSlLyc3y4PtdC5lFw0L4wTZUH8BQnv2nk37hNCsPAqGf+dRO7TLAzdc+2/mVIRgK+vSH+pSOzjLsQpFxxXRTZA==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.3) + '@contentlayer/core': 0.3.4(esbuild@0.21.4) transitivePeerDependencies: - '@effect-ts/otel-node' - esbuild @@ -674,7 +710,7 @@ packages: - supports-color dev: false - /@contentlayer/core@0.3.4(esbuild@0.21.3): + /@contentlayer/core@0.3.4(esbuild@0.21.4): resolution: {integrity: sha512-o68oBLwfYZ+2vtgfk1lgHxOl3LoxvRNiUfeQ8IWFWy/L4wnIkKIqLZX01zlRE5IzYM+ZMMN5V0cKQlO7DsyR9g==} peerDependencies: esbuild: 0.17.x || 0.18.x @@ -688,9 +724,9 @@ packages: '@contentlayer/utils': 0.3.4 camel-case: 4.1.2 comment-json: 4.2.3 - esbuild: 0.21.3 + esbuild: 0.21.4 gray-matter: 4.0.3 - mdx-bundler: 9.2.1(esbuild@0.21.3) + mdx-bundler: 9.2.1(esbuild@0.21.4) rehype-stringify: 9.0.4 remark-frontmatter: 4.0.1 remark-parse: 10.0.2 @@ -703,16 +739,16 @@ packages: - supports-color dev: false - /@contentlayer/source-files@0.3.4(esbuild@0.21.3): + /@contentlayer/source-files@0.3.4(esbuild@0.21.4): resolution: {integrity: sha512-4njyn0OFPu7WY4tAjMxiJgWOKeiHuBOGdQ36EYE03iij/pPPRbiWbL+cmLccYXUFEW58mDwpqROZZm6pnxjRDQ==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.3) + '@contentlayer/core': 0.3.4(esbuild@0.21.4) '@contentlayer/utils': 0.3.4 chokidar: 3.6.0 fast-glob: 3.3.2 gray-matter: 4.0.3 imagescript: 1.3.0 - micromatch: 4.0.6 + micromatch: 4.0.7 ts-pattern: 4.3.0 unified: 10.1.2 yaml: 2.4.2 @@ -724,11 +760,11 @@ packages: - supports-color dev: false - /@contentlayer/source-remote-files@0.3.4(esbuild@0.21.3): + /@contentlayer/source-remote-files@0.3.4(esbuild@0.21.4): resolution: {integrity: sha512-cyiv4sNUySZvR0uAKlM+kSAELzNd2h2QT1R2e41dRKbwOUVxeLfmGiLugr0aVac6Q3xYcD99dbHyR1xWPV+w9w==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.3) - '@contentlayer/source-files': 0.3.4(esbuild@0.21.3) + '@contentlayer/core': 0.3.4(esbuild@0.21.4) + '@contentlayer/source-files': 0.3.4(esbuild@0.21.4) '@contentlayer/utils': 0.3.4 transitivePeerDependencies: - '@effect-ts/otel-node' @@ -828,14 +864,14 @@ packages: resolution: {integrity: sha512-/crHGujo0xnuHIYNc1VgP0HGJGFSoSqq88JFXe6FmFyXPpWt8Xu39LyLg7rchsxfXFeEdA9CrIZvLV5eswXV5g==} dev: false - /@effect/schema@0.66.16(effect@3.2.3)(fast-check@3.18.0): + /@effect/schema@0.66.16(effect@3.2.5)(fast-check@3.19.0): resolution: {integrity: sha512-sT/k5NOgKslGPzs3DUaCFuM6g2JQoIIT8jpwEorAZooplPIMK2xIspr7ECz6pp6Dc7Wz/ppXGk7HVyGZQsIYEQ==} peerDependencies: effect: ^3.1.3 fast-check: ^3.13.2 dependencies: - effect: 3.2.3 - fast-check: 3.18.0 + effect: 3.2.5 + fast-check: 3.19.0 dev: false /@emotion/is-prop-valid@0.8.8: @@ -866,14 +902,14 @@ packages: get-tsconfig: 4.7.5 dev: true - /@esbuild-plugins/node-resolve@0.1.4(esbuild@0.21.3): + /@esbuild-plugins/node-resolve@0.1.4(esbuild@0.21.4): resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==} peerDependencies: esbuild: '*' dependencies: '@types/resolve': 1.20.6 debug: 4.3.4 - esbuild: 0.21.3 + esbuild: 0.21.4 escape-string-regexp: 4.0.0 resolve: 1.22.8 transitivePeerDependencies: @@ -907,8 +943,8 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.21.3: - resolution: {integrity: sha512-yTgnwQpFVYfvvo4SvRFB0SwrW8YjOxEoT7wfMT7Ol5v7v5LDNvSGo67aExmxOb87nQNeWPVvaGBNfQ7BXcrZ9w==} + /@esbuild/aix-ppc64@0.21.4: + resolution: {integrity: sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -952,8 +988,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.21.3: - resolution: {integrity: sha512-c+ty9necz3zB1Y+d/N+mC6KVVkGUUOcm4ZmT5i/Fk5arOaY3i6CA3P5wo/7+XzV8cb4GrI/Zjp8NuOQ9Lfsosw==} + /@esbuild/android-arm64@0.21.4: + resolution: {integrity: sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -997,8 +1033,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.21.3: - resolution: {integrity: sha512-bviJOLMgurLJtF1/mAoJLxDZDL6oU5/ztMHnJQRejbJrSc9FFu0QoUoFhvi6qSKJEw9y5oGyvr9fuDtzJ30rNQ==} + /@esbuild/android-arm@0.21.4: + resolution: {integrity: sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1042,8 +1078,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.21.3: - resolution: {integrity: sha512-JReHfYCRK3FVX4Ra+y5EBH1b9e16TV2OxrPAvzMsGeES0X2Ndm9ImQRI4Ket757vhc5XBOuGperw63upesclRw==} + /@esbuild/android-x64@0.21.4: + resolution: {integrity: sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1087,8 +1123,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.21.3: - resolution: {integrity: sha512-U3fuQ0xNiAkXOmQ6w5dKpEvXQRSpHOnbw7gEfHCRXPeTKW9sBzVck6C5Yneb8LfJm0l6le4NQfkNPnWMSlTFUQ==} + /@esbuild/darwin-arm64@0.21.4: + resolution: {integrity: sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1132,8 +1168,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.21.3: - resolution: {integrity: sha512-3m1CEB7F07s19wmaMNI2KANLcnaqryJxO1fXHUV5j1rWn+wMxdUYoPyO2TnAbfRZdi7ADRwJClmOwgT13qlP3Q==} + /@esbuild/darwin-x64@0.21.4: + resolution: {integrity: sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1177,8 +1213,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.21.3: - resolution: {integrity: sha512-fsNAAl5pU6wmKHq91cHWQT0Fz0vtyE1JauMzKotrwqIKAswwP5cpHUCxZNSTuA/JlqtScq20/5KZ+TxQdovU/g==} + /@esbuild/freebsd-arm64@0.21.4: + resolution: {integrity: sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1222,8 +1258,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.21.3: - resolution: {integrity: sha512-tci+UJ4zP5EGF4rp8XlZIdq1q1a/1h9XuronfxTMCNBslpCtmk97Q/5qqy1Mu4zIc0yswN/yP/BLX+NTUC1bXA==} + /@esbuild/freebsd-x64@0.21.4: + resolution: {integrity: sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1267,8 +1303,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.21.3: - resolution: {integrity: sha512-vvG6R5g5ieB4eCJBQevyDMb31LMHthLpXTc2IGkFnPWS/GzIFDnaYFp558O+XybTmYrVjxnryru7QRleJvmZ6Q==} + /@esbuild/linux-arm64@0.21.4: + resolution: {integrity: sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1312,8 +1348,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.21.3: - resolution: {integrity: sha512-f6kz2QpSuyHHg01cDawj0vkyMwuIvN62UAguQfnNVzbge2uWLhA7TCXOn83DT0ZvyJmBI943MItgTovUob36SQ==} + /@esbuild/linux-arm@0.21.4: + resolution: {integrity: sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1357,8 +1393,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.21.3: - resolution: {integrity: sha512-HjCWhH7K96Na+66TacDLJmOI9R8iDWDDiqe17C7znGvvE4sW1ECt9ly0AJ3dJH62jHyVqW9xpxZEU1jKdt+29A==} + /@esbuild/linux-ia32@0.21.4: + resolution: {integrity: sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1402,8 +1438,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.21.3: - resolution: {integrity: sha512-BGpimEccmHBZRcAhdlRIxMp7x9PyJxUtj7apL2IuoG9VxvU/l/v1z015nFs7Si7tXUwEsvjc1rOJdZCn4QTU+Q==} + /@esbuild/linux-loong64@0.21.4: + resolution: {integrity: sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1447,8 +1483,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.21.3: - resolution: {integrity: sha512-5rMOWkp7FQGtAH3QJddP4w3s47iT20hwftqdm7b+loe95o8JU8ro3qZbhgMRy0VuFU0DizymF1pBKkn3YHWtsw==} + /@esbuild/linux-mips64el@0.21.4: + resolution: {integrity: sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1492,8 +1528,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.21.3: - resolution: {integrity: sha512-h0zj1ldel89V5sjPLo5H1SyMzp4VrgN1tPkN29TmjvO1/r0MuMRwJxL8QY05SmfsZRs6TF0c/IDH3u7XYYmbAg==} + /@esbuild/linux-ppc64@0.21.4: + resolution: {integrity: sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1537,8 +1573,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.21.3: - resolution: {integrity: sha512-dkAKcTsTJ+CRX6bnO17qDJbLoW37npd5gSNtSzjYQr0svghLJYGYB0NF1SNcU1vDcjXLYS5pO4qOW4YbFama4A==} + /@esbuild/linux-riscv64@0.21.4: + resolution: {integrity: sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1582,8 +1618,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.21.3: - resolution: {integrity: sha512-vnD1YUkovEdnZWEuMmy2X2JmzsHQqPpZElXx6dxENcIwTu+Cu5ERax6+Ke1QsE814Zf3c6rxCfwQdCTQ7tPuXA==} + /@esbuild/linux-s390x@0.21.4: + resolution: {integrity: sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1627,8 +1663,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.21.3: - resolution: {integrity: sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ==} + /@esbuild/linux-x64@0.21.4: + resolution: {integrity: sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1672,8 +1708,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.21.3: - resolution: {integrity: sha512-uTgCwsvQ5+vCQnqM//EfDSuomo2LhdWhFPS8VL8xKf+PKTCrcT/2kPPoWMTs22aB63MLdGMJiE3f1PHvCDmUOw==} + /@esbuild/netbsd-x64@0.21.4: + resolution: {integrity: sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1717,8 +1753,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.21.3: - resolution: {integrity: sha512-vNAkR17Ub2MgEud2Wag/OE4HTSI6zlb291UYzHez/psiKarp0J8PKGDnAhMBcHFoOHMXHfExzmjMojJNbAStrQ==} + /@esbuild/openbsd-x64@0.21.4: + resolution: {integrity: sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1762,8 +1798,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.21.3: - resolution: {integrity: sha512-W8H9jlGiSBomkgmouaRoTXo49j4w4Kfbl6I1bIdO/vT0+0u4f20ko3ELzV3hPI6XV6JNBVX+8BC+ajHkvffIJA==} + /@esbuild/sunos-x64@0.21.4: + resolution: {integrity: sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1807,8 +1843,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.21.3: - resolution: {integrity: sha512-EjEomwyLSCg8Ag3LDILIqYCZAq/y3diJ04PnqGRgq8/4O3VNlXyMd54j/saShaN4h5o5mivOjAzmU6C3X4v0xw==} + /@esbuild/win32-arm64@0.21.4: + resolution: {integrity: sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1852,8 +1888,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.21.3: - resolution: {integrity: sha512-WGiE/GgbsEwR33++5rzjiYsKyHywE8QSZPF7Rfx9EBfK3Qn3xyR6IjyCr5Uk38Kg8fG4/2phN7sXp4NPWd3fcw==} + /@esbuild/win32-ia32@0.21.4: + resolution: {integrity: sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1897,8 +1933,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.21.3: - resolution: {integrity: sha512-xRxC0jaJWDLYvcUvjQmHCJSfMrgmUuvsoXgDeU/wTorQ1ngDdUBuFtgY3W1Pc5sprGAvZBtWdJX7RPg/iZZUqA==} + /@esbuild/win32-x64@0.21.4: + resolution: {integrity: sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2075,11 +2111,11 @@ packages: '@vue/compiler-sfc': optional: true dependencies: - '@babel/core': 7.24.5 - '@babel/generator': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/core': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 prettier: 3.2.5 semver: 7.6.2 transitivePeerDependencies: @@ -2150,13 +2186,13 @@ packages: web-vitals: 3.5.2 dev: false - /@mdx-js/esbuild@2.3.0(esbuild@0.21.3): + /@mdx-js/esbuild@2.3.0(esbuild@0.21.4): resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==} peerDependencies: esbuild: '>=0.11.0' dependencies: '@mdx-js/mdx': 2.3.0 - esbuild: 0.21.3 + esbuild: 0.21.4 node-fetch: 3.3.2 vfile: 5.3.7 transitivePeerDependencies: @@ -2651,16 +2687,16 @@ packages: /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 dev: false /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 dev: false - /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} peerDependencies: '@types/react': '*' @@ -2673,23 +2709,23 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==} peerDependencies: '@types/react': '*' @@ -2702,20 +2738,20 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -2728,15 +2764,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-fXR5kbMan9oQqMuacfzlGG/SQMcmMlZ4wrvpckv8SgUulD0MMpspxJrxg/Gp/ISV3JfV1AeSWTYK9GvxA4ySwA==} peerDependencies: '@types/react': '*' @@ -2749,15 +2785,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-avatar@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-avatar@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} peerDependencies: '@types/react': '*' @@ -2770,18 +2806,18 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} peerDependencies: '@types/react': '*' @@ -2794,22 +2830,22 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: '@types/react': '*' @@ -2822,22 +2858,22 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -2850,18 +2886,18 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -2870,12 +2906,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -2884,12 +2920,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: '@types/react': '*' @@ -2902,28 +2938,28 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -2932,12 +2968,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: '@types/react': '*' @@ -2950,19 +2986,19 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: '@types/react': '*' @@ -2975,21 +3011,21 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -2998,12 +3034,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: '@types/react': '*' @@ -3016,17 +3052,17 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==} peerDependencies: '@types/react': '*' @@ -3039,17 +3075,17 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -3063,7 +3099,7 @@ packages: react: 18.3.1 dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -3072,13 +3108,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-label@2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-label@2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} peerDependencies: '@types/react': '*' @@ -3091,15 +3127,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: '@types/react': '*' @@ -3112,32 +3148,32 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) dev: false - /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==} peerDependencies: '@types/react': '*' @@ -3150,28 +3186,28 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-popover@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} peerDependencies: '@types/react': '*' @@ -3184,29 +3220,29 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) dev: false - /@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: '@types/react': '*' @@ -3219,24 +3255,24 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.2 + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: '@types/react': '*' @@ -3249,15 +3285,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -3270,16 +3306,16 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -3292,15 +3328,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-progress@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-progress@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: '@types/react': '*' @@ -3313,16 +3349,16 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' @@ -3335,23 +3371,23 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} peerDependencies: '@types/react': '*' @@ -3364,23 +3400,23 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-select@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-select@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} peerDependencies: '@types/react': '*' @@ -3393,35 +3429,35 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) dev: false - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-separator@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} peerDependencies: '@types/react': '*' @@ -3434,15 +3470,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-slider@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-slider@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} peerDependencies: '@types/react': '*' @@ -3455,25 +3491,25 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -3482,13 +3518,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: '@types/react': '*' @@ -3501,21 +3537,21 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} peerDependencies: '@types/react': '*' @@ -3528,22 +3564,22 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} peerDependencies: '@types/react': '*' @@ -3556,21 +3592,21 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} peerDependencies: '@types/react': '*' @@ -3583,17 +3619,17 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: '@types/react': '*' @@ -3606,26 +3642,26 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -3634,12 +3670,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -3648,13 +3684,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -3663,13 +3699,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -3678,12 +3714,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-use-previous@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-use-previous@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' @@ -3692,12 +3728,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -3706,13 +3742,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.2 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.3.2)(react@18.3.1): + /@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -3721,13 +3757,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 react: 18.3.1 dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: '@types/react': '*' @@ -3740,9 +3776,9 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -3751,7 +3787,7 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 dev: false /@react-email/body@0.0.8(react@18.3.1): @@ -3799,8 +3835,8 @@ packages: react: 18.3.1 dev: false - /@react-email/components@0.0.18(@types/react@18.3.2)(react@18.3.1): - resolution: {integrity: sha512-VxaEAbLTD/CbIVNeDCzPKBV2rIard88AE5gLmZ4HbaFH7i90NIF/5MiZX5l0bNzoM8N/kjN4CQlqZ1MwN5FdOg==} + /@react-email/components@0.0.19(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-yf49eIq0NDDXzO2RTZaT8fKa16eKUFMdWWMx4V5Bq+b2JdGuAMobO5s9Ea6azSVL6RDcJ8epdY1TCR2kL2PPHw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.2.0 @@ -3813,17 +3849,17 @@ packages: '@react-email/container': 0.0.12(react@18.3.1) '@react-email/font': 0.0.6(react@18.3.1) '@react-email/head': 0.0.9(react@18.3.1) - '@react-email/heading': 0.0.12(@types/react@18.3.2)(react@18.3.1) + '@react-email/heading': 0.0.12(@types/react@18.3.3)(react@18.3.1) '@react-email/hr': 0.0.8(react@18.3.1) '@react-email/html': 0.0.8(react@18.3.1) '@react-email/img': 0.0.8(react@18.3.1) '@react-email/link': 0.0.8(react@18.3.1) '@react-email/markdown': 0.0.10(react@18.3.1) '@react-email/preview': 0.0.9(react@18.3.1) - '@react-email/render': 0.0.14 + '@react-email/render': 0.0.15 '@react-email/row': 0.0.8(react@18.3.1) '@react-email/section': 0.0.12(react@18.3.1) - '@react-email/tailwind': 0.0.17(react@18.3.1) + '@react-email/tailwind': 0.0.18(react@18.3.1) '@react-email/text': 0.0.8(react@18.3.1) react: 18.3.1 transitivePeerDependencies: @@ -3856,13 +3892,13 @@ packages: react: 18.3.1 dev: false - /@react-email/heading@0.0.12(@types/react@18.3.2)(react@18.3.1): + /@react-email/heading@0.0.12(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-eB7mpnAvDmwvQLoPuwEiPRH4fPXWe6ltz6Ptbry2BlI88F0a2k11Ghb4+sZHBqg7vVw/MKbqEgtLqr3QJ/KfCQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.2.0 dependencies: - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 transitivePeerDependencies: - '@types/react' @@ -3933,8 +3969,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@react-email/render@0.0.14: - resolution: {integrity: sha512-vZD59BHp1HOatJAWydTOdgN8QbNgsjCOfmPcT9ShwisBIu3Rw8pvUVoWsrAqfHfzc4vcNTGnbt6/8mMa8LcsvQ==} + /@react-email/render@0.0.15: + resolution: {integrity: sha512-/pT5dBu0y1mogrfEpc002rgRcXpbShK6PFtxTVU6LZZ+bccvZPgk67HKc01lxpa1eYGQgZ6I+VQ02GRnMDclTg==} engines: {node: '>=18.0.0'} dependencies: html-to-text: 9.0.5 @@ -3962,8 +3998,8 @@ packages: react: 18.3.1 dev: false - /@react-email/tailwind@0.0.17(react@18.3.1): - resolution: {integrity: sha512-SVl0YO9b9/8EiNtvYnXTlimehwv6rz5v6JRb60IYqwWRRF6ZDHiLkAq/94o5SMrhLtPZWErcr4VleGumB+pFUg==} + /@react-email/tailwind@0.0.18(react@18.3.1): + resolution: {integrity: sha512-ob8CXX/Pqq1U8YfL5OJTL48WJkixizyoXMMRYTiDLDN9LVLU7lSLtcK9kOD9CgFbO2yUPQr7/5+7gnQJ+cXa8Q==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.2.0 @@ -4418,16 +4454,16 @@ packages: /@types/react-dom@18.3.0: resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 /@types/react-syntax-highlighter@15.5.13: resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 dev: true - /@types/react@18.3.2: - resolution: {integrity: sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==} + /@types/react@18.3.3: + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -4677,40 +4713,34 @@ packages: resolution: {integrity: sha512-kz3F0oEgAyts25NAGXlUBCWh3mXonbSOQJFGFMawHuIgbUbnzXbe4w5WI+0XdneCbjNmikfWrdWrs8m/7HATfQ==} dev: false - /@uploadthing/react@6.5.4(next@14.2.3)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(uploadthing@6.10.4)(vue@3.4.27): - resolution: {integrity: sha512-c1RFZggXqlc4wQ0hnxjgOM+9066NUMOJmUAPG2N7EKYO64/uRrZMpq5CvYdxsKwI0YiCnhIeInct21QvSSEa6Q==} + /@uploadthing/react@6.6.0(next@14.2.3)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(uploadthing@6.12.0)(vue@3.4.27): + resolution: {integrity: sha512-jLN4Oy21d0n8F6CNPl9qjEu0/Q1rnddSxny/02Lm89L/sYuR4RXfk1vBgBGPAGXBak0BO9z5eEmYURLrXXUAJQ==} peerDependencies: next: '*' react: ^17.0.2 || ^18.0.0 - uploadthing: 6.10.4 + uploadthing: 6.12.0 peerDependenciesMeta: next: optional: true dependencies: '@uploadthing/dropzone': 0.4.1(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27) - '@uploadthing/shared': 6.7.4(@uploadthing/mime-types@0.2.10) + '@uploadthing/shared': 6.7.5 file-selector: 0.6.0 next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.8.0)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 tailwind-merge: 2.3.0 - uploadthing: 6.10.4(next@14.2.3)(tailwindcss@3.4.3) + uploadthing: 6.12.0(next@14.2.3)(tailwindcss@3.4.3) transitivePeerDependencies: - - '@uploadthing/mime-types' - solid-js - svelte - vue dev: false - /@uploadthing/shared@6.7.4(@uploadthing/mime-types@0.2.10): - resolution: {integrity: sha512-7e35U7/84qQQx+bhldSdze9ODiAo4NCCZiYEV3NomD44O9fE5bfQXcCPtBeXh3y3udf7S28PMZbT6ybJeuKfgw==} - peerDependencies: - '@uploadthing/mime-types': 0.2.10 - peerDependenciesMeta: - '@uploadthing/mime-types': - optional: true + /@uploadthing/shared@6.7.5: + resolution: {integrity: sha512-BZXzvh6zGEt4ip//mxfXdRTNWYw9XJ6tommL6A1TEo2l8jvdNbUpPUwXnMVWBMwio2b48BO7D9V3siYIKMD4pg==} dependencies: '@uploadthing/mime-types': 0.2.10 - effect: 3.2.3 + effect: 3.2.5 std-env: 3.7.0 dev: false @@ -4718,7 +4748,7 @@ packages: resolution: {integrity: sha512-MCJoF+Y8fkzq4NRLG7kEHjtGyMsZ2DICBdmEdwoK9umoSrfkzgBlYdZiHTIaewyt9PGaMZCHOasz0LAuMpxwxQ==} engines: {node: '>=16.0.0'} dependencies: - '@upstash/redis': 1.31.1 + '@upstash/redis': 1.31.2 dev: false /@upstash/ratelimit@1.1.3: @@ -4727,8 +4757,8 @@ packages: '@upstash/core-analytics': 0.0.8 dev: false - /@upstash/redis@1.31.1: - resolution: {integrity: sha512-lAsOo+kYjD5lpP+lH/nxHfzFYeCkWBwwKsyZZmh0AoOumBA9ZpS52Gorm7c2bmNu3UFijpPiLSFdW/nRdjbRpQ==} + /@upstash/redis@1.31.2: + resolution: {integrity: sha512-2u7LBzHHMVE8Ou+ZE3hZJKkvlbYv1pAlZ1NSDIS1fF77bT0CdozouzCS/fCVfOnz1orxPY4v+9swZ+ZKDGtNhA==} dependencies: crypto-js: 4.2.0 dev: false @@ -4736,7 +4766,7 @@ packages: /@vue/compiler-core@3.4.27: resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.6 '@vue/shared': 3.4.27 entities: 4.5.0 estree-walker: 2.0.2 @@ -4753,7 +4783,7 @@ packages: /@vue/compiler-sfc@3.4.27: resolution: {integrity: sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==} dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.6 '@vue/compiler-core': 3.4.27 '@vue/compiler-dom': 3.4.27 '@vue/compiler-ssr': 3.4.27 @@ -4967,12 +4997,12 @@ packages: humanize-ms: 1.2.1 dev: false - /ai@3.1.12(openai@4.47.1)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27)(zod@3.23.8): - resolution: {integrity: sha512-XlurBw1sdgQCFmCTPYjKjpm+fPS6iY+tLb/PYNUEjZn3bhqosAkcqUkGJTsFP49OMAWO1Lm2oPthCakKcn6Lzw==} + /ai@3.1.14(openai@4.47.1)(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27)(zod@3.23.8): + resolution: {integrity: sha512-yW9ipraLm2PzzWc74eWUUVUIVZbO/Ggv//83iBfDkOTndrBmFqyIk6DtVVzf+RwKNUYuZzj8v5MKcgnHQhceXw==} engines: {node: '>=18'} peerDependencies: openai: ^4.42.0 - react: ^18.2.0 + react: ^18 || ^19 solid-js: ^1.7.7 svelte: ^3.0.0 || ^4.0.0 vue: ^3.3.4 @@ -4991,8 +5021,8 @@ packages: zod: optional: true dependencies: - '@ai-sdk/provider': 0.0.5 - '@ai-sdk/provider-utils': 0.0.8(zod@3.23.8) + '@ai-sdk/provider': 0.0.6 + '@ai-sdk/provider-utils': 0.0.9(zod@3.23.8) eventsource-parser: 1.1.2 json-schema: 0.4.0 jsondiffpatch: 0.6.0 @@ -5266,13 +5296,6 @@ packages: dequal: 2.0.3 dev: false - /babel-walk@3.0.0: - resolution: {integrity: sha512-fdRxJkQ9MUSEi4jH2DcV3FAPFktk0wefilxrwNyUuWpoWawQGN7G7cB+fOYTtFfI6XNkFgwqJ/D3G18BoJJ/jg==} - engines: {node: '>= 10.0.0'} - dependencies: - '@babel/types': 7.24.5 - dev: false - /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -5323,7 +5346,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001621 - electron-to-chromium: 1.4.777 + electron-to-chromium: 1.4.783 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.0) @@ -5470,7 +5493,7 @@ packages: d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 - memoizee: 0.4.15 + memoizee: 0.4.17 timers-ext: 0.1.7 dev: true @@ -5532,14 +5555,14 @@ packages: engines: {node: '>=6'} dev: false - /cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -5642,17 +5665,17 @@ packages: engines: {node: ^14.18.0 || >=16.10.0} dev: false - /contentlayer@0.3.4(esbuild@0.21.3): + /contentlayer@0.3.4(esbuild@0.21.4): resolution: {integrity: sha512-FYDdTUFaN4yqep0waswrhcXjmMJnPD5iXDTtxcUCGdklfuIrXM2xLx51xl748cHmGA6IsC+27YZFxU6Ym13QIA==} engines: {node: '>=14.18'} hasBin: true requiresBuild: true dependencies: - '@contentlayer/cli': 0.3.4(esbuild@0.21.3) - '@contentlayer/client': 0.3.4(esbuild@0.21.3) - '@contentlayer/core': 0.3.4(esbuild@0.21.3) - '@contentlayer/source-files': 0.3.4(esbuild@0.21.3) - '@contentlayer/source-remote-files': 0.3.4(esbuild@0.21.3) + '@contentlayer/cli': 0.3.4(esbuild@0.21.4) + '@contentlayer/client': 0.3.4(esbuild@0.21.4) + '@contentlayer/core': 0.3.4(esbuild@0.21.4) + '@contentlayer/source-files': 0.3.4(esbuild@0.21.4) + '@contentlayer/source-remote-files': 0.3.4(esbuild@0.21.4) '@contentlayer/utils': 0.3.4 transitivePeerDependencies: - '@effect-ts/otel-node' @@ -5973,7 +5996,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 csstype: 3.1.3 dev: false @@ -6043,8 +6066,8 @@ packages: wordwrap: 1.0.0 dev: true - /drizzle-kit@0.21.2: - resolution: {integrity: sha512-U87IhZyCt/9d0ZT/Na3KFJVY31tSxtTx/n9UMcWFpW/5c2Ede39xiCG5efNV/0iimsv97UIRtDI0ldLBW5lbcg==} + /drizzle-kit@0.21.4: + resolution: {integrity: sha512-Nxcc1ONJLRgbhmR+azxjNF9Ly9privNLEIgW53c92whb4xp8jZLH1kMCh/54ci1mTMuYxPdOukqLwJ8wRudNwA==} hasBin: true dependencies: '@esbuild-kit/esm-loader': 2.6.5 @@ -6060,7 +6083,7 @@ packages: - supports-color dev: true - /drizzle-orm@0.30.10(@opentelemetry/api@1.8.0)(@types/react@18.3.2)(pg@8.11.5)(postgres@3.4.4)(react@18.3.1): + /drizzle-orm@0.30.10(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(pg@8.11.5)(postgres@3.4.4)(react@18.3.1): resolution: {integrity: sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' @@ -6141,7 +6164,7 @@ packages: optional: true dependencies: '@opentelemetry/api': 1.8.0 - '@types/react': 18.3.2 + '@types/react': 18.3.3 pg: 8.11.5 postgres: 3.4.4 react: 18.3.1 @@ -6161,12 +6184,12 @@ packages: semver: 7.6.2 dev: false - /effect@3.2.3: - resolution: {integrity: sha512-tI0pzouV9BnZFHXNDoMCn9L76RFr23FMyzQ8syl+hxNtkn5aRdcQLeapv8acix+O4sQjQA4MpT8H3X9jfTs6hg==} + /effect@3.2.5: + resolution: {integrity: sha512-Qs/NAX2s/ClRATbiImc4IuzzAs+1RaFzZm7zRx9NKmLFnIeCC+h2LwkrOuprG3PsDM+g1IfPEFWvVbTSDKPnFA==} dev: false - /electron-to-chromium@1.4.777: - resolution: {integrity: sha512-n02NCwLJ3wexLfK/yQeqfywCblZqLcXphzmid5e8yVPdtEcida7li0A5WQKghHNG0FeOMCzeFOzEbtAh5riXFw==} + /electron-to-chromium@1.4.783: + resolution: {integrity: sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==} /embla-carousel-react@8.1.3(react@18.3.1): resolution: {integrity: sha512-YrezDPgxPDKa+OKMhSrwuPEU2OgF5147vFW473EWT3bx9DETV3W/RyWTxq0/2pf3M4VXkjqFNbS/W1xM8lTaVg==} @@ -6538,35 +6561,35 @@ packages: '@esbuild/win32-x64': 0.20.2 dev: true - /esbuild@0.21.3: - resolution: {integrity: sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw==} + /esbuild@0.21.4: + resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.21.3 - '@esbuild/android-arm': 0.21.3 - '@esbuild/android-arm64': 0.21.3 - '@esbuild/android-x64': 0.21.3 - '@esbuild/darwin-arm64': 0.21.3 - '@esbuild/darwin-x64': 0.21.3 - '@esbuild/freebsd-arm64': 0.21.3 - '@esbuild/freebsd-x64': 0.21.3 - '@esbuild/linux-arm': 0.21.3 - '@esbuild/linux-arm64': 0.21.3 - '@esbuild/linux-ia32': 0.21.3 - '@esbuild/linux-loong64': 0.21.3 - '@esbuild/linux-mips64el': 0.21.3 - '@esbuild/linux-ppc64': 0.21.3 - '@esbuild/linux-riscv64': 0.21.3 - '@esbuild/linux-s390x': 0.21.3 - '@esbuild/linux-x64': 0.21.3 - '@esbuild/netbsd-x64': 0.21.3 - '@esbuild/openbsd-x64': 0.21.3 - '@esbuild/sunos-x64': 0.21.3 - '@esbuild/win32-arm64': 0.21.3 - '@esbuild/win32-ia32': 0.21.3 - '@esbuild/win32-x64': 0.21.3 + '@esbuild/aix-ppc64': 0.21.4 + '@esbuild/android-arm': 0.21.4 + '@esbuild/android-arm64': 0.21.4 + '@esbuild/android-x64': 0.21.4 + '@esbuild/darwin-arm64': 0.21.4 + '@esbuild/darwin-x64': 0.21.4 + '@esbuild/freebsd-arm64': 0.21.4 + '@esbuild/freebsd-x64': 0.21.4 + '@esbuild/linux-arm': 0.21.4 + '@esbuild/linux-arm64': 0.21.4 + '@esbuild/linux-ia32': 0.21.4 + '@esbuild/linux-loong64': 0.21.4 + '@esbuild/linux-mips64el': 0.21.4 + '@esbuild/linux-ppc64': 0.21.4 + '@esbuild/linux-riscv64': 0.21.4 + '@esbuild/linux-s390x': 0.21.4 + '@esbuild/linux-x64': 0.21.4 + '@esbuild/netbsd-x64': 0.21.4 + '@esbuild/openbsd-x64': 0.21.4 + '@esbuild/sunos-x64': 0.21.4 + '@esbuild/win32-arm64': 0.21.4 + '@esbuild/win32-ia32': 0.21.4 + '@esbuild/win32-x64': 0.21.4 dev: false /escalade@3.1.2: @@ -6771,7 +6794,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -6826,9 +6849,9 @@ packages: string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-tailwindcss@3.15.2(tailwindcss@3.4.3): - resolution: {integrity: sha512-+HJfWcyP5B/e8r8qVSaTbf2i4+HsESJJsue66qFHRstV11CNTfdaDD9zkCVA1pm2EplBZ/BSJ3Htfzvb4YTVKw==} - engines: {node: '>=12.13.0'} + /eslint-plugin-tailwindcss@3.17.0(tailwindcss@3.4.3): + resolution: {integrity: sha512-Ofl7tNh57a3W8BKHstKZSkD2gSCEkw54ycwZ958IK9zUR8TiNYdp8b0WGoLWLeyOAbeF1VPVJFBnlkJeIM2kVg==} + engines: {node: '>=14.0.0'} peerDependencies: tailwindcss: ^3.4.0 dependencies: @@ -7060,8 +7083,8 @@ packages: /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - /fast-check@3.18.0: - resolution: {integrity: sha512-/951xaT0kA40w0GXRsZXEwSTE7LugjZtSA/8vPgFkiPQ8wNp8tRvqWuNDHBgLxJYXtsK11e/7Q4ObkKW5BdTFQ==} + /fast-check@3.19.0: + resolution: {integrity: sha512-CO2JX/8/PT9bDGO1iXa5h5ey1skaKI1dvecERyhH4pp3PGjwd3KIjMAXEg79Ps9nclsdt4oPbfqiAnLU0EwrAQ==} engines: {node: '>=8.0.0'} dependencies: pure-rand: 6.1.0 @@ -7087,7 +7110,7 @@ packages: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.6 + micromatch: 4.0.7 /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -7224,8 +7247,8 @@ packages: '@emotion/is-prop-valid': 0.8.8 dev: false - /framer-motion@11.2.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-X22i42hWY423wx2C1TlQlC4UnWonD+udND0qX1Fkt0dDlreSmuNY76obO6Y2d/UdJPhqVd5Zn6g1jAIwF6Xx9A==} + /framer-motion@11.2.6(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-XUrjjBt57e5YoHQtjwc3eNchFBuHvIgN/cS8SC4oIaAn2J/0+bLanUxXizidJKZVeHJam/JrmMnPRjYMglVn5g==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 @@ -7349,35 +7372,36 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.1.1 + minipass: 7.1.2 path-scurry: 1.11.1 dev: true - /glob@10.3.16: - resolution: {integrity: sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==} - engines: {node: '>=16 || 14 >=14.18'} + /glob@10.3.4: + resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} + engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 3.1.2 + jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.1.1 + minipass: 7.1.2 path-scurry: 1.11.1 + dev: false - /glob@10.3.4: - resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} - engines: {node: '>=16 || 14 >=14.17'} + /glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 + jackspeak: 3.1.2 minimatch: 9.0.4 - minipass: 7.1.1 + minipass: 7.1.2 path-scurry: 1.11.1 - dev: false /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -7389,6 +7413,7 @@ packages: /glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -7811,6 +7836,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -8165,7 +8191,7 @@ packages: dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.3.16 + glob: 10.4.1 js-cookie: 3.0.5 nopt: 7.2.1 dev: false @@ -8766,17 +8792,17 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: false - /mdx-bundler@9.2.1(esbuild@0.21.3): + /mdx-bundler@9.2.1(esbuild@0.21.4): resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==} engines: {node: '>=14', npm: '>=6'} peerDependencies: esbuild: 0.* dependencies: - '@babel/runtime': 7.24.5 - '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.21.3) + '@babel/runtime': 7.24.6 + '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.21.4) '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@mdx-js/esbuild': 2.3.0(esbuild@0.21.3) - esbuild: 0.21.3 + '@mdx-js/esbuild': 2.3.0(esbuild@0.21.4) + esbuild: 0.21.4 gray-matter: 4.0.3 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 @@ -8793,8 +8819,9 @@ packages: fs-monkey: 1.0.6 dev: false - /memoizee@0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + /memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} dependencies: d: 1.0.2 es5-ext: 0.10.64 @@ -9323,12 +9350,12 @@ packages: transitivePeerDependencies: - supports-color - /micromatch@4.0.6: - resolution: {integrity: sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==} + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} dependencies: braces: 3.0.3 - picomatch: 4.0.2 + picomatch: 2.3.1 /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -9388,8 +9415,8 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@7.1.1: - resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} /mri@1.2.0: @@ -9439,7 +9466,7 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: false - /next-contentlayer@0.3.4(contentlayer@0.3.4)(esbuild@0.21.3)(next@14.2.3)(react-dom@18.3.1)(react@18.3.1): + /next-contentlayer@0.3.4(contentlayer@0.3.4)(esbuild@0.21.4)(next@14.2.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-UtUCwgAl159KwfhNaOwyiI7Lg6sdioyKMeh+E7jxx0CJ29JuXGxBEYmCI6+72NxFGIFZKx8lvttbbQhbnYWYSw==} peerDependencies: contentlayer: 0.3.4 @@ -9447,9 +9474,9 @@ packages: react: '*' react-dom: '*' dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.21.3) + '@contentlayer/core': 0.3.4(esbuild@0.21.4) '@contentlayer/utils': 0.3.4 - contentlayer: 0.3.4(esbuild@0.21.3) + contentlayer: 0.3.4(esbuild@0.21.4) next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.8.0)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -9830,7 +9857,7 @@ packages: engines: {node: '>=16 || 14 >=14.18'} dependencies: lru-cache: 10.2.2 - minipass: 7.1.1 + minipass: 7.1.2 /path-to-regexp@6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} @@ -9922,10 +9949,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -9982,7 +10005,7 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + postcss-selector-parser: 6.1.0 /postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} @@ -9992,8 +10015,8 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + /postcss-selector-parser@6.1.0: + resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -10246,24 +10269,24 @@ packages: react: 18.3.1 dev: false - /react-email@2.1.3(@babel/core@7.24.5)(@opentelemetry/api@1.8.0)(eslint@8.57.0): - resolution: {integrity: sha512-Lm6nxt2IsbTatJM+kSPWKvTPpMYfg3SFLJa8WqnaZ91ZRPz4wedZL++P3i59XxgOHGqejt2kN/a8MYiBZP3Mgw==} + /react-email@2.1.4(@opentelemetry/api@1.8.0)(eslint@8.57.0): + resolution: {integrity: sha512-YKZ4jhkalWcNyaw4qyI//+QeTeUxe/ptqI+wSc4wVIoHzqffAWoV5x/jBpFex3FQ636xVIDFrvGq39rUVL7zSQ==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@babel/parser': 7.24.1 + '@babel/core': 7.24.5 + '@babel/parser': 7.24.5 '@radix-ui/colors': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-tooltip': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-tooltip': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@swc/core': 1.3.101 - '@types/react': 18.3.2 + '@types/react': 18.3.3 '@types/react-dom': 18.3.0 '@types/webpack': 5.28.5(@swc/core@1.3.101)(esbuild@0.19.11) autoprefixer: 10.4.14(postcss@8.4.38) - babel-walk: 3.0.0 chalk: 4.1.2 chokidar: 3.5.3 clsx: 2.1.0 @@ -10293,7 +10316,6 @@ packages: tailwindcss: 3.4.0 typescript: 5.1.6 transitivePeerDependencies: - - '@babel/core' - '@opentelemetry/api' - '@swc/helpers' - babel-plugin-macros @@ -10332,14 +10354,14 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-markdown@9.0.1(@types/react@18.3.2)(react@18.3.1): + /react-markdown@9.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} peerDependencies: '@types/react': '>=18' react: '>=18' dependencies: '@types/hast': 3.0.4 - '@types/react': 18.3.2 + '@types/react': 18.3.3 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 @@ -10370,7 +10392,7 @@ packages: fast-deep-equal: 2.0.1 dev: false - /react-remove-scroll-bar@2.3.6(@types/react@18.3.2)(react@18.3.1): + /react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} engines: {node: '>=10'} peerDependencies: @@ -10380,13 +10402,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 dev: false - /react-remove-scroll@2.5.5(@types/react@18.3.2)(react@18.3.1): + /react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -10396,13 +10418,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.2)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.3.2)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.2)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) dev: false /react-smooth@4.0.1(react-dom@18.3.1)(react@18.3.1): @@ -10418,7 +10440,7 @@ packages: react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /react-style-singleton@2.2.1(@types/react@18.3.2)(react@18.3.1): + /react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -10428,7 +10450,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 @@ -10440,7 +10462,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -10448,16 +10470,16 @@ packages: refractor: 3.6.0 dev: false - /react-textarea-autosize@8.5.3(@types/react@18.3.2)(react@18.3.1): + /react-textarea-autosize@8.5.3(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 use-composed-ref: 1.3.0(react@18.3.1) - use-latest: 1.2.1(@types/react@18.3.2)(react@18.3.1) + use-latest: 1.2.1(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' dev: false @@ -10468,7 +10490,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -10835,6 +10857,7 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -10844,7 +10867,7 @@ packages: engines: {node: '>=14.18'} hasBin: true dependencies: - glob: 10.3.16 + glob: 10.4.1 dev: true /run-parallel@1.2.0: @@ -11300,8 +11323,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stripe@15.7.0: - resolution: {integrity: sha512-hTJhh0Gc+l+hj2vuzaFCh0T46l7793W3wg4J9Oyy3Wu+Ofswd0OgTS4XNt7G9XHJAyHpTmNRNbWgGwn73P4j7g==} + /stripe@15.8.0: + resolution: {integrity: sha512-7eEPMgehd1I16cXeP7Rcn/JKkPWIadB9vGIeE+vbCzQXaY5R95AoNmkZx0vmlu1H4QIDs7j1pYIKPRm9Dr4LKg==} engines: {node: '>=12.*'} dependencies: '@types/node': 20.12.12 @@ -11345,7 +11368,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.16 + glob: 10.4.1 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -11443,13 +11466,13 @@ packages: /tailwind-merge@2.2.0: resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 dev: false /tailwind-merge@2.3.0: resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 dev: false /tailwindcss-animate@1.0.7(tailwindcss@3.4.3): @@ -11475,7 +11498,7 @@ packages: is-glob: 4.0.3 jiti: 1.21.0 lilconfig: 2.1.0 - micromatch: 4.0.6 + micromatch: 4.0.7 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 @@ -11484,7 +11507,7 @@ packages: postcss-js: 4.0.1(postcss@8.4.38) postcss-load-config: 4.0.2(postcss@8.4.38) postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.0.16 + postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -11506,7 +11529,7 @@ packages: is-glob: 4.0.3 jiti: 1.21.0 lilconfig: 2.1.0 - micromatch: 4.0.6 + micromatch: 4.0.7 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 @@ -11515,7 +11538,7 @@ packages: postcss-js: 4.0.1(postcss@8.4.38) postcss-load-config: 4.0.2(postcss@8.4.38) postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.0.16 + postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -11525,7 +11548,7 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - /terser-webpack-plugin@5.3.10(esbuild@0.21.3)(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(esbuild@0.21.4)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -11542,7 +11565,7 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - esbuild: 0.21.3 + esbuild: 0.21.4 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 @@ -11656,8 +11679,8 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false - /tsx@4.10.5: - resolution: {integrity: sha512-twDSbf7Gtea4I2copqovUiNTEDrT8XNFXsuHpfGbdpW/z9ZW4fTghzzhAG0WfrCuJmJiOEY1nLIjq4u3oujRWQ==} + /tsx@4.11.0: + resolution: {integrity: sha512-vzGGELOgAupsNVssAmZjbUDfdm/pWP4R+Kg8TVdsonxbXk0bEpE1qh0yV6/QxUVXaVlNemgcPajGdJJ82n3stg==} engines: {node: '>=18.0.0'} hasBin: true dependencies: @@ -11893,8 +11916,8 @@ packages: escalade: 3.1.2 picocolors: 1.0.1 - /uploadthing@6.10.4(next@14.2.3)(tailwindcss@3.4.3): - resolution: {integrity: sha512-0hGO0Q7R7MnxzVkUbYHE6PkwFieYH+UUa905uo7JtA0h3Gpc89bNDFaOfK8634Z66088VRLNVuWxY2FTIqw4sg==} + /uploadthing@6.12.0(next@14.2.3)(tailwindcss@3.4.3): + resolution: {integrity: sha512-uoWG1riH6z2IHCcbMo3xnGe6p/+sx2PPOOLOsk5DeqGv5HtlY7ISauFFRXW8H+jdhevZm1n/j4Je/Z+bbIziSg==} engines: {node: '>=18.13.0'} peerDependencies: express: '*' @@ -11914,12 +11937,12 @@ packages: tailwindcss: optional: true dependencies: - '@effect/schema': 0.66.16(effect@3.2.3)(fast-check@3.18.0) + '@effect/schema': 0.66.16(effect@3.2.5)(fast-check@3.19.0) '@uploadthing/mime-types': 0.2.10 - '@uploadthing/shared': 6.7.4(@uploadthing/mime-types@0.2.10) + '@uploadthing/shared': 6.7.5 consola: 3.2.3 - effect: 3.2.3 - fast-check: 3.18.0 + effect: 3.2.5 + fast-check: 3.19.0 next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.8.0)(react-dom@18.3.1)(react@18.3.1) std-env: 3.7.0 tailwindcss: 3.4.3 @@ -11930,7 +11953,7 @@ packages: dependencies: punycode: 2.3.1 - /use-callback-ref@1.3.2(@types/react@18.3.2)(react@18.3.1): + /use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} peerDependencies: @@ -11940,7 +11963,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 react: 18.3.1 tslib: 2.6.2 dev: false @@ -11953,7 +11976,7 @@ packages: react: 18.3.1 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.3.2)(react@18.3.1): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -11962,11 +11985,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /use-latest@1.2.1(@types/react@18.3.2)(react@18.3.1): + /use-latest@1.2.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -11975,12 +11998,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 react: 18.3.1 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.2)(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1) dev: false - /use-sidecar@1.1.2(@types/react@18.3.2)(react@18.3.1): + /use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -11990,7 +12013,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 @@ -12028,13 +12051,13 @@ packages: engines: {node: '>= 0.8'} dev: false - /vaul@0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1): + /vaul@0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-fAhd7i4RNMinx+WEm6pF3nOl78DFkAazcN04ElLPFF9BMCNGbY/kou8UMhIcicm0rJCNePJP0Yyza60gGOD0Jw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -12207,7 +12230,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(esbuild@0.21.4)(webpack@5.91.0) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/src/app/(dashboard)/dashboard/billing/_components/billing.tsx b/src/app/(dashboard)/dashboard/billing/_components/billing.tsx index f2f91836..1fcfa74f 100644 --- a/src/app/(dashboard)/dashboard/billing/_components/billing.tsx +++ b/src/app/(dashboard)/dashboard/billing/_components/billing.tsx @@ -1,5 +1,5 @@ import Link from "next/link" -import type { SubscriptionPlanWithPrice, UserSubscriptionPlan } from "@/types" +import type { PlanWithPrice, UserPlan } from "@/types" import { CheckIcon } from "@radix-ui/react-icons" import { type getUserUsageMetrics } from "@/lib/queries/user" @@ -15,26 +15,28 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { ManageSubscriptionForm } from "@/components/manage-subscription-form" +import { ManagePlanForm } from "@/components/manage-plan-form" import { UsageCard } from "@/components/usage-card" interface BillingProps { - subscriptionPlanPromise: Promise - subscriptionPlansPromise: Promise + planPromise: Promise + plansPromise: Promise usageMetricsPromise: ReturnType } export async function Billing({ - subscriptionPlanPromise, - subscriptionPlansPromise, + planPromise, + plansPromise, usageMetricsPromise, }: BillingProps) { - const [subscriptionPlan, subscriptionPlans, usageMetrics] = await Promise.all( - [subscriptionPlanPromise, subscriptionPlansPromise, usageMetricsPromise] - ) + const [plan, plans, usageMetrics] = await Promise.all([ + planPromise, + plansPromise, + usageMetricsPromise, + ]) const { storeLimit, productLimit } = getPlanLimits({ - planTitle: subscriptionPlan?.title, + planId: plan?.id, }) return ( @@ -48,15 +50,15 @@ export async function Billing({ variant="secondary" className="pointer-events-none text-foreground/90" > - {subscriptionPlan?.title} + {plan?.title} {" "} plan.{" "} - {subscriptionPlan?.isCanceled + {plan?.isCanceled ? "Your plan will be canceled on " : "Your plan renews on "} - {subscriptionPlan?.stripeCurrentPeriodEnd ? ( + {plan?.stripeCurrentPeriodEnd ? ( - {formatDate(subscriptionPlan.stripeCurrentPeriodEnd)}. + {formatDate(plan.stripeCurrentPeriodEnd)}. ) : null} @@ -77,26 +79,26 @@ export async function Billing({
- {subscriptionPlans.map((plan, i) => ( + {plans.map((item, i) => ( - {plan.title} - {plan.description} + {item.title} + {item.description}
- {plan.price} + {item.price} /month
- {plan.features.map((feature) => ( + {item.features.map((feature) => (
- {plan.title === "Free" ? ( + {item.title === "Free" ? ( ) : ( - )} diff --git a/src/app/(dashboard)/dashboard/billing/page.tsx b/src/app/(dashboard)/dashboard/billing/page.tsx index ac79e92c..1f1b46f2 100644 --- a/src/app/(dashboard)/dashboard/billing/page.tsx +++ b/src/app/(dashboard)/dashboard/billing/page.tsx @@ -4,7 +4,7 @@ import { redirect } from "next/navigation" import { env } from "@/env.js" import { RocketIcon } from "@radix-ui/react-icons" -import { getSubscriptionPlan, getSubscriptionPlans } from "@/lib/actions/stripe" +import { getPlan, getPlans } from "@/lib/actions/stripe" import { getCachedUser, getUserUsageMetrics } from "@/lib/queries/user" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" import { @@ -30,8 +30,8 @@ export default async function BillingPage() { redirect("/signin") } - const subscriptionPlanPromise = getSubscriptionPlan({ userId: user.id }) - const subscriptionPlansPromise = getSubscriptionPlans() + const planPromise = getPlan({ userId: user.id }) + const plansPromise = getPlans() const usageMetricsPromise = getUserUsageMetrics({ userId: user.id }) return ( @@ -61,8 +61,8 @@ export default async function BillingPage() { }> diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 8b04a808..7d6cce5a 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -19,7 +19,7 @@ export default async function sitemap(): Promise { .limit(50000) .offset(0) .groupBy(stores.id) - .orderBy(desc(stores.active), desc(sql`count(*)`)) + .orderBy(desc(sql`count(*)`)) } catch (err) { return [] } diff --git a/src/components/manage-subscription-form.tsx b/src/components/manage-plan-form.tsx similarity index 76% rename from src/components/manage-subscription-form.tsx rename to src/components/manage-plan-form.tsx index c15a3933..72be6aab 100644 --- a/src/components/manage-subscription-form.tsx +++ b/src/components/manage-plan-form.tsx @@ -4,20 +4,20 @@ import * as React from "react" import { toast } from "sonner" import { type z } from "zod" -import { manageSubscription } from "@/lib/actions/stripe" -import { type manageSubscriptionSchema } from "@/lib/validations/stripe" +import { managePlan } from "@/lib/actions/stripe" +import { type managePlanSchema } from "@/lib/validations/stripe" import { Button } from "@/components/ui/button" import { Icons } from "@/components/icons" -type ManageSubscriptionFormProps = z.infer +type ManagePlanFormProps = z.infer -export function ManageSubscriptionForm({ +export function ManagePlanForm({ isCurrentPlan, isSubscribed, stripeCustomerId, stripeSubscriptionId, stripePriceId, -}: ManageSubscriptionFormProps) { +}: ManagePlanFormProps) { const [loading, setLoading] = React.useState(false) async function onSubmit(e: React.FormEvent) { @@ -25,7 +25,7 @@ export function ManageSubscriptionForm({ setLoading(true) - const { data, error } = await manageSubscription({ + const { data, error } = await managePlan({ isSubscribed, isCurrentPlan, stripeCustomerId, diff --git a/src/components/rate-limit-alert.tsx b/src/components/rate-limit-alert.tsx index 9f78d9d5..0d03a1e3 100644 --- a/src/components/rate-limit-alert.tsx +++ b/src/components/rate-limit-alert.tsx @@ -3,7 +3,8 @@ import Link from "next/link" import { type getUserPlanMetrics } from "@/lib/queries/user" import { cn } from "@/lib/utils" import { buttonVariants } from "@/components/ui/button" -import { ManageSubscriptionForm } from "@/components/manage-subscription-form" + +import { ManagePlanForm } from "./manage-plan-form" interface RateLimitAlertProps extends React.HTMLAttributes { planMetrics: Awaited> @@ -49,7 +50,7 @@ export function RateLimitAlert({ Contact us ) : ( - , +} diff --git a/src/config/subscription.ts b/src/config/subscription.ts deleted file mode 100644 index 729e869e..00000000 --- a/src/config/subscription.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { env } from "@/env.js" -import type { SubscriptionPlan } from "@/types" - -export type SubscriptionConfig = typeof subscriptionConfig - -export const subscriptionConfig = { - plans: { - Free: { - title: "Free", - description: "Perfect for small businesses that want to sell online.", - features: ["Create up to 1 store", "Create up to 20 products"], - stripePriceId: "", - }, - Standard: { - title: "Standard", - description: "Perfect for midsize businesses that want to sell online.", - features: ["Create up to 2 store", "Create up to 20 products/store"], - stripePriceId: env.STRIPE_STD_MONTHLY_PRICE_ID, - }, - Pro: { - title: "Pro", - description: "Perfect for big businesses that want to sell online.", - features: ["Create up to 3 stores", "Create up to 20 products/store"], - stripePriceId: env.STRIPE_PRO_MONTHLY_PRICE_ID, - }, - } satisfies Record, -} diff --git a/src/db/schema/addresses.ts b/src/db/schema/addresses.ts index 2d972b9f..f5e9676e 100644 --- a/src/db/schema/addresses.ts +++ b/src/db/schema/addresses.ts @@ -1,4 +1,4 @@ -import { pgTable, varchar } from "drizzle-orm/pg-core" +import { pgTable, text, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" @@ -9,12 +9,12 @@ export const addresses = pgTable("addresses", { id: varchar("id", { length: 30 }) .$defaultFn(() => generateId()) .primaryKey(), // prefix_ + nanoid (12) - line1: varchar("line1", { length: 256 }), - line2: varchar("line2", { length: 256 }), - city: varchar("city", { length: 256 }), - state: varchar("state", { length: 256 }), - postalCode: varchar("postal_code", { length: 256 }), - country: varchar("country", { length: 256 }), + line1: text("line1"), + line2: text("line2"), + city: text("city"), + state: text("state"), + postalCode: text("postal_code"), + country: text("country"), ...lifecycleDates, }) diff --git a/src/db/schema/carts.ts b/src/db/schema/carts.ts index c9485be7..7262f957 100644 --- a/src/db/schema/carts.ts +++ b/src/db/schema/carts.ts @@ -1,4 +1,4 @@ -import { boolean, json, pgTable, varchar } from "drizzle-orm/pg-core" +import { boolean, json, pgTable, text, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" import { type CartItemSchema } from "@/lib/validations/cart" @@ -11,7 +11,7 @@ export const carts = pgTable("carts", { .$defaultFn(() => generateId()) .primaryKey(), // prefix_ + nanoid (12) paymentIntentId: varchar("payment_intent_id", { length: 256 }), - clientSecret: varchar("client_secret", { length: 256 }), + clientSecret: text("client_secret"), items: json("items").$type().default(null), closed: boolean("closed").notNull().default(false), ...lifecycleDates, diff --git a/src/db/schema/categories.ts b/src/db/schema/categories.ts index 796a7b32..ca027e9f 100644 --- a/src/db/schema/categories.ts +++ b/src/db/schema/categories.ts @@ -11,8 +11,8 @@ export const categories = pgTable("categories", { id: varchar("id", { length: 30 }) .$defaultFn(() => generateId()) .primaryKey(), // prefix_ + nanoid (12) - name: varchar("name", { length: 256 }).notNull().unique(), - slug: varchar("slug", { length: 256 }).unique().notNull(), + name: text("name").notNull().unique(), + slug: text("slug").notNull().unique(), description: text("description"), ...lifecycleDates, }) diff --git a/src/db/schema/customers.ts b/src/db/schema/customers.ts new file mode 100644 index 00000000..d7cdb826 --- /dev/null +++ b/src/db/schema/customers.ts @@ -0,0 +1,40 @@ +import { relations } from "drizzle-orm" +import { index, pgTable, text, varchar } from "drizzle-orm/pg-core" + +import { generateId } from "@/lib/id" + +import { stores } from "./stores" +import { lifecycleDates } from "./utils" + +export const customers = pgTable( + "customers", + { + id: varchar("id", { length: 30 }) + .$defaultFn(() => generateId()) + .primaryKey(), // prefix_ + nanoid (12) + name: text("name"), + email: text("email"), + storeConnectId: varchar("store_connect_id").unique(), // stripe connect + stripeCustomerId: varchar("stripe_customer_id").unique().notNull(), + storeId: varchar("store_id", { length: 30 }) + .references(() => stores.id, { onDelete: "cascade" }) + .notNull(), + ...lifecycleDates, + }, + (table) => ({ + storeIdIdx: index("customers_store_id_idx").on(table.storeId), + stripeCustomerIdIdx: index("customers_stripe_customer_id_idx").on( + table.stripeCustomerId + ), + }) +) + +export const customersRelations = relations(customers, ({ one }) => ({ + store: one(stores, { + fields: [customers.storeId], + references: [stores.id], + }), +})) + +export type Customer = typeof customers.$inferSelect +export type NewCustomer = typeof customers.$inferInsert diff --git a/src/db/schema/index.ts b/src/db/schema/index.ts index 2b83fada..707e3392 100644 --- a/src/db/schema/index.ts +++ b/src/db/schema/index.ts @@ -1,12 +1,13 @@ -export * from "./stores" -export * from "./tags" -export * from "./products" -export * from "./categories" -export * from "./subcategories" -export * from "./product-tags" -export * from "./carts" -export * from "./subscriptions" -export * from "./payments" export * from "./addresses" -export * from "./orders" +export * from "./carts" +export * from "./categories" +export * from "./customers" export * from "./notifications" +export * from "./orders" +export * from "./payments" +export * from "./products" +export * from "./stores" +export * from "./stocks" +export * from "./subcategories" +export * from "./tags" +// export * from "./variants" diff --git a/src/db/schema/notifications.ts b/src/db/schema/notifications.ts index 6d47a2b5..de7d76ff 100644 --- a/src/db/schema/notifications.ts +++ b/src/db/schema/notifications.ts @@ -1,4 +1,4 @@ -import { boolean, pgTable, varchar } from "drizzle-orm/pg-core" +import { boolean, pgTable, text, varchar } from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" @@ -9,9 +9,9 @@ export const notifications = pgTable("notifications", { .$defaultFn(() => generateId()) .primaryKey(), // prefix_ + nanoid (12) userId: varchar("user_id", { length: 36 }), // uuid v4 - email: varchar("email", { length: 256 }).notNull().unique(), - token: varchar("token", { length: 256 }).notNull().unique(), - referredBy: varchar("referred_by", { length: 256 }), + email: text("email").notNull().unique(), + token: text("token").notNull().unique(), + referredBy: text("referred_by"), communication: boolean("communication").default(false).notNull(), newsletter: boolean("newsletter").default(false).notNull(), marketing: boolean("marketing").default(false).notNull(), diff --git a/src/db/schema/orders.ts b/src/db/schema/orders.ts index 86f58c2a..2b331a91 100644 --- a/src/db/schema/orders.ts +++ b/src/db/schema/orders.ts @@ -4,6 +4,7 @@ import { integer, json, pgTable, + text, varchar, } from "drizzle-orm/pg-core" @@ -29,14 +30,10 @@ export const orders = pgTable( amount: decimal("amount", { precision: 10, scale: 2 }) .notNull() .default("0"), - stripePaymentIntentId: varchar("stripe_payment_intent_id", { - length: 256, - }).notNull(), - stripePaymentIntentStatus: varchar("stripe_payment_intent_status", { - length: 256, - }).notNull(), - name: varchar("name", { length: 256 }).notNull(), - email: varchar("email", { length: 256 }).notNull(), + stripePaymentIntentId: text("stripe_payment_intent_id").notNull(), + stripePaymentIntentStatus: text("stripe_payment_intent_status").notNull(), + name: text("name").notNull(), + email: text("email").notNull(), addressId: varchar("address_id", { length: 30 }) .references(() => addresses.id, { onDelete: "cascade" }) .notNull(), diff --git a/src/db/schema/payments.ts b/src/db/schema/payments.ts index 98a0b0a8..c85d7a45 100644 --- a/src/db/schema/payments.ts +++ b/src/db/schema/payments.ts @@ -1,5 +1,11 @@ import { relations } from "drizzle-orm" -import { boolean, index, integer, pgTable, varchar } from "drizzle-orm/pg-core" +import { + boolean, + index, + pgTable, + timestamp, + varchar, +} from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" @@ -17,8 +23,8 @@ export const payments = pgTable( .references(() => stores.id, { onDelete: "cascade" }) .notNull(), stripeAccountId: varchar("stripe_account_id", { length: 256 }).notNull(), - stripeAccountCreatedAt: integer("stripe_account_created_at"), - stripeAccountExpiresAt: integer("stripe_account_expires_at"), + stripeAccountCreatedAt: timestamp("stripe_account_created_at"), + stripeAccountExpiresAt: timestamp("stripe_account_expires_at"), detailsSubmitted: boolean("details_submitted").notNull().default(false), ...lifecycleDates, }, diff --git a/src/db/schema/product-tags.ts b/src/db/schema/product-tags.ts deleted file mode 100644 index bb049b8e..00000000 --- a/src/db/schema/product-tags.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { relations } from "drizzle-orm" -import { index, pgTable, varchar } from "drizzle-orm/pg-core" - -import { products } from "./products" -import { tags } from "./tags" -import { lifecycleDates } from "./utils" - -export const productTags = pgTable( - "product_tags", - { - productId: varchar("product_id", { length: 30 }) - .references(() => products.id, { onDelete: "cascade" }) - .notNull(), - tagId: varchar("tag_id", { length: 30 }) - .references(() => tags.id, { onDelete: "cascade" }) - .notNull(), - ...lifecycleDates, - }, - (table) => ({ - productTagIdx: index("product_tags_product_id_tag_id_idx").on( - table.productId, - table.tagId - ), - }) -) - -export const productTagsRelations = relations(productTags, ({ one }) => ({ - product: one(products, { - fields: [productTags.productId], - references: [products.id], - }), - tag: one(tags, { fields: [productTags.tagId], references: [tags.id] }), -})) - -export type ProductTag = typeof productTags.$inferSelect -export type NewProductTag = typeof productTags.$inferInsert diff --git a/src/db/schema/product-variants.ts b/src/db/schema/product-variants.ts deleted file mode 100644 index 92645252..00000000 --- a/src/db/schema/product-variants.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { relations } from "drizzle-orm" -import { decimal, index, integer, pgTable, varchar } from "drizzle-orm/pg-core" - -import { generateId } from "@/lib/id" - -import { products } from "./products" -import { lifecycleDates } from "./utils" - -export const productVariants = pgTable( - "product_variants", - { - id: varchar("id", { length: 30 }) - .$defaultFn(() => generateId()) - .primaryKey(), - productId: varchar("product_id", { length: 30 }) - .references(() => products.id, { onDelete: "cascade" }) - .notNull(), - name: varchar("name", { length: 256 }).notNull(), - price: decimal("price", { precision: 10, scale: 2 }).notNull().default("0"), - quantity: integer("quantity").notNull().default(0), - ...lifecycleDates, - }, - (table) => ({ - productIdIdx: index("product_variants_product_id_idx").on(table.productId), - }) -) - -export const productVariantsRelations = relations( - productVariants, - ({ one }) => ({ - product: one(products, { - fields: [productVariants.productId], - references: [products.id], - }), - }) -) - -export type ProductVariant = typeof productVariants.$inferSelect -export type NewProductVariant = typeof productVariants.$inferInsert diff --git a/src/db/schema/products.ts b/src/db/schema/products.ts index b63973cd..3f54932a 100644 --- a/src/db/schema/products.ts +++ b/src/db/schema/products.ts @@ -30,7 +30,7 @@ export const products = pgTable( id: varchar("id", { length: 30 }) .$defaultFn(() => generateId()) .primaryKey(), // prefix_ + nanoid (12) - name: varchar("name", { length: 256 }).notNull(), + name: text("name").notNull(), description: text("description"), images: json("images").$type().default(null), categoryId: varchar("category_id", { length: 30 }).notNull(), diff --git a/src/db/schema/stocks.ts b/src/db/schema/stocks.ts new file mode 100644 index 00000000..b1f553a5 --- /dev/null +++ b/src/db/schema/stocks.ts @@ -0,0 +1,40 @@ +import { relations } from "drizzle-orm" +import { index, integer, pgTable, varchar } from "drizzle-orm/pg-core" + +import { generateId } from "@/lib/id" + +import { lifecycleDates } from "./utils" +import { productVariants, productVariantValues } from "./variants" + +export const stocks = pgTable( + "stocks", + { + id: varchar("id", { length: 30 }) + .$defaultFn(() => generateId()) + .primaryKey(), + productVariantId: varchar("product_variant_id", { length: 30 }) + .references(() => productVariants.variantId, { onDelete: "cascade" }) + .notNull(), + quantity: integer("quantity").notNull().default(0), + ...lifecycleDates, + }, + (table) => ({ + productVariantIdIdx: index("stocks_product_variant_id_idx").on( + table.productVariantId + ), + }) +) + +export const stocksRelations = relations(stocks, ({ one }) => ({ + productVariant: one(productVariants, { + fields: [stocks.productVariantId], + references: [productVariants.variantId], + }), + productVariantValues: one(productVariantValues, { + fields: [stocks.productVariantId], + references: [productVariantValues.productVariantId], + }), +})) + +export type Stock = typeof stocks.$inferSelect +export type NewStock = typeof stocks.$inferInsert diff --git a/src/db/schema/stores.ts b/src/db/schema/stores.ts index f677cceb..d33621a4 100644 --- a/src/db/schema/stores.ts +++ b/src/db/schema/stores.ts @@ -1,29 +1,47 @@ import { relations } from "drizzle-orm" -import { boolean, integer, pgTable, text, varchar } from "drizzle-orm/pg-core" +import { + boolean, + integer, + pgEnum, + pgTable, + text, + timestamp, + varchar, +} from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" +import { customers } from "./customers" import { payments } from "./payments" import { products } from "./products" import { lifecycleDates } from "./utils" +export const storePlanEnum = pgEnum("store_plan", ["free", "standard", "pro"]) + export const stores = pgTable("stores", { id: varchar("id", { length: 30 }) .$defaultFn(() => generateId()) .primaryKey(), // prefix_ + nanoid (12) userId: varchar("user_id", { length: 36 }).notNull(), // uuid v4 - name: varchar("name").notNull(), + slug: text("slug").unique().notNull(), + name: text("name").notNull(), description: text("description"), - slug: text("slug").unique(), - active: boolean("active").notNull().default(false), + + plan: storePlanEnum("plan").notNull().default("free"), + planEndsAt: timestamp("ends_at"), + cancelPlanAtEnd: boolean("cancel_plan_at_end").default(false), + stripeAccountId: varchar("stripe_account_id").unique(), // stripe connect + stripeCustomerId: varchar("stripe_customer_id").unique(), + productLimit: integer("product_limit").notNull().default(10), tagLimit: integer("tag_limit").notNull().default(5), - stripeAccountId: varchar("stripe_account_id"), + variantLimit: integer("variant_limit").notNull().default(5), ...lifecycleDates, }) export const storesRelations = relations(stores, ({ many }) => ({ - products: many(products), - payments: many(payments), + products: many(products, { relationName: "storeProducts" }), + payments: many(payments, { relationName: "storePayments" }), + customers: many(customers, { relationName: "storeCustomers" }), })) export type Store = typeof stores.$inferSelect diff --git a/src/db/schema/subcategories.ts b/src/db/schema/subcategories.ts index c27cded8..8cc5240e 100644 --- a/src/db/schema/subcategories.ts +++ b/src/db/schema/subcategories.ts @@ -12,8 +12,8 @@ export const subcategories = pgTable( id: varchar("id", { length: 30 }) .$defaultFn(() => generateId()) .primaryKey(), // prefix_ + nanoid (12) - name: varchar("name", { length: 256 }).notNull().unique(), - slug: varchar("slug", { length: 256 }).unique().notNull(), + name: text("name").notNull().unique(), + slug: text("slug").unique().notNull(), description: text("description"), categoryId: varchar("category_id", { length: 30 }) .references(() => categories.id, { onDelete: "cascade" }) diff --git a/src/db/schema/subscriptions.ts b/src/db/schema/subscriptions.ts deleted file mode 100644 index 1f7f8a2e..00000000 --- a/src/db/schema/subscriptions.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { pgTable, timestamp, varchar } from "drizzle-orm/pg-core" - -import { generateId } from "@/lib/id" - -import { lifecycleDates } from "./utils" - -export const subscriptions = pgTable("subscriptions", { - id: varchar("id", { length: 30 }) - .$defaultFn(() => generateId()) - .primaryKey(), // prefix_ + nanoid (12) - userId: varchar("user_id", { length: 36 }), // uuid v4 - stripeSubscriptionId: varchar("stripe_subscription_id", { length: 256 }), - stripePriceId: varchar("stripe_price_id", { length: 256 }), - stripeCustomerId: varchar("stripe_customer_id", { length: 256 }), - stripeCurrentPeriodEnd: timestamp("stripe_current_period_end"), - ...lifecycleDates, -}) - -export type Subscription = typeof subscriptions.$inferSelect -export type NewSubscription = typeof subscriptions.$inferInsert diff --git a/src/db/schema/tags.ts b/src/db/schema/tags.ts index 370afa47..4fda4430 100644 --- a/src/db/schema/tags.ts +++ b/src/db/schema/tags.ts @@ -1,24 +1,37 @@ import { relations } from "drizzle-orm" -import { index, pgTable, varchar } from "drizzle-orm/pg-core" +import { + index, + pgTable, + primaryKey, + text, + unique, + varchar, +} from "drizzle-orm/pg-core" import { generateId } from "@/lib/id" import { products } from "./products" import { stores } from "./stores" +import { lifecycleDates } from "./utils" +// store tags export const tags = pgTable( "tags", { id: varchar("id", { length: 30 }) .$defaultFn(() => generateId()) .primaryKey(), - name: varchar("name", { length: 50 }).notNull(), - color: varchar("color", { length: 50 }).notNull().default("#000000"), + name: text("name").notNull(), + color: text("color").notNull().default("blue"), storeId: varchar("store_id", { length: 30 }) .references(() => stores.id, { onDelete: "cascade" }) .notNull(), + ...lifecycleDates, }, (table) => ({ + tagsNameUnique: unique("tags_name_store_id_unique") + .on(table.name, table.storeId) + .nullsNotDistinct(), storeIdIdx: index("tags_store_id_idx").on(table.storeId), }) ) @@ -32,3 +45,37 @@ export const tagsRelations = relations(tags, ({ one, many }) => ({ export type Tag = typeof tags.$inferSelect export type NewTag = typeof tags.$inferInsert + +export const productTags = pgTable( + "product_tags", + { + productId: varchar("product_id", { length: 30 }) + .references(() => products.id, { onDelete: "cascade" }) + .notNull(), + tagId: varchar("tag_id", { length: 30 }) + .references(() => tags.id, { onDelete: "cascade" }) + .notNull(), + ...lifecycleDates, + }, + (table) => ({ + pk: primaryKey({ + name: "product_tags_pk", + columns: [table.productId, table.tagId], + }), + productTagIdx: index("product_tags_product_id_tag_id_idx").on( + table.productId, + table.tagId + ), + }) +) + +export const productTagsRelations = relations(productTags, ({ one }) => ({ + product: one(products, { + fields: [productTags.productId], + references: [products.id], + }), + tag: one(tags, { fields: [productTags.tagId], references: [tags.id] }), +})) + +export type ProductTag = typeof productTags.$inferSelect +export type NewProductTag = typeof productTags.$inferInsert diff --git a/src/db/schema/variants.ts b/src/db/schema/variants.ts new file mode 100644 index 00000000..ea49ed64 --- /dev/null +++ b/src/db/schema/variants.ts @@ -0,0 +1,122 @@ +import { relations } from "drizzle-orm" +import { + decimal, + index, + pgTable, + primaryKey, + text, + unique, + varchar, +} from "drizzle-orm/pg-core" + +import { generateId } from "@/lib/id" + +import { products } from "./products" +import { stocks } from "./stocks" +import { stores } from "./stores" +import { lifecycleDates } from "./utils" + +// store variants +export const variants = pgTable( + "variants", + { + id: varchar("id", { length: 30 }) + .$defaultFn(() => generateId()) + .primaryKey(), + storeId: varchar("store_id", { length: 30 }) + .references(() => stores.id, { onDelete: "cascade" }) + .notNull(), + name: text("name").notNull(), + ...lifecycleDates, + }, + (table) => ({ + variantsNameUnique: unique("variants_name_store_id_unique") + .on(table.name, table.storeId) + .nullsNotDistinct(), + storeIdIdx: index("variants_store_id_idx").on(table.storeId), + }) +) + +export const variantsRelations = relations(variants, ({ one }) => ({ + store: one(stores, { fields: [variants.storeId], references: [stores.id] }), +})) + +export type Variant = typeof variants.$inferSelect +export type NewVariant = typeof variants.$inferInsert + +export const productVariants = pgTable( + "product_variants", + { + productId: varchar("product_id", { length: 30 }) + .references(() => products.id, { onDelete: "cascade" }) + .notNull(), + variantId: varchar("variant_id", { length: 30 }) + .references(() => variants.id, { onDelete: "cascade" }) + .notNull(), + ...lifecycleDates, + }, + (table) => ({ + pk: primaryKey({ + name: "product_variants_pk", + columns: [table.productId, table.variantId], + }), + productIdIdx: index("product_variants_product_id_idx").on(table.productId), + variantIdIdx: index("product_variants_variant_id_idx").on(table.variantId), + }) +) + +export const productVariantsRelations = relations( + productVariants, + ({ one, many }) => ({ + product: one(products, { + fields: [productVariants.productId], + references: [products.id], + }), + variant: one(variants, { + fields: [productVariants.variantId], + references: [variants.id], + }), + productVariantValues: many(productVariantValues), + }) +) + +export type ProductVariant = typeof productVariants.$inferSelect +export type NewProductVariant = typeof productVariants.$inferInsert + +export const productVariantValues = pgTable( + "product_variant_values", + { + productVariantId: varchar("product_variant_id", { length: 30 }) + .references(() => productVariants.productId, { onDelete: "cascade" }) + .notNull(), + value: text("value").notNull(), + price: decimal("price", { precision: 10, scale: 2 }).notNull(), + stockId: varchar("stock_id", { length: 30 }) + .references(() => stocks.id, { onDelete: "cascade" }) + .notNull(), + ...lifecycleDates, + }, + (table) => ({ + pk: primaryKey({ + name: "product_variant_values_pk", + columns: [table.productVariantId, table.value], + }), + productVariantIdIdx: index("variant_values_product_variant_id_idx").on( + table.productVariantId + ), + stockIdIdx: index("variant_values_stock_id_idx").on(table.stockId), + }) +) + +export const productVariantValuesRelations = relations( + productVariantValues, + ({ one }) => ({ + productVariant: one(productVariants, { + fields: [productVariantValues.productVariantId], + references: [productVariants.productId], + }), + }) +) + +export type ProductVariantValue = typeof productVariantValues.$inferSelect +export type NewProductVariantValue = typeof productVariantValues.$inferInsert diff --git a/src/lib/actions/stripe.ts b/src/lib/actions/stripe.ts index 50a3492f..d1e07324 100644 --- a/src/lib/actions/stripe.ts +++ b/src/lib/actions/stripe.ts @@ -3,19 +3,18 @@ import { unstable_cache as cache, unstable_noStore as noStore, - revalidateTag, } from "next/cache" import { cookies } from "next/headers" import { db } from "@/db" import { carts, payments, stores } from "@/db/schema" -import type { SubscriptionPlanWithPrice, UserSubscriptionPlan } from "@/types" +import type { PlanWithPrice, UserPlan } from "@/types" import { clerkClient, currentUser } from "@clerk/nextjs/server" import { addDays } from "date-fns" import { eq } from "drizzle-orm" import type Stripe from "stripe" import { type z } from "zod" -import { subscriptionConfig } from "@/config/subscription" +import { pricingConfig } from "@/config/pricing" import { calculateOrderAmount } from "@/lib/checkout" import { getErrorMessage } from "@/lib/handle-error" import { stripe } from "@/lib/stripe" @@ -27,17 +26,15 @@ import type { getPaymentIntentSchema, getPaymentIntentsSchema, getStripeAccountSchema, - manageSubscriptionSchema, + managePlanSchema, } from "@/lib/validations/stripe" // Retrieve prices for all plans from Stripe -export async function getSubscriptionPlans(): Promise< - SubscriptionPlanWithPrice[] -> { +export async function getPlans(): Promise { return await cache( async () => { - const standardPriceId = subscriptionConfig.plans.Standard.stripePriceId - const proPriceId = subscriptionConfig.plans.Pro.stripePriceId + const standardPriceId = pricingConfig.plans.standard.stripePriceId + const proPriceId = pricingConfig.plans.pro.stripePriceId const [standardPrice, proPrice] = await Promise.all([ stripe.prices.retrieve(standardPriceId), @@ -46,7 +43,7 @@ export async function getSubscriptionPlans(): Promise< const currency = proPrice.currency - return Object.values(subscriptionConfig.plans).map((plan) => { + return Object.values(pricingConfig.plans).map((plan) => { const price = plan.stripePriceId === proPriceId ? proPrice @@ -68,10 +65,10 @@ export async function getSubscriptionPlans(): Promise< )() } -// Getting the subscription plan for a user -export async function getSubscriptionPlan(input: { +// Getting the subscription plan by store id +export async function getPlan(input: { userId: string -}): Promise { +}): Promise { noStore() try { const user = await clerkClient.users.getUser(input.userId) @@ -94,10 +91,10 @@ export async function getSubscriptionPlan(input: { ).getTime() > Date.now() const plan = isSubscribed - ? Object.values(subscriptionConfig.plans).find( + ? Object.values(pricingConfig.plans).find( (plan) => plan.stripePriceId === userPrivateMetadata.stripePriceId ) - : subscriptionConfig.plans.Free + : pricingConfig.plans.free if (!plan) { throw new Error("Plan not found.") @@ -126,7 +123,7 @@ export async function getSubscriptionPlan(input: { } } -// Getting the Stripe account for a store +// Getting the Stripe account by store id export async function getStripeAccount( input: z.infer ) { @@ -178,7 +175,9 @@ export async function getStripeAccount( .update(payments) .set({ detailsSubmitted: account.details_submitted, - stripeAccountCreatedAt: account.created, + stripeAccountCreatedAt: account.created + ? new Date(account.created * 1000) + : null, }) .where(eq(payments.storeId, input.storeId)) @@ -186,7 +185,6 @@ export async function getStripeAccount( .update(stores) .set({ stripeAccountId: account.id, - active: true, }) .where(eq(stores.id, input.storeId)) }) @@ -304,10 +302,8 @@ export async function getPaymentIntent( } } -// Managing stripe subscriptions for a user -export async function manageSubscription( - input: z.infer -) { +// Managing subscription by store id +export async function managePlan(input: z.infer) { noStore() try { @@ -355,8 +351,6 @@ export async function manageSubscription( }, }) - revalidateTag("user-subscription") - return { data: { url: stripeSession.url ?? billingUrl, diff --git a/src/lib/queries/store.ts b/src/lib/queries/store.ts index 2240bf2b..532350b3 100644 --- a/src/lib/queries/store.ts +++ b/src/lib/queries/store.ts @@ -38,7 +38,7 @@ export async function getFeaturedStores() { .limit(4) .leftJoin(products, eq(products.storeId, stores.id)) .groupBy(stores.id) - .orderBy(desc(stores.active), desc(sql`count(*)`)) + .orderBy(desc(sql`count(*)`)) }, ["featured-stores"], { diff --git a/src/lib/queries/user.ts b/src/lib/queries/user.ts index 9ce83608..eb5e6bf9 100644 --- a/src/lib/queries/user.ts +++ b/src/lib/queries/user.ts @@ -7,7 +7,7 @@ import { products, stores } from "@/db/schema" import { currentUser } from "@clerk/nextjs/server" import { count, countDistinct, eq } from "drizzle-orm" -import { getSubscriptionPlan } from "@/lib/actions/stripe" +import { getPlan } from "@/lib/actions/stripe" import { getPlanLimits } from "@/lib/subscription" /** @@ -58,7 +58,7 @@ export async function getUserPlanMetrics(input: { userId: string }) { } try { - const subscriptionPlan = await getSubscriptionPlan({ userId: input.userId }) + const subscriptionPlan = await getPlan({ userId: input.userId }) if (!subscriptionPlan) { return fallback @@ -69,7 +69,7 @@ export async function getUserPlanMetrics(input: { userId: string }) { }) const { storeLimit, productLimit } = getPlanLimits({ - planTitle: subscriptionPlan.title, + planId: subscriptionPlan.id, }) const storeLimitExceeded = storeCount >= storeLimit diff --git a/src/lib/subscription.ts b/src/lib/subscription.ts index 678e8141..20377aaa 100644 --- a/src/lib/subscription.ts +++ b/src/lib/subscription.ts @@ -1,13 +1,15 @@ -import type { SubscriptionPlan } from "@/types" +import type { Plan } from "@/types" -import { subscriptionConfig } from "@/config/subscription" +import { pricingConfig } from "@/config/pricing" -export function getPlanLimits({ - planTitle, -}: { - planTitle?: SubscriptionPlan["title"] -}) { - const { features } = subscriptionConfig.plans[planTitle ?? "Free"] +export function getPlanByPriceId({ priceId }: { priceId: string }) { + return Object.values(pricingConfig.plans).find( + (plan) => plan.stripePriceId === priceId + ) +} + +export function getPlanLimits({ planId }: { planId?: Plan["id"] }) { + const { features } = pricingConfig.plans[planId ?? "free"] const [storeLimit, productLimit] = features.map((feature) => { const [value] = feature.match(/\d+/) || [] diff --git a/src/lib/validations/stripe.ts b/src/lib/validations/stripe.ts index 4b0d19d1..4428a757 100644 --- a/src/lib/validations/stripe.ts +++ b/src/lib/validations/stripe.ts @@ -2,7 +2,7 @@ import * as z from "zod" import { cartLineItemSchema } from "@/lib/validations/cart" -export const manageSubscriptionSchema = z.object({ +export const managePlanSchema = z.object({ stripePriceId: z.string(), stripeCustomerId: z.string().optional().nullable(), stripeSubscriptionId: z.string().optional().nullable(), diff --git a/src/types/index.ts b/src/types/index.ts index 43d62f46..9eda8219 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,4 @@ +import { type Store } from "@/db/schema" import { type SQL } from "drizzle-orm" import type Stripe from "stripe" import { type ClientUploadedFileData } from "uploadthing/types" @@ -65,18 +66,25 @@ export type DrizzleWhere = export type StripePaymentStatus = Stripe.PaymentIntent.Status -export interface SubscriptionPlan { - title: "Free" | "Standard" | "Pro" +export interface Plan { + id: Store["plan"] + title: string description: string features: string[] stripePriceId: string + limits: { + stores: number + products: number + tags: number + variants: number + } } -export interface SubscriptionPlanWithPrice extends SubscriptionPlan { +export interface PlanWithPrice extends Plan { price: string } -export interface UserSubscriptionPlan extends SubscriptionPlan { +export interface UserPlan extends Plan { stripeSubscriptionId?: string | null stripeCurrentPeriodEnd?: string | null stripeCustomerId?: string | null From d335bca6bf4a54c7022cfa8d336c367551fe69ec Mon Sep 17 00:00:00 2001 From: sadmann7 Date: Sun, 26 May 2024 22:53:10 +0600 Subject: [PATCH 3/3] feat: better schema --- .../onboarding/_components/connect-stripe.tsx | 13 +++++++++++-- .../[storeId]/_components/create-store-form.tsx | 6 +++++- src/components/connect-store-to-stripe-button.tsx | 9 +++++++-- src/db/schema/index.ts | 4 ++-- src/db/schema/stocks.ts | 4 ++-- src/db/schema/variants.ts | 9 ++++----- src/lib/actions/seed.ts | 7 ------- 7 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/app/(dashboard)/onboarding/_components/connect-stripe.tsx b/src/app/(dashboard)/onboarding/_components/connect-stripe.tsx index 861b505d..17414b45 100644 --- a/src/app/(dashboard)/onboarding/_components/connect-stripe.tsx +++ b/src/app/(dashboard)/onboarding/_components/connect-stripe.tsx @@ -4,6 +4,7 @@ import React from "react" import { useRouter } from "next/navigation" import { motion } from "framer-motion" +import { Button } from "@/components/ui/button" import { ConnectStoreToStripeButton } from "@/components/connect-store-to-stripe-button" interface ConnectStripeProps { @@ -48,10 +49,11 @@ export function ConnectStripe({ storeId }: ConnectStripeProps) { }, }} > - Now connect your store to Stripe + Now let's connect your store to Stripe {storeId && ( - + + )} diff --git a/src/app/(dashboard)/store/[storeId]/_components/create-store-form.tsx b/src/app/(dashboard)/store/[storeId]/_components/create-store-form.tsx index 8dd9da6c..a4ebe7b6 100644 --- a/src/app/(dashboard)/store/[storeId]/_components/create-store-form.tsx +++ b/src/app/(dashboard)/store/[storeId]/_components/create-store-form.tsx @@ -45,7 +45,11 @@ export function CreateStoreForm({ Name - + diff --git a/src/components/connect-store-to-stripe-button.tsx b/src/components/connect-store-to-stripe-button.tsx index dc22fe36..4dd75467 100644 --- a/src/components/connect-store-to-stripe-button.tsx +++ b/src/components/connect-store-to-stripe-button.tsx @@ -4,21 +4,25 @@ import * as React from "react" import { toast } from "sonner" import { createAccountLink } from "@/lib/actions/stripe" -import { Button } from "@/components/ui/button" +import { cn } from "@/lib/utils" +import { Button, type ButtonProps } from "@/components/ui/button" import { Icons } from "@/components/icons" -interface ConnectToStripeButtonProps { +interface ConnectToStripeButtonProps extends ButtonProps { storeId: string } export function ConnectStoreToStripeButton({ storeId, + className, + ...props }: ConnectToStripeButtonProps) { const [loading, setLoading] = React.useState(false) return (