diff --git a/.depcheckrc.json b/.depcheckrc.json index 46afbeb2..fa0c931d 100644 --- a/.depcheckrc.json +++ b/.depcheckrc.json @@ -34,6 +34,7 @@ "@layouts/*", "@lib/*", "@server/*", + "@server/*", "@utils/*", "mdx", diff --git a/.gitignore b/.gitignore index 17da83b4..eec06d2c 100644 --- a/.gitignore +++ b/.gitignore @@ -242,3 +242,6 @@ $RECYCLE.BIN/ .cursorrules + +# Million Lint +.million diff --git a/eslint.config.js b/eslint.config.js.bak similarity index 100% rename from eslint.config.js rename to eslint.config.js.bak diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..ca01607f --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,71 @@ +// @ts-check + +import { FlatCompat } from '@eslint/eslintrc'; +import eslint from '@eslint/js'; +import tsParser from '@typescript-eslint/parser'; +import reactCompiler from 'eslint-plugin-react-compiler'; +import unusedImports from 'eslint-plugin-unused-imports'; +import tseslint from 'typescript-eslint'; + +const compat = new FlatCompat({ + baseDirectory: import.meta.dirname, +}); + +const nextEslintConfig = [ + ...compat.extends('next/core-web-vitals', 'next/typescript'), +]; + +export default tseslint.config( + nextEslintConfig, + eslint.configs.recommended, + tseslint.configs.recommended, + { + ignores: [ + '**/**/node_modules', + '**/**/.next', + '**/**/public', + 'components/ui', + 'env.js', + '**/.eslintrc.cjs', + '**/*.config.js', + '**/*.config.cjs', + '**/*.config.mjs', + '.next', + 'dist', + 'pnpm-lock.yaml', + ], + }, + { + plugins: { + 'unused-imports': unusedImports, + 'react-compiler': reactCompiler, + }, + languageOptions: { + parser: tsParser, + ecmaVersion: 'latest', + sourceType: 'module', + parserOptions: { + project: ['./tsconfig.json'], + }, + }, + }, + { + rules: { + 'react/prop-types': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, + ], + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + '@typescript-eslint/consistent-type-imports': [ + 'warn', + { prefer: 'type-imports', fixStyle: 'separate-type-imports' }, + ], + '@typescript-eslint/no-misused-promises': [ + 2, + { checksVoidReturn: { attributes: false } }, + ], + 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], + }, + } +); diff --git a/index.js b/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/next-env.d.ts b/next-env.d.ts index 725dd6f2..3cd7048e 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -3,4 +3,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.mjs b/next.config.mjs index a8608313..f5be4bb3 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,9 +1,10 @@ import withBundleAnalyzer from '@next/bundle-analyzer'; -import createJiti from 'jiti'; +import { createJiti } from 'jiti'; const jiti = createJiti(new URL(import.meta.url).pathname); -jiti('./src/utils/env'); +// Use the recommended import() method instead of direct call +await jiti.import('./src/utils/env'); /** * @type {import('next').NextConfig} @@ -34,48 +35,51 @@ const config = { }, ], }, + swcMinify: false, productionBrowserSourceMaps: true, - redirects: async () => { - return [ - { - source: '/meet', - destination: 'https://savvycal.com/irreverentmike/30m', - permanent: false, - }, - { - source: '/meet/pod', - destination: 'https://savvycal.com/irreverentmike/pod', - permanent: false, - }, - { - source: '/sponsor', - destination: 'https://www.passionfroot.me/irreverentmike', - permanent: false, - }, - { - source: '/tinyimprovements', - destination: '/newsletter', - permanent: false, - }, - ]; - }, - rewrites: async () => { - return [ - { - source: '/ingest/static/:path*', - destination: 'https://us-assets.i.posthog.com/static/:path*', - }, - { - source: '/ingest/:path*', - destination: 'https://us.i.posthog.com/:path*', - }, - { - source: '/ingest/decide', - destination: 'https://us.i.posthog.com/decide', - }, - ]; - }, skipTrailingSlashRedirect: true, + redirects: async () => [ + { + source: '/meet', + destination: 'https://savvycal.com/irreverentmike/30m', + permanent: false, + }, + { + source: '/meet/pod', + destination: 'https://savvycal.com/irreverentmike/pod', + permanent: false, + }, + { + source: '/sponsor', + destination: 'https://www.passionfroot.me/irreverentmike', + permanent: false, + }, + { + source: '/tinyimprovements', + destination: '/newsletter', + permanent: false, + }, + ], + rewrites: async () => [ + { + source: '/ingest/static/:path*', + destination: 'https://us-assets.i.posthog.com/static/:path*', + }, + { + source: '/ingest/:path*', + destination: 'https://us.i.posthog.com/:path*', + }, + { + source: '/ingest/decide', + destination: 'https://us.i.posthog.com/decide', + }, + ], + webpack: (config, { dev, isServer }) => { + if (!dev) { + config.optimization.minimize = false; + } + return config; + }, }; export default withBundleAnalyzer({ enabled: process.env.ANALYZE === true })( diff --git a/package.json b/package.json index 81b2fa0e..da0879b7 100644 --- a/package.json +++ b/package.json @@ -8,28 +8,29 @@ "scripts": { "analyze": "ANALYZE=true next build", "build": "next build", - "dev": "NODE_OPTIONS='--inspect' next dev --turbo", + "dev": "NODE_OPTIONS='--inspect' next dev --turbopack", "depcheck": "depcheck", "email": "email dev --dir ./src/utils/email/templates", - "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"", + "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md,mdx}\"", "start": "next start", "test": "pnpm exec playwright test", - "lint": "next lint", - "eslint-check": "eslint --print-config . | eslint-config-prettier-check" + "lint": "pnpm eslint .", + "eslint-check": "pnpm eslint --print-config . | pnpm eslint-config-prettier-check" }, "dependencies": { "@cloudinary/url-gen": "^1.21.0", "@headlessui/react": "^2.2.0", "@heroicons/react": "^2.2.0", + "@mdx-js/mdx": "^3.1.0", "@mdx-js/react": "^3.1.0", - "@next/bundle-analyzer": "^15.1.6", + "@next/bundle-analyzer": "^15.1.7", "@number-flow/react": "^0.5.5", - "@react-email/components": "^0.0.32", - "@react-email/render": "^1.0.4", + "@react-email/components": "^0.0.33", + "@react-email/render": "^1.0.5", "@t3-oss/env-core": "^0.11.1", - "@t3-oss/env-nextjs": "^0.11.1", + "@t3-oss/env-nextjs": "^0.12.0", "@tailwindcss/typography": "^0.5.16", - "@tanstack/react-query": "^5.64.2", + "@tanstack/react-query": "^5.66.0", "@trpc/client": "11.0.0-rc.666", "@trpc/next": "11.0.0-rc.666", "@trpc/react-query": "11.0.0-rc.666", @@ -41,60 +42,63 @@ "fathom-client": "^3.7.2", "feed": "^4.2.2", "gray-matter": "^4.0.3", - "lucide-react": "^0.474.0", - "mailchecker": "^6.0.15", + "lucide-react": "^0.475.0", "micro": "^10.0.1", - "next": "^14.2.21", + "next": "15.1.7", "next-cloudinary": "^6.16.0", "next-mdx-remote": "5.0.0", "pluralize": "^8.0.0", - "postcss": "^8.5.1", - "posthog-js": "^1.210.2", - "posthog-node": "^4.4.1", + "postcss": "^8.5.2", + "posthog-js": "^1.218.2", + "posthog-node": "^4.6.0", "prism-react-renderer": "^2.4.1", - "react": "^18.3.1", + "react": "19.0.0", "react-aria": "^3.37.0", - "react-dom": "^18.3.1", - "react-email": "3.0.6", + "react-dom": "19.0.0", + "react-email": "3.0.7", "react-icons": "^5.4.0", "react-stately": "^3.35.0", "rehype-img-size": "^1.0.1", "rehype-slug": "^6.0.0", - "resend": "^4.1.1", - "sass": "^1.83.4", + "resend": "^4.1.2", + "sass": "^1.85.0", "sharp": "^0.33.5", "slugify": "^1.6.6", "superjson": "^2.2.2", - "svix": "^1.45.1", - "tailwind-merge": "^2.6.0", - "zod": "^3.24.1" + "svix": "^1.57.0", + "tailwind-merge": "^3.0.1", + "zod": "^3.24.2" }, "devDependencies": { + "@eslint/js": "^9.20.0", "@ianvs/prettier-plugin-sort-imports": "^4.4.1", - "@next/eslint-plugin-next": "^15.1.6", - "@playwright/test": "^1.50.0", + "@next/eslint-plugin-next": "^15.1.7", + "@playwright/test": "^1.50.1", "@types/eslint": "^9.6.1", - "@types/node": "^22.10.10", + "@types/node": "^22.13.4", "@types/pluralize": "^0.0.33", - "@types/react": "^18.3.12", - "@typescript-eslint/eslint-plugin": "^8.21.0", - "@typescript-eslint/parser": "^8.21.0", + "@types/react": "19.0.8", + "@typescript-eslint/eslint-plugin": "^8.24.0", + "@typescript-eslint/parser": "^8.24.0", "depcheck": "^1.4.7", - "eslint": "8.57.0", - "eslint-config-next": "^15.1.6", + "eslint": "9.20.1", + "eslint-config-next": "^15.1.7", "eslint-config-prettier": "^10.0.1", - "eslint-config-turbo": "^2.3.4", + "eslint-config-turbo": "^2.4.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react": "^7.37.3", + "eslint-plugin-react-compiler": "19.0.0-beta-55955c9-20241229", "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-unused-imports": "^4.1.4", "github-slugger": "^2.0.0", "jiti": "^2.4.2", - "prettier": "^3.4.2", + "prettier": "^3.5.1", "prettier-plugin-tailwindcss": "^0.6.11", "schema-dts": "^1.1.2", "tailwindcss": "^3.4.17", - "typescript": "5.7.3" + "typescript": "5.7.3", + "typescript-eslint": "^8.24.0" }, "repository": { "type": "git", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1623d482..c6d6fdb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,46 +13,49 @@ importers: version: 1.21.0 '@headlessui/react': specifier: ^2.2.0 - version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroicons/react': specifier: ^2.2.0 - version: 2.2.0(react@18.3.1) + version: 2.2.0(react@19.0.0) + '@mdx-js/mdx': + specifier: ^3.1.0 + version: 3.1.0(acorn@8.14.0) '@mdx-js/react': specifier: ^3.1.0 - version: 3.1.0(@types/react@18.3.12)(react@18.3.1) + version: 3.1.0(@types/react@19.0.8)(react@19.0.0) '@next/bundle-analyzer': - specifier: ^15.1.6 - version: 15.1.6 + specifier: ^15.1.7 + version: 15.1.7 '@number-flow/react': specifier: ^0.5.5 - version: 0.5.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.5.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-email/components': - specifier: ^0.0.32 - version: 0.0.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^0.0.33 + version: 0.0.33(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-email/render': - specifier: ^1.0.4 - version: 1.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^1.0.5 + version: 1.0.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@t3-oss/env-core': specifier: ^0.11.1 - version: 0.11.1(typescript@5.7.3)(zod@3.24.1) + version: 0.11.1(typescript@5.7.3)(zod@3.24.2) '@t3-oss/env-nextjs': - specifier: ^0.11.1 - version: 0.11.1(typescript@5.7.3)(zod@3.24.1) + specifier: ^0.12.0 + version: 0.12.0(typescript@5.7.3)(zod@3.24.2) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@3.4.17) '@tanstack/react-query': - specifier: ^5.64.2 - version: 5.64.2(react@18.3.1) + specifier: ^5.66.0 + version: 5.66.0(react@19.0.0) '@trpc/client': specifier: 11.0.0-rc.666 version: 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3) '@trpc/next': specifier: 11.0.0-rc.666 - version: 11.0.0-rc.666(@tanstack/react-query@5.64.2(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.64.2(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + version: 11.0.0-rc.666(@tanstack/react-query@5.66.0(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.66.0(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(next@15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@trpc/react-query': specifier: 11.0.0-rc.666 - version: 11.0.0-rc.666(@tanstack/react-query@5.64.2(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + version: 11.0.0-rc.666(@tanstack/react-query@5.66.0(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) '@trpc/server': specifier: 11.0.0-rc.666 version: 11.0.0-rc.666(typescript@5.7.3) @@ -61,7 +64,7 @@ importers: version: 2.0.13 autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -78,56 +81,53 @@ importers: specifier: ^4.0.3 version: 4.0.3 lucide-react: - specifier: ^0.474.0 - version: 0.474.0(react@18.3.1) - mailchecker: - specifier: ^6.0.15 - version: 6.0.15 + specifier: ^0.475.0 + version: 0.475.0(react@19.0.0) micro: specifier: ^10.0.1 version: 10.0.1 next: - specifier: ^14.2.21 - version: 14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4) + specifier: 15.1.7 + version: 15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0) next-cloudinary: specifier: ^6.16.0 - version: 6.16.0(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4))(react@18.3.1) + version: 6.16.0(next@15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react@19.0.0) next-mdx-remote: specifier: 5.0.0 - version: 5.0.0(@types/react@18.3.12)(acorn@8.14.0)(react@18.3.1) + version: 5.0.0(@types/react@19.0.8)(acorn@8.14.0)(react@19.0.0) pluralize: specifier: ^8.0.0 version: 8.0.0 postcss: - specifier: ^8.5.1 - version: 8.5.1 + specifier: ^8.5.2 + version: 8.5.2 posthog-js: - specifier: ^1.210.2 - version: 1.210.2 + specifier: ^1.218.2 + version: 1.218.2 posthog-node: - specifier: ^4.4.1 - version: 4.4.1 + specifier: ^4.6.0 + version: 4.6.0 prism-react-renderer: specifier: ^2.4.1 - version: 2.4.1(react@18.3.1) + version: 2.4.1(react@19.0.0) react: - specifier: ^18.3.1 - version: 18.3.1 + specifier: 19.0.0 + version: 19.0.0 react-aria: specifier: ^3.37.0 - version: 3.37.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.37.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) react-email: - specifier: 3.0.6 - version: 3.0.6(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4) + specifier: 3.0.7 + version: 3.0.7(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0) react-icons: specifier: ^5.4.0 - version: 5.4.0(react@18.3.1) + version: 5.4.0(react@19.0.0) react-stately: specifier: ^3.35.0 - version: 3.35.0(react@18.3.1) + version: 3.35.0(react@19.0.0) rehype-img-size: specifier: ^1.0.1 version: 1.0.1 @@ -135,11 +135,11 @@ importers: specifier: ^6.0.0 version: 6.0.0 resend: - specifier: ^4.1.1 - version: 4.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^4.1.2 + version: 4.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) sass: - specifier: ^1.83.4 - version: 1.83.4 + specifier: ^1.85.0 + version: 1.85.0 sharp: specifier: ^0.33.5 version: 0.33.5 @@ -150,69 +150,78 @@ importers: specifier: ^2.2.2 version: 2.2.2 svix: - specifier: ^1.45.1 - version: 1.45.1 + specifier: ^1.57.0 + version: 1.57.0 tailwind-merge: - specifier: ^2.6.0 - version: 2.6.0 + specifier: ^3.0.1 + version: 3.0.1 zod: - specifier: ^3.24.1 - version: 3.24.1 + specifier: ^3.24.2 + version: 3.24.2 devDependencies: + '@eslint/js': + specifier: ^9.20.0 + version: 9.20.0 '@ianvs/prettier-plugin-sort-imports': specifier: ^4.4.1 - version: 4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.4.2) + version: 4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.5.1) '@next/eslint-plugin-next': - specifier: ^15.1.6 - version: 15.1.6 + specifier: ^15.1.7 + version: 15.1.7 '@playwright/test': - specifier: ^1.50.0 - version: 1.50.0 + specifier: ^1.50.1 + version: 1.50.1 '@types/eslint': specifier: ^9.6.1 version: 9.6.1 '@types/node': - specifier: ^22.10.10 - version: 22.10.10 + specifier: ^22.13.4 + version: 22.13.4 '@types/pluralize': specifier: ^0.0.33 version: 0.0.33 '@types/react': - specifier: ^18.3.12 - version: 18.3.12 + specifier: 19.0.8 + version: 19.0.8 '@typescript-eslint/eslint-plugin': - specifier: ^8.21.0 - version: 8.21.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint@8.57.0)(typescript@5.7.3) + specifier: ^8.24.0 + version: 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/parser': - specifier: ^8.21.0 - version: 8.21.0(eslint@8.57.0)(typescript@5.7.3) + specifier: ^8.24.0 + version: 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) depcheck: specifier: ^1.4.7 version: 1.4.7 eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.20.1 + version: 9.20.1(jiti@2.4.2) eslint-config-next: - specifier: ^15.1.6 - version: 15.1.6(eslint@8.57.0)(typescript@5.7.3) + specifier: ^15.1.7 + version: 15.1.7(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) eslint-config-prettier: specifier: ^10.0.1 - version: 10.0.1(eslint@8.57.0) + version: 10.0.1(eslint@9.20.1(jiti@2.4.2)) eslint-config-turbo: - specifier: ^2.3.4 - version: 2.3.4(eslint@8.57.0)(turbo@2.3.4) + specifier: ^2.4.2 + version: 2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.3.4) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0) + version: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.0)(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-jsx-a11y: specifier: ^6.10.2 - version: 6.10.2(eslint@8.57.0) + version: 6.10.2(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-react: - specifier: ^7.37.4 - version: 7.37.4(eslint@8.57.0) + specifier: ^7.37.3 + version: 7.37.4(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-react-compiler: + specifier: 19.0.0-beta-55955c9-20241229 + version: 19.0.0-beta-55955c9-20241229(eslint@9.20.1(jiti@2.4.2)) eslint-plugin-react-hooks: specifier: ^5.1.0 - version: 5.1.0(eslint@8.57.0) + version: 5.1.0(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-unused-imports: + specifier: ^4.1.4 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -220,11 +229,11 @@ importers: specifier: ^2.4.2 version: 2.4.2 prettier: - specifier: ^3.4.2 - version: 3.4.2 + specifier: ^3.5.1 + version: 3.5.1 prettier-plugin-tailwindcss: specifier: ^0.6.11 - version: 0.6.11(@ianvs/prettier-plugin-sort-imports@4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.4.2))(prettier@3.4.2) + version: 0.6.11(@ianvs/prettier-plugin-sort-imports@4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.5.1))(prettier@3.5.1) schema-dts: specifier: ^1.1.2 version: 1.1.2(typescript@5.7.3) @@ -234,6 +243,9 @@ importers: typescript: specifier: 5.7.3 version: 5.7.3 + typescript-eslint: + specifier: ^8.24.0 + version: 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) packages: @@ -257,18 +269,48 @@ packages: resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + '@babel/core@7.24.5': resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.26.5': resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.26.5': resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} @@ -279,6 +321,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} @@ -295,6 +355,10 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.6': resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} @@ -314,10 +378,26 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.4': resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} @@ -326,10 +406,18 @@ packages: resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.5': resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + '@cloudinary-util/types@1.5.10': resolution: {integrity: sha512-n5lrm7SdAXhgWEbkSJKHZGnaoO9G/g4WYS6HYnq/k4nLj79sYfQZOoKjyR8hF2iyLRdLkT+qlk68RNFFv5tKew==} @@ -361,171 +449,187 @@ packages: '@emnapi/runtime@1.2.0': resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} - '@esbuild/aix-ppc64@0.19.11': - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} - engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.23.0': + resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.19.11': - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.23.0': + resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.19.11': - resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.23.0': + resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.19.11': - resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.23.0': + resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.19.11': - resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.23.0': + resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.19.11': - resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.23.0': + resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.19.11': - resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.23.0': + resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.11': - resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.23.0': + resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.19.11': - resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.23.0': + resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.19.11': - resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.23.0': + resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.19.11': - resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.23.0': + resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.19.11': - resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.23.0': + resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.19.11': - resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.23.0': + resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.19.11': - resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.23.0': + resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.19.11': - resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.23.0': + resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.19.11': - resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.23.0': + resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.19.11': - resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.23.0': + resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.19.11': - resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.23.0': + resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.19.11': - resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.23.0': + resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.0': + resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.19.11': - resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} - engines: {node: '>=12'} + '@esbuild/sunos-x64@0.23.0': + resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.19.11': - resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.23.0': + resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.19.11': - resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.23.0': + resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.19.11': - resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.23.0': + resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.11.0': + resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.20.0': + resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -575,18 +679,25 @@ packages: peerDependencies: react: '>= 16 || ^19.0.0-rc' - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@ianvs/prettier-plugin-sort-imports@4.4.1': resolution: {integrity: sha512-F0/Hrcfpy8WuxlQyAWJTEren/uxKhYonOGY4OyWmwRdeTvkh9mMSCxowZLjNkhwi/2ipqCgtXwwOk7tW0mWXkA==} @@ -745,23 +856,17 @@ packages: '@types/react': '>=16' react: '>=16' - '@next/bundle-analyzer@15.1.6': - resolution: {integrity: sha512-hGzQyDqJzFHcHNCyTqM3o05BpVq5tGnRODccZBVJDBf5Miv/26UJPMB0wh9L9j3ylgHC+0/v8BaBnBBek1rC6Q==} - - '@next/env@14.2.21': - resolution: {integrity: sha512-lXcwcJd5oR01tggjWJ6SrNNYFGuOOMB9c251wUNkjCpkoXOPkDeF/15c3mnVlBqrW4JJXb2kVxDFhC4GduJt2A==} + '@next/bundle-analyzer@15.1.7': + resolution: {integrity: sha512-tESiAwTUEpzzxKMLDbQuPHvD+PFDjY+0O3R4T5bpjIo0cr5fvppbbllQbtksQbBEquT55Eu8JmDoOlc9YFv6Kw==} '@next/env@15.1.2': resolution: {integrity: sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==} - '@next/eslint-plugin-next@15.1.6': - resolution: {integrity: sha512-+slMxhTgILUntZDGNgsKEYHUvpn72WP1YTlkmEhS51vnVd7S9jEEy0n9YAMcI21vUG4akTw9voWH02lrClt/yw==} + '@next/env@15.1.7': + resolution: {integrity: sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==} - '@next/swc-darwin-arm64@14.2.21': - resolution: {integrity: sha512-HwEjcKsXtvszXz5q5Z7wCtrHeTTDSTgAbocz45PHMUjU3fBYInfvhR+ZhavDRUYLonm53aHZbB09QtJVJj8T7g==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] + '@next/eslint-plugin-next@15.1.7': + resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==} '@next/swc-darwin-arm64@15.1.2': resolution: {integrity: sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==} @@ -769,10 +874,10 @@ packages: cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.21': - resolution: {integrity: sha512-TSAA2ROgNzm4FhKbTbyJOBrsREOMVdDIltZ6aZiKvCi/v0UwFmwigBGeqXDA97TFMpR3LNNpw52CbVelkoQBxA==} + '@next/swc-darwin-arm64@15.1.7': + resolution: {integrity: sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==} engines: {node: '>= 10'} - cpu: [x64] + cpu: [arm64] os: [darwin] '@next/swc-darwin-x64@15.1.2': @@ -781,11 +886,11 @@ packages: cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.21': - resolution: {integrity: sha512-0Dqjn0pEUz3JG+AImpnMMW/m8hRtl1GQCNbO66V1yp6RswSTiKmnHf3pTX6xMdJYSemf3O4Q9ykiL0jymu0TuA==} + '@next/swc-darwin-x64@15.1.7': + resolution: {integrity: sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==} engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] + cpu: [x64] + os: [darwin] '@next/swc-linux-arm64-gnu@15.1.2': resolution: {integrity: sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==} @@ -793,8 +898,8 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.21': - resolution: {integrity: sha512-Ggfw5qnMXldscVntwnjfaQs5GbBbjioV4B4loP+bjqNEb42fzZlAaK+ldL0jm2CTJga9LynBMhekNfV8W4+HBw==} + '@next/swc-linux-arm64-gnu@15.1.7': + resolution: {integrity: sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -805,10 +910,10 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.21': - resolution: {integrity: sha512-uokj0lubN1WoSa5KKdThVPRffGyiWlm/vCc/cMkWOQHw69Qt0X1o3b2PyLLx8ANqlefILZh1EdfLRz9gVpG6tg==} + '@next/swc-linux-arm64-musl@15.1.7': + resolution: {integrity: sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==} engines: {node: '>= 10'} - cpu: [x64] + cpu: [arm64] os: [linux] '@next/swc-linux-x64-gnu@15.1.2': @@ -817,8 +922,8 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.21': - resolution: {integrity: sha512-iAEBPzWNbciah4+0yI4s7Pce6BIoxTQ0AGCkxn/UBuzJFkYyJt71MadYQkjPqCQCJAFQ26sYh7MOKdU+VQFgPg==} + '@next/swc-linux-x64-gnu@15.1.7': + resolution: {integrity: sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -829,11 +934,11 @@ packages: cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.21': - resolution: {integrity: sha512-plykgB3vL2hB4Z32W3ktsfqyuyGAPxqwiyrAi2Mr8LlEUhNn9VgkiAl5hODSBpzIfWweX3er1f5uNpGDygfQVQ==} + '@next/swc-linux-x64-musl@15.1.7': + resolution: {integrity: sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==} engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [linux] '@next/swc-win32-arm64-msvc@15.1.2': resolution: {integrity: sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==} @@ -841,20 +946,20 @@ packages: cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.21': - resolution: {integrity: sha512-w5bacz4Vxqrh06BjWgua3Yf7EMDb8iMcVhNrNx8KnJXt8t+Uu0Zg4JHLDL/T7DkTCEEfKXO/Er1fcfWxn2xfPA==} + '@next/swc-win32-arm64-msvc@15.1.7': + resolution: {integrity: sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==} engines: {node: '>= 10'} - cpu: [ia32] + cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@14.2.21': - resolution: {integrity: sha512-sT6+llIkzpsexGYZq8cjjthRyRGe5cJVhqh12FmlbxHqna6zsDDK8UNaV7g41T6atFHCJUPeLb3uyAwrBwy0NA==} + '@next/swc-win32-x64-msvc@15.1.2': + resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.2': - resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==} + '@next/swc-win32-x64-msvc@15.1.7': + resolution: {integrity: sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -884,94 +989,94 @@ packages: '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} - '@parcel/watcher-android-arm64@2.5.0': - resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.0': - resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.0': - resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.0': - resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.0': - resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-musl@2.5.0': - resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.5.0': - resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.5.0': - resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.5.0': - resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.5.0': - resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-win32-arm64@2.5.0': - resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.0': - resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.0': - resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.0': - resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.50.0': - resolution: {integrity: sha512-ZGNXbt+d65EGjBORQHuYKj+XhCewlwpnSd/EDuLPZGSiEWmgOJB5RmMCCYGy5aMfTs9wx61RivfDKi8H/hcMvw==} + '@playwright/test@1.50.1': + resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} engines: {node: '>=18'} hasBin: true @@ -1270,8 +1375,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/components@0.0.32': - resolution: {integrity: sha512-+1Wv7PyVgWfLoj5W0+CvBsJMIfMI6ibcFcIPXNkb2lhKQQASgxSoAedRL1rH0CCaBo6+63tg8y4baHzJonfZbw==} + '@react-email/components@0.0.33': + resolution: {integrity: sha512-/GKdT3YijT1iEWPAXF644jr12w5xVgzUr0zlbZGt2KOkGeFHNZUCL5UtRopmnjrH/Fayf8Gjv6q/4E2cZgDtdQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -1342,8 +1447,8 @@ packages: react: ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/render@1.0.4': - resolution: {integrity: sha512-8ZXi89d8igBDE6W3zlHBa3GEDWKEUFDAa7i8MvVxnRViQuvsRbibK3ltuPgixxRI5+HgGNCSreBHQKZCkhUdyw==} + '@react-email/render@1.0.5': + resolution: {integrity: sha512-CA69HYXPk21HhtAXATIr+9JJwpDNmAFCvdMUjWmeoD1+KhJ9NAxusMRxKNeibdZdslmq3edaeOKGbdQ9qjK8LQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -1657,9 +1762,6 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/helpers@0.5.5': - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@t3-oss/env-core@0.11.1': resolution: {integrity: sha512-MaxOwEoG1ntCFoKJsS7nqwgcxLW1SJw238AJwfJeaz3P/8GtkxXZsPPolsz1AdYvUTbe3XvqZ/VCdfjt+3zmKw==} peerDependencies: @@ -1669,25 +1771,44 @@ packages: typescript: optional: true - '@t3-oss/env-nextjs@0.11.1': - resolution: {integrity: sha512-rx2XL9+v6wtOqLNJbD5eD8OezKlQD1BtC0WvvtHwBgK66jnF5+wGqtgkKK4Ygie1LVmoDClths2T4tdFmRvGrQ==} + '@t3-oss/env-core@0.12.0': + resolution: {integrity: sha512-lOPj8d9nJJTt81mMuN9GMk8x5veOt7q9m11OSnCBJhwp1QrL/qR+M8Y467ULBSm9SunosryWNbmQQbgoiMgcdw==} peerDependencies: typescript: '>=5.0.0' - zod: ^3.0.0 + valibot: ^1.0.0-beta.7 || ^1.0.0 + zod: ^3.24.0 peerDependenciesMeta: typescript: optional: true + valibot: + optional: true + zod: + optional: true + + '@t3-oss/env-nextjs@0.12.0': + resolution: {integrity: sha512-rFnvYk1049RnNVUPvY8iQ55AuQh1Rr+qZzQBh3t++RttCGK4COpXGNxS4+45afuQq02lu+QAOy/5955aU8hRKw==} + peerDependencies: + typescript: '>=5.0.0' + valibot: ^1.0.0-beta.7 || ^1.0.0 + zod: ^3.24.0 + peerDependenciesMeta: + typescript: + optional: true + valibot: + optional: true + zod: + optional: true '@tailwindcss/typography@0.5.16': resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tanstack/query-core@5.64.2': - resolution: {integrity: sha512-hdO8SZpWXoADNTWXV9We8CwTkXU88OVWRBcsiFrk7xJQnhm6WRlweDzMD+uH+GnuieTBVSML6xFa17C2cNV8+g==} + '@tanstack/query-core@5.66.0': + resolution: {integrity: sha512-J+JeBtthiKxrpzUu7rfIPDzhscXF2p5zE/hVdrqkACBP8Yu0M96mwJ5m/8cPPYQE9aRNvXztXHlNwIh4FEeMZw==} - '@tanstack/react-query@5.64.2': - resolution: {integrity: sha512-3pakNscZNm8KJkxmovvtZ4RaXLyiYYobwleTMvpIGUoKRa8j8VlrQKNl5W8VUEfVfZKkikvXVddLuWMbcSCA1Q==} + '@tanstack/react-query@5.66.0': + resolution: {integrity: sha512-z3sYixFQJe8hndFnXgWu7C79ctL+pI0KAelYyW+khaNJ1m22lWrhJU2QrsTcRKMuVPtoZvfBYrTStIdKo+x0Xw==} peerDependencies: react: ^18 || ^19 @@ -1741,9 +1862,6 @@ packages: '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - '@types/cookie@0.4.1': - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - '@types/cors@2.8.17': resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} @@ -1768,9 +1886,6 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/mdast@4.0.3': - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1783,8 +1898,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.10.10': - resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} + '@types/node@22.13.4': + resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1795,11 +1910,8 @@ packages: '@types/prismjs@1.26.5': resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - - '@types/react@18.3.12': - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + '@types/react@19.0.8': + resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==} '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -1813,51 +1925,51 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.21.0': - resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==} + '@typescript-eslint/eslint-plugin@8.24.0': + resolution: {integrity: sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.21.0': - resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==} + '@typescript-eslint/parser@8.24.0': + resolution: {integrity: sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.21.0': - resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} + '@typescript-eslint/scope-manager@8.24.0': + resolution: {integrity: sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.21.0': - resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==} + '@typescript-eslint/type-utils@8.24.0': + resolution: {integrity: sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.21.0': - resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} + '@typescript-eslint/types@8.24.0': + resolution: {integrity: sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.21.0': - resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} + '@typescript-eslint/typescript-estree@8.24.0': + resolution: {integrity: sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.21.0': - resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} + '@typescript-eslint/utils@8.24.0': + resolution: {integrity: sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.21.0': - resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} + '@typescript-eslint/visitor-keys@8.24.0': + resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -1878,9 +1990,9 @@ packages: '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - abbrev@2.0.0: - resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + abbrev@3.0.0: + resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} + engines: {node: ^18.17.0 || >=20.5.0} accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -1895,11 +2007,6 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -2018,9 +2125,6 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -2131,12 +2235,15 @@ packages: caniuse-lite@1.0.30001651: resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} - caniuse-lite@1.0.30001690: - resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + caniuse-lite@1.0.30001668: + resolution: {integrity: sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==} caniuse-lite@1.0.30001692: resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} + caniuse-lite@1.0.30001699: + resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2325,15 +2432,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -2422,10 +2520,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -2474,12 +2568,12 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - engine.io@6.6.2: - resolution: {integrity: sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==} + engine.io@6.6.4: + resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.18.0: - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -2545,9 +2639,9 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild@0.19.11: - resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} - engines: {node: '>=12'} + esbuild@0.23.0: + resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} + engines: {node: '>=18'} hasBin: true escalade@3.2.0: @@ -2562,8 +2656,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.1.6: - resolution: {integrity: sha512-Wd1uy6y7nBbXUSg9QAuQ+xYEKli5CgUhLjz1QHW11jLDis5vK5XB3PemL6jEmy7HrdhaRFDz+GTZ/3FoH+EUjg==} + eslint-config-next@15.1.7: + resolution: {integrity: sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -2577,8 +2671,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-config-turbo@2.3.4: - resolution: {integrity: sha512-MxPl+IKkR7mRGcHoiZAMHYl+RZnjqBsxTLf+IGnx8BrJQe9/CoLT7oBlUxXGvh9bsd5MTaqCxly5h8BE1v/7AA==} + eslint-config-turbo@2.4.2: + resolution: {integrity: sha512-yPiW5grffSWETp/3bVPUXWQkHfiLoOBb3wuBbM90HlKkLOhggySn9C6/yUccprqRguMgR5OzXIuzDuUnX6bulw==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' @@ -2586,8 +2680,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.7.0: - resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==} + eslint-import-resolver-typescript@3.8.0: + resolution: {integrity: sha512-fItUrP/+xwpavWgadrn6lsvcMe80s08xIVFXkUXvhR4cZD2ga96kRF/z/iFGDI7ZDnvtlaZ0wGic7Tw+DhgVnA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -2636,6 +2730,12 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + eslint-plugin-react-compiler@19.0.0-beta-55955c9-20241229: + resolution: {integrity: sha512-KsE6bQrNvtPDbMb9EolZ2C+Z2/uv2Y5cAUgN+pzbriXjKlf1FkbgiyE153m2mIT6gEZq2OrtFvX7uJj5IrNQlg==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + eslint-plugin-react-hooks@5.1.0: resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} engines: {node: '>=10'} @@ -2648,15 +2748,24 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-turbo@2.3.4: - resolution: {integrity: sha512-9ncoUJkQGkC28NmlQiS17oB9mrE8XaSulRZiB5pv9vmRbYjOfUwyGhY3EIcoBRdww81igxOzXmAmvNNd6GFBPg==} + eslint-plugin-turbo@2.4.2: + resolution: {integrity: sha512-67IZtvOFaWDnUmYMV3luRIE1kqL+ok5MxPEsIPUqH2vQggML7jmZFZx/P9jhXAoFH+pViEz5QEzDa2DBLHqzQg==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -2666,26 +2775,30 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint@9.20.1: + resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -2724,9 +2837,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - eventemitter2@6.4.9: - resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} - expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} @@ -2771,6 +2881,14 @@ packages: fathom-client@3.7.2: resolution: {integrity: sha512-sWtaNivhg7uwp/q1bUuIiNj4LeQZMEZ5NXXFFpZ8le4uDedAfQG84gPOdYehtVXbl+1yX2s8lmXZ2+IQ9a/xxA==} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + feed@4.2.2: resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} engines: {node: '>=0.4.0'} @@ -2778,9 +2896,9 @@ packages: fflate@0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -2794,12 +2912,12 @@ packages: resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} engines: {node: '>= 10.13.0'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} @@ -2817,16 +2935,13 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2898,10 +3013,6 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} @@ -2914,9 +3025,9 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -2989,6 +3100,12 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} @@ -3014,10 +3131,6 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3034,14 +3147,14 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - 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. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3193,10 +3306,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -3297,8 +3406,8 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true - js-beautify@1.15.1: - resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} + js-beautify@1.15.3: + resolution: {integrity: sha512-rKKGuyTxGNlyN4EQKWzNndzXpi0bOl8Gl8YQAW1as/oMz0XhD6sHJO1hTvoBDOSzKuJb9WkwoAb34FfdkKMv2A==} engines: {node: '>=14'} hasBin: true @@ -3408,18 +3517,14 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.474.0: - resolution: {integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==} + lucide-react@0.475.0: + resolution: {integrity: sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - mailchecker@6.0.15: - resolution: {integrity: sha512-LSb28C8QQ9kqRtemVkc+zPWEQiG03xMdC9+mL40XIw7SGnjmVSb1X1SNd7h3DE5oBo8d6w56vDaNdjKq+D/CSg==} - engines: {node: '>=0.10'} - markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -3600,15 +3705,9 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mu2@0.5.21: - resolution: {integrity: sha512-N0w5yapK+Vr4WJrZrE9pDVRxWa1SntycPBmDeFya2i54kS6VQXq8J7bYBhCNxeKvij3QfaFDDWBthLGai1Kbgw==} - multimatch@5.0.0: resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} engines: {node: '>=10'} @@ -3640,26 +3739,29 @@ packages: peerDependencies: react: '>=16' - next@14.2.21: - resolution: {integrity: sha512-rZmLwucLHr3/zfDMYbJXbw0ZeoBpirxkXuvsJbk7UPorvPYZhP7vq7aHbKnU7dQNCYIimRrbB2pp3xmf+wsYUg==} - engines: {node: '>=18.17.0'} + next@15.1.2: + resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true '@playwright/test': optional: true + babel-plugin-react-compiler: + optional: true sass: optional: true - next@15.1.2: - resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==} + next@15.1.7: + resolution: {integrity: sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3691,18 +3793,15 @@ packages: encoding: optional: true - node-range@0.1.0: - resolution: {integrity: sha512-PDeKPSs41POAEanFqrzx0N6X4cLsm/Lys9dbIsTfwcCM9wQovNyAby6dQ6vuesxH6/LVqDaeWUQfecCyjiZDkQ==} - node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - nopt@7.2.1: - resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} hasBin: true normalize-path@3.0.0: @@ -3760,9 +3859,6 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -3816,10 +3912,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -3848,6 +3940,10 @@ 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'} @@ -3856,13 +3952,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.50.0: - resolution: {integrity: sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ==} + playwright-core@1.50.1: + resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} engines: {node: '>=18'} hasBin: true - playwright@1.50.0: - resolution: {integrity: sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w==} + playwright@1.50.1: + resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} engines: {node: '>=18'} hasBin: true @@ -3922,15 +4018,15 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} - posthog-js@1.210.2: - resolution: {integrity: sha512-rIbn/h9ur7uA0PS4dClOr9w6txLfHS94yh9yafA5VM2eXToM951XtMYtIQ6bi6wFzpvpFvTQFeYLQ/9/xZ59AQ==} + posthog-js@1.218.2: + resolution: {integrity: sha512-C3IRqrdeYdFPiUmj2wI+k+Skr56Co9vhXufv3LirNQC6kAc5FVq//VQVK1i4Xf8PlZYsaqREl0QI5M/CihU3wA==} - posthog-node@4.4.1: - resolution: {integrity: sha512-o9G9sSvwWITrfSJgIUrPLJd//AYPGJNu5D+pSLxqiBvhUeicc/i639FvU0DPr1OsHiLDE2zHNMmLpa0mw4kBCg==} + posthog-node@4.6.0: + resolution: {integrity: sha512-Dq6sBTeBXfK0Ez9OWAl+lhUcSInGUshxtoe0b26gFZtnV4byWTEZtwitKB6Xel9wYx3pNHixKOTSIHC/6a6CIA==} engines: {node: '>=15.0.0'} preact@10.25.4: @@ -4000,6 +4096,11 @@ packages: engines: {node: '>=14'} hasBin: true + prettier@3.5.1: + resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==} + engines: {node: '>=14'} + hasBin: true + prism-react-renderer@2.4.1: resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} peerDependencies: @@ -4044,13 +4145,13 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: - react: ^18.3.1 + react: ^19.0.0 - react-email@3.0.6: - resolution: {integrity: sha512-taTvHORG2bCZCvUgVkRV0hTJJ5I40UKcmMuHzEhDOBNVh3/CCvIv4jRuD2EheSU1c4hFxxiUyanphb+qUQWeBw==} + react-email@3.0.7: + resolution: {integrity: sha512-lX9dFCPtTG+79aP9uTdx763byshptPYbOi0KXwxn6nPJoDP/Ty/G1W5fx1lbrmec+pk38MTDZPrzJ/UYIxgP/Q==} engines: {node: '>=18.0.0'} hasBin: true @@ -4070,8 +4171,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -4085,8 +4186,8 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.1.1: - resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} recma-build-jsx@1.0.0: @@ -4138,8 +4239,8 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - resend@4.1.1: - resolution: {integrity: sha512-nkcRpIOgPb3sFPA/GyOTr6Vmlrkhwsu+XlC20kKbbebOfw0WbAjbBbJ1m4AcjKOkPf57O4DH9Bnbxi9i18JYng==} + resend@4.1.2: + resolution: {integrity: sha512-km0btrAj/BqIaRlS+SoLNMaCAUUWEgcEvZpycfVvoXEwAHCxU+vp/ikxPgKRkyKyiR2iDcdUq5uIBTDK9oSSSQ==} engines: {node: '>=18'} resolve-dir@1.0.1: @@ -4174,11 +4275,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4204,16 +4300,16 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.83.4: - resolution: {integrity: sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==} + sass@1.85.0: + resolution: {integrity: sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==} engines: {node: '>=14.0.0'} hasBin: true sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} schema-dts@1.1.2: resolution: {integrity: sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==} @@ -4239,6 +4335,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4307,8 +4408,8 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} - socket.io@4.8.0: - resolution: {integrity: sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==} + socket.io@4.8.1: + resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} engines: {node: '>=10.2.0'} source-map-js@1.2.1: @@ -4406,19 +4507,6 @@ packages: style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -4456,14 +4544,14 @@ packages: svix-fetch@3.0.0: resolution: {integrity: sha512-rcADxEFhSqHbraZIsjyZNh4TF6V+koloX1OzZ+AQuObX9mZ2LIMhm1buZeuc5BIZPftZpJCMBsSiBaeszo9tRw==} - svix@1.45.1: - resolution: {integrity: sha512-KQ4G9xralBsmAx/5VFVlOivFlBux2EhRwPJOstmr+US2w2Uz9K31kVqmwbYbsxJIlZtOrWrmVCz6rQd1Hoq+vA==} + svix@1.57.0: + resolution: {integrity: sha512-3UIXFV6PiIfHi9kgbO1uUPnC3xnd9ex6wiBGxIGBI/7x3yJL0fz4afVkWgp4sw9tcUbiEZb3gOwc4z7RpySTcA==} tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + tailwind-merge@3.0.1: + resolution: {integrity: sha512-AvzE8FmSoXC7nC+oU5GlQJbip2UO7tmOhOfQyOmPhrStOGXHU08j8mZEHZ4BmCqY5dWTCo4ClWkNyRNx1wpT0g==} tailwindcss@3.4.17: resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} @@ -4474,9 +4562,6 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -4484,6 +4569,10 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4505,8 +4594,8 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@2.0.0: - resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -4558,10 +4647,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -4594,6 +4679,13 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typescript-eslint@8.24.0: + resolution: {integrity: sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} @@ -4747,9 +4839,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -4811,8 +4900,14 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod-validation-error@3.4.0: + resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.18.0 + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4839,17 +4934,39 @@ snapshots: '@babel/compat-data@7.26.5': {} - '@babel/core@7.24.5': + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.24.5': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.24.5 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 '@babel/generator': 7.26.5 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5) + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.24.5 + '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.4 '@babel/types': 7.26.5 convert-source-map: 2.0.0 debug: 4.4.0 @@ -4867,7 +4984,19 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.26.5': + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.5 + + '@babel/helper-compilation-targets@7.25.9': dependencies: '@babel/compat-data': 7.26.5 '@babel/helper-validator-option': 7.25.9 @@ -4875,6 +5004,34 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.5 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.26.5 @@ -4887,7 +5044,38 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.5 + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.5 transitivePeerDependencies: - supports-color @@ -4902,6 +5090,11 @@ snapshots: '@babel/template': 7.25.9 '@babel/types': 7.26.5 + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + '@babel/highlight@7.24.6': dependencies: '@babel/helper-validator-identifier': 7.25.9 @@ -4911,7 +5104,7 @@ snapshots: '@babel/parser@7.24.5': dependencies: - '@babel/types': 7.26.5 + '@babel/types': 7.26.9 '@babel/parser@7.26.3': dependencies: @@ -4921,12 +5114,30 @@ snapshots: dependencies: '@babel/types': 7.26.5 + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.5 '@babel/types': 7.26.5 + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@babel/traverse@7.26.4': dependencies: '@babel/code-frame': 7.26.2 @@ -4951,11 +5162,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.5': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@cloudinary-util/types@1.5.10': {} '@cloudinary-util/url-loader@5.10.4': @@ -4963,7 +5191,7 @@ snapshots: '@cloudinary-util/types': 1.5.10 '@cloudinary-util/util': 3.3.2 '@cloudinary/url-gen': 1.15.0 - zod: 3.24.1 + zod: 3.24.2 '@cloudinary-util/util@3.3.2': {} @@ -4992,104 +5220,123 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.19.11': + '@esbuild/aix-ppc64@0.23.0': + optional: true + + '@esbuild/android-arm64@0.23.0': optional: true - '@esbuild/android-arm64@0.19.11': + '@esbuild/android-arm@0.23.0': optional: true - '@esbuild/android-arm@0.19.11': + '@esbuild/android-x64@0.23.0': optional: true - '@esbuild/android-x64@0.19.11': + '@esbuild/darwin-arm64@0.23.0': optional: true - '@esbuild/darwin-arm64@0.19.11': + '@esbuild/darwin-x64@0.23.0': optional: true - '@esbuild/darwin-x64@0.19.11': + '@esbuild/freebsd-arm64@0.23.0': optional: true - '@esbuild/freebsd-arm64@0.19.11': + '@esbuild/freebsd-x64@0.23.0': optional: true - '@esbuild/freebsd-x64@0.19.11': + '@esbuild/linux-arm64@0.23.0': optional: true - '@esbuild/linux-arm64@0.19.11': + '@esbuild/linux-arm@0.23.0': optional: true - '@esbuild/linux-arm@0.19.11': + '@esbuild/linux-ia32@0.23.0': optional: true - '@esbuild/linux-ia32@0.19.11': + '@esbuild/linux-loong64@0.23.0': optional: true - '@esbuild/linux-loong64@0.19.11': + '@esbuild/linux-mips64el@0.23.0': optional: true - '@esbuild/linux-mips64el@0.19.11': + '@esbuild/linux-ppc64@0.23.0': optional: true - '@esbuild/linux-ppc64@0.19.11': + '@esbuild/linux-riscv64@0.23.0': optional: true - '@esbuild/linux-riscv64@0.19.11': + '@esbuild/linux-s390x@0.23.0': optional: true - '@esbuild/linux-s390x@0.19.11': + '@esbuild/linux-x64@0.23.0': optional: true - '@esbuild/linux-x64@0.19.11': + '@esbuild/netbsd-x64@0.23.0': optional: true - '@esbuild/netbsd-x64@0.19.11': + '@esbuild/openbsd-arm64@0.23.0': optional: true - '@esbuild/openbsd-x64@0.19.11': + '@esbuild/openbsd-x64@0.23.0': optional: true - '@esbuild/sunos-x64@0.19.11': + '@esbuild/sunos-x64@0.23.0': optional: true - '@esbuild/win32-arm64@0.19.11': + '@esbuild/win32-arm64@0.23.0': optional: true - '@esbuild/win32-ia32@0.19.11': + '@esbuild/win32-ia32@0.23.0': optional: true - '@esbuild/win32-x64@0.19.11': + '@esbuild/win32-x64@0.23.0': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(jiti@2.4.2))': dependencies: - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.0)': + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color - '@eslint-community/regexpp@4.10.0': {} + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint-community/regexpp@4.12.1': {} + '@eslint/core@0.11.0': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.20.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 '@floating-ui/core@1.6.8': dependencies: @@ -5100,18 +5347,18 @@ snapshots: '@floating-ui/core': 1.6.8 '@floating-ui/utils': 0.2.8 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@floating-ui/dom': 1.6.12 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@floating-ui/react@0.26.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react@0.26.27(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@floating-ui/utils': 0.2.8 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) tabbable: 6.2.0 '@floating-ui/utils@0.2.8': {} @@ -5142,38 +5389,39 @@ snapshots: dependencies: tslib: 2.8.1 - '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@headlessui/react@2.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@floating-ui/react': 0.26.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.18.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-virtual': 3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react': 0.26.27(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/focus': 3.18.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.22.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@tanstack/react-virtual': 3.10.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@heroicons/react@2.2.0(react@18.3.1)': + '@heroicons/react@2.2.0(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 + + '@humanfs/core@0.19.1': {} - '@humanwhocodes/config-array@0.11.14': + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} - '@ianvs/prettier-plugin-sort-imports@4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.4.2)': + '@ianvs/prettier-plugin-sort-imports@4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.5.1)': dependencies: '@babel/generator': 7.26.5 '@babel/parser': 7.26.5 '@babel/traverse': 7.26.5 '@babel/types': 7.26.5 - prettier: 3.4.2 + prettier: 3.5.1 semver: 7.6.3 optionalDependencies: '@vue/compiler-sfc': 3.5.13 @@ -5328,76 +5576,73 @@ snapshots: - acorn - supports-color - '@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1)': + '@mdx-js/react@3.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.12 - react: 18.3.1 + '@types/react': 19.0.8 + react: 19.0.0 - '@next/bundle-analyzer@15.1.6': + '@next/bundle-analyzer@15.1.7': dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@14.2.21': {} - '@next/env@15.1.2': {} - '@next/eslint-plugin-next@15.1.6': + '@next/env@15.1.7': {} + + '@next/eslint-plugin-next@15.1.7': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@14.2.21': - optional: true - '@next/swc-darwin-arm64@15.1.2': optional: true - '@next/swc-darwin-x64@14.2.21': + '@next/swc-darwin-arm64@15.1.7': optional: true '@next/swc-darwin-x64@15.1.2': optional: true - '@next/swc-linux-arm64-gnu@14.2.21': + '@next/swc-darwin-x64@15.1.7': optional: true '@next/swc-linux-arm64-gnu@15.1.2': optional: true - '@next/swc-linux-arm64-musl@14.2.21': + '@next/swc-linux-arm64-gnu@15.1.7': optional: true '@next/swc-linux-arm64-musl@15.1.2': optional: true - '@next/swc-linux-x64-gnu@14.2.21': + '@next/swc-linux-arm64-musl@15.1.7': optional: true '@next/swc-linux-x64-gnu@15.1.2': optional: true - '@next/swc-linux-x64-musl@14.2.21': + '@next/swc-linux-x64-gnu@15.1.7': optional: true '@next/swc-linux-x64-musl@15.1.2': optional: true - '@next/swc-win32-arm64-msvc@14.2.21': + '@next/swc-linux-x64-musl@15.1.7': optional: true '@next/swc-win32-arm64-msvc@15.1.2': optional: true - '@next/swc-win32-ia32-msvc@14.2.21': + '@next/swc-win32-arm64-msvc@15.1.7': optional: true - '@next/swc-win32-x64-msvc@14.2.21': + '@next/swc-win32-x64-msvc@15.1.2': optional: true - '@next/swc-win32-x64-msvc@15.1.2': + '@next/swc-win32-x64-msvc@15.1.7': optional: true '@nodelib/fs.scandir@2.1.5': @@ -5414,1151 +5659,1151 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@number-flow/react@0.5.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@number-flow/react@0.5.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: esm-env: 1.2.2 number-flow: 0.5.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) '@one-ini/wasm@0.1.1': {} - '@parcel/watcher-android-arm64@2.5.0': + '@parcel/watcher-android-arm64@2.5.1': optional: true - '@parcel/watcher-darwin-arm64@2.5.0': + '@parcel/watcher-darwin-arm64@2.5.1': optional: true - '@parcel/watcher-darwin-x64@2.5.0': + '@parcel/watcher-darwin-x64@2.5.1': optional: true - '@parcel/watcher-freebsd-x64@2.5.0': + '@parcel/watcher-freebsd-x64@2.5.1': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.0': + '@parcel/watcher-linux-arm-glibc@2.5.1': optional: true - '@parcel/watcher-linux-arm-musl@2.5.0': + '@parcel/watcher-linux-arm-musl@2.5.1': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.0': + '@parcel/watcher-linux-arm64-glibc@2.5.1': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.0': + '@parcel/watcher-linux-arm64-musl@2.5.1': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.0': + '@parcel/watcher-linux-x64-glibc@2.5.1': optional: true - '@parcel/watcher-linux-x64-musl@2.5.0': + '@parcel/watcher-linux-x64-musl@2.5.1': optional: true - '@parcel/watcher-win32-arm64@2.5.0': + '@parcel/watcher-win32-arm64@2.5.1': optional: true - '@parcel/watcher-win32-ia32@2.5.0': + '@parcel/watcher-win32-ia32@2.5.1': optional: true - '@parcel/watcher-win32-x64@2.5.0': + '@parcel/watcher-win32-x64@2.5.1': optional: true - '@parcel/watcher@2.5.0': + '@parcel/watcher@2.5.1': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 micromatch: 4.0.8 node-addon-api: 7.1.1 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.0 - '@parcel/watcher-darwin-arm64': 2.5.0 - '@parcel/watcher-darwin-x64': 2.5.0 - '@parcel/watcher-freebsd-x64': 2.5.0 - '@parcel/watcher-linux-arm-glibc': 2.5.0 - '@parcel/watcher-linux-arm-musl': 2.5.0 - '@parcel/watcher-linux-arm64-glibc': 2.5.0 - '@parcel/watcher-linux-arm64-musl': 2.5.0 - '@parcel/watcher-linux-x64-glibc': 2.5.0 - '@parcel/watcher-linux-x64-musl': 2.5.0 - '@parcel/watcher-win32-arm64': 2.5.0 - '@parcel/watcher-win32-ia32': 2.5.0 - '@parcel/watcher-win32-x64': 2.5.0 + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 optional: true '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.50.0': + '@playwright/test@1.50.1': dependencies: - playwright: 1.50.0 + playwright: 1.50.1 '@polka/url@1.0.0-next.28': {} - '@react-aria/breadcrumbs@3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/breadcrumbs@3.5.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/link': 3.7.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/breadcrumbs': 3.7.10(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/link': 3.7.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/breadcrumbs': 3.7.10(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/button@3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toolbar': 3.0.0-beta.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.1(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/button@3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/toolbar': 3.0.0-beta.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/toggle': 3.8.1(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/calendar@3.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/calendar@3.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/live-announcer': 3.4.1 - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/calendar': 3.7.0(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/calendar': 3.6.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/calendar': 3.7.0(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/calendar': 3.6.0(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/checkbox@3.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/form': 3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toggle': 3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/checkbox': 3.6.11(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/toggle': 3.8.1(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/checkbox@3.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/form': 3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/toggle': 3.10.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/checkbox': 3.6.11(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/toggle': 3.8.1(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/color@3.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/numberfield': 3.11.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/slider': 3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/spinbutton': 3.6.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/color': 3.8.2(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-types/color': 3.0.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/color@3.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/numberfield': 3.11.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/slider': 3.7.15(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/spinbutton': 3.6.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/textfield': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/visually-hidden': 3.8.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/color': 3.8.2(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-types/color': 3.0.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/combobox@3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/combobox@3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/listbox': 3.14.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/live-announcer': 3.4.1 - '@react-aria/menu': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/combobox': 3.10.2(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/combobox': 3.13.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/menu': 3.17.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/overlays': 3.25.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/textfield': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/combobox': 3.10.2(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/combobox': 3.13.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/datepicker@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/datepicker@3.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 '@internationalized/number': 3.6.0 '@internationalized/string': 3.2.5 - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/form': 3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/spinbutton': 3.6.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/datepicker': 3.12.0(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/calendar': 3.6.0(react@18.3.1) - '@react-types/datepicker': 3.10.0(react@18.3.1) - '@react-types/dialog': 3.5.15(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/form': 3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/spinbutton': 3.6.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/datepicker': 3.12.0(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/calendar': 3.6.0(react@19.0.0) + '@react-types/datepicker': 3.10.0(react@19.0.0) + '@react-types/dialog': 3.5.15(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/dialog@3.5.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/dialog@3.5.21(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/dialog': 3.5.15(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/overlays': 3.25.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/dialog': 3.5.15(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/disclosure@3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/disclosure@3.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/disclosure': 3.0.1(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/disclosure': 3.0.1(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/dnd@3.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/dnd@3.8.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@internationalized/string': 3.2.5 - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/live-announcer': 3.4.1 - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/dnd': 3.5.1(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/overlays': 3.25.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/dnd': 3.5.1(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/focus@3.18.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/focus@3.18.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/interactions': 3.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/interactions': 3.22.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 clsx: 2.1.1 - react: 18.3.1 + react: 19.0.0 transitivePeerDependencies: - react-dom - '@react-aria/focus@3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/focus@3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/form@3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/form@3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/grid@3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/grid@3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/live-announcer': 3.4.1 - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/grid': 3.10.1(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/grid': 3.10.1(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/grid': 3.2.11(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/gridlist@3.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/grid': 3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-stately/tree': 3.8.7(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/gridlist@3.10.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/grid': 3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/list': 3.11.2(react@19.0.0) + '@react-stately/tree': 3.8.7(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/i18n@3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/i18n@3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 '@internationalized/message': 3.1.6 '@internationalized/number': 3.6.0 '@internationalized/string': 3.2.5 - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/interactions@3.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/interactions@3.22.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 transitivePeerDependencies: - react-dom - '@react-aria/interactions@3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/interactions@3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/label@3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/label@3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/link@3.7.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/link@3.7.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/link': 3.5.10(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/link': 3.5.10(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/listbox@3.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-types/listbox': 3.5.4(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/listbox@3.14.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/list': 3.11.2(react@19.0.0) + '@react-types/listbox': 3.5.4(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) '@react-aria/live-announcer@3.4.1': dependencies: '@swc/helpers': 0.5.15 - '@react-aria/menu@3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/menu': 3.9.1(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-stately/tree': 3.8.7(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/menu': 3.9.14(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/menu@3.17.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/overlays': 3.25.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/menu': 3.9.1(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-stately/tree': 3.8.7(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/menu': 3.9.14(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/meter@3.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/meter@3.4.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/progress': 3.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/meter': 3.4.6(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/progress': 3.4.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/meter': 3.4.6(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 transitivePeerDependencies: - react-dom - '@react-aria/numberfield@3.11.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/spinbutton': 3.6.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/numberfield': 3.9.9(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/numberfield': 3.8.8(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/numberfield@3.11.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/spinbutton': 3.6.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/textfield': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/numberfield': 3.9.9(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/numberfield': 3.8.8(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/overlays@3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/overlays': 3.8.12(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/overlays@3.25.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/ssr': 3.9.7(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/visually-hidden': 3.8.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/overlays': 3.6.13(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/overlays': 3.8.12(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/progress@3.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/progress@3.4.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/progress': 3.5.9(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/progress': 3.5.9(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/radio@3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/form': 3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/radio': 3.10.10(react@18.3.1) - '@react-types/radio': 3.8.6(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/radio@3.10.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/form': 3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/radio': 3.10.10(react@19.0.0) + '@react-types/radio': 3.8.6(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/searchfield@3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/searchfield': 3.5.9(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/searchfield': 3.5.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/searchfield@3.8.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/textfield': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/searchfield': 3.5.9(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/searchfield': 3.5.11(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/select@3.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/form': 3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/menu': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/select': 3.6.10(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/select': 3.9.9(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/select@3.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/form': 3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/listbox': 3.14.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/menu': 3.17.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/visually-hidden': 3.8.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/select': 3.6.10(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/select': 3.9.9(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/selection@3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/selection@3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/separator@3.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/separator@3.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/slider@3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/slider': 3.6.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/slider': 3.7.8(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/slider@3.7.15(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/slider': 3.6.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/slider': 3.7.8(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/spinbutton@3.6.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/spinbutton@3.6.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/live-announcer': 3.4.1 - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/ssr@3.9.7(react@18.3.1)': + '@react-aria/ssr@3.9.7(react@19.0.0)': dependencies: '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-aria/switch@3.6.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/switch@3.6.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/toggle': 3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/switch': 3.5.8(react@18.3.1) + '@react-aria/toggle': 3.10.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/toggle': 3.8.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/switch': 3.5.8(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 transitivePeerDependencies: - react-dom - '@react-aria/table@3.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/table@3.16.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/grid': 3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/grid': 3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/live-announcer': 3.4.1 - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/visually-hidden': 3.8.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/collections': 3.12.1(react@19.0.0) '@react-stately/flags': 3.0.5 - '@react-stately/table': 3.13.1(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/table': 3.10.4(react@18.3.1) + '@react-stately/table': 3.13.1(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/grid': 3.2.11(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/table': 3.10.4(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/tabs@3.9.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/tabs': 3.7.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/tabs': 3.3.12(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/tabs@3.9.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/tabs': 3.7.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/tabs': 3.3.12(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/tag@3.4.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/gridlist': 3.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/tag@3.4.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/gridlist': 3.10.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/list': 3.11.2(react@19.0.0) + '@react-types/button': 3.10.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/textfield@3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/form': 3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/textfield': 3.11.0(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@react-aria/textfield@3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/form': 3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/textfield': 3.11.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/toggle@3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/toggle@3.10.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.1(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/toggle': 3.8.1(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/toolbar@3.0.0-beta.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/toolbar@3.0.0-beta.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/tooltip@3.7.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/tooltip@3.7.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/tooltip': 3.5.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/tooltip': 3.4.14(react@18.3.1) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/tooltip': 3.5.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/tooltip': 3.4.14(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/utils@3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/utils@3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-aria/visually-hidden@3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/visually-hidden@3.8.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@react-email/body@0.0.11(react@18.3.1)': + '@react-email/body@0.0.11(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/button@0.0.19(react@18.3.1)': + '@react-email/button@0.0.19(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/code-block@0.0.11(react@18.3.1)': + '@react-email/code-block@0.0.11(react@19.0.0)': dependencies: prismjs: 1.29.0 - react: 18.3.1 - - '@react-email/code-inline@0.0.5(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@react-email/column@0.0.13(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@react-email/components@0.0.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-email/body': 0.0.11(react@18.3.1) - '@react-email/button': 0.0.19(react@18.3.1) - '@react-email/code-block': 0.0.11(react@18.3.1) - '@react-email/code-inline': 0.0.5(react@18.3.1) - '@react-email/column': 0.0.13(react@18.3.1) - '@react-email/container': 0.0.15(react@18.3.1) - '@react-email/font': 0.0.9(react@18.3.1) - '@react-email/head': 0.0.12(react@18.3.1) - '@react-email/heading': 0.0.15(react@18.3.1) - '@react-email/hr': 0.0.11(react@18.3.1) - '@react-email/html': 0.0.11(react@18.3.1) - '@react-email/img': 0.0.11(react@18.3.1) - '@react-email/link': 0.0.12(react@18.3.1) - '@react-email/markdown': 0.0.14(react@18.3.1) - '@react-email/preview': 0.0.12(react@18.3.1) - '@react-email/render': 1.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-email/row': 0.0.12(react@18.3.1) - '@react-email/section': 0.0.16(react@18.3.1) - '@react-email/tailwind': 1.0.4(react@18.3.1) - '@react-email/text': 0.0.11(react@18.3.1) - react: 18.3.1 + react: 19.0.0 + + '@react-email/code-inline@0.0.5(react@19.0.0)': + dependencies: + react: 19.0.0 + + '@react-email/column@0.0.13(react@19.0.0)': + dependencies: + react: 19.0.0 + + '@react-email/components@0.0.33(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-email/body': 0.0.11(react@19.0.0) + '@react-email/button': 0.0.19(react@19.0.0) + '@react-email/code-block': 0.0.11(react@19.0.0) + '@react-email/code-inline': 0.0.5(react@19.0.0) + '@react-email/column': 0.0.13(react@19.0.0) + '@react-email/container': 0.0.15(react@19.0.0) + '@react-email/font': 0.0.9(react@19.0.0) + '@react-email/head': 0.0.12(react@19.0.0) + '@react-email/heading': 0.0.15(react@19.0.0) + '@react-email/hr': 0.0.11(react@19.0.0) + '@react-email/html': 0.0.11(react@19.0.0) + '@react-email/img': 0.0.11(react@19.0.0) + '@react-email/link': 0.0.12(react@19.0.0) + '@react-email/markdown': 0.0.14(react@19.0.0) + '@react-email/preview': 0.0.12(react@19.0.0) + '@react-email/render': 1.0.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-email/row': 0.0.12(react@19.0.0) + '@react-email/section': 0.0.16(react@19.0.0) + '@react-email/tailwind': 1.0.4(react@19.0.0) + '@react-email/text': 0.0.11(react@19.0.0) + react: 19.0.0 transitivePeerDependencies: - react-dom - '@react-email/container@0.0.15(react@18.3.1)': + '@react-email/container@0.0.15(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/font@0.0.9(react@18.3.1)': + '@react-email/font@0.0.9(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/head@0.0.12(react@18.3.1)': + '@react-email/head@0.0.12(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/heading@0.0.15(react@18.3.1)': + '@react-email/heading@0.0.15(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/hr@0.0.11(react@18.3.1)': + '@react-email/hr@0.0.11(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/html@0.0.11(react@18.3.1)': + '@react-email/html@0.0.11(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/img@0.0.11(react@18.3.1)': + '@react-email/img@0.0.11(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/link@0.0.12(react@18.3.1)': + '@react-email/link@0.0.12(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/markdown@0.0.14(react@18.3.1)': + '@react-email/markdown@0.0.14(react@19.0.0)': dependencies: - md-to-react-email: 5.0.5(react@18.3.1) - react: 18.3.1 + md-to-react-email: 5.0.5(react@19.0.0) + react: 19.0.0 - '@react-email/preview@0.0.12(react@18.3.1)': + '@react-email/preview@0.0.12(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/render@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-email/render@1.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: html-to-text: 9.0.5 - js-beautify: 1.15.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + js-beautify: 1.15.3 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) react-promise-suspense: 0.3.4 - '@react-email/render@1.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-email/render@1.0.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: html-to-text: 9.0.5 prettier: 3.4.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) react-promise-suspense: 0.3.4 - '@react-email/row@0.0.12(react@18.3.1)': + '@react-email/row@0.0.12(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/section@0.0.16(react@18.3.1)': + '@react-email/section@0.0.16(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/tailwind@1.0.4(react@18.3.1)': + '@react-email/tailwind@1.0.4(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-email/text@0.0.11(react@18.3.1)': + '@react-email/text@0.0.11(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-stately/calendar@3.7.0(react@18.3.1)': + '@react-stately/calendar@3.7.0(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/calendar': 3.6.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/calendar': 3.6.0(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/checkbox@3.6.11(react@18.3.1)': + '@react-stately/checkbox@3.6.11(react@19.0.0)': dependencies: - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/collections@3.12.1(react@18.3.1)': + '@react-stately/collections@3.12.1(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/color@3.8.2(react@18.3.1)': + '@react-stately/color@3.8.2(react@19.0.0)': dependencies: '@internationalized/number': 3.6.0 '@internationalized/string': 3.2.5 - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/numberfield': 3.9.9(react@18.3.1) - '@react-stately/slider': 3.6.1(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/color': 3.0.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/numberfield': 3.9.9(react@19.0.0) + '@react-stately/slider': 3.6.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/color': 3.0.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/combobox@3.10.2(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-stately/select': 3.6.10(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/combobox': 3.13.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + react: 19.0.0 + + '@react-stately/combobox@3.10.2(react@19.0.0)': + dependencies: + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/list': 3.11.2(react@19.0.0) + '@react-stately/overlays': 3.6.13(react@19.0.0) + '@react-stately/select': 3.6.10(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/combobox': 3.13.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/data@3.12.1(react@18.3.1)': + '@react-stately/data@3.12.1(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/datepicker@3.12.0(react@18.3.1)': + '@react-stately/datepicker@3.12.0(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 '@internationalized/string': 3.2.5 - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/datepicker': 3.10.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/overlays': 3.6.13(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/datepicker': 3.10.0(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/disclosure@3.0.1(react@18.3.1)': + '@react-stately/disclosure@3.0.1(react@19.0.0)': dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/dnd@3.5.1(react@18.3.1)': + '@react-stately/dnd@3.5.1(react@19.0.0)': dependencies: - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 '@react-stately/flags@3.0.5': dependencies: '@swc/helpers': 0.5.15 - '@react-stately/form@3.1.1(react@18.3.1)': + '@react-stately/form@3.1.1(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/grid@3.10.1(react@18.3.1)': + '@react-stately/grid@3.10.1(react@19.0.0)': dependencies: - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-types/grid': 3.2.11(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/list@3.11.2(react@18.3.1)': + '@react-stately/list@3.11.2(react@19.0.0)': dependencies: - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/menu@3.9.1(react@18.3.1)': + '@react-stately/menu@3.9.1(react@19.0.0)': dependencies: - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-types/menu': 3.9.14(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@19.0.0) + '@react-types/menu': 3.9.14(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/numberfield@3.9.9(react@18.3.1)': + '@react-stately/numberfield@3.9.9(react@19.0.0)': dependencies: '@internationalized/number': 3.6.0 - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/numberfield': 3.8.8(react@18.3.1) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/numberfield': 3.8.8(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/overlays@3.6.13(react@18.3.1)': + '@react-stately/overlays@3.6.13(react@19.0.0)': dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/overlays': 3.8.12(react@18.3.1) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/overlays': 3.8.12(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/radio@3.10.10(react@18.3.1)': + '@react-stately/radio@3.10.10(react@19.0.0)': dependencies: - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/radio': 3.8.6(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/radio': 3.8.6(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/searchfield@3.5.9(react@18.3.1)': + '@react-stately/searchfield@3.5.9(react@19.0.0)': dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/searchfield': 3.5.11(react@18.3.1) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/searchfield': 3.5.11(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/select@3.6.10(react@18.3.1)': + '@react-stately/select@3.6.10(react@19.0.0)': dependencies: - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-types/select': 3.9.9(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/list': 3.11.2(react@19.0.0) + '@react-stately/overlays': 3.6.13(react@19.0.0) + '@react-types/select': 3.9.9(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/selection@3.19.0(react@18.3.1)': + '@react-stately/selection@3.19.0(react@19.0.0)': dependencies: - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/slider@3.6.1(react@18.3.1)': + '@react-stately/slider@3.6.1(react@19.0.0)': dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/slider': 3.7.8(react@18.3.1) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/slider': 3.7.8(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/table@3.13.1(react@18.3.1)': + '@react-stately/table@3.13.1(react@19.0.0)': dependencies: - '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/collections': 3.12.1(react@19.0.0) '@react-stately/flags': 3.0.5 - '@react-stately/grid': 3.10.1(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/table': 3.10.4(react@18.3.1) + '@react-stately/grid': 3.10.1(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/grid': 3.2.11(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/table': 3.10.4(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/tabs@3.7.1(react@18.3.1)': + '@react-stately/tabs@3.7.1(react@19.0.0)': dependencies: - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/tabs': 3.3.12(react@18.3.1) + '@react-stately/list': 3.11.2(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/tabs': 3.3.12(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/toggle@3.8.1(react@18.3.1)': + '@react-stately/toggle@3.8.1(react@19.0.0)': dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/tooltip@3.5.1(react@18.3.1)': + '@react-stately/tooltip@3.5.1(react@19.0.0)': dependencies: - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-types/tooltip': 3.4.14(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@19.0.0) + '@react-types/tooltip': 3.4.14(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/tree@3.8.7(react@18.3.1)': + '@react-stately/tree@3.8.7(react@19.0.0)': dependencies: - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-stately/utils@3.10.5(react@18.3.1)': + '@react-stately/utils@3.10.5(react@19.0.0)': dependencies: '@swc/helpers': 0.5.15 - react: 18.3.1 + react: 19.0.0 - '@react-types/breadcrumbs@3.7.10(react@18.3.1)': + '@react-types/breadcrumbs@3.7.10(react@19.0.0)': dependencies: - '@react-types/link': 3.5.10(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/link': 3.5.10(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/button@3.10.2(react@18.3.1)': + '@react-types/button@3.10.2(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/calendar@3.6.0(react@18.3.1)': + '@react-types/calendar@3.6.0(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/checkbox@3.9.1(react@18.3.1)': + '@react-types/checkbox@3.9.1(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/color@3.0.2(react@18.3.1)': + '@react-types/color@3.0.2(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/slider': 3.7.8(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/slider': 3.7.8(react@19.0.0) + react: 19.0.0 - '@react-types/combobox@3.13.2(react@18.3.1)': + '@react-types/combobox@3.13.2(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/datepicker@3.10.0(react@18.3.1)': + '@react-types/datepicker@3.10.0(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 - '@react-types/calendar': 3.6.0(react@18.3.1) - '@react-types/overlays': 3.8.12(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/calendar': 3.6.0(react@19.0.0) + '@react-types/overlays': 3.8.12(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/dialog@3.5.15(react@18.3.1)': + '@react-types/dialog@3.5.15(react@19.0.0)': dependencies: - '@react-types/overlays': 3.8.12(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/overlays': 3.8.12(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/grid@3.2.11(react@18.3.1)': + '@react-types/grid@3.2.11(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/link@3.5.10(react@18.3.1)': + '@react-types/link@3.5.10(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/listbox@3.5.4(react@18.3.1)': + '@react-types/listbox@3.5.4(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/menu@3.9.14(react@18.3.1)': + '@react-types/menu@3.9.14(react@19.0.0)': dependencies: - '@react-types/overlays': 3.8.12(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/overlays': 3.8.12(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/meter@3.4.6(react@18.3.1)': + '@react-types/meter@3.4.6(react@19.0.0)': dependencies: - '@react-types/progress': 3.5.9(react@18.3.1) - react: 18.3.1 + '@react-types/progress': 3.5.9(react@19.0.0) + react: 19.0.0 - '@react-types/numberfield@3.8.8(react@18.3.1)': + '@react-types/numberfield@3.8.8(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/overlays@3.8.12(react@18.3.1)': + '@react-types/overlays@3.8.12(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/progress@3.5.9(react@18.3.1)': + '@react-types/progress@3.5.9(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/radio@3.8.6(react@18.3.1)': + '@react-types/radio@3.8.6(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/searchfield@3.5.11(react@18.3.1)': + '@react-types/searchfield@3.5.11(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/textfield': 3.11.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + '@react-types/textfield': 3.11.0(react@19.0.0) + react: 19.0.0 - '@react-types/select@3.9.9(react@18.3.1)': + '@react-types/select@3.9.9(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/shared@3.27.0(react@18.3.1)': + '@react-types/shared@3.27.0(react@19.0.0)': dependencies: - react: 18.3.1 + react: 19.0.0 - '@react-types/slider@3.7.8(react@18.3.1)': + '@react-types/slider@3.7.8(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/switch@3.5.8(react@18.3.1)': + '@react-types/switch@3.5.8(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/table@3.10.4(react@18.3.1)': + '@react-types/table@3.10.4(react@19.0.0)': dependencies: - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/grid': 3.2.11(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/tabs@3.3.12(react@18.3.1)': + '@react-types/tabs@3.3.12(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/textfield@3.11.0(react@18.3.1)': + '@react-types/textfield@3.11.0(react@19.0.0)': dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 - '@react-types/tooltip@3.4.14(react@18.3.1)': + '@react-types/tooltip@3.4.14(react@19.0.0)': dependencies: - '@react-types/overlays': 3.8.12(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 + '@react-types/overlays': 3.8.12(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 '@rtsao/scc@1.1.0': {} @@ -6579,23 +6824,23 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.5': + '@t3-oss/env-core@0.11.1(typescript@5.7.3)(zod@3.24.2)': dependencies: - '@swc/counter': 0.1.3 - tslib: 2.8.1 + zod: 3.24.2 + optionalDependencies: + typescript: 5.7.3 - '@t3-oss/env-core@0.11.1(typescript@5.7.3)(zod@3.24.1)': - dependencies: - zod: 3.24.1 + '@t3-oss/env-core@0.12.0(typescript@5.7.3)(zod@3.24.2)': optionalDependencies: typescript: 5.7.3 + zod: 3.24.2 - '@t3-oss/env-nextjs@0.11.1(typescript@5.7.3)(zod@3.24.1)': + '@t3-oss/env-nextjs@0.12.0(typescript@5.7.3)(zod@3.24.2)': dependencies: - '@t3-oss/env-core': 0.11.1(typescript@5.7.3)(zod@3.24.1) - zod: 3.24.1 + '@t3-oss/env-core': 0.12.0(typescript@5.7.3)(zod@3.24.2) optionalDependencies: typescript: 5.7.3 + zod: 3.24.2 '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)': dependencies: @@ -6605,18 +6850,18 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.17 - '@tanstack/query-core@5.64.2': {} + '@tanstack/query-core@5.66.0': {} - '@tanstack/react-query@5.64.2(react@18.3.1)': + '@tanstack/react-query@5.66.0(react@19.0.0)': dependencies: - '@tanstack/query-core': 5.64.2 - react: 18.3.1 + '@tanstack/query-core': 5.66.0 + react: 19.0.0 - '@tanstack/react-virtual@3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-virtual@3.10.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@tanstack/virtual-core': 3.10.8 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) '@tanstack/virtual-core@3.10.8': {} @@ -6625,25 +6870,25 @@ snapshots: '@trpc/server': 11.0.0-rc.666(typescript@5.7.3) typescript: 5.7.3 - '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.64.2(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.64.2(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': + '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.66.0(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.66.0(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(next@15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: '@trpc/client': 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3) '@trpc/server': 11.0.0-rc.666(typescript@5.7.3) - next: 14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + next: 15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) typescript: 5.7.3 optionalDependencies: - '@tanstack/react-query': 5.64.2(react@18.3.1) - '@trpc/react-query': 11.0.0-rc.666(@tanstack/react-query@5.64.2(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@tanstack/react-query': 5.66.0(react@19.0.0) + '@trpc/react-query': 11.0.0-rc.666(@tanstack/react-query@5.66.0(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3) - '@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.64.2(react@18.3.1))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': + '@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.66.0(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.3)': dependencies: - '@tanstack/react-query': 5.64.2(react@18.3.1) + '@tanstack/react-query': 5.66.0(react@19.0.0) '@trpc/client': 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.7.3))(typescript@5.7.3) '@trpc/server': 11.0.0-rc.666(typescript@5.7.3) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) typescript: 5.7.3 '@trpc/server@11.0.0-rc.666(typescript@5.7.3)': @@ -6654,11 +6899,9 @@ snapshots: dependencies: '@types/estree': 1.0.6 - '@types/cookie@0.4.1': {} - '@types/cors@2.8.17': dependencies: - '@types/node': 22.10.10 + '@types/node': 22.13.4 '@types/debug@4.1.12': dependencies: @@ -6683,10 +6926,6 @@ snapshots: '@types/json5@0.0.29': {} - '@types/mdast@4.0.3': - dependencies: - '@types/unist': 3.0.2 - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -6697,7 +6936,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.10.10': + '@types/node@22.13.4': dependencies: undici-types: 6.20.0 @@ -6707,11 +6946,8 @@ snapshots: '@types/prismjs@1.26.5': {} - '@types/prop-types@15.7.13': {} - - '@types/react@18.3.12': + '@types/react@19.0.8': dependencies: - '@types/prop-types': 15.7.13 csstype: 3.1.3 '@types/unist@2.0.10': {} @@ -6722,81 +6958,81 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint@8.57.0)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.21.0(eslint@8.57.0)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.21.0 - '@typescript-eslint/type-utils': 8.21.0(eslint@8.57.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.21.0(eslint@8.57.0)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.21.0 - eslint: 8.57.0 + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.0 + eslint: 9.20.1(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.0(typescript@5.7.3) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3)': + '@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.21.0 - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.0 debug: 4.4.0 - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.21.0': + '@typescript-eslint/scope-manager@8.24.0': dependencies: - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/visitor-keys': 8.24.0 - '@typescript-eslint/type-utils@8.21.0(eslint@8.57.0)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.21.0(eslint@8.57.0)(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 - eslint: 8.57.0 - ts-api-utils: 2.0.0(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.21.0': {} + '@typescript-eslint/types@8.24.0': {} - '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.24.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/visitor-keys': 8.24.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 2.0.0(typescript@5.7.3) + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.21.0(eslint@8.57.0)(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.21.0 - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.21.0': + '@typescript-eslint/visitor-keys@8.24.0': dependencies: - '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/types': 8.24.0 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.2.0': {} @@ -6823,7 +7059,7 @@ snapshots: '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.1 + postcss: 8.5.2 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.13': @@ -6833,17 +7069,13 @@ snapshots: '@vue/shared@3.5.13': {} - abbrev@2.0.0: {} + abbrev@3.0.0: {} accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.11.3): - dependencies: - acorn: 8.11.3 - acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -6852,8 +7084,6 @@ snapshots: dependencies: acorn: 8.14.0 - acorn@8.11.3: {} - acorn@8.14.0: {} ajv@6.12.6: @@ -7000,18 +7230,16 @@ snapshots: astring@1.9.0: {} - async@3.2.6: {} - asynckit@0.4.0: {} - autoprefixer@10.4.20(postcss@8.5.1): + autoprefixer@10.4.20(postcss@8.5.2): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001651 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -7023,7 +7251,7 @@ snapshots: axios@1.7.9: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -7061,7 +7289,7 @@ snapshots: browserslist@4.23.3: dependencies: - caniuse-lite: 1.0.30001690 + caniuse-lite: 1.0.30001668 electron-to-chromium: 1.5.5 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) @@ -7119,10 +7347,12 @@ snapshots: caniuse-lite@1.0.30001651: {} - caniuse-lite@1.0.30001690: {} + caniuse-lite@1.0.30001668: {} caniuse-lite@1.0.30001692: {} + caniuse-lite@1.0.30001699: {} + ccount@2.0.1: {} chalk@2.4.2: @@ -7158,7 +7388,7 @@ snapshots: chokidar@4.0.3: dependencies: - readdirp: 4.1.1 + readdirp: 4.1.2 cli-cursor@3.1.0: dependencies: @@ -7306,10 +7536,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.3.7: dependencies: ms: 2.1.3 @@ -7399,10 +7625,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -7438,7 +7660,7 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.1 - semver: 7.6.3 + semver: 7.7.1 electron-to-chromium@1.5.5: {} @@ -7450,11 +7672,10 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.2: + engine.io@6.6.4: dependencies: - '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 22.10.10 + '@types/node': 22.13.4 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -7467,7 +7688,7 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.18.0: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -7655,31 +7876,32 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 - esbuild@0.19.11: + esbuild@0.23.0: optionalDependencies: - '@esbuild/aix-ppc64': 0.19.11 - '@esbuild/android-arm': 0.19.11 - '@esbuild/android-arm64': 0.19.11 - '@esbuild/android-x64': 0.19.11 - '@esbuild/darwin-arm64': 0.19.11 - '@esbuild/darwin-x64': 0.19.11 - '@esbuild/freebsd-arm64': 0.19.11 - '@esbuild/freebsd-x64': 0.19.11 - '@esbuild/linux-arm': 0.19.11 - '@esbuild/linux-arm64': 0.19.11 - '@esbuild/linux-ia32': 0.19.11 - '@esbuild/linux-loong64': 0.19.11 - '@esbuild/linux-mips64el': 0.19.11 - '@esbuild/linux-ppc64': 0.19.11 - '@esbuild/linux-riscv64': 0.19.11 - '@esbuild/linux-s390x': 0.19.11 - '@esbuild/linux-x64': 0.19.11 - '@esbuild/netbsd-x64': 0.19.11 - '@esbuild/openbsd-x64': 0.19.11 - '@esbuild/sunos-x64': 0.19.11 - '@esbuild/win32-arm64': 0.19.11 - '@esbuild/win32-ia32': 0.19.11 - '@esbuild/win32-x64': 0.19.11 + '@esbuild/aix-ppc64': 0.23.0 + '@esbuild/android-arm': 0.23.0 + '@esbuild/android-arm64': 0.23.0 + '@esbuild/android-x64': 0.23.0 + '@esbuild/darwin-arm64': 0.23.0 + '@esbuild/darwin-x64': 0.23.0 + '@esbuild/freebsd-arm64': 0.23.0 + '@esbuild/freebsd-x64': 0.23.0 + '@esbuild/linux-arm': 0.23.0 + '@esbuild/linux-arm64': 0.23.0 + '@esbuild/linux-ia32': 0.23.0 + '@esbuild/linux-loong64': 0.23.0 + '@esbuild/linux-mips64el': 0.23.0 + '@esbuild/linux-ppc64': 0.23.0 + '@esbuild/linux-riscv64': 0.23.0 + '@esbuild/linux-s390x': 0.23.0 + '@esbuild/linux-x64': 0.23.0 + '@esbuild/netbsd-x64': 0.23.0 + '@esbuild/openbsd-arm64': 0.23.0 + '@esbuild/openbsd-x64': 0.23.0 + '@esbuild/sunos-x64': 0.23.0 + '@esbuild/win32-arm64': 0.23.0 + '@esbuild/win32-ia32': 0.23.0 + '@esbuild/win32-x64': 0.23.0 escalade@3.2.0: {} @@ -7687,19 +7909,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.1.6(eslint@8.57.0)(typescript@5.7.3): + eslint-config-next@15.1.7(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@next/eslint-plugin-next': 15.1.6 + '@next/eslint-plugin-next': 15.1.7 '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint@8.57.0)(typescript@5.7.3) - '@typescript-eslint/parser': 8.21.0(eslint@8.57.0)(typescript@5.7.3) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0) - eslint-plugin-react: 7.37.4(eslint@8.57.0) - eslint-plugin-react-hooks: 5.1.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.8.0(eslint-plugin-import@2.31.0)(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.0)(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-react: 7.37.4(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.1.0(eslint@9.20.1(jiti@2.4.2)) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: @@ -7707,14 +7929,14 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.0.1(eslint@8.57.0): + eslint-config-prettier@10.0.1(eslint@9.20.1(jiti@2.4.2)): dependencies: - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) - eslint-config-turbo@2.3.4(eslint@8.57.0)(turbo@2.3.4): + eslint-config-turbo@2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.3.4): dependencies: - eslint: 8.57.0 - eslint-plugin-turbo: 2.3.4(eslint@8.57.0)(turbo@2.3.4) + eslint: 9.20.1(jiti@2.4.2) + eslint-plugin-turbo: 2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.3.4) turbo: 2.3.4 eslint-import-resolver-node@0.3.9: @@ -7725,34 +7947,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.8.0(eslint-plugin-import@2.31.0)(eslint@9.20.1(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 - enhanced-resolve: 5.18.0 - eslint: 8.57.0 - fast-glob: 3.3.3 + enhanced-resolve: 5.18.1 + eslint: 9.20.1(jiti@2.4.2) get-tsconfig: 4.10.0 is-bun-module: 1.3.0 - is-glob: 4.0.3 stable-hash: 0.0.4 + tinyglobby: 0.2.10 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.0)(eslint@9.20.1(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.0)(eslint@9.20.1(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.21.0(eslint@8.57.0)(typescript@5.7.3) - eslint: 8.57.0 + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.8.0(eslint-plugin-import@2.31.0)(eslint@9.20.1(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.0)(eslint@9.20.1(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7761,9 +7982,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.21.0(eslint@8.57.0)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.0)(eslint@9.20.1(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -7775,13 +7996,13 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.21.0(eslint@8.57.0)(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.0): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.20.1(jiti@2.4.2)): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -7791,7 +8012,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -7800,11 +8021,23 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.1.0(eslint@8.57.0): + eslint-plugin-react-compiler@19.0.0-beta-55955c9-20241229(eslint@9.20.1(jiti@2.4.2)): + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.0) + eslint: 9.20.1(jiti@2.4.2) + hermes-parser: 0.25.1 + zod: 3.24.2 + zod-validation-error: 3.4.0(zod@3.24.2) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-hooks@5.1.0(eslint@9.20.1(jiti@2.4.2)): dependencies: - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@8.57.0): + eslint-plugin-react@7.37.4(eslint@9.20.1(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -7812,7 +8045,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -7826,13 +8059,19 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.3.4(eslint@8.57.0)(turbo@2.3.4): + eslint-plugin-turbo@2.4.2(eslint@9.20.1(jiti@2.4.2))(turbo@2.3.4): dependencies: dotenv: 16.0.3 - eslint: 8.57.0 + eslint: 9.20.1(jiti@2.4.2) turbo: 2.3.4 - eslint-scope@7.2.2: + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2)): + dependencies: + eslint: 9.20.1(jiti@2.4.2) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -7841,60 +8080,58 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@8.57.0: + eslint@9.20.1(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.11.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.20.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.4 - doctrine: 3.0.0 + debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color esm-env@1.2.2: {} - espree@9.6.1: + espree@10.3.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -7941,8 +8178,6 @@ snapshots: esutils@2.0.3: {} - eventemitter2@6.4.9: {} - expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 @@ -7993,15 +8228,19 @@ snapshots: fathom-client@3.7.2: {} + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + feed@4.2.2: dependencies: xml-js: 1.6.11 fflate@0.4.8: {} - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 fill-range@7.1.1: dependencies: @@ -8019,13 +8258,12 @@ snapshots: micromatch: 4.0.8 resolve-dir: 1.0.1 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 - rimraf: 3.0.2 - flatted@3.3.1: {} + flatted@3.3.2: {} follow-redirects@1.15.9: {} @@ -8038,16 +8276,15 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.1: + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 fraction.js@4.3.7: {} - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -8139,15 +8376,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - global-modules@1.0.0: dependencies: global-prefix: 1.0.2 @@ -8164,9 +8392,7 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globalthis@1.0.4: dependencies: @@ -8269,6 +8495,12 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 @@ -8304,8 +8536,6 @@ snapshots: ieee754@1.2.1: {} - ignore@5.3.1: {} - ignore@5.3.2: {} image-size@1.1.1: @@ -8319,12 +8549,12 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - imurmurhash@0.1.4: {} - - inflight@1.0.6: + import-fresh@3.3.1: dependencies: - once: 1.4.0 - wrappy: 1.0.2 + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} inherits@2.0.4: {} @@ -8400,7 +8630,7 @@ snapshots: is-bun-module@1.3.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 is-callable@1.2.7: {} @@ -8477,8 +8707,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} @@ -8578,13 +8806,13 @@ snapshots: jiti@2.4.2: {} - js-beautify@1.15.1: + js-beautify@1.15.3: dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 glob: 10.4.5 js-cookie: 3.0.5 - nopt: 7.2.1 + nopt: 8.1.0 js-cookie@3.0.5: {} @@ -8674,33 +8902,24 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.474.0(react@18.3.1): + lucide-react@0.475.0(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - mailchecker@6.0.15: - dependencies: - async: 3.2.6 - eventemitter2: 6.4.9 - glob: 7.2.3 - lodash: 4.17.21 - mu2: 0.5.21 - node-range: 0.1.0 - markdown-extensions@2.0.0: {} marked@7.0.4: {} math-intrinsics@1.1.0: {} - md-to-react-email@5.0.5(react@18.3.1): + md-to-react-email@5.0.5(react@19.0.0): dependencies: marked: 7.0.4 - react: 18.3.1 + react: 19.0.0 mdast-util-from-markdown@2.0.2: dependencies: @@ -8770,7 +8989,7 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 unist-util-is: 6.0.0 mdast-util-to-hast@13.2.0: @@ -9052,12 +9271,8 @@ snapshots: mrmime@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} - mu2@0.5.21: {} - multimatch@5.0.0: dependencies: '@types/minimatch': 3.0.5 @@ -9078,20 +9293,20 @@ snapshots: negotiator@0.6.3: {} - next-cloudinary@6.16.0(next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4))(react@18.3.1): + next-cloudinary@6.16.0(next@15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0))(react@19.0.0): dependencies: '@cloudinary-util/types': 1.5.10 '@cloudinary-util/url-loader': 5.10.4 '@cloudinary-util/util': 4.0.0 - next: 14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4) - react: 18.3.1 + next: 15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0) + react: 19.0.0 - next-mdx-remote@5.0.0(@types/react@18.3.12)(acorn@8.14.0)(react@18.3.1): + next-mdx-remote@5.0.0(@types/react@19.0.8)(acorn@8.14.0)(react@19.0.0): dependencies: '@babel/code-frame': 7.24.6 '@mdx-js/mdx': 3.1.0(acorn@8.14.0) - '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 + '@mdx-js/react': 3.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 unist-util-remove: 3.1.1 vfile: 6.0.1 vfile-matter: 5.0.0 @@ -9100,44 +9315,17 @@ snapshots: - acorn - supports-color - next@14.2.21(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4): - dependencies: - '@next/env': 14.2.21 - '@swc/helpers': 0.5.5 - busboy: 1.6.0 - caniuse-lite: 1.0.30001690 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.24.5)(react@18.3.1) - optionalDependencies: - '@next/swc-darwin-arm64': 14.2.21 - '@next/swc-darwin-x64': 14.2.21 - '@next/swc-linux-arm64-gnu': 14.2.21 - '@next/swc-linux-arm64-musl': 14.2.21 - '@next/swc-linux-x64-gnu': 14.2.21 - '@next/swc-linux-x64-musl': 14.2.21 - '@next/swc-win32-arm64-msvc': 14.2.21 - '@next/swc-win32-ia32-msvc': 14.2.21 - '@next/swc-win32-x64-msvc': 14.2.21 - '@playwright/test': 1.50.0 - sass: 1.83.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - next@15.1.2(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4): + next@15.1.2(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0): dependencies: '@next/env': 15.1.2 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001692 + caniuse-lite: 1.0.30001699 postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.6(@babel/core@7.24.5)(react@18.3.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.24.5)(react@19.0.0) optionalDependencies: '@next/swc-darwin-arm64': 15.1.2 '@next/swc-darwin-x64': 15.1.2 @@ -9147,8 +9335,35 @@ snapshots: '@next/swc-linux-x64-musl': 15.1.2 '@next/swc-win32-arm64-msvc': 15.1.2 '@next/swc-win32-x64-msvc': 15.1.2 - '@playwright/test': 1.50.0 - sass: 1.83.4 + '@playwright/test': 1.50.1 + sass: 1.85.0 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + next@15.1.7(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0): + dependencies: + '@next/env': 15.1.7 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001699 + postcss: 8.4.31 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.24.5)(react@19.0.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.1.7 + '@next/swc-darwin-x64': 15.1.7 + '@next/swc-linux-arm64-gnu': 15.1.7 + '@next/swc-linux-arm64-musl': 15.1.7 + '@next/swc-linux-x64-gnu': 15.1.7 + '@next/swc-linux-x64-musl': 15.1.7 + '@next/swc-win32-arm64-msvc': 15.1.7 + '@next/swc-win32-x64-msvc': 15.1.7 + '@playwright/test': 1.50.1 + sass: 1.85.0 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -9161,15 +9376,13 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-range@0.1.0: {} - node-releases@2.0.18: {} node-releases@2.0.19: {} - nopt@7.2.1: + nopt@8.1.0: dependencies: - abbrev: 2.0.0 + abbrev: 3.0.0 normalize-path@3.0.0: {} @@ -9230,10 +9443,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - once@1.4.0: - dependencies: - wrappy: 1.0.2 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -9308,8 +9517,6 @@ snapshots: path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -9329,15 +9536,17 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@2.3.0: {} pirates@4.0.6: {} - playwright-core@1.50.0: {} + playwright-core@1.50.1: {} - playwright@1.50.0: + playwright@1.50.1: dependencies: - playwright-core: 1.50.0 + playwright-core: 1.50.1 optionalDependencies: fsevents: 2.3.2 @@ -9349,28 +9558,28 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.5.1): + postcss-import@15.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.10 - postcss-js@4.0.1(postcss@8.5.1): + postcss-js@4.0.1(postcss@8.5.2): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.1 + postcss: 8.5.2 - postcss-load-config@4.0.2(postcss@8.5.1): + postcss-load-config@4.0.2(postcss@8.5.2): dependencies: lilconfig: 3.1.3 yaml: 2.6.1 optionalDependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-nested@6.2.0(postcss@8.5.1): + postcss-nested@6.2.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.0.10: @@ -9391,20 +9600,20 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.1: + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 - posthog-js@1.210.2: + posthog-js@1.218.2: dependencies: core-js: 3.40.0 fflate: 0.4.8 preact: 10.25.4 web-vitals: 4.2.4 - posthog-node@4.4.1: + posthog-node@4.6.0: dependencies: axios: 1.7.9 transitivePeerDependencies: @@ -9414,19 +9623,21 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.6.11(@ianvs/prettier-plugin-sort-imports@4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.4.2))(prettier@3.4.2): + prettier-plugin-tailwindcss@0.6.11(@ianvs/prettier-plugin-sort-imports@4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.5.1))(prettier@3.5.1): dependencies: - prettier: 3.4.2 + prettier: 3.5.1 optionalDependencies: - '@ianvs/prettier-plugin-sort-imports': 4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.4.2) + '@ianvs/prettier-plugin-sort-imports': 4.4.1(@vue/compiler-sfc@3.5.13)(prettier@3.5.1) prettier@3.4.2: {} - prism-react-renderer@2.4.1(react@18.3.1): + prettier@3.5.1: {} + + prism-react-renderer@2.4.1(react@19.0.0): dependencies: '@types/prismjs': 1.26.5 clsx: 2.1.1 - react: 18.3.1 + react: 19.0.0 prismjs@1.29.0: {} @@ -9459,57 +9670,56 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-aria@3.37.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-aria@3.37.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@internationalized/string': 3.2.5 - '@react-aria/breadcrumbs': 3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/button': 3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/calendar': 3.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/checkbox': 3.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/color': 3.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/combobox': 3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/datepicker': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/dialog': 3.5.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/disclosure': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/dnd': 3.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/gridlist': 3.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/link': 3.7.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/menu': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/meter': 3.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/numberfield': 3.11.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/progress': 3.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/radio': 3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/searchfield': 3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/select': 3.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/separator': 3.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/slider': 3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/switch': 3.6.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/table': 3.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tabs': 3.9.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tag': 3.4.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tooltip': 3.7.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - react-dom@18.3.1(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - - react-email@3.0.6(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4): + '@react-aria/breadcrumbs': 3.5.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/button': 3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/calendar': 3.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/checkbox': 3.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/color': 3.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/combobox': 3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/datepicker': 3.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/dialog': 3.5.21(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/disclosure': 3.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/dnd': 3.8.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/gridlist': 3.10.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/link': 3.7.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/listbox': 3.14.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/menu': 3.17.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/meter': 3.4.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/numberfield': 3.11.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/overlays': 3.25.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/progress': 3.4.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/radio': 3.10.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/searchfield': 3.8.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/select': 3.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/separator': 3.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/slider': 3.7.15(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/ssr': 3.9.7(react@19.0.0) + '@react-aria/switch': 3.6.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/table': 3.16.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/tabs': 3.9.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/tag': 3.4.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/textfield': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/tooltip': 3.7.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/visually-hidden': 3.8.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + + react-email@3.0.7(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0): dependencies: '@babel/core': 7.24.5 '@babel/parser': 7.24.5 @@ -9517,14 +9727,14 @@ snapshots: chokidar: 4.0.3 commander: 11.1.0 debounce: 2.0.0 - esbuild: 0.19.11 + esbuild: 0.23.0 glob: 10.3.4 log-symbols: 4.1.0 mime-types: 2.1.35 - next: 15.1.2(@babel/core@7.24.5)(@playwright/test@1.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.4) + next: 15.1.2(@babel/core@7.24.5)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0) normalize-path: 3.0.0 ora: 5.4.1 - socket.io: 4.8.0 + socket.io: 4.8.1 transitivePeerDependencies: - '@opentelemetry/api' - '@playwright/test' @@ -9537,9 +9747,9 @@ snapshots: - supports-color - utf-8-validate - react-icons@5.4.0(react@18.3.1): + react-icons@5.4.0(react@19.0.0): dependencies: - react: 18.3.1 + react: 19.0.0 react-is@16.13.1: {} @@ -9547,38 +9757,36 @@ snapshots: dependencies: fast-deep-equal: 2.0.1 - react-stately@3.35.0(react@18.3.1): - dependencies: - '@react-stately/calendar': 3.7.0(react@18.3.1) - '@react-stately/checkbox': 3.6.11(react@18.3.1) - '@react-stately/collections': 3.12.1(react@18.3.1) - '@react-stately/color': 3.8.2(react@18.3.1) - '@react-stately/combobox': 3.10.2(react@18.3.1) - '@react-stately/data': 3.12.1(react@18.3.1) - '@react-stately/datepicker': 3.12.0(react@18.3.1) - '@react-stately/disclosure': 3.0.1(react@18.3.1) - '@react-stately/dnd': 3.5.1(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-stately/menu': 3.9.1(react@18.3.1) - '@react-stately/numberfield': 3.9.9(react@18.3.1) - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-stately/radio': 3.10.10(react@18.3.1) - '@react-stately/searchfield': 3.5.9(react@18.3.1) - '@react-stately/select': 3.6.10(react@18.3.1) - '@react-stately/selection': 3.19.0(react@18.3.1) - '@react-stately/slider': 3.6.1(react@18.3.1) - '@react-stately/table': 3.13.1(react@18.3.1) - '@react-stately/tabs': 3.7.1(react@18.3.1) - '@react-stately/toggle': 3.8.1(react@18.3.1) - '@react-stately/tooltip': 3.5.1(react@18.3.1) - '@react-stately/tree': 3.8.7(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - react@18.3.1: - dependencies: - loose-envify: 1.4.0 + react-stately@3.35.0(react@19.0.0): + dependencies: + '@react-stately/calendar': 3.7.0(react@19.0.0) + '@react-stately/checkbox': 3.6.11(react@19.0.0) + '@react-stately/collections': 3.12.1(react@19.0.0) + '@react-stately/color': 3.8.2(react@19.0.0) + '@react-stately/combobox': 3.10.2(react@19.0.0) + '@react-stately/data': 3.12.1(react@19.0.0) + '@react-stately/datepicker': 3.12.0(react@19.0.0) + '@react-stately/disclosure': 3.0.1(react@19.0.0) + '@react-stately/dnd': 3.5.1(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/list': 3.11.2(react@19.0.0) + '@react-stately/menu': 3.9.1(react@19.0.0) + '@react-stately/numberfield': 3.9.9(react@19.0.0) + '@react-stately/overlays': 3.6.13(react@19.0.0) + '@react-stately/radio': 3.10.10(react@19.0.0) + '@react-stately/searchfield': 3.5.9(react@19.0.0) + '@react-stately/select': 3.6.10(react@19.0.0) + '@react-stately/selection': 3.19.0(react@19.0.0) + '@react-stately/slider': 3.6.1(react@19.0.0) + '@react-stately/table': 3.13.1(react@19.0.0) + '@react-stately/tabs': 3.7.1(react@19.0.0) + '@react-stately/toggle': 3.8.1(react@19.0.0) + '@react-stately/tooltip': 3.5.1(react@19.0.0) + '@react-stately/tree': 3.8.7(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 + + react@19.0.0: {} read-cache@1.0.0: dependencies: @@ -9594,7 +9802,7 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@4.1.1: {} + readdirp@4.1.2: {} recma-build-jsx@1.0.0: dependencies: @@ -9697,9 +9905,9 @@ snapshots: requires-port@1.0.0: {} - resend@4.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + resend@4.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@react-email/render': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-email/render': 1.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - react - react-dom @@ -9734,10 +9942,6 @@ snapshots: reusify@1.0.4: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -9771,19 +9975,17 @@ snapshots: safer-buffer@2.1.2: {} - sass@1.83.4: + sass@1.85.0: dependencies: chokidar: 4.0.3 immutable: 5.0.3 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.0 + '@parcel/watcher': 2.5.1 sax@1.3.0: {} - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 + scheduler@0.25.0: {} schema-dts@1.1.2(typescript@5.7.3): dependencies: @@ -9804,6 +10006,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -9920,13 +10124,13 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.8.0: + socket.io@4.8.1: dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 debug: 4.3.7 - engine.io: 6.6.2 + engine.io: 6.6.4 socket.io-adapter: 2.5.5 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -10054,17 +10258,10 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.3.1): - dependencies: - client-only: 0.0.1 - react: 18.3.1 - optionalDependencies: - '@babel/core': 7.24.5 - - styled-jsx@5.1.6(@babel/core@7.24.5)(react@18.3.1): + styled-jsx@5.1.6(@babel/core@7.24.5)(react@19.0.0): dependencies: client-only: 0.0.1 - react: 18.3.1 + react: 19.0.0 optionalDependencies: '@babel/core': 7.24.5 @@ -10099,10 +10296,10 @@ snapshots: transitivePeerDependencies: - encoding - svix@1.45.1: + svix@1.57.0: dependencies: '@stablelib/base64': 1.0.1 - '@types/node': 22.10.10 + '@types/node': 22.13.4 es6-promise: 4.2.8 fast-sha256: 1.3.0 svix-fetch: 3.0.0 @@ -10112,7 +10309,7 @@ snapshots: tabbable@6.2.0: {} - tailwind-merge@2.6.0: {} + tailwind-merge@3.0.1: {} tailwindcss@3.4.17: dependencies: @@ -10130,11 +10327,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.1 - postcss-import: 15.1.0(postcss@8.5.1) - postcss-js: 4.0.1(postcss@8.5.1) - postcss-load-config: 4.0.2(postcss@8.5.1) - postcss-nested: 6.2.0(postcss@8.5.1) + postcss: 8.5.2 + postcss-import: 15.1.0(postcss@8.5.2) + postcss-js: 4.0.1(postcss@8.5.2) + postcss-load-config: 4.0.2(postcss@8.5.2) + postcss-nested: 6.2.0(postcss@8.5.2) postcss-selector-parser: 6.1.2 resolve: 1.22.10 sucrase: 3.35.0 @@ -10143,8 +10340,6 @@ snapshots: tapable@2.2.1: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -10153,6 +10348,11 @@ snapshots: dependencies: any-promise: 1.3.0 + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -10167,7 +10367,7 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.0.0(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -10213,8 +10413,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 @@ -10280,6 +10478,16 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.10 + typescript-eslint@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + typescript@5.7.3: {} unbox-primitive@1.0.2: @@ -10310,7 +10518,7 @@ snapshots: unist-util-is@5.2.1: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is@6.0.0: dependencies: @@ -10336,7 +10544,7 @@ snapshots: unist-util-visit-parents@5.1.3: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents@6.0.1: @@ -10516,8 +10724,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} - ws@7.5.10: {} ws@8.17.1: {} @@ -10550,6 +10756,10 @@ snapshots: yocto-queue@0.1.0: {} - zod@3.24.1: {} + zod-validation-error@3.4.0(zod@3.24.2): + dependencies: + zod: 3.24.2 + + zod@3.24.2: {} zwitch@2.0.4: {} diff --git a/polite-pop.d.ts b/polite-pop.d.ts index 265b98a4..428a8438 100644 --- a/polite-pop.d.ts +++ b/polite-pop.d.ts @@ -1,4 +1,4 @@ -declare function PolitePop(config: any): any; +declare function PolitePop(config: unknown): unknown; declare namespace PolitePop { - function onNewEmailSignup(callback: any): void; + function onNewEmailSignup(callback: unknown): void; } diff --git a/postcss.config.js b/postcss.config.js index 12a703d9..8793700f 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,3 +1,5 @@ +// @ts-check + module.exports = { plugins: { tailwindcss: {}, diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 95f006c2..c4bca24c 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -25,7 +25,7 @@ export default async function sitemap(): Promise { priority: 0.8, })); - const { allTags } = await getAllTags(); + const allTags = await getAllTags(); const tagsSitemap = allTags.map((tag) => ({ url: `${baseUrl}/tags/${tag}`, lastModified: new Date(), diff --git a/src/components/MdxEmbed/Tweet.tsx b/src/components/MdxEmbed/Tweet.tsx index ca7c7089..23f6f169 100644 --- a/src/components/MdxEmbed/Tweet.tsx +++ b/src/components/MdxEmbed/Tweet.tsx @@ -8,12 +8,9 @@ const twttrEmbedScript = ` const twttrLoad = () => { if ( typeof window.twttr !== `undefined` && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access window?.twttr?.widgets && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access typeof window.twttr.widgets.load === `function` ) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access window.twttr.widgets.load(document.getElementsByClassName(`mdx-embed`)); } }; diff --git a/src/components/NewsletterFeed/NewsletterItem.tsx b/src/components/NewsletterFeed/NewsletterItem.tsx index 377a74ce..17b1ee1a 100644 --- a/src/components/NewsletterFeed/NewsletterItem.tsx +++ b/src/components/NewsletterFeed/NewsletterItem.tsx @@ -7,6 +7,7 @@ import { Heading } from '../Heading'; import TagsSummary from '../tagsSummary'; const NewsletterItem: React.FC = ({ newsletter }) => { + if (!newsletter) return null; const { coverImagePublicId, date, excerpt, slug, tags, title } = newsletter.frontmatter; diff --git a/src/components/Post/FullPost.tsx b/src/components/Post/FullPost.tsx index 7fc1d523..b8d42261 100644 --- a/src/components/Post/FullPost.tsx +++ b/src/components/Post/FullPost.tsx @@ -48,7 +48,7 @@ const FullPost: React.FC = ({ post, series }) => { coverImagePublicId, date, excerpt, - path, + slug, podcastUrl, tags, title, @@ -58,7 +58,7 @@ const FullPost: React.FC = ({ post, series }) => { let coverContainer: React.ReactNode = ( {excerpt} = ({ post, series }) => { {pageStructuredData.map((structuredData) => ( ))}
diff --git a/src/components/Post/PostSummary.tsx b/src/components/Post/PostSummary.tsx index 2882f707..bf7eb986 100644 --- a/src/components/Post/PostSummary.tsx +++ b/src/components/Post/PostSummary.tsx @@ -15,9 +15,9 @@ type PostSummaryProps = { const PostSummary: React.FC = ({ post, eager = false }) => { const { frontmatter } = post; - const { coverImagePublicId, date, excerpt, path, title } = frontmatter; + const { coverImagePublicId, date, excerpt, slug, title } = frontmatter; - const postPath = `/posts/${path}`; + const postPath = `/posts/${slug}`; const coverContainer = ( @@ -25,7 +25,7 @@ const PostSummary: React.FC = ({ post, eager = false }) => { className={clsxm( '-mx-2 mb-4 object-cover object-center shadow sm:mx-0 sm:rounded-lg' )} - publicId={coverImagePublicId || `posts/${path}/cover`} + publicId={coverImagePublicId || `posts/${slug}/cover`} alt={excerpt || title} height={630} width={1200} diff --git a/src/components/Post/TableOfContents.tsx b/src/components/Post/TableOfContents.tsx index 4048caa4..965c8def 100644 --- a/src/components/Post/TableOfContents.tsx +++ b/src/components/Post/TableOfContents.tsx @@ -14,7 +14,7 @@ type TableOfContentsProps = { // Shout out to Alex for the great starting point! // https://claritydev.net/blog/nextjs-blog-remark-interactive-table-of-contents function useHighlighted(id: string) { - const observer = useRef(); + const observer = useRef(undefined); const [activeId, setActiveId] = useState(''); useEffect(() => { diff --git a/src/components/PostFeed/index.js b/src/components/PostFeed/index.ts similarity index 100% rename from src/components/PostFeed/index.js rename to src/components/PostFeed/index.ts diff --git a/src/components/RelatedContent/RelatedContentLinksByTag.js b/src/components/RelatedContent/RelatedContentLinksByTag.tsx similarity index 92% rename from src/components/RelatedContent/RelatedContentLinksByTag.js rename to src/components/RelatedContent/RelatedContentLinksByTag.tsx index 75ca97f4..f904e1df 100644 --- a/src/components/RelatedContent/RelatedContentLinksByTag.js +++ b/src/components/RelatedContent/RelatedContentLinksByTag.tsx @@ -19,7 +19,7 @@ const RelatedContentLinksByTag = ({ tags = DEFAULT_TAGS_TO_DISPLAY }) => { return (

More great resources

- +
{tags.map((tag) => { const tagInformation = getTagInformation(tag); if (!tagInformation) return null; @@ -37,7 +37,7 @@ const RelatedContentLinksByTag = ({ tags = DEFAULT_TAGS_TO_DISPLAY }) => { Browse all topics → - +
); }; diff --git a/src/components/Series/SeriesNavigation.tsx b/src/components/Series/SeriesNavigation.tsx index 00216cb4..7629bc31 100644 --- a/src/components/Series/SeriesNavigation.tsx +++ b/src/components/Series/SeriesNavigation.tsx @@ -33,10 +33,8 @@ export const SeriesNavigation: React.FC = ({
    {orderedContent.map((post, index) => { - // if it comes in .path it is a post - // if it comes in .slug it is a newsletter const postPath = - post.frontmatter.path && `/posts/${post.frontmatter.path}`; + post.frontmatter.slug && `/posts/${post.frontmatter.slug}`; const newsletterPath = post.frontmatter.slug && `/newsletters/${post.frontmatter.slug}`; const isActivePage = diff --git a/src/components/Slider/Slider.tsx b/src/components/Slider/Slider.tsx index c3244a66..5f188967 100644 --- a/src/components/Slider/Slider.tsx +++ b/src/components/Slider/Slider.tsx @@ -16,7 +16,7 @@ const Thumb = (props: { label?: string; index: number; state: SliderState; - trackRef: React.RefObject>; + trackRef: React.RefObject | null>; isFocusVisible: boolean; focusProps: ReturnType['focusProps']; onChangeStart?: () => void; diff --git a/src/components/SponsorCTA/SponsorCTA.js b/src/components/SponsorCTA/SponsorCTA.tsx similarity index 100% rename from src/components/SponsorCTA/SponsorCTA.js rename to src/components/SponsorCTA/SponsorCTA.tsx diff --git a/src/components/SponsoredSection/index.js b/src/components/SponsoredSection/index.ts similarity index 100% rename from src/components/SponsoredSection/index.js rename to src/components/SponsoredSection/index.ts diff --git a/src/data/ConvertKitTags.js b/src/data/ConvertKitTags.ts similarity index 84% rename from src/data/ConvertKitTags.js rename to src/data/ConvertKitTags.ts index 122d9b68..44d35d67 100644 --- a/src/data/ConvertKitTags.js +++ b/src/data/ConvertKitTags.ts @@ -1,4 +1,10 @@ -const tags = [ +type TagMetadata = { + name: string; + id: string; + label: string; +}; + +const tags: TagMetadata[] = [ { name: 'react', id: '3175424', @@ -22,7 +28,7 @@ const tags = [ { name: 'creators', id: '3175431', - lavel: 'for creators', + label: 'for creators', }, { name: 'developer', @@ -76,6 +82,7 @@ const tags = [ }, ]; -export const getTagInformation = (tag) => tags.find((t) => t.name === tag); +export const getTagInformation = (tag: string) => + tags.find((t) => t.name === tag); export default tags; diff --git a/src/data/content-types.ts b/src/data/content-types.ts index d987eab9..11ea3d58 100644 --- a/src/data/content-types.ts +++ b/src/data/content-types.ts @@ -2,71 +2,101 @@ import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; import type { Series } from '@lib/series'; +/** + * Represents a heading in MDX content with its hierarchy level, + * display text, and URL-safe slug + */ export type Heading = { - level: number; - text: string; - slug: string; + level: number; // h1 = 1, h2 = 2, etc. + text: string; // Display text + slug: string; // URL-safe identifier }; -type Frontmatter = { +/** + * Base properties that all content types share in their frontmatter + */ +export type BaseFrontmatter = { date: string | number | Date; + title: string; + slug: string; tags?: string[]; published?: boolean; - slug?: string; +}; + +/** + * Additional frontmatter fields that may appear in any content type + */ +export type OptionalFrontmatter = { podcastUrl?: string; youTubeId?: string; series?: string; -} & Record; -// Extend MarkdownDocument to include common frontmatter fields and other fields as needed + excerpt?: string; + coverImagePublicId?: string; + url?: string; + content?: string; +}; + +/** + * Complete frontmatter type that combines base and optional fields + */ +export type Frontmatter = BaseFrontmatter & OptionalFrontmatter; + +/** + * Core document structure for all markdown content + */ export type MarkdownDocument = { - frontmatter: Frontmatter; // Use intersection type to combine BaseFrontmatter with generic T + // we add a type to the frontmatter to help with type inference + frontmatter: Frontmatter & { type: string }; content: string; tableOfContents?: Heading[]; slug: string; - source: MDXRemoteSerializeResult; // Define what 'source' should contain more specifically if possible + source: MDXRemoteSerializeResult; }; -type NewsletterMetadata = { +/** + * Newsletter-specific metadata requirements + */ +export type NewsletterMetadata = BaseFrontmatter & { coverImagePublicId: string; - date: string | number | Date; excerpt: string; - slug: string; - tags: string[]; - title: string; - path: string; }; -export type Newsletter = { +/** + * Complete Newsletter type including content and metadata + */ +export type Newsletter = MarkdownDocument & { frontmatter: NewsletterMetadata; -} & MarkdownDocument; +}; export type NewsletterItemProps = { newsletter: Newsletter; series?: Series; }; +/** + * Blog post type with specific frontmatter requirements + */ export type BlogPost = MarkdownDocument & { frontmatter: { - slug: string; - title: string; - date: string; + coverImagePublicId: string; excerpt: string; content: string; - coverImagePublicId: string; published: boolean; - path: string; - tags?: Tag[]; - }; + } & BaseFrontmatter; }; +/** + * External article reference type + */ export type Article = MarkdownDocument & { frontmatter: { - date: string; url: string; - title: string; - tags: string[]; - slug: string; - }; + } & BaseFrontmatter; }; export type Tag = string; + +/** + * Union type of all possible frontmatter shapes + */ +export type ContentFrontmatter = NewsletterMetadata | Article['frontmatter']; diff --git a/src/data/external-references/how-to-create-your-first-app-action.mdx b/src/data/external-references/how-to-create-your-first-app-action.mdx index 78c5e3ad..291e187c 100644 --- a/src/data/external-references/how-to-create-your-first-app-action.mdx +++ b/src/data/external-references/how-to-create-your-first-app-action.mdx @@ -1,7 +1,7 @@ --- title: How to create your first App Action -tags: [demo, assistant, android, voice] date: 05-19-2021 +tags: [demo, assistant, android, voice] --- diff --git a/src/data/newsletters/aesthetic-usability-effect.mdx b/src/data/newsletters/aesthetic-usability-effect.mdx index d152fe88..771df245 100644 --- a/src/data/newsletters/aesthetic-usability-effect.mdx +++ b/src/data/newsletters/aesthetic-usability-effect.mdx @@ -1,5 +1,5 @@ --- -title: "The Aesthetic-Usability Effect" +title: 'The Aesthetic-Usability Effect' excerpt: "When building something new, what's more important: that it works, or that it looks good? The Aesthetic-Usability Effect says that users perceive more aesthetically pleasing designs as easier to use than less aesthetically pleasing designs." coverImagePublicId: newsletters/aesthetic-usability-effect/cover tags: [ux, design, startup] @@ -16,7 +16,7 @@ My take? If you want to build a successful product, you need to do both reasonab ## The Aesthetic-Usability Effect > The Aesthetic-Usability Effect is a psychological phenomenon where users perceive more aesthetically pleasing designs as easier to use than less aesthetically pleasing designs. -[More on Wikipedia](https://en.wikipedia.org/wiki/Aesthetic-usability_effect). +> [More on Wikipedia](https://en.wikipedia.org/wiki/Aesthetic-usability_effect). This means that if your app isn't designed well, users will perceive it as _harder to use_ than a more visually appealing app, even if the functionality is identical. @@ -93,7 +93,6 @@ If you liked this newsletter, you may also appreciate these past dispatches, whi - [UX For Devs: Understanding Gestalt](https://mikebifulco.com/newsletter/gestalt-design-principles-for-developers) - [The finicky nature of color in product design](https://mikebifulco.com/newsletter/color-context-and-product-design) - ## Everyone is a designer I'm a big believer that everyone is a designer, and that everyone can learn to be a better designer. I keep a list of great design books I've read over on hardcover that you're welcome to peruse - check out [The Designer's Reading List](https://hardcover.app/@irreverentmike/lists/the-designers-reading-list) if you're looking for some more juicy reads from people _way_ smarter than me. diff --git a/src/data/newsletters/beyond-the-walled-garden.mdx b/src/data/newsletters/beyond-the-walled-garden.mdx index ef46d565..f8da252c 100644 --- a/src/data/newsletters/beyond-the-walled-garden.mdx +++ b/src/data/newsletters/beyond-the-walled-garden.mdx @@ -1,8 +1,8 @@ --- -title: "Beyond the walled garden: what Spotify and Substack get wrong" -excerpt: It's natural for big companies to make mistakes - but when they do, it's a great opportunity for smaller companies to build something better. +title: 'Beyond the walled garden: what Spotify and Substack get wrong' +excerpt: "It's natural for big companies to make mistakes - but when they do, it's a great opportunity for smaller companies to build something better." tags: [product, design, startup, indiehacker] -date: 04/30/2024 +date: 04-30-2024 slug: beyond-the-walled-garden coverImagePublicId: 'newsletters/beyond-the-walled-garden/cover' youTubeId: Q7ZMlgbrZxQ @@ -79,7 +79,6 @@ I thought I'd share some work from people in my network this week. You're going - Over on Primary Focus, Ms. Natalie produced a great interview recently about [what parents need to know about ADHD and kids](https://www.youtube.com/watch?v=UsqG7m5NQ1E&t=7s). Her guest is super knowledgable and it's a great watch. - --- ## Try these out though diff --git a/src/data/newsletters/build-measure-listen-rebuild.mdx b/src/data/newsletters/build-measure-listen-rebuild.mdx index 21042a5a..ecbfa5e1 100644 --- a/src/data/newsletters/build-measure-listen-rebuild.mdx +++ b/src/data/newsletters/build-measure-listen-rebuild.mdx @@ -1,5 +1,5 @@ --- -title: "Build, measure, listen, rebuild" +title: 'Build, measure, listen, rebuild' excerpt: "Building better products involves skills you won't learn in computer science school, or at a boot camp. Find success through testing, learning from real-world feedback, and adapting." tags: [product, ux, startup] date: 01-22-2024 diff --git a/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx b/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx index 4c93523f..5bcb336a 100644 --- a/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx +++ b/src/data/newsletters/cognitive-load-ux-and-why-you-should-care.mdx @@ -7,7 +7,6 @@ coverImagePublicId: 'newsletters/cognitive-load-ux-and-why-you-should-care/cover slug: cognitive-load-ux-and-why-you-should-care --- - **Cognitive load** is the amount of mental effort required to complete a task. It's something you experience everywhere - in every app you use, every website you visit, and even making your morning coffee. In product design, is something that is often felt but not well-understood, and has a huge impact on both UX and the lived experience of building your product. In the best case, cognitive load is something that is invisible to the user. When I used to work as a UX designer at Microsoft, I would often say that if I was doing my job right, nobody would realize I did anything at all. diff --git a/src/data/newsletters/creators-startups-january-pivot.mdx b/src/data/newsletters/creators-startups-january-pivot.mdx index 9bcb5ac2..67528f0a 100644 --- a/src/data/newsletters/creators-startups-january-pivot.mdx +++ b/src/data/newsletters/creators-startups-january-pivot.mdx @@ -18,6 +18,7 @@ Seems like it's all happening at once, right? Well, in a sense -- it is. And the Have you felt it? I've certainly seen a good number of surprising announcements. Here's an incomplete list of companies and creators who have announced big changes since the start of the new year: ### Companies making big changes + - A few days ago, Artifact, the news aggregator app created by the founders of Instagram, shared that they're [shutting down](https://medium.com/artifact-news/shutting-down-artifact-1e70de46d419) their services, after failing to find product-market fit. - [Mint](https://www.mint.com), the personal finance app, is shutting down completely. Their orphaned users have been desperately searching for alternatives. - [Prism Bills & Money](https://prism.com), a finance app used for automating bill payments, is also shutting down. @@ -27,7 +28,6 @@ Have you felt it? I've certainly seen a good number of surprising announcements. - **Matpat**, Host of the YouTube channel _The Game Theorists_ [announced he's stepping down as the face of the channel](https://youtu.be/8R1_TqU68yo?si=1PQEWufTl_letIcO). TGT has **18.7M subscribers** on YouTube. - **Tom Scott** posted a video explaining that after 10 years of videos every week, he's [taking a break](https://youtu.be/7DKv5H5Frt0?si=2W-72NhfIviI0TI5) for an undetermined amount of time. Tom has **6.4M subscribers** on YouTube. - ### Sort of both, and kind of neither You may have seen recently that Substack is bleeding creators left and right over their [spineless content moderation policy decisions](https://mashable.com/article/why-are-people-leaving-substack-content-moderation-controversy) (or lack thereof). Newsletter creators are jumping ship to other platforms left and right. diff --git a/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx b/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx index e970edbd..dc0f296c 100644 --- a/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx +++ b/src/data/newsletters/crowdsourcing-vs-user-research-ux.mdx @@ -1,5 +1,5 @@ --- -title: "The product design spectrum: crowdsourcing, user research, and the myopic approach" +title: 'The product design spectrum: crowdsourcing, user research, and the myopic approach' excerpt: In product design, there's a critical difference between crowdsourcing ideas and feedback, and user research. tags: [design, ux, startup, product] date: 2023-12-05 diff --git a/src/data/newsletters/dunbars-number-and-network-effect.mdx b/src/data/newsletters/dunbars-number-and-network-effect.mdx index 69f01564..fd324e33 100644 --- a/src/data/newsletters/dunbars-number-and-network-effect.mdx +++ b/src/data/newsletters/dunbars-number-and-network-effect.mdx @@ -1,8 +1,8 @@ --- title: "Dunbar's number: focusing on your core supporters for network effect growth" -excerpt: "Focus on building strong connections with a core group of 50 advocates to fuel sustainable, network-driven growth." +excerpt: 'Focus on building strong connections with a core group of 50 advocates to fuel sustainable, network-driven growth.' slug: dunbars-number-and-network-effect -coverImagePublicId: "newsletters/dunbars-number-and-network-effect/cover" +coverImagePublicId: 'newsletters/dunbars-number-and-network-effect/cover' tags: [founder, startup, marketing, community] date: 11-05-2024 --- @@ -33,7 +33,6 @@ Product for Engineers is a newsletter on building great products, the best pract - ## What it means for your product Most people talk about Dunbar's number in terms of 150, but the power lies in close-knit groups of 50. These 50 people are your advocates, your early adopters, your most vocal supporters. For product builders, focusing here first creates a foundation that grows beyond one-time use or sporadic engagement. @@ -57,8 +56,8 @@ This is why many startups begin with a _friends and family_ launch. It's a great Gore, the company that makes of GORE-TEX, applies Dunbar's number by limiting the size of its factories. When a team hits 150 people, they spin off a new group. Each group operates independently with its own R&D, production, and sales teams. This approach keeps teams close-knit, engaged, and highly collaborative—key to their success. - ### Building on the Network Effect + Nurture Your Core 50: Focus on building meaningful relationships with your first 50 users. They are the heart of your network, and their enthusiasm will drive momentum. Treat their feedback like gold, and respond to their needs directly. Create a Product of Substance: Deliver on your promises to these early adopters, listen actively, and adapt. A strong, attentive foundation encourages your core group to bring others in naturally. @@ -68,9 +67,6 @@ Create a Product of Substance: Deliver on your promises to these early adopters, **For your product:** Build with compassion and responsiveness. Turn your initial 50 users into advocates so they bring their own circle along. - **It's Election Day:** Influence your Dunbar network. Encourage the people you know best to vote today - your voice has power, especially in small circles. --- - - diff --git a/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx b/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx index fe47ca56..4db01392 100644 --- a/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx +++ b/src/data/newsletters/endowment-effect-and-designing-free-trials.mdx @@ -1,5 +1,5 @@ --- -title: "The Endowment Effect: why useful trials make for sticky products" +title: 'The Endowment Effect: why useful trials make for sticky products' excerpt: The endowment effect is a psychological phenomenon where people value things more highly simply because they own them. How can you use this to make your product stickier? tags: [product, design, startup, indiehacker] date: 5-15-2024 @@ -18,7 +18,9 @@ Another group of participants were asked to set a price at which they would be w In this case, the average price was $3. -...In other words, for the exact same object, participants assigned a higher value to the thing they owned versus the thing they were thinking about buying. + ...In other words, for the exact same object, participants assigned a higher + value to the thing they owned versus the thing they were thinking about + buying. The misalignment between these two prices is the endowment effect in action. People value things more highly when they own them. @@ -59,7 +61,7 @@ Setting up a free trial for your product doesn't have to be complicated. There a 2. It's nearly impossible to get your pricing strategy right on the first try. That's the thesis that my friends over at **[Stigg](https://www.stigg.io/)** have based their products on. They make it easy to test different pricing strategies and see which one works best for your business. -3. If you're building a developer product with usage-based billing, you should check out **[Unkey.dev](https://www.unkey.com/)** - they make it dead simple to add analtics and usage-based billing around API keys to your product. +3. If you're building a developer product with usage-based billing, you should check out **[Unkey.dev](https://www.unkey.com/)** - they make it dead simple to add analtics and usage-based billing around API keys to your product. --- @@ -68,4 +70,3 @@ Setting up a free trial for your product doesn't have to be complicated. There a - [Pastmaps](https://pastmaps.com/plus?src=tinyimprovements) is a vast library of historical maps that you can overlay on modern maps. Seeing how your neighborhood has changed over time can be really eye-opening. Pastmaps has a 7-day free trial for its premium features, and is being built by Craig Campbell, who goes by [@that.map.guy.craig](https://www.threads.net/@that.map.guy.craig) on Threads. - [PodCharm](https://podcharm.com/) is a product designed to help podcasters do a better job of growing their audiences. PodCharm's free tier is _super_ generous, and sends a strong signal: PodCharm will be successful only if its customers' shows are successful. That's a win-win alignment of incentives. Shout out to my dude [Tony Mastrorio](https://www.threads.net/@tonydotcoms) for building this. Give it a shot if you're a podcaster. - diff --git a/src/data/newsletters/first-principles-frameworks-for-clarity.mdx b/src/data/newsletters/first-principles-frameworks-for-clarity.mdx index b225aab4..e09cc21d 100644 --- a/src/data/newsletters/first-principles-frameworks-for-clarity.mdx +++ b/src/data/newsletters/first-principles-frameworks-for-clarity.mdx @@ -1,6 +1,6 @@ --- -title: "First Principles: Your Framework for Clarity" -excerpt: "How the most productive people use fundamental truths to navigate complexity and stay focused" +title: 'First Principles: Your Framework for Clarity' +excerpt: 'How the most productive people use fundamental truths to navigate complexity and stay focused' tags: [productivity, philosophy, mental health] date: 11-19-2024 coverImagePublicId: newsletters/first-principles-frameworks-for-clarity/cover @@ -37,18 +37,21 @@ This is a powerful tool for product development. If you're evaluating a new mark Let's look at how first principles thinking revolutionized urban transportation. Instead of trying to improve taxis, entrepreneurs asked: "What is the fundamental purpose of urban transportation?" The core principles they identified were: + - People need to get from point A to point B reliably - Both drivers and passengers want to maximize their time and money - Trust and safety are essential for both parties - Supply should match demand efficiently Traditional taxis failed to optimize for these principles: + 1. Supply/demand mismatch: empty taxis circled busy areas while other neighborhoods had none 2. Pricing opacity: meters created uncertainty and anxiety for passengers 3. Trust gap: anonymous interactions left both drivers and passengers vulnerable 4. Artificial scarcity: medallion systems limited supply without improving service Ride sharing services built solutions directly from these principles: + 1. Dynamic matching: GPS and algorithms connect nearby drivers to passengers 2. Transparent pricing: upfront fares let everyone make informed decisions 3. Two-way accountability: ratings and digital records create trust @@ -60,7 +63,6 @@ This is first principles in action: instead of accepting "this is how taxis work This sort of process can be applied to just about anything, from product development to team dynamics to your basic beliefs. Here's a simple framework to get you started: - 1. **Define the Problem** - Write down what's wrong or what you want to improve. Be specific. 2. **Identify Core Principles** - Think about the fundamental truths or rules related to the problem. (Examples: "Keep it simple," "Focus on what users need," "Test before scaling.") @@ -70,14 +72,12 @@ This sort of process can be applied to just about anything, from product develop 4. **Brainstorm Solutions for Each Piece** - For each part, think of ways to solve it while sticking to your core principles. 5. **Choose the Simplest, Most Aligned Solution** - Pick the solution that's easiest to implement and most consistent with your principles. -Pick the solution that's easiest to implement and most consistent with your principles. + Pick the solution that's easiest to implement and most consistent with your principles. 6. **Test the Solution** - Try it out! Check if it works as intended and solves the problem. 7. **Refine** - Make adjustments if needed. Stay true to the principles as you tweak things. - - --- ## Applied Principles Thinking @@ -90,7 +90,6 @@ Not sure what I mean? You might dig these examples: [Supervised Learning: Crash Course AI](https://www.youtube.com/watch?v=4qVRBYAdLAo) from Crash Course - ## More on building from first principles If you're interested in how these principles can be applied to team dynamics, check out my thoughts on [building happier teams](/newsletter/simple-habits-for-a-happier-team) and [measuring what matters](/newsletter/build-measure-listen-rebuild). diff --git a/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx b/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx index abd81913..e4b178c0 100644 --- a/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx +++ b/src/data/newsletters/fitts-law-and-the-beauty-of-big-goals.mdx @@ -26,12 +26,10 @@ Big, well-placed targets are easier to hit than small, far away targets. ...You see where I'm going with this yet? - ## Tiny Improvements and Big Goals I'm not going to sit here and tell you that it's _easy_ to reach your goals. No matter what you're after, it's going to take time, effort, and focus. But I do think that it's _easier_ to reach your goals if you set some audacious targets, and work towards them with small, consistent improvements. - When I set out to start publishing articles, I **made a list of 50 people** from the industry who I would be _thrilled_ to see reading my words. This was my target - the bullseye I was aiming for. These weren't necessarily people I knew, but they were people who I admired, and who I thought would be interested in what I had to say. Every time I brainstormed new topics, I'd try to write for the people on that list. Was it reasonable to think that I'd get _any_ these 50 people to read what I have to say? Maybe not, but the audacity of the goal helped me to focus on writing for a specific audience, and that's helped me to write better. diff --git a/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx b/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx index 93e84c0e..10a118f6 100644 --- a/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx +++ b/src/data/newsletters/intellectual-humility-and-how-to-be-wrong.mdx @@ -11,7 +11,6 @@ slug: intellectual-humility-and-how-to-be-wrong When was the last time you were wrong? How did you respond? - For many of us, being wrong is a painful experience. It's a blow to our ego, and it can feel like a personal attack. It's easy to get defensive, and to try to justify our decisions, even when we know they're wrong. Hell, if I were to look back on myself in the past, I was often defensive, and would dig my heels in to justify my decisions, even if it wasn't the best choice for the product or business. diff --git a/src/data/newsletters/jakobs-law-design-ux.mdx b/src/data/newsletters/jakobs-law-design-ux.mdx index 8a778963..d9463bd4 100644 --- a/src/data/newsletters/jakobs-law-design-ux.mdx +++ b/src/data/newsletters/jakobs-law-design-ux.mdx @@ -1,6 +1,6 @@ --- title: Statistically, nobody has used your app -excerpt: "People spend most of their time on sites and apps other than yours. This means that users prefer your site to work the same way as all the other sites they already know." +excerpt: 'People spend most of their time on sites and apps other than yours. This means that users prefer your site to work the same way as all the other sites they already know.' tags: [ux, design, product] date: 06-11-2024 slug: jakobs-law-design-ux @@ -20,6 +20,7 @@ In other words, if every list, page, and form on your site is built in a way tha You can think of design patterns as the common solutions to common problems. They're the tried-and-true ways of doing things that users are already familiar with. Some examples of design patterns include: + - **The hamburger menu** - a common way to hide navigation links on mobile devices - **Infinite scrolling** - a way to load more content as users scroll down the page - **The card layout** - a way to organize content into bite-sized chunks @@ -77,4 +78,3 @@ It will help the people who _do_ find themselves using your software - they will - [Mobbin](https://mobbin.com/?referrer_workspace_id=1a65606c-48bd-4922-aa2d-00c03ba1d853) is a hand-picked collection of the latest mobile and web design patterns from apps that reflect the best in design. - [The Webby Awards](https://www.webbyawards.com/winners/) are a annual awards given to websites and apps that feature best-in-class design and user experience. It is an absolute treasure trove of design inspiration. - diff --git a/src/data/newsletters/learning-is-an-infinite-game.mdx b/src/data/newsletters/learning-is-an-infinite-game.mdx index 9f50c655..feaf6dc8 100644 --- a/src/data/newsletters/learning-is-an-infinite-game.mdx +++ b/src/data/newsletters/learning-is-an-infinite-game.mdx @@ -87,5 +87,3 @@ tl;dr: learning is a skill, and as a founder, you need to be good at it. Part of - 🎙️ In the latest APIs You Won't Hate podcast, I [caught up with Danny Sheridan from Fern](https://apisyouwonthate.com/podcast/catching-up-with-danny-sheridan-from-fern/) to talk about the incredible tooling they're building for generating API clients and documentation from OpenAPI specs. - 📰 [Craftwork was featured by Forbes](https://www.forbes.com/sites/brucerogers/2023/11/17/craftwork-out-to-modernize-home-services-market-scores-6-million-seed-round/), and I still can't believe it. I'm so proud of the team we've built, and the work we're doing to make home services better for everyone. What a journey so far - and we're just getting started. - - diff --git a/src/data/newsletters/leaving-stripe-going-viral.mdx b/src/data/newsletters/leaving-stripe-going-viral.mdx index 47f8eb98..039a7c11 100644 --- a/src/data/newsletters/leaving-stripe-going-viral.mdx +++ b/src/data/newsletters/leaving-stripe-going-viral.mdx @@ -30,7 +30,10 @@ If you're new here, it's likely because you saw my tweet later that same day: you are a newly-former Stripe, DM or email hello@mikebifulco.com. I'll do whatever I can to help you find your next job.

    - — Mike Bifulco (@irreverentmike) November 3, 2022 + — Mike Bifulco (@irreverentmike){' '} + + November 3, 2022 + `. It should work either way._ diff --git a/src/data/posts/all-about-ch.mdx b/src/data/posts/all-about-ch.mdx index 98286e63..48f67318 100644 --- a/src/data/posts/all-about-ch.mdx +++ b/src/data/posts/all-about-ch.mdx @@ -1,10 +1,9 @@ --- -title: "CSS talk: you should really know about the ch unit" -type: post +title: 'CSS talk: you should really know about the ch unit' date: 05-17-2019 excerpt: "This is an article about CSS and usability. The ch unit in CSS was a revelation for me, and I promise that if you don't know about it already, you're gonna love it. " published: true -path: all-about-ch +slug: all-about-ch tags: [design, ux, css] --- @@ -34,10 +33,9 @@ p { } ``` - Here's what it looks like: -The same wikipedia article with a limit set on p max-width for ch yields a page that is much easier to consume visually, and is more readable. -First thing's first - get yourself a good password manager.  I chose [Dashlane](https://www.dashlane.com/en/cs/mvKFbmiWCXxQ) (referral link) a few years back because of its security dashboard, which alerts you to your accounts which have been found in data breaches, any passwords you've used more than once, or passwords which are insecure.  Other great options are [1Password](https://1password.com/) and [LastPass](https://www.lastpass.com/). - - +First thing's first - get yourself a good password manager. I chose [Dashlane](https://www.dashlane.com/en/cs/mvKFbmiWCXxQ) (referral link) a few years back because of its security dashboard, which alerts you to your accounts which have been found in data breaches, any passwords you've used more than once, or passwords which are insecure.  Other great options are [1Password](https://1password.com/) and [LastPass](https://www.lastpass.com/). # Elevate for Strava @@ -28,8 +26,6 @@ First thing's first - get yourself a good password manager.  I chose [Dashlane] If nothing else, I am two things: a data nerd, and a [cyclist](https://www.instagram.com/p/Bqkko6CBtTu/).  I love cycling - it is my go to for exercise, meditation, and transport whenever possible.  Strava is the best service for aggregating GPS and biometric data recorded during cycling activities.  [Eleva](https://thomaschampagne.github.io/elevate/#/landing)[te](https://chrome.google.com/webstore/detail/elevate-for-strava/dhiaggccakkgdfcadnklkbljcgicpckn) is sugar on top of Strava - it adds a horde of wonderful data visualizations and progress measurements to the experience.  I frequently turn to the fitness trend tab to motivate myself to ride more regularly.  Did I mention that Elevate is [Open Source](https://github.com/thomaschampagne/elevate)? Heck yeah. - - # FIO / Figure it Out -I go through occasional phases where I track _all_ of my activities in a time tracker.  For me, the app of choice is Toggl, which is simple and intuitive, and lets me keep track of how long things are taking me via an app on my phone, their website, and this lovely browser extension.  It's clean and simple, and offers loads of integrations and customizations that might fit your productivity workflow, too.  The [Toggl Button for Chrome](https://chrome.google.com/webstore/detail/toggl-button-productivity/oejgccbfbmkkpaidnkphaiaecficdnfn) lives right next to the address bar, and stays out of the way when you don't need it.  I've gotten away with their Free plan for the most part - if you're using time tracking to bill customers, it's definitely worth looking at their paid features. \ No newline at end of file +I go through occasional phases where I track _all_ of my activities in a time tracker.  For me, the app of choice is Toggl, which is simple and intuitive, and lets me keep track of how long things are taking me via an app on my phone, their website, and this lovely browser extension.  It's clean and simple, and offers loads of integrations and customizations that might fit your productivity workflow, too.  The [Toggl Button for Chrome](https://chrome.google.com/webstore/detail/toggl-button-productivity/oejgccbfbmkkpaidnkphaiaecficdnfn) lives right next to the address bar, and stays out of the way when you don't need it.  I've gotten away with their Free plan for the most part - if you're using time tracking to bill customers, it's definitely worth looking at their paid features. diff --git a/src/data/posts/content-creation-workflow-my-writing-process.mdx b/src/data/posts/content-creation-workflow-my-writing-process.mdx index 898573fb..6b49b154 100644 --- a/src/data/posts/content-creation-workflow-my-writing-process.mdx +++ b/src/data/posts/content-creation-workflow-my-writing-process.mdx @@ -3,7 +3,7 @@ title: "Content creation workflow: my writing process" excerpt: Learn how I write and publish content on my Next.js site using Markdown and MDX, and a custom content creation workflow. tags: ['nextjs', 'design', 'newsletter'] date: 12-22-2024 -path: content-creation-workflow-my-writing-process +slug: content-creation-workflow-my-writing-process coverImagePublicId: posts/content-creation-workflow-my-writing-process/cover series: "Content creation workflow: Writing" --- diff --git a/src/data/posts/crosspost-introducing-pistola.mdx b/src/data/posts/crosspost-introducing-pistola.mdx index d5d76759..0004fad5 100644 --- a/src/data/posts/crosspost-introducing-pistola.mdx +++ b/src/data/posts/crosspost-introducing-pistola.mdx @@ -1,10 +1,9 @@ --- -title: "Introducing Pistola - Building a passion project with radical transparency" -type: post +title: 'Introducing Pistola - Building a passion project with radical transparency' date: 02-21-2020 excerpt: "If you follow me across the various other social networks I use, you'll likely stumble across my passion for cycling. For the past 8 or so years, road cycling has been my primary form of exercise. I love cycling; it keeps me sane, and helps me live a healthier life, while seeing the world. If you haven't been on a bike recently, you should give it a shot - I can't recommend it enough." published: true -path: crosspost-introducing-pistola +slug: crosspost-introducing-pistola tags: [pistola, startup, cycling] --- @@ -47,4 +46,4 @@ Last week I put out a [user research survey](https://gopistola.typeform.com/to/o Most of, all thank you for reading, and for your support. I'm hoping this crazy idea can grow some legs, and I won't get anywhere without support and encouragement from the design, developer, cycling, and running communities. I'd love to hear your feedback, criticism, and encouragement. I'm here for it, and I deeply appreciate it. My inbox is always open: [mike@pistola.io](mailto:mike@pistola.io) -Thank you! \ No newline at end of file +Thank you! diff --git a/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx b/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx index e393111a..92165fd9 100644 --- a/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx +++ b/src/data/posts/custom-fonts-with-next-font-and-tailwind.mdx @@ -3,7 +3,7 @@ title: 'Add custom fonts to Next.js sites with Tailwind using next/font' excerpt: 'Learn how to add custom fonts to your Next.js app using next/font and Tailwind CSS. Improve user experience without sacrificing performance.' tags: [nextjs, react, tailwind, typescript, SEO] date: 4-17-2023 -path: custom-fonts-with-next-font-and-tailwind +slug: custom-fonts-with-next-font-and-tailwind pulished: true --- @@ -33,6 +33,7 @@ In `_app.jsx/tsx`, load your the fonts you need from `next/font/google`, but use ```tsx import { Barlow_Condensed, Inter } from 'next/font/google'; + const barlowCondensed = Barlow_Condensed({ weight: '700', subsets: ['latin'], @@ -56,17 +57,17 @@ import localFont from 'next/font/local'; const grosa = localFont({ src: [ { - path: '../../public/fonts/Grosa/Grosa-Regular.woff2', + slug: '../../public/fonts/Grosa/Grosa-Regular.woff2', weight: '500', style: 'normal', }, { - path: '../../public/fonts/Grosa/Grosa-Medium.woff2', + slug: '../../public/fonts/Grosa/Grosa-Medium.woff2', weight: '600', style: 'normal', }, { - path: '../../public/fonts/Grosa/Grosa-Bold.woff2', + slug: '../../public/fonts/Grosa/Grosa-Bold.woff2', weight: '700', style: 'normal', }, diff --git a/src/data/posts/debugging-a-conversion-problem-on-my-nextjs-site.mdx b/src/data/posts/debugging-a-conversion-problem-on-my-nextjs-site.mdx index 53017e00..ad7fa955 100644 --- a/src/data/posts/debugging-a-conversion-problem-on-my-nextjs-site.mdx +++ b/src/data/posts/debugging-a-conversion-problem-on-my-nextjs-site.mdx @@ -2,7 +2,7 @@ title: 'Product Analytics for engineers: Debugging a conversion problem on my next.js site' excerpt: This video dives into the process I used to diagnose and debug a conversion problem on my personal website using Posthog, a powerful product analytics tool. youTubeId: '4nWcB1a8M1s' -path: debugging-a-conversion-problem-on-my-nextjs-site +slug: debugging-a-conversion-problem-on-my-nextjs-site date: 2024-08-05 coverImagePublicId: posts/debugging-a-conversion-problem-on-my-nextjs-site/cover tags: [typescript, nextjs, founder, posthog, video] diff --git a/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx b/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx index ad4b546b..2a8e1f90 100644 --- a/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx +++ b/src/data/posts/deconfusing-javascript-destructuring-syntax.mdx @@ -1,10 +1,9 @@ --- title: Understanding JavaScript Destructuring Syntax -type: post date: 03-26-2019 excerpt: 'Destructuring syntax in es6 (or es2015, etc) JavaScript is a wonderfully useful bit of the language. It allows you to extract values from an Object and assign them to a new variable in one statement -- but it can be confusing to read.' published: true -path: deconfusing-javascript-destructuring-syntax +slug: deconfusing-javascript-destructuring-syntax tags: [javascript, dev] series: JavaScript Tips --- diff --git a/src/data/posts/devs-its-okay-to-use-no-code-tools.mdx b/src/data/posts/devs-its-okay-to-use-no-code-tools.mdx index 2d26d3fd..a1c69293 100644 --- a/src/data/posts/devs-its-okay-to-use-no-code-tools.mdx +++ b/src/data/posts/devs-its-okay-to-use-no-code-tools.mdx @@ -2,7 +2,7 @@ title: "Devs: It's okay to use no-code tools" excerpt: Embrace no-code tools to save time, boost efficiency, and complement your coding skills. No-code is the future - don't be left behind! tags: [nocode, dev, devrel] -path: devs-its-okay-to-use-no-code-tools +slug: devs-its-okay-to-use-no-code-tools date: 09-27-2022 published: true --- diff --git a/src/data/posts/dont-center-paragraph-text.mdx b/src/data/posts/dont-center-paragraph-text.mdx index d1e1b37f..2a5da72d 100644 --- a/src/data/posts/dont-center-paragraph-text.mdx +++ b/src/data/posts/dont-center-paragraph-text.mdx @@ -1,11 +1,10 @@ --- title: "Don't center align paragraph text" -type: post date: 04-10-2021 excerpt: "Stop using centered text. It's bad for usability, accessibility, and eye scanning -- and nobody anywhere wants to read like that." coverImagePublicId: 'posts/center-align-text/center-align-text' published: true -path: dont-center-paragraph-text +slug: dont-center-paragraph-text tags: [design, dev, css, accessibility] --- diff --git a/src/data/posts/egg-them-all.mdx b/src/data/posts/egg-them-all.mdx index 2992c979..be5dbdde 100644 --- a/src/data/posts/egg-them-all.mdx +++ b/src/data/posts/egg-them-all.mdx @@ -1,11 +1,10 @@ --- title: 'Egg them all: a fundraiser for New Zealand' -type: post date: 03-18-2019 excerpt: 'Get yourself some of these eggtastic stickers - gun violence is intolerable, and we need sensible gun reform. 100% of proceeds go to charity!' coverImagePublicId: posts/egg-them-all/cover published: true -path: egg-them-all +slug: egg-them-all tags: [design] --- diff --git a/src/data/posts/embracing-prettier.mdx b/src/data/posts/embracing-prettier.mdx index 5b0a4f8b..bb5390ef 100644 --- a/src/data/posts/embracing-prettier.mdx +++ b/src/data/posts/embracing-prettier.mdx @@ -1,11 +1,10 @@ --- title: Embracing Prettier -type: post date: 02-25-2019 excerpt: "Prettier.js is a fantastic way to systemize and automate your project's code style." coverImagePublicId: posts/embracing-prettier/cover published: true -path: embracing-prettier +slug: embracing-prettier tags: [javascript, react, dev] --- diff --git a/src/data/posts/eslint-no-floating-promises.mdx b/src/data/posts/eslint-no-floating-promises.mdx index 5de041b1..3e7372f3 100644 --- a/src/data/posts/eslint-no-floating-promises.mdx +++ b/src/data/posts/eslint-no-floating-promises.mdx @@ -1,7 +1,7 @@ --- title: 'No Floating Promises: an eslint rule to prevent async code errors' excerpt: The article discusses the ESLint rule no-floating-promises which disallows promises without await. The rule is designed to prevent developers from accidentally forgetting to await promises, which can lead to unexpected behavior. -path: eslint-no-floating-promises +slug: eslint-no-floating-promises coverImagePublicId: posts/eslint-no-floating-promises/cover.webp published: true tags: [javascript, react, node] diff --git a/src/data/posts/fixing-my-conversion-problem.mdx b/src/data/posts/fixing-my-conversion-problem.mdx index 8a11e4d6..9e1c46d6 100644 --- a/src/data/posts/fixing-my-conversion-problem.mdx +++ b/src/data/posts/fixing-my-conversion-problem.mdx @@ -2,7 +2,7 @@ title: Fixing the sign-up problem on my site using PostHog Product analytics excerpt: In part two of my product analytics journey, I tackle a subscriber drop, dive into PostHog data, fix key errors, and switch from ConvertKit to the developer-friendly Resend. youTubeId: 'RaX8NeEhowU' -path: fixing-my-conversion-problem +slug: fixing-my-conversion-problem date: 2024-08-13 coverImagePublicId: posts/fixing-my-conversion-problem/cover tags: [typescript, nextjs, founder, posthog, video] diff --git a/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx b/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx index 5a67ca01..fcfea12b 100644 --- a/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx +++ b/src/data/posts/gatsby-dev-to-cross-poster-brainstorm.mdx @@ -1,10 +1,9 @@ --- title: "Do you have your own Gatsby site? Let's brainstorm a dev.to cross-poster" -type: post date: 06-23-2019 excerpt: 'So, like all good things, the idea for this post comes from a tweet...' published: true -path: gatsby-dev-to-cross-poster-brainstorm +slug: gatsby-dev-to-cross-poster-brainstorm tags: [productivity, tools, react, dev, gatsby] --- diff --git a/src/data/posts/gitignore-io-is-great.mdx b/src/data/posts/gitignore-io-is-great.mdx index ef5d7198..087b46c2 100644 --- a/src/data/posts/gitignore-io-is-great.mdx +++ b/src/data/posts/gitignore-io-is-great.mdx @@ -1,11 +1,10 @@ --- title: 'gitignore.io is great' -type: post date: 08-05-2020 excerpt: "Put simply, gitignore.io is a tool that is so profoundly helpful that I've forgotten what life was like without it." coverImagePublicId: gitignore-io-cover published: true -path: gitignore-io-is-great +slug: gitignore-io-is-great tags: [developer, tools, productivity] --- @@ -75,9 +74,8 @@ As I understand it, it was created by [@joeblau](https://twitter.com/joeblau), a > Aquent - , which is a creative staffing agency. If you're looking for work, give - us - them a look!). + , which is a creative staffing agency. If you're looking for work, give{' '} + us them a look!). diff --git a/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx b/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx index dc483bf7..43c2506a 100644 --- a/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx +++ b/src/data/posts/how-do-you-choose-the-right-crm-for-your-product.mdx @@ -2,8 +2,8 @@ title: How do you choose the right CRM for your product? excerpt: You're building relationships with all of your customers, whether you know it or not. Setting up the right CRM for your product can help make those relationships stronger. date: 05-10-2022 -type: post -path: how-do-you-choose-the-right-crm-for-your-product + +slug: how-do-you-choose-the-right-crm-for-your-product tags: [startup, marketing, entrepreneurship, product] published: true --- diff --git a/src/data/posts/how-stripe-uses-friction-logs.mdx b/src/data/posts/how-stripe-uses-friction-logs.mdx index ff33de43..8bcee7dc 100644 --- a/src/data/posts/how-stripe-uses-friction-logs.mdx +++ b/src/data/posts/how-stripe-uses-friction-logs.mdx @@ -3,7 +3,7 @@ title: How Stripe Uses Friction Logs to Improve their Products excerpt: A guide to friction logging, a practice that can be used by engineering teams building products to track and improve upon issues that users experience while using a product. date: 2022-09-16 tags: [devrel, product] -path: how-stripe-uses-friction-logs +slug: how-stripe-uses-friction-logs coverImagePublicId: posts/how-stripe-uses-friction-logs/cover --- diff --git a/src/data/posts/i-have-to-tell-you-about-dependabot.mdx b/src/data/posts/i-have-to-tell-you-about-dependabot.mdx index 66831691..a7731b9b 100644 --- a/src/data/posts/i-have-to-tell-you-about-dependabot.mdx +++ b/src/data/posts/i-have-to-tell-you-about-dependabot.mdx @@ -1,11 +1,10 @@ --- title: 'I have to tell you about Dependabot 🤖' -type: post date: 05-31-2019 updated: 11-13-2021 excerpt: "Dependabot is an automation service that will automatically create PRs to keep your projects' dependencies up to date, and it is really powerful." published: true -path: i-have-to-tell-you-about-dependabot +slug: i-have-to-tell-you-about-dependabot tags: [productivity, tools, npm, javascript] series: "Dependabot" --- diff --git a/src/data/posts/it-was-time.mdx b/src/data/posts/it-was-time.mdx index bad05de5..415294c4 100644 --- a/src/data/posts/it-was-time.mdx +++ b/src/data/posts/it-was-time.mdx @@ -1,11 +1,10 @@ --- title: 'It was time - starting a writing habit to share my expertise' -type: post date: 2-24-2019 excerpt: "I've got some strong opinions on things - I hope that's okay. Thankfully, this is not just another 'hello world' post" coverImagePublicId: posts/it-was-time/cover published: true -path: it-was-time +slug: it-was-time --- ### This is happening. diff --git a/src/data/posts/javascript-filter-boolean.mdx b/src/data/posts/javascript-filter-boolean.mdx index 0a5b4d39..e85b6423 100644 --- a/src/data/posts/javascript-filter-boolean.mdx +++ b/src/data/posts/javascript-filter-boolean.mdx @@ -2,9 +2,9 @@ title: 'JavaScript Tips: Using Array.filter(Boolean)' excerpt: "If you come across array.filter(Boolean) in JavaScript code, never fear! It's a handy bit of functional programming that cleans up arrays with null and undefined values in them." date: 11-12-2021 -type: post + coverImagePublicId: posts/javascript-filter-boolean/cover.webp -path: javascript-filter-boolean +slug: javascript-filter-boolean tags: [dev, javascript, react, functional-programming] published: true series: JavaScript Tips diff --git a/src/data/posts/learn-web3-blockchain-with-buildspace.mdx b/src/data/posts/learn-web3-blockchain-with-buildspace.mdx index b4907a7a..6d788051 100644 --- a/src/data/posts/learn-web3-blockchain-with-buildspace.mdx +++ b/src/data/posts/learn-web3-blockchain-with-buildspace.mdx @@ -2,9 +2,9 @@ title: Learn to build web3 apps on the blockchain with Buildspace excerpt: "Buildspace offers free, online, cohort-based courses on building web3 blockchain apps. If you're interested in dipping your toe into the world of Ethereum apps, the blockchain, or NFTs - it's a great starting point." date: 11-22-2021 -type: post + coverImagePublicId: posts/learn-web3-blockchain-with-buildspace/cover.webp -path: learn-web3-blockchain-with-buildspace +slug: learn-web3-blockchain-with-buildspace tags: [dev, web3, javascript] published: true --- @@ -16,8 +16,8 @@ As I write this post, I'm working through taking my second course on [Buildspace After you create an account and enroll in a course Buildspace, you'll need to do two things before the live kickoff for your particular course: connect an ethereum wallet (which is used to verify that you're completing coursework, and to issue your course certificate NFT), and link your Discord account. You'll use Discord to chat with fellow students during the course, and to ask instructors for help. diff --git a/src/data/posts/live-astro-content-driven-website-rebuild.mdx b/src/data/posts/live-astro-content-driven-website-rebuild.mdx index 1c03f785..b048d8f1 100644 --- a/src/data/posts/live-astro-content-driven-website-rebuild.mdx +++ b/src/data/posts/live-astro-content-driven-website-rebuild.mdx @@ -4,7 +4,7 @@ excerpt: A YouTube live coding stream, learning to build content-driven sites wi date: 2024-03-23 tags: [video, nextjs, typescript, astro] coverImagePublicId: posts/live-astro-content-driven-website-rebuild/cover -path: live-astro-content-driven-website-rebuild +slug: live-astro-content-driven-website-rebuild youTubeId: wyJYInvZya8 --- diff --git a/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx b/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx index ea262144..b8f75ef4 100644 --- a/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx +++ b/src/data/posts/live-coding-resend-broadcasts-nextjs.mdx @@ -1,14 +1,15 @@ --- -title: "Configuring Resend Broadcasts for newsletters on my Next.js website" +title: 'Configuring Resend Broadcasts for newsletters on my Next.js website' excerpt: A coding livestream where integrate Resend's new Broadcasts feature into my next.js site to use for sending newsletters. date: 2024-01-20 tags: [video, nextjs, newsletter, typescript] coverImagePublicId: posts/live-coding-resend-broadcasts-nextjs/cover -path: live-coding-resend-broadcasts-nextjs +slug: live-coding-resend-broadcasts-nextjs youTubeId: qJtVLkdvQUE --- ## Notes about today's Livecoding stream + This is a YouTube Livestream, where I'll be working on integrating Resend Broadcasts into my next.js site to use for sending newsletters. Resend released a new set of features this week that makes it easier to send mail to large audiences. I'll be building with: diff --git a/src/data/posts/live-coding-satori-og-images-nextjs.mdx b/src/data/posts/live-coding-satori-og-images-nextjs.mdx index 8b2be03f..1ab03b32 100644 --- a/src/data/posts/live-coding-satori-og-images-nextjs.mdx +++ b/src/data/posts/live-coding-satori-og-images-nextjs.mdx @@ -4,7 +4,7 @@ excerpt: A YouTube live coding stream where we explore how we use a variety of d date: 2024-01-27 tags: [video, nextjs, typescript, design] coverImagePublicId: posts/live-coding-satori-og-images-nextjs/cover -path: live-coding-satori-og-images-nextjs +slug: live-coding-satori-og-images-nextjs youTubeId: yOVbmdfpkeQ --- diff --git a/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx b/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx index f988948e..45a100ab 100644 --- a/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx +++ b/src/data/posts/make-vs-code-load-faster-by-removing-extensions.mdx @@ -2,9 +2,9 @@ title: How to make VS Code load faster with a little bit of housekeeping excerpt: 'Have you noticed that your favorite IDE has been slow to load lately? Try removing these before losing hope.' date: 11-07-2021 -type: post + coverImagePublicId: posts/make-vs-code-load-faster-by-removing-extensions/cover -path: make-vs-code-load-faster-by-removing-extensions +slug: make-vs-code-load-faster-by-removing-extensions tags: [dev, productivity, javascript] published: true --- diff --git a/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx b/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx index cdd693fb..d8f2f47f 100644 --- a/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx +++ b/src/data/posts/make-vs-code-load-faster-mac-apple-silicon.mdx @@ -2,10 +2,10 @@ title: Massively speed up VS Code loading time on Apple Silicon Macs in one step excerpt: "If you're running an Apple Silicon Mac (with an M1, M1 Pro, or M1 Max chip), you may be able to speed up VS Code massively with a quick update." date: 11-24-2021 -path: make-vs-code-load-faster-mac-apple-silicon +slug: make-vs-code-load-faster-mac-apple-silicon cover: posts/make-vs-code-load-faster-mac-apple-silicon/cover.webp tags: [dev, productivity, javascript] -type: post + published: true --- diff --git a/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx b/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx index 0847a733..87451bb4 100644 --- a/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx +++ b/src/data/posts/mdx-auto-link-headings-with-rehype-slug.mdx @@ -3,7 +3,7 @@ title: 'Next.js with MDX tips: Provide shortcuts to article headings' date: 01-02-2022 excerpt: 'This tutorial will teach you how to automatically add links to heading tags in your mdx posts on your Next.js site with a plugin called rehype-slug. This should work for most nextJS sites that use MDX for content, as well as many other JavaScript-based sites which use MDX.' published: true -path: mdx-auto-link-headings-with-rehype-slug +slug: mdx-auto-link-headings-with-rehype-slug tags: [react, mdx, nextjs] --- @@ -122,7 +122,7 @@ Like I mentioned above, my site uses Chakra UI to compose page layouts. I've add ```jsx import NextLink from 'next/link'; -import { Link, Heading } from '@chakra-ui/react'; +import { Heading, Link } from '@chakra-ui/react'; const CustomHeading = ({ as, id, ...props }) => { if (id) { diff --git a/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx b/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx index 0205606d..33862994 100644 --- a/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx +++ b/src/data/posts/migrate-from-next-sitemap-to-app-directory-sitemap.mdx @@ -2,23 +2,24 @@ title: Migrate from next-sitemap to the Next.js App Directory's sitemap date: 2024-11-23 tags: ['next.js', 'seo'] -path: migrate-from-next-sitemap-to-app-directory-sitemap +slug: migrate-from-next-sitemap-to-app-directory-sitemap coverImagePublicId: posts/migrate-from-next-sitemap-to-app-directory-sitemap/cover excerpt: This post walks through the process of migrating from the next-sitemap library to the Next.js App Directory's sitemap. --- - ## Transitioning from next-sitemap to Next.js's Built-in Sitemap.xml and Robots.txt APIs + In this post, I'll walk you through the process of migrating from the next-sitemap npm package to using Next.js's built-in API for generating sitemap.xml and robots.txt files. This transition not only simplifies our codebase but also leverages the capabilities of Next.js to enhance our SEO strategy. ### Why Migrate? + The [next-sitemap npm package](https://github.com/iamvishnusankar/next-sitemap) was a great tool for generating sitemaps, but as Next.js has evolved, it has introduced built-in support for sitemap and robots file generation. This change allows for a more streamlined approach, reducing dependencies and improving maintainability. Admittedly, I have also been a bit of a laggard in updating my site to the new app directory - this is actually the _very first_ use of App Router on this site! ## What is a sitemap? -A sitemap is a file that lists all the URLs on your site, helping search engines discover and index your content. It provides a roadmap for search engine crawlers to navigate your site and understand its structure. They're also used by other services like Google Search Console to understand your site's structure. If you haven't used Google Search Console, it's an invaluable resource for measuring your site's search engine performance. +A sitemap is a file that lists all the URLs on your site, helping search engines discover and index your content. It provides a roadmap for search engine crawlers to navigate your site and understand its structure. They're also used by other services like Google Search Console to understand your site's structure. If you haven't used Google Search Console, it's an invaluable resource for measuring your site's search engine performance. I've written at length about the value of SEO, including the [SEO tools I used to grow my sites to 20k+ visitors/month](https://mikebifulco.com/posts/seo-tools-for-new-projects). @@ -29,6 +30,7 @@ The robots.txt file is a configuration file used to instruct web crawlers (like ## Removing the next-sitemap dependency The first step is to remove the next-sitemap dependency from your project: + 1. remove `next-sitemap` from your package.json file - make sure to check both `"scripts"` and `"devDependencies"`, and remove it from both places. 2. run `npm install` (or `yarn install` or `pnpm install`) to update your lockfile 3. delete your `next-sitemap.config.js` file if it exists @@ -38,7 +40,6 @@ Side note: [`next-sitemap`](https://www.npmjs.com/package/next-sitemap) was a fa ## Generating a sitemap.xml file with Next.js - Next.js has a great built-in API for generating sitemaps and robots files. We'll use this API to generate our sitemap.xml and robots.txt files. The API is simple to use and allows for customization of the sitemap and robots file generation process. There are a couple choices for [creating a sitemap with Next.js](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap#generating-a-sitemap-using-code-js-ts): @@ -66,7 +67,14 @@ This file is where you will add an entry for every page you want search engines type SitemapFile = Array<{ url: string; lastModified?: string | Date; - changeFrequency?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'; + changeFrequency?: + | 'always' + | 'hourly' + | 'daily' + | 'weekly' + | 'monthly' + | 'yearly' + | 'never'; priority?: number; alternates?: { languages?: Languages; @@ -88,29 +96,29 @@ A couple things to note here, from the [sitemap spec](https://www.sitemaps.org/p For static pages on my site, I opted for a semi-manual approach to adding them to the sitemap. I created an array of strings that represent the routes I want to include in the sitemap, and then mapped over that array to create the sitemap entries. ```tsx - // Define your static routes - const routes: string[] = [ - '', // home page - '/about', - '/integrity', - '/newsletter', - '/podcast', - '/posts', - '/tags', - '/work', - '/shop', - ]; +// Define your static routes +const routes: string[] = [ + '', // home page + '/about', + '/integrity', + '/newsletter', + '/podcast', + '/posts', + '/tags', + '/work', + '/shop', +]; - // Create sitemap entries for static routes - const staticRoutesSitemap = routes.map((route) => ({ - url: `${baseUrl}${route}`, - lastModified: new Date(), - changeFrequency: 'weekly' as const, - priority: route === '' ? 1 : 0.8, - })); +// Create sitemap entries for static routes +const staticRoutesSitemap = routes.map((route) => ({ + url: `${baseUrl}${route}`, + lastModified: new Date(), + changeFrequency: 'weekly' as const, + priority: route === '' ? 1 : 0.8, +})); ``` -When run, this will generate an array of sitemap entries for each of the routes in the `routes` array - note that the homepage has a priority of 1, and all other pages have a priority of 0.8. +When run, this will generate an array of sitemap entries for each of the routes in the `routes` array - note that the homepage has a priority of 1, and all other pages have a priority of 0.8. #### Dynamic pages @@ -125,17 +133,17 @@ I write all my site content in [`MDX`](https://mdxjs.com/docs/what-is-mdx/), and I used a utility function to grab all of the newsletter issues, blog posts, and tags from the `src/data/` directory, and then mapped over each one to create a sitemap entry. For newsletters, that looks like this: ```tsx - // this is a helper function used across my site. - // replace with whatever is needed to fetch from the CMS you use - const newsletters = await getAllNewsletters(); - - // create a sitemap entry for each newsletter - const newslettersSitemap = newsletters.map((newsletter) => ({ - url: `${baseUrl}/newsletter/${newsletter.slug}`, - lastModified: new Date(newsletter.frontmatter.date), - changeFrequency: 'weekly' as const, - priority: 0.8, - })); +// this is a helper function used across my site. +// replace with whatever is needed to fetch from the CMS you use +const newsletters = await getAllNewsletters(); + +// create a sitemap entry for each newsletter +const newslettersSitemap = newsletters.map((newsletter) => ({ + url: `${baseUrl}/newsletter/${newsletter.slug}`, + lastModified: new Date(newsletter.frontmatter.date), + changeFrequency: 'weekly' as const, + priority: 0.8, +})); ``` The same pattern is used for blog posts and tags. @@ -169,7 +177,7 @@ export default async function sitemap(): Promise { priority: 0.8, })); - const { allTags } = await getAllTags(); + const allTags = await getAllTags(); const tagsSitemap = allTags.map((tag) => ({ url: `${baseUrl}/tags/${tag}`, lastModified: new Date(), @@ -214,11 +222,10 @@ Fire up `next dev` and navigate to `/sitemap.xml` - you should see your sitemap! - ## Creating a robots.txt file Next up, robots.txt. This is a _very_ similar process - we will follow the [docs for robots.txt](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots) from Next.js. @@ -229,7 +236,6 @@ This is a deceptively important file for your website's SEO. It is a really good **🚨 Important: ** If you are running a non-production environment, you will need to add a check to your robots.ts file to disallow all requests. This is because non-production environments often have URLs that you don't want search engines to index - it would be bad news if Google decided that a deploy preview of your site should rank higher than your production site! - ### Robots.ts: The complete file Much like static pages for the sitemap, you will need to add an entry for every path you don't want search engines to index. @@ -296,6 +302,7 @@ Now that everything's done, make absolutely sure you've got everything configure ```md **Before going live**, verify that: + - robots.txt - [ ] visit `/robots.txt` and verify that it exists - [ ] check that there is an entry for your sitemap that contains a full URL, including the protocol (`https://`) @@ -307,10 +314,12 @@ Now that everything's done, make absolutely sure you've got everything configure - [ ] dynamic pages (newsletters, blog posts, tags) **While testing deploy previews of your site**, verify that: + - [ ] your sitemap is being generated correctly - [ ] your robots.txt is being generated so that it **disallows all requests** in deploy previews **After going live**, check that: + - [ ] your sitemap is being picked up and read by [Google Search Console](https://search.google.com/search-console) - [ ] use something like the [Ahrefs Webmaster Tools Site Audit](https://ahrefs.com/signup?plan=awt&return=website-checker) to scan your site and verify that it is indexed correctly and that there aren't any issues. ``` diff --git a/src/data/posts/migrate-gatsby-to-nextjs-apisyouwonthate-com.mdx b/src/data/posts/migrate-gatsby-to-nextjs-apisyouwonthate-com.mdx index 6b504ee0..c820a898 100644 --- a/src/data/posts/migrate-gatsby-to-nextjs-apisyouwonthate-com.mdx +++ b/src/data/posts/migrate-gatsby-to-nextjs-apisyouwonthate-com.mdx @@ -4,7 +4,7 @@ excerpt: I migrated apisyouwonthate.com, a site with 20k+ monthly visits, from G tags: [gatsby, nextjs, dev, javascript, react] date: 03-02-2022 published: true -path: migrate-gatsby-to-nextjs-apisyouwonthate-com +slug: migrate-gatsby-to-nextjs-apisyouwonthate-com --- [APIs You Won't Hate](https://apisyouwonthate.com) is a resource for developers who want to learn how to build APIs that are secure, performant, and easy to use. I've been helping to run and maintain the site since roughly the beginning of 2018, when I rebuilt it from a [Jekyll](https://jekyllrb.com/) site to a static site with [Gatsby](https://www.gatsbyjs.com/). This was a huge leap forward for the site - as we were growing the community and adding resources for API developers regularly, it became apparent that we were going to need to support some features that I wasn't really interested in building on top of Jekyll - support for multiple authors, an image optimzation solution. diff --git a/src/data/posts/moving-to-mdx.mdx b/src/data/posts/moving-to-mdx.mdx index 1d44fa76..e0cf853d 100644 --- a/src/data/posts/moving-to-mdx.mdx +++ b/src/data/posts/moving-to-mdx.mdx @@ -1,10 +1,10 @@ --- title: 'MDX - I should have done this sooner' -type: post + date: 07-22-2020 excerpt: I added support for mdx to my site, and it's made life much bettter. published: true -path: moving-to-mdx +slug: moving-to-mdx tags: [productivity, dev] --- diff --git a/src/data/posts/my-favorite-design-problem.mdx b/src/data/posts/my-favorite-design-problem.mdx index c04e1a60..951a469d 100644 --- a/src/data/posts/my-favorite-design-problem.mdx +++ b/src/data/posts/my-favorite-design-problem.mdx @@ -2,10 +2,10 @@ title: Stop speaking into the top of your Blue Yeti Microphone excerpt: "No, really, it doesn't work that way. It will sound loads better if you stop talking into the top of your Blue Yeti mic. It's an easy mistake to make." date: 02-28-2019 -type: post + coverImagePublicId: 'posts/my-favorite-design-problem/cover' published: true -path: my-favorite-design-problem +slug: my-favorite-design-problem tags: [design] --- diff --git a/src/data/posts/next-js-github-bio-about-page.mdx b/src/data/posts/next-js-github-bio-about-page.mdx index 87115b62..6fa8b9a0 100644 --- a/src/data/posts/next-js-github-bio-about-page.mdx +++ b/src/data/posts/next-js-github-bio-about-page.mdx @@ -4,7 +4,7 @@ excerpt: Learn how to sync your About page and your personal GitHub README bio o tags: [nextjs, github, javascript, react, webdev] date: 12-9-2022 published: true -path: next-js-github-bio-about-page +slug: next-js-github-bio-about-page --- ## Your about page tells the world who you are, and what matters to you @@ -98,15 +98,14 @@ To get the raw URL for your README, go to your GitHub profile, and click on the 5. Finally, you can render your README in your About page using MDX Remote. ```jsx +// If you want to have MDX render custom components, you can import them here +import { components } from '~/utils/mdx-components'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; // For sake of example, we'll use a Layout component to represent the visual layout of the page import Layout from '../components/Layout'; -// If you want to have MDX render custom components, you can import them here -import { components } from '~/utils/mdx-components'; - export async function getStaticProps() { // fetch personal README from github const res = await fetch( diff --git a/src/data/posts/nullish-coalescing-javascript.mdx b/src/data/posts/nullish-coalescing-javascript.mdx index 064b5cc9..435b591e 100644 --- a/src/data/posts/nullish-coalescing-javascript.mdx +++ b/src/data/posts/nullish-coalescing-javascript.mdx @@ -2,9 +2,9 @@ title: 'JavaScript Tips: Nullish Coalescing (??)' excerpt: "Let's take a look at the Nullish Coalescing operator (??) in JavaScript, which returns the right operand if the left is null or undefined." date: 11-15-2021 -type: post + coverImagePublicId: posts/nullish-coalescing-javascript/cover.webp -path: nullish-coalescing-javascript +slug: nullish-coalescing-javascript tags: [dev, javascript, react] published: true series: JavaScript Tips diff --git a/src/data/posts/on-normalcy.mdx b/src/data/posts/on-normalcy.mdx index 1133ff47..fdf46a94 100644 --- a/src/data/posts/on-normalcy.mdx +++ b/src/data/posts/on-normalcy.mdx @@ -1,10 +1,10 @@ --- title: 'On normalcy, daily routines, and the pandemic' -type: post + date: 04-21-2020 excerpt: "On my walk this morning, I found myself wondering what it's going to be like when things go back to normal." published: true -path: on-normalcy +slug: on-normalcy tags: [tiny-improvements, productivity] --- diff --git a/src/data/posts/orton-effect-css-react.mdx b/src/data/posts/orton-effect-css-react.mdx index 7a391981..d447ecdf 100644 --- a/src/data/posts/orton-effect-css-react.mdx +++ b/src/data/posts/orton-effect-css-react.mdx @@ -3,7 +3,7 @@ title: The Orton Effect - dreamy photo effect in CSS and React excerpt: Implement the Orton Effect in CSS and React. The Orton Effect creates a surreal, dreamy image effect, named after photographer Michael Orton. coverImagePublicId: posts/orton-effect-css-react/cover tags: [css, react, javascript, design] -path: orton-effect-css-react +slug: orton-effect-css-react date: 09-09-2022 published: true --- diff --git a/src/data/posts/own-your-work-with-canonical-tags.mdx b/src/data/posts/own-your-work-with-canonical-tags.mdx index b7ff1de2..abcc18b1 100644 --- a/src/data/posts/own-your-work-with-canonical-tags.mdx +++ b/src/data/posts/own-your-work-with-canonical-tags.mdx @@ -2,7 +2,7 @@ title: 'SEO for Devs: Own your work with canonical tags' excerpt: 'Canonical tags are a powerful tool to help search engines understand which version of a page is the original one. This can help you avoid duplicate content issues and ensure that your content gets the credit it deserves.' tags: [seo, nextjs] -path: own-your-work-with-canonical-tags +slug: own-your-work-with-canonical-tags coverImagePublicId: posts/own-your-work-with-canonical-tags/cover date: 07-12-2024 --- @@ -167,32 +167,31 @@ If your Next.js app is built using the App Router, implementation is slightly di To add a canonical tag with this method, you'll do something like this: ```tsx -import type { Metadata, ResolvingMetadata } from 'next' +import type { Metadata, ResolvingMetadata } from 'next'; type Props = { - params: { id: string } - searchParams: { [key: string]: string | string[] | undefined } -} + params: { id: string }; + searchParams: { [key: string]: string | string[] | undefined }; +}; export async function generateMetadata( { params, searchParams }: Props, parent: ResolvingMetadata ): Promise { // read route params - const slug = params.slug + const slug = params.slug; return { metadataBase: new Url('https://yoursite.com'), // Next will use this to make complete URLs from relative paths alternates: { canonical: `/articles/${slug}`, }, - } + }; } export default function Page({ params, searchParams }: Props) { /* etc */ } - ``` ### Setting a canonical URL on Dev.to diff --git a/src/data/posts/picking-apart-javascript-import.mdx b/src/data/posts/picking-apart-javascript-import.mdx index 5ac87ba3..aba9fb0f 100644 --- a/src/data/posts/picking-apart-javascript-import.mdx +++ b/src/data/posts/picking-apart-javascript-import.mdx @@ -1,10 +1,10 @@ --- title: 'Picking apart JavaScript import syntax' -type: post + date: 04-17-2019 excerpt: 'Part 2 in a series of posts on destructuring syntax for JavaScript and Node.' published: true -path: picking-apart-javascript-import +slug: picking-apart-javascript-import tags: [javascript, dev, npm] --- @@ -43,6 +43,7 @@ This line of code creates a reference to everything made available in the `momen ```js import moment from 'moment'; + console.log(moment().get('year')); // 2019 ``` @@ -55,6 +56,7 @@ It may be confusing, but you absolutely could do this, if the this name made mor ```js import ThatReallyUsefulDateLibrary from 'moment'; + console.log(ThatReallyUsefulDateLibrary().get('year')); // 2019 ``` @@ -143,7 +145,7 @@ import { Layout, Button as SuperButton } from '../components'; The best isn't alway last, but this is certainly the last example I've got to share today: ```js -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; ``` If you've been playing along at home, this should all be familiar now - we're grabbing the default export from `react`, which we've put into the variable `react`.  We also destructured `useState` and `useEffect` from _the same library_.  If you're asking yourself "Well couldn't we also access `useState` as a child of `React`"? The answer is - well, actually, yeah! diff --git a/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx b/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx index 99663222..58389d2a 100644 --- a/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx +++ b/src/data/posts/plan-for-things-to-go-wrong-in-your-web-app.mdx @@ -1,10 +1,10 @@ --- title: 'Help your users when your web app crashes' -type: post + date: 04-21-2020 excerpt: "This post came from my work on Surviving Other People's APIs. I've been working on a chapter on Async - the content below came from that writing, but doesn't quite make sense in the context of the book. I didn't want to scrap it entirely, so it's found its way into a blog post. I'd love to know what you think!" published: true -path: plan-for-things-to-go-wrong-in-your-web-app +slug: plan-for-things-to-go-wrong-in-your-web-app tags: [webdev, book] --- diff --git a/src/data/posts/posthog-ab-test-results-are-in.mdx b/src/data/posts/posthog-ab-test-results-are-in.mdx index 52b8cd99..40c45da2 100644 --- a/src/data/posts/posthog-ab-test-results-are-in.mdx +++ b/src/data/posts/posthog-ab-test-results-are-in.mdx @@ -1,7 +1,7 @@ --- title: The results of my PostHog AB Test are in! excerpt: I dive into the data from my PostHog AB Test and show you how to interpret the results. -path: posthog-ab-test-results-are-in +slug: posthog-ab-test-results-are-in date: 2024-09-30 coverImagePublicId: posts/posthog-ab-test-results-are-in/cover tags: [typescript, nextjs, founder, posthog, video] diff --git a/src/data/posts/posthog-helped-me-find-a-bug.mdx b/src/data/posts/posthog-helped-me-find-a-bug.mdx index 7995bfb7..4e3b8cb5 100644 --- a/src/data/posts/posthog-helped-me-find-a-bug.mdx +++ b/src/data/posts/posthog-helped-me-find-a-bug.mdx @@ -1,7 +1,7 @@ --- title: How I found a missing change on my next.js site with PostHog excerpt: I tackle a significant drop in my newsletter subscribers. Join me as I dive into the data using PostHog, identify and fix critical errors, and ultimately switch from ConvertKit to Resend. -path: posthog-helped-me-find-a-bug +slug: posthog-helped-me-find-a-bug date: 2024-09-02 coverImagePublicId: posts/posthog-helped-me-find-a-bug/cover tags: [typescript, nextjs, founder, posthog, video] diff --git a/src/data/posts/product-marketing-defy-expectations.mdx b/src/data/posts/product-marketing-defy-expectations.mdx index c38f2b1e..c49d3f87 100644 --- a/src/data/posts/product-marketing-defy-expectations.mdx +++ b/src/data/posts/product-marketing-defy-expectations.mdx @@ -2,10 +2,10 @@ title: 'Hey, influencers: be careful with ChatGPT' excerpt: 'Powerful AI tools like ChatGPT make it super easy to generate inaccurate and dangerous and inaccurate content. Relying heavily on AI to write can be messy.' date: 11-29-2021 -path: product-marketing-defy-expectations +slug: product-marketing-defy-expectations cover: posts/product-marketing-defy-expectations/cover.webp tags: [design, marketing, ux, ai] -type: post + published: true podcastUrl: https://share.transistor.fm/e/9a4c213c --- diff --git a/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx b/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx index f41a1e49..68bd4778 100644 --- a/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx +++ b/src/data/posts/promise-all-settled-pt-2-its-partly-settled.mdx @@ -1,10 +1,10 @@ --- title: "Promise.allSettled() Pt.2 - it's partly settled!" -type: post + date: 04-26-2019 excerpt: 'This is a follow-up to my first post on the upcoming Promise.allSettled() function, coming soon to a node application near you. ' published: true -path: promise-all-settled-pt-2-its-partly-settled +slug: promise-all-settled-pt-2-its-partly-settled tags: [npm, javascript, dev, react] --- @@ -32,9 +32,9 @@ It is a polyfill of the JavaScript standard library, which supports: - ECMAScript standard library proposals. - Some WHATWG / W3C standards (cross-platform or closely related ECMAScript). -It is maximally modular: you can easily choose to load only the features you will be using. - It can be used without polluting the global namespace. - It is [tightly integrated with `babel`: this allows many optimizations of `core-js` import.](https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#Babel) +It is maximally modular: you can easily choose to load only the features you will be using. +It can be used without polluting the global namespace. +It is [tightly integrated with `babel`: this allows many optimizations of `core-js` import.](https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#Babel) diff --git a/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx b/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx index 55d67e10..72962ed0 100644 --- a/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx +++ b/src/data/posts/publish-your-newsletter-with-convertkit-api-next-js.mdx @@ -5,7 +5,7 @@ tags: [react, nextjs, convertkit, tutorial, api] date: 09-23-2022 published: true coverImagePublicId: 'posts/publish-your-newsletter-with-convertkit-api-next-js/cover.png' -path: publish-your-newsletter-with-convertkit-api-next-js +slug: publish-your-newsletter-with-convertkit-api-next-js --- ## I publish a newsletter called Tiny Improvements @@ -93,8 +93,8 @@ it focused on data loading logic._ ```jsx import { Link } from 'next/link'; -import { getAllNewsletters } from '../../utils/convertKit'; +import { getAllNewsletters } from '../../utils/convertKit'; import slugify from '../../utils/slugify'; export const getStaticProps = async () => { @@ -159,6 +159,7 @@ Now that we have a page listing all published newsletters, we need to create a p ```jsx import { useEffect } from 'react'; + import { broadcastTemplateParse, getAllNewsletters, @@ -227,6 +228,7 @@ We're also using 2 helper functions, which are defined in `/src/utils/convertKit ```js import { Liquid } from 'liquidjs'; + const engine = new Liquid(); export const broadcastTemplateParse = ({ template, data }) => { diff --git a/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx b/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx index d16323fc..eaeacb6a 100644 --- a/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx +++ b/src/data/posts/publish-your-newsletter-with-convertkit-api-remix.mdx @@ -5,7 +5,7 @@ tags: [react, remix, convertkit, tutorial, api] date: 09-19-2022 published: true coverImagePublicId: 'posts/publish-your-newsletter-with-convertkit-api-remix/cover.png' -path: publish-your-newsletter-with-convertkit-api-remix +slug: publish-your-newsletter-with-convertkit-api-remix --- ## I publish a newsletter called Tiny Improvements @@ -90,9 +90,8 @@ it focused on data loading logic._ ```jsx import { useLoaderData } from '@remix-run/react'; - +import { NewsletterCTA, NewsletterListItem } from '~/components'; import { getAllNewsletters } from '~/lib/util/convertKit.server'; -import { NewsletterListItem, NewsletterCTA } from '~/components'; export const loader = async ({ params, request }) => { return { @@ -127,13 +126,12 @@ Now that we have a page listing all published newsletters, we need to create a p ```jsx import { useLoaderData } from '@remix-run/react'; +import NewsletterCTA from '~/components'; +import config from '~/config'; import { broadcastTemplateParse, newsletterHasValidThumbnail, } from '~/lib/util/convertKit'; -import NewsletterCTA from '~/components'; -import config from '~/config'; - import { getNewsletter } from '~/lib/util/convertKit.server'; // render meta tags on page for SEO @@ -201,6 +199,7 @@ We're also using 2 helper functions, which are defined in `/app/lib/util/convert ```js import { Liquid } from 'liquidjs'; + const engine = new Liquid(); export const broadcastTemplateParse = ({ template, data }) => { diff --git a/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx b/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx index 4cc5d9de..27b75e70 100644 --- a/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx +++ b/src/data/posts/quick-tip-uninstall-postgres-from-your-mac.mdx @@ -1,10 +1,10 @@ --- title: "Quick tip: Here's how to uninstall Postgres from your Mac" -type: post + date: 03-19-2019 excerpt: "Uninstalling Postgres database software from a computer running MacOS isn't super straightforward - this is what I found helpful." published: true -path: quick-tip-uninstall-postgres-from-your-mac +slug: quick-tip-uninstall-postgres-from-your-mac tags: [dev] --- diff --git a/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx b/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx index 4f4436f9..156dc783 100644 --- a/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx +++ b/src/data/posts/reclaimed-10gb-of-disk-space-from-node-modules.mdx @@ -1,10 +1,10 @@ --- title: I reclaimed 10GB of disk space from node_modules -type: post + date: 04-02-2019 excerpt: "If you're not careful, your node projects can start to fill all the spare disk space on your computer. This one weird trick (lol) can help avoid that." published: true -path: reclaimed-10gb-of-disk-space-from-node-modules +slug: reclaimed-10gb-of-disk-space-from-node-modules tags: [javascript, dev, tools, productivity, npm] --- diff --git a/src/data/posts/refactoring-typescript-react-components-vscode.mdx b/src/data/posts/refactoring-typescript-react-components-vscode.mdx index f4b8cddd..a7bd693e 100644 --- a/src/data/posts/refactoring-typescript-react-components-vscode.mdx +++ b/src/data/posts/refactoring-typescript-react-components-vscode.mdx @@ -3,7 +3,7 @@ title: 'Refactoring TypeScript React components in VS Code' excerpt: 'Extracting types from a JavaScript object is a common task in TypeScript. This post shows how to do it with VS Code.' tags: [vscode, typescript, react, nextjs] coverImagePublicId: 'posts/refactoring-typescript-react-components-vscode/cover' -path: refactoring-typescript-react-components-vscode +slug: refactoring-typescript-react-components-vscode date: 02-03-2023 published: true --- diff --git a/src/data/posts/remote-work-and-the-third-place.mdx b/src/data/posts/remote-work-and-the-third-place.mdx index 001eebc5..dc15541b 100644 --- a/src/data/posts/remote-work-and-the-third-place.mdx +++ b/src/data/posts/remote-work-and-the-third-place.mdx @@ -4,7 +4,7 @@ excerpt: The Third Place is thought of as a space different from home (the first tags: [philosophy, design, remote-work] date: 08-29-2022 published: true -path: remote-work-and-the-third-place +slug: remote-work-and-the-third-place coverImagePublicId: 'posts/remote-work-and-the-third-place/cover' podcastUrl: https://share.transistor.fm/e/0532816b --- diff --git a/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx b/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx index 854cec1d..0d158621 100644 --- a/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx +++ b/src/data/posts/reset-your-open-graph-embeds-on-linkedin-twitter-facebook.mdx @@ -1,11 +1,11 @@ --- title: How to reset your Open Graph embed on LinkedIn, Twitter, and Facebook -type: post + date: 09-17-2020 excerpt: "If you're dealing with Open Graph metadata for your site, and you can't figure out how to get your OG content to update after you make changes, this is your guide." coverImagePublicId: gatsby-cloudinary/ogShareReset published: true -path: reset-your-open-graph-embeds-on-linkedin-twitter-facebook +slug: reset-your-open-graph-embeds-on-linkedin-twitter-facebook tags: [seo, tools, gatsby, developer] --- diff --git a/src/data/posts/run-dependabot-locally.mdx b/src/data/posts/run-dependabot-locally.mdx index ca87dc21..671d875c 100644 --- a/src/data/posts/run-dependabot-locally.mdx +++ b/src/data/posts/run-dependabot-locally.mdx @@ -3,7 +3,7 @@ title: 'How to run dependabot locally on your projects' excerpt: Since its release, teams around the world have been using dependabot to automate the process of keeping your project's dependencies up to date. In this article, I'll show you how you can run dependabot on the command line using dependabot-core. tags: [dev, javascript, react] published: true -path: run-dependabot-locally +slug: run-dependabot-locally coverImagePublicId: posts/run-dependabot-locally/cover.webp date: 12-10-2021 series: "Dependabot" diff --git a/src/data/posts/seed-your-supabase-database.mdx b/src/data/posts/seed-your-supabase-database.mdx index a3737de9..f7e26d46 100644 --- a/src/data/posts/seed-your-supabase-database.mdx +++ b/src/data/posts/seed-your-supabase-database.mdx @@ -3,7 +3,7 @@ title: Seed your Supabase database with this simple pattern excerpt: 'Learn how to seed your Supabase database with this simple pattern.' date: 07-23-2024 tags: [supabase, database, typescript, postgres] -path: seed-your-supabase-database +slug: seed-your-supabase-database coverImagePublicId: posts/seed-your-supabase-database/cover --- @@ -34,26 +34,26 @@ For this example, we will use a simplified Drizzle ORM Database schema with two // schema.ts // ...other tables and imports above -export const chefs = createTable("chefs", { - id: serial("id").primaryKey(), - name: varchar("name", { length: 256 }).notNull(), - email: varchar("email", { length: 256 }).notNull(), - phone: varchar("phone", { length: 256 }), - address: text("address"), +export const chefs = createTable('chefs', { + id: serial('id').primaryKey(), + name: varchar('name', { length: 256 }).notNull(), + email: varchar('email', { length: 256 }).notNull(), + phone: varchar('phone', { length: 256 }), + address: text('address'), }); -export const recipeTypes = createTable("project_type", { - id: serial("id").primaryKey(), - name: varchar("name", { length: 256 }).notNull(), - description: text("description"), +export const recipeTypes = createTable('project_type', { + id: serial('id').primaryKey(), + name: varchar('name', { length: 256 }).notNull(), + description: text('description'), }); -export const recipes = createTable("recipes", { - id: serial("id").primaryKey(), - name: varchar("name", { length: 256 }).notNull(), - description: text("description"), - recipeTypeId: integer("recipeTypeId").references(recipeTypes.id), - recipeChefId: integer("recipeChefId").references(chefs.id), +export const recipes = createTable('recipes', { + id: serial('id').primaryKey(), + name: varchar('name', { length: 256 }).notNull(), + description: text('description'), + recipeTypeId: integer('recipeTypeId').references(recipeTypes.id), + recipeChefId: integer('recipeChefId').references(chefs.id), }); ``` @@ -88,9 +88,9 @@ The string returned by each `SeedFunction`'s promise is a message that will be l The simplest option is tables with predefined or hand-written data. For these, I more-or-less hand-write objects to stick into the database. Here's an example of how to the `recipeTypes` table: ```tsx -import type { SeedFunction } from "../seed"; -import { recipeTypes } from "../schema"; -import db from "../db"; +import db from '../db'; +import { recipeTypes } from '../schema'; +import type { SeedFunction } from '../seed'; type RecipeTypeRow = { name: string; @@ -99,9 +99,9 @@ type RecipeTypeRow = { // note the export: we will use this later export const RecipeTypes: SeedFunction = { - "Breakfast": { id: 1, name: "Breakfast", description: "Breakfast recipes" }, - "Lunch": { id: 2, name: "Lunch", description: "Lunch recipes" }, - "Dinner": { id: 3, name: "Dinner", description: "Dinner recipes" }, + Breakfast: { id: 1, name: 'Breakfast', description: 'Breakfast recipes' }, + Lunch: { id: 2, name: 'Lunch', description: 'Lunch recipes' }, + Dinner: { id: 3, name: 'Dinner', description: 'Dinner recipes' }, } as const; const seedRecipeTypes = async () => { @@ -128,10 +128,11 @@ For tables that can use randomized data, a slightly different approach is used w Here's how to populate the `Chefs` table with a list of fake chefs: ```tsx -import faker from "faker"; -import { chefs } from "../schema"; -import db from "../db"; -import type { SeedFunction } from "../seed"; +import faker from 'faker'; + +import db from '../db'; +import { chefs } from '../schema'; +import type { SeedFunction } from '../seed'; type ChefRow = { name: string; @@ -162,10 +163,10 @@ If you have tables with relationships, you can seed related data by using the `i Here's an example of how you might seed the `recipes` table with related data: ```tsx -import { recipes } from "../schema"; -import db from "../db"; -import { RecipeTypes } from "./recipeTypes"; -import type { SeedFunction } from "../seed"; +import db from '../db'; +import { recipes } from '../schema'; +import type { SeedFunction } from '../seed'; +import { RecipeTypes } from './recipeTypes'; type RecipeRow = { name: string; @@ -176,16 +177,31 @@ type RecipeRow = { const seedRecipes: SeedFunction = async () => { const data: RecipeRow[] = [ { - name: "Pancakes", - description: "Delicious pancakes", + name: 'Pancakes', + description: 'Delicious pancakes', // use the id from the RecipeTypes object we exported earlier recipeTypeId: RecipeTypes.Breakfast.id, // since it can be any chef, we'll just use the first one recipeChefId: 1, }, - { name: "Spaghetti", description: "Classic spaghetti", recipeTypeId: RecipeTypes.Dinner.id, recipeChefId: 2 }, - { name: "Roast chicken", description: "Juicy roast chicken", recipeTypeId: RecipeTypes.Dinner.id, recipeChefId: 3 }, - { name: "Sandwich", description: "Good ol' ham & swiss", recipeTypeId: RecipeTypes.Lunch.id, recipeChefId: 4 }, + { + name: 'Spaghetti', + description: 'Classic spaghetti', + recipeTypeId: RecipeTypes.Dinner.id, + recipeChefId: 2, + }, + { + name: 'Roast chicken', + description: 'Juicy roast chicken', + recipeTypeId: RecipeTypes.Dinner.id, + recipeChefId: 3, + }, + { + name: 'Sandwich', + description: "Good ol' ham & swiss", + recipeTypeId: RecipeTypes.Lunch.id, + recipeChefId: 4, + }, ]; await db.from(recipes).insert(data); diff --git a/src/data/posts/self-healing-urls-nextjs-seo.mdx b/src/data/posts/self-healing-urls-nextjs-seo.mdx index 967105af..a054dc46 100644 --- a/src/data/posts/self-healing-urls-nextjs-seo.mdx +++ b/src/data/posts/self-healing-urls-nextjs-seo.mdx @@ -4,10 +4,9 @@ excerpt: Set up self-healing URLs with the App Router in Next.js for better SEO, date: 2023-12-02 tags: [nextjs, seo, typescript] coverImagePublicId: posts/self-healing-urls-nextjs-seo/cover -path: self-healing-urls-nextjs-seo +slug: self-healing-urls-nextjs-seo --- - _note: This post is inspired by a great video from YouTuber Aaron Francis: [Make self-healing URLs with Laravel](https://www.youtube.com/watch?v=a6lnfyES-LA). For all my PHP homies - go check that video out. It's great!_ @@ -117,7 +116,7 @@ export const getAllPosts = async () => { // this is just a placeholder, replace with your own data // shout out to https://jsonplaceholder.typicode.com/ - what a great service! const postsResponse = await fetch( - 'https://jsonplaceholder.typicode.com/posts', + 'https://jsonplaceholder.typicode.com/posts' ); const posts = (await postsResponse.json()) as Post[]; @@ -169,7 +168,6 @@ export const getPostSlug = (post: Post) => { // given any slug, try to extract an id from it export const getIdFromSlug = (slug: string) => slug.split('-').pop(); - ``` ### Generate a sitemap with the correct canonical URL for each post @@ -186,13 +184,13 @@ A canonical tag looks like this: ``` - So, this is what sitemap.ts looks like: ```ts -import { getAllPosts, getPostSlug } from '@/utils/posts'; import { MetadataRoute } from 'next'; +import { getAllPosts, getPostSlug } from '@/utils/posts'; + export default async function sitemap(): MetadataRoute.Sitemap { const allPosts = await getAllPosts(); @@ -212,7 +210,6 @@ export default async function sitemap(): MetadataRoute.Sitemap { Now, if you run your app and visit `https://localhost:3000/sitemap.xml`, you should see a sitemap that includes an entry for each post, with the correct canonical URL specified. - ### Setting up page.tsx: where the magic happens In the file `app/posts/[slug]/page.tsx`, we use the [Next.js App Router's `generateStaticParams` function](https://nextjs.org/docs/app/building-your-application/routing/dynamic-routes#generating-static-params) to generate URLs for all posts. This function is called at build time, and it returns an array of objects that contain the `slug` for each post. The `slug` is used to generate the URL for each post page. @@ -221,7 +218,6 @@ Then, in the server function which renders the post page, we check whether the c We also use the [Next.js App Router's `generateMetadata` function](https://nextjs.org/docs/app/next-script#generating-metadata) to generate metadata for each post. This function is called at build time, and it returns an object that contains the `title` and `alternates` for each post. The `alternates` object contains the `canonical` URL for each post, which is used to tell search engines which URL is the correct one for each post. **This is critical for SEO purposes** - it helps Google verify that when your page loads, the URL in the address bar matches the URL that Google has indexed for that page. - ```tsx import { Metadata, ResolvingMetadata } from 'next'; import { RedirectType, notFound, redirect } from 'next/navigation'; @@ -301,8 +297,6 @@ Another important note - _entire_ component is rendered server-side - visitors t Instead of a screen flash, your users get a great experience: they can try to load an incorrect URL, and as long as the URL ends with a hyphen followed by the `id`, they'll be redirected to the correct URL seamlessly, like magic. If the URL doesn't match the pattern, they'll be redirected to the 404 page. - - ### Not Found: a 404 page for posts that don't exist In `app/not-found.tsx`, create a 404 page that will render if someone tries to visit a post page with an id that doesn't exist in the url. [Next provides a `notFound` function](https://nextjs.org/docs/app/api-reference/functions/not-found) that will return a 404 page. We used this in page.tsx to return a 404 page if the post doesn't exist. You'll want to make this page look nice and include some helpful text, but for the sake of this example, we'll keep it simple: @@ -343,7 +337,6 @@ Because making this work is dependent on your specific setup, I'm not going to i - It's a good to make sure that you don't accidentally create a redirect loop. If the new URL for a given path is the same as any of the prior URLs, don't add a new redirect, and remove any existing redirects for that path. - You may need to kick off a rebuild of your site to make sure that the new redirect is picked up by your app. If you're using Vercel, you can use their [API to trigger a rebuild](https://vercel.com/docs/api#endpoints/deployments/redeploy-all-deployments) when a post is saved. - ## Summary: self-healing URLs in Next.js In this post, we learned how to set up self-healing URLs in Next.js. We used the App Router to generate URLs for all posts, and we used the App Router's `generateMetadata` function to generate metadata for each post. This function is called at build time, and it returns an object that contains the `title` and `alternates` for each post. The `alternates` object contains the `canonical` URL for each post, which is used to tell search engines which URL is the correct one for each post. **This is great for SEO purposes** - it helps Google verify that when your page loads, the URL in the address bar matches the URL that Google has indexed for that page. It also has usability benefits: if your post's title ever changes, the URL will magically update itself to match the new title. Additionally, people who visit your page while using a screen reader will have a better experience, because the URL will always match the content on the page. @@ -354,9 +347,6 @@ Not too shabby! You can find the code for this tutorial on [GitHub at mbifulco/next-self-healing-urls-app-router](https://github.com/mbifulco/next-self-healing-urls-app-router). If you enjoyed this post, please consider giving it a star ⭐️ on GitHub! - ## PS: What about using the Next.js Pages router? This post _started_ as a tutorial for using the Next.js Pages router to create self-healing URLs, but I ran into a few issues that would make it really challenging to recommend going down this path if you're using the pages router (which is actually what [mikebifulco.com uses](https://github.com/mbifulco/blog)!). For that reason, I think **this is a feature you should only add if you're using the App Router**. I'm including the draft of my original post here [in a gist](https://gist.github.com/mbifulco/daf23aed0d827ec6317962691cb9cd0d) in case anyone wants to take a stab at it. If you figure it out, please let me know! - - diff --git a/src/data/posts/semantic-html-heading-subtitle.mdx b/src/data/posts/semantic-html-heading-subtitle.mdx index c9c0cb25..785b3c4b 100644 --- a/src/data/posts/semantic-html-heading-subtitle.mdx +++ b/src/data/posts/semantic-html-heading-subtitle.mdx @@ -5,7 +5,7 @@ date: 07-05-2022 published: true coverImagePublicId: 'posts/semantic-html-heading-subtitle/cover.png' tags: [react, html, seo, tutorial] -path: semantic-html-heading-subtitle +slug: semantic-html-heading-subtitle --- ## Semantic HTML makes your sites better @@ -56,7 +56,10 @@ The first version of this article was wrong! I previously recommended using the MDN specifically recommends against <hgroup> because assistive technologies don't support it.

    - — EQV Analytics 🇺🇦 (@AnalyticsEqv) July 5, 2022 + — EQV Analytics 🇺🇦 (@AnalyticsEqv){' '} + + July 5, 2022 +