From 7c3b24f22646c2a650432ca5e9acc852c93f4947 Mon Sep 17 00:00:00 2001 From: JDLanctot Date: Tue, 16 Jan 2024 12:07:39 -0500 Subject: [PATCH 1/3] Initializing commit with required changes for this feature --- .env.example | 7 +- next.config.js | 33 + package.json | 1 + pnpm-lock.yaml | 641 ++++++++++++++---- .../(checkout)/checkout/[storeId]/page.tsx | 121 +--- src/components/checkout/cart-sheet.tsx | 3 +- src/components/checkout/checkout-card.tsx | 3 + src/components/checkout/checkout-content.tsx | 165 +++++ src/components/checkout/checkout-form.tsx | 111 ++- .../checkout/shipping-line-item.tsx | 54 ++ src/env.mjs | 2 + src/lib/actions/easypost.ts | 57 ++ src/lib/easypost.ts | 5 + src/lib/validations/easypost.ts | 34 + src/types/index.ts | 43 ++ 15 files changed, 1061 insertions(+), 219 deletions(-) create mode 100644 src/components/checkout/checkout-content.tsx create mode 100644 src/components/checkout/shipping-line-item.tsx create mode 100644 src/lib/actions/easypost.ts create mode 100644 src/lib/easypost.ts create mode 100644 src/lib/validations/easypost.ts diff --git a/.env.example b/.env.example index 9a65add25..dcf6b2b47 100644 --- a/.env.example +++ b/.env.example @@ -22,7 +22,7 @@ DATABASE_URL="mysql://YOUR_MYSQL_URL_HERE?ssl={"rejectUnauthorized":true}" NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="pk_test_" CLERK_SECRET_KEY="sk_test_" -# React email (resend) +# React email (resend) # Resend API Key found at https://resend.com/api-keys RESEND_API_KEY="re_" # We need to register a domain with Resend to send emails from @@ -41,11 +41,14 @@ STRIPE_API_KEY="sk_test_" # Stripe Webhook Secret found at https://dashboard.stripe.com/test/webhooks/create?endpoint_location=local # This need to replaced with the webhook secret for your webhook endpoint in production STRIPE_WEBHOOK_SECRET="whsec_" -# Stripe Product and Price IDs for your created products +# Stripe Product and Price IDs for your created products # found at https://dashboard.stripe.com/test/products STRIPE_STD_MONTHLY_PRICE_ID="price_" STRIPE_PRO_MONTHLY_PRICE_ID="price_" +# EasyPost +EASYPOST_API_KEY="••••••••• + # Optional # OpenAI API Key OPENAI_API_KEY="sk-" diff --git a/next.config.js b/next.config.js index 1114814e0..5076a1662 100644 --- a/next.config.js +++ b/next.config.js @@ -7,6 +7,29 @@ const { withContentlayer } = require("next-contentlayer") */ import("./src/env.mjs") +// Work around because EasyPost introduces hexoid error related to FormidableJs +// Discussed here: https://github.com/auth0/node-auth0/issues/657#issuecomment-928083729 +/** + * @param {import("webpack").Configuration} config + */ +function applyCustomWebpackConfig(config) { + config.resolve = config.resolve || {} + config.resolve.alias = config.resolve.alias || {} + + const aliases = { + 'formidable': false, + 'coffee-script': false, + 'vm2': false, + 'yargs': false, + 'colors': false, + 'keyv': false + } + + Object.assign(config.resolve.alias, aliases) + + return config +} + /** @type {import("next").NextConfig} */ const nextConfig = { pageExtensions: ["tsx", "mdx", "ts", "js"], @@ -34,6 +57,16 @@ const nextConfig = { // Already doing linting and typechecking as separate tasks in CI eslint: { ignoreDuringBuilds: true }, typescript: { ignoreBuildErrors: true }, + + // Work around because EasyPost introduces hexoid error related to FormidableJs + /** + * @param {import("webpack").Configuration} config + */ + webpack: (config) => { + // Apply custom Webpack configurations + return applyCustomWebpackConfig(config) + } } module.exports = withContentlayer(nextConfig) + diff --git a/package.json b/package.json index 954662f63..4fa677ee8 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dependencies": { "@clerk/nextjs": "^4.27.2", "@clerk/themes": "^1.7.9", + "@easypost/api": "^6.8.2", "@hookform/resolvers": "^3.3.2", "@loglib/tracker": "^0.8.0", "@planetscale/database": "^1.11.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 909d80ff1..25a977c00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@clerk/themes': specifier: ^1.7.9 version: 1.7.9(react@18.2.0) + '@easypost/api': + specifier: ^6.8.2 + version: 6.8.2 '@hookform/resolvers': specifier: ^3.3.2 version: 3.3.2(react-hook-form@7.48.2) @@ -103,7 +106,7 @@ dependencies: version: 6.0.2(next@14.0.4-canary.36)(react@18.2.0)(uploadthing@6.0.3) ai: specifier: ^2.2.27 - version: 2.2.27(react@18.2.0)(solid-js@1.8.7)(svelte@4.2.8)(vue@3.3.9) + version: 2.2.27(react@18.2.0)(solid-js@1.8.11)(svelte@4.2.8)(vue@3.4.14) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -115,7 +118,7 @@ dependencies: version: 0.2.0(@types/react@18.2.41)(react-dom@18.2.0)(react@18.2.0) contentlayer: specifier: ^0.3.4 - version: 0.3.4(esbuild@0.19.8) + version: 0.3.4(esbuild@0.19.11) date-fns: specifier: ^2.30.0 version: 2.30.0 @@ -133,7 +136,7 @@ dependencies: version: 14.0.4-canary.36(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) next-contentlayer: specifier: ^0.3.4 - version: 0.3.4(contentlayer@0.3.4)(esbuild@0.19.8)(next@14.0.4-canary.36)(react-dom@18.2.0)(react@18.2.0) + version: 0.3.4(contentlayer@0.3.4)(esbuild@0.19.11)(next@14.0.4-canary.36)(react-dom@18.2.0)(react@18.2.0) next-themes: specifier: ^0.2.1 version: 0.2.1(next@14.0.4-canary.36)(react-dom@18.2.0)(react@18.2.0) @@ -276,7 +279,7 @@ devDependencies: version: 1.2.0 rehype-pretty-code: specifier: ^0.11.0 - version: 0.11.0(shiki@0.14.5) + version: 0.11.0(shiki@0.14.7) rehype-slug: specifier: ^6.0.0 version: 6.0.0 @@ -451,11 +454,19 @@ packages: dependencies: '@babel/types': 7.23.5 + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: false + /@babel/runtime@7.23.5: resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} @@ -490,6 +501,15 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: false + /@clerk/backend@0.34.2(react@18.2.0): resolution: {integrity: sha512-ouulkcT6kfbAPw3w0vbkl758KzQ2y9UUnuhRJ5dY3SPGNjJnpes1BNETLnA1O3llZVV5yYexluhee4XmFcwV3A==} engines: {node: '>=14'} @@ -644,10 +664,10 @@ packages: commander: 9.4.1 dev: false - /@contentlayer/cli@0.3.4(esbuild@0.19.8): + /@contentlayer/cli@0.3.4(esbuild@0.19.11): resolution: {integrity: sha512-vNDwgLuhYNu+m70NZ3XK9kexKNguuxPXg7Yvzj3B34cEilQjjzSrcTY/i+AIQm9V7uT5GGshx9ukzPf+SmoszQ==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.19.8) + '@contentlayer/core': 0.3.4(esbuild@0.19.11) '@contentlayer/utils': 0.3.4 clipanion: 3.2.1(typanion@3.14.0) typanion: 3.14.0 @@ -658,10 +678,10 @@ packages: - supports-color dev: false - /@contentlayer/client@0.3.4(esbuild@0.19.8): + /@contentlayer/client@0.3.4(esbuild@0.19.11): resolution: {integrity: sha512-QSlLyc3y4PtdC5lFw0L4wTZUH8BQnv2nk37hNCsPAqGf+dRO7TLAzdc+2/mVIRgK+vSH+pSOzjLsQpFxxXRTZA==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.19.8) + '@contentlayer/core': 0.3.4(esbuild@0.19.11) transitivePeerDependencies: - '@effect-ts/otel-node' - esbuild @@ -669,7 +689,7 @@ packages: - supports-color dev: false - /@contentlayer/core@0.3.4(esbuild@0.19.8): + /@contentlayer/core@0.3.4(esbuild@0.19.11): resolution: {integrity: sha512-o68oBLwfYZ+2vtgfk1lgHxOl3LoxvRNiUfeQ8IWFWy/L4wnIkKIqLZX01zlRE5IzYM+ZMMN5V0cKQlO7DsyR9g==} peerDependencies: esbuild: 0.17.x || 0.18.x @@ -683,9 +703,9 @@ packages: '@contentlayer/utils': 0.3.4 camel-case: 4.1.2 comment-json: 4.2.3 - esbuild: 0.19.8 + esbuild: 0.19.11 gray-matter: 4.0.3 - mdx-bundler: 9.2.1(esbuild@0.19.8) + mdx-bundler: 9.2.1(esbuild@0.19.11) rehype-stringify: 9.0.4 remark-frontmatter: 4.0.1 remark-parse: 10.0.2 @@ -698,10 +718,10 @@ packages: - supports-color dev: false - /@contentlayer/source-files@0.3.4(esbuild@0.19.8): + /@contentlayer/source-files@0.3.4(esbuild@0.19.11): resolution: {integrity: sha512-4njyn0OFPu7WY4tAjMxiJgWOKeiHuBOGdQ36EYE03iij/pPPRbiWbL+cmLccYXUFEW58mDwpqROZZm6pnxjRDQ==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.19.8) + '@contentlayer/core': 0.3.4(esbuild@0.19.11) '@contentlayer/utils': 0.3.4 chokidar: 3.5.3 fast-glob: 3.3.2 @@ -719,11 +739,11 @@ packages: - supports-color dev: false - /@contentlayer/source-remote-files@0.3.4(esbuild@0.19.8): + /@contentlayer/source-remote-files@0.3.4(esbuild@0.19.11): resolution: {integrity: sha512-cyiv4sNUySZvR0uAKlM+kSAELzNd2h2QT1R2e41dRKbwOUVxeLfmGiLugr0aVac6Q3xYcD99dbHyR1xWPV+w9w==} dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.19.8) - '@contentlayer/source-files': 0.3.4(esbuild@0.19.8) + '@contentlayer/core': 0.3.4(esbuild@0.19.11) + '@contentlayer/source-files': 0.3.4(esbuild@0.19.11) '@contentlayer/utils': 0.3.4 transitivePeerDependencies: - '@effect-ts/otel-node' @@ -771,6 +791,23 @@ packages: superjson: 2.2.1 dev: true + /@easypost/api@6.8.2: + resolution: {integrity: sha512-BCiHisPBMWcDk0JsYii5PiHxlp3EayLqSpHwLndTMKi2BLHA7jZDx5kQ8k2KEKPFq/SLHo4JWxVkN7mRjP/TZw==} + engines: {node: '>= 12.0'} + hasBin: true + dependencies: + core-js: 3.30.2 + nodent-runtime: 3.2.1 + regenerator-runtime: 0.13.11 + source-map-support: 0.5.21 + superagent: 8.0.9 + uuid: 9.0.1 + yargs: 17.7.2 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - supports-color + dev: false + /@effect-ts/core@0.60.5: resolution: {integrity: sha512-qi1WrtJA90XLMnj2hnUszW9Sx4dXP03ZJtCc5DiUBIOhF4Vw7plfb65/bdBySPoC9s7zy995TdUX1XBSxUkl5w==} dependencies: @@ -861,20 +898,29 @@ packages: rollup-plugin-node-polyfills: 0.2.1 dev: true - /@esbuild-plugins/node-resolve@0.1.4(esbuild@0.19.8): + /@esbuild-plugins/node-resolve@0.1.4(esbuild@0.19.11): resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==} peerDependencies: esbuild: '*' dependencies: '@types/resolve': 1.20.6 debug: 4.3.4 - esbuild: 0.19.8 + esbuild: 0.19.11 escape-string-regexp: 4.0.0 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: false + /@esbuild/aix-ppc64@0.19.11: + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-arm64@0.16.4: resolution: {integrity: sha512-VPuTzXFm/m2fcGfN6CiwZTlLzxrKsWbPkG7ArRFpuxyaHUm/XFHQPD4xNwZT6uUmpIHhnSjcaCmcla8COzmZ5Q==} engines: {node: '>=12'} @@ -902,12 +948,22 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.19.11: + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-arm64@0.19.8: resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-arm@0.16.4: @@ -937,12 +993,22 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.19.11: + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-arm@0.19.8: resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-x64@0.16.4: @@ -972,12 +1038,22 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.19.11: + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-x64@0.19.8: resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/darwin-arm64@0.16.4: @@ -1007,12 +1083,22 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.19.11: + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-arm64@0.19.8: resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/darwin-x64@0.16.4: @@ -1042,12 +1128,22 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.19.11: + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-x64@0.19.8: resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-arm64@0.16.4: @@ -1077,12 +1173,22 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.19.11: + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-arm64@0.19.8: resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-x64@0.16.4: @@ -1112,12 +1218,22 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.19.11: + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-x64@0.19.8: resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm64@0.16.4: @@ -1147,12 +1263,22 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.19.11: + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm64@0.19.8: resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm@0.16.4: @@ -1182,12 +1308,22 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.19.11: + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm@0.19.8: resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ia32@0.16.4: @@ -1217,12 +1353,22 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.19.11: + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ia32@0.19.8: resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-loong64@0.16.4: @@ -1252,12 +1398,22 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.19.11: + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-loong64@0.19.8: resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-mips64el@0.16.4: @@ -1287,12 +1443,22 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.19.11: + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-mips64el@0.19.8: resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ppc64@0.16.4: @@ -1322,12 +1488,22 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.19.11: + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ppc64@0.19.8: resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-riscv64@0.16.4: @@ -1357,12 +1533,22 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.19.11: + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-riscv64@0.19.8: resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-s390x@0.16.4: @@ -1392,12 +1578,22 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.19.11: + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-s390x@0.19.8: resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-x64@0.16.4: @@ -1427,12 +1623,22 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.19.11: + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-x64@0.19.8: resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/netbsd-x64@0.16.4: @@ -1462,12 +1668,22 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.19.11: + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/netbsd-x64@0.19.8: resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true + dev: true optional: true /@esbuild/openbsd-x64@0.16.4: @@ -1497,12 +1713,22 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.19.11: + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/openbsd-x64@0.19.8: resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true + dev: true optional: true /@esbuild/sunos-x64@0.16.4: @@ -1532,12 +1758,22 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.19.11: + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + /@esbuild/sunos-x64@0.19.8: resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true + dev: true optional: true /@esbuild/win32-arm64@0.16.4: @@ -1567,12 +1803,22 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.19.11: + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-arm64@0.19.8: resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-ia32@0.16.4: @@ -1602,12 +1848,22 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.19.11: + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-ia32@0.19.8: resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-x64@0.16.4: @@ -1637,12 +1893,22 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.19.11: + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-x64@0.19.8: resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): @@ -1828,6 +2094,13 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.21: + resolution: {integrity: sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + /@js-temporal/polyfill@0.4.4: resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==} engines: {node: '>=12'} @@ -1864,13 +2137,13 @@ packages: read-yaml-file: 1.1.0 dev: false - /@mdx-js/esbuild@2.3.0(esbuild@0.19.8): + /@mdx-js/esbuild@2.3.0(esbuild@0.19.11): resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==} peerDependencies: esbuild: '>=0.11.0' dependencies: '@mdx-js/mdx': 2.3.0 - esbuild: 0.19.8 + esbuild: 0.19.11 node-fetch: 3.3.2 vfile: 5.3.7 transitivePeerDependencies: @@ -4310,87 +4583,77 @@ packages: '@uploadthing/mime-types': 0.2.2 dev: false - /@vue/compiler-core@3.3.9: - resolution: {integrity: sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==} + /@vue/compiler-core@3.4.14: + resolution: {integrity: sha512-ro4Zzl/MPdWs7XwxT7omHRxAjMbDFRZEEjD+2m3NBf8YzAe3HuoSEZosXQo+m1GQ1G3LQ1LdmNh1RKTYe+ssEg==} dependencies: - '@babel/parser': 7.23.5 - '@vue/shared': 3.3.9 + '@babel/parser': 7.23.6 + '@vue/shared': 3.4.14 + entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 dev: false - /@vue/compiler-dom@3.3.9: - resolution: {integrity: sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==} + /@vue/compiler-dom@3.4.14: + resolution: {integrity: sha512-nOZTY+veWNa0DKAceNWxorAbWm0INHdQq7cejFaWM1WYnoNSJbSEKYtE7Ir6lR/+mo9fttZpPVI9ZFGJ1juUEQ==} dependencies: - '@vue/compiler-core': 3.3.9 - '@vue/shared': 3.3.9 + '@vue/compiler-core': 3.4.14 + '@vue/shared': 3.4.14 dev: false - /@vue/compiler-sfc@3.3.9: - resolution: {integrity: sha512-wy0CNc8z4ihoDzjASCOCsQuzW0A/HP27+0MDSSICMjVIFzk/rFViezkR3dzH+miS2NDEz8ywMdbjO5ylhOLI2A==} + /@vue/compiler-sfc@3.4.14: + resolution: {integrity: sha512-1vHc9Kv1jV+YBZC/RJxQJ9JCxildTI+qrhtDh6tPkR1O8S+olBUekimY0km0ZNn8nG1wjtFAe9XHij+YLR8cRQ==} dependencies: - '@babel/parser': 7.23.5 - '@vue/compiler-core': 3.3.9 - '@vue/compiler-dom': 3.3.9 - '@vue/compiler-ssr': 3.3.9 - '@vue/reactivity-transform': 3.3.9 - '@vue/shared': 3.3.9 + '@babel/parser': 7.23.6 + '@vue/compiler-core': 3.4.14 + '@vue/compiler-dom': 3.4.14 + '@vue/compiler-ssr': 3.4.14 + '@vue/shared': 3.4.14 estree-walker: 2.0.2 magic-string: 0.30.5 - postcss: 8.4.32 + postcss: 8.4.33 source-map-js: 1.0.2 dev: false - /@vue/compiler-ssr@3.3.9: - resolution: {integrity: sha512-NO5oobAw78R0G4SODY5A502MGnDNiDjf6qvhn7zD7TJGc8XDeIEw4fg6JU705jZ/YhuokBKz0A5a/FL/XZU73g==} + /@vue/compiler-ssr@3.4.14: + resolution: {integrity: sha512-bXT6+oAGlFjTYVOTtFJ4l4Jab1wjsC0cfSfOe2B4Z0N2vD2zOBSQ9w694RsCfhjk+bC2DY5Gubb1rHZVii107Q==} dependencies: - '@vue/compiler-dom': 3.3.9 - '@vue/shared': 3.3.9 + '@vue/compiler-dom': 3.4.14 + '@vue/shared': 3.4.14 dev: false - /@vue/reactivity-transform@3.3.9: - resolution: {integrity: sha512-HnUFm7Ry6dFa4Lp63DAxTixUp8opMtQr6RxQCpDI1vlh12rkGIeYqMvJtK+IKyEfEOa2I9oCkD1mmsPdaGpdVg==} + /@vue/reactivity@3.4.14: + resolution: {integrity: sha512-xRYwze5Q4tK7tT2J4uy4XLhK/AIXdU5EBUu9PLnIHcOKXO0uyXpNNMzlQKuq7B+zwtq6K2wuUL39pHA6ZQzObw==} dependencies: - '@babel/parser': 7.23.5 - '@vue/compiler-core': 3.3.9 - '@vue/shared': 3.3.9 - estree-walker: 2.0.2 - magic-string: 0.30.5 + '@vue/shared': 3.4.14 dev: false - /@vue/reactivity@3.3.9: - resolution: {integrity: sha512-VmpIqlNp+aYDg2X0xQhJqHx9YguOmz2UxuUJDckBdQCNkipJvfk9yA75woLWElCa0Jtyec3lAAt49GO0izsphw==} + /@vue/runtime-core@3.4.14: + resolution: {integrity: sha512-qu+NMkfujCoZL6cfqK5NOfxgXJROSlP2ZPs4CTcVR+mLrwl4TtycF5Tgo0QupkdBL+2kigc6EsJlTcuuZC1NaQ==} dependencies: - '@vue/shared': 3.3.9 + '@vue/reactivity': 3.4.14 + '@vue/shared': 3.4.14 dev: false - /@vue/runtime-core@3.3.9: - resolution: {integrity: sha512-xxaG9KvPm3GTRuM4ZyU8Tc+pMVzcu6eeoSRQJ9IE7NmCcClW6z4B3Ij6L4EDl80sxe/arTtQ6YmgiO4UZqRc+w==} + /@vue/runtime-dom@3.4.14: + resolution: {integrity: sha512-B85XmcR4E7XsirEHVqhmy4HPbRT9WLFWV9Uhie3OapV9m1MEN9+Er6hmUIE6d8/l2sUygpK9RstFM2bmHEUigA==} dependencies: - '@vue/reactivity': 3.3.9 - '@vue/shared': 3.3.9 + '@vue/runtime-core': 3.4.14 + '@vue/shared': 3.4.14 + csstype: 3.1.3 dev: false - /@vue/runtime-dom@3.3.9: - resolution: {integrity: sha512-e7LIfcxYSWbV6BK1wQv9qJyxprC75EvSqF/kQKe6bdZEDNValzeRXEVgiX7AHI6hZ59HA4h7WT5CGvm69vzJTQ==} - dependencies: - '@vue/runtime-core': 3.3.9 - '@vue/shared': 3.3.9 - csstype: 3.1.2 - dev: false - - /@vue/server-renderer@3.3.9(vue@3.3.9): - resolution: {integrity: sha512-w0zT/s5l3Oa3ZjtLW88eO4uV6AQFqU8X5GOgzq7SkQQu6vVr+8tfm+OI2kDBplS/W/XgCBuFXiPw6T5EdwXP0A==} + /@vue/server-renderer@3.4.14(vue@3.4.14): + resolution: {integrity: sha512-pwSKXQfYdJBTpvWHGEYI+akDE18TXAiLcGn+Q/2Fj8wQSHWztoo7PSvfMNqu6NDhp309QXXbPFEGCU5p85HqkA==} peerDependencies: - vue: 3.3.9 + vue: 3.4.14 dependencies: - '@vue/compiler-ssr': 3.3.9 - '@vue/shared': 3.3.9 - vue: 3.3.9(typescript@5.3.2) + '@vue/compiler-ssr': 3.4.14 + '@vue/shared': 3.4.14 + vue: 3.4.14(typescript@5.3.2) dev: false - /@vue/shared@3.3.9: - resolution: {integrity: sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==} + /@vue/shared@3.4.14: + resolution: {integrity: sha512-nmi3BtLpvqXAWoRZ6HQ+pFJOHBU4UnH3vD3opgmwXac7vhaHKA9nj1VeGjMggdB9eLtW83eHyPCmOU1qzdsC7Q==} dev: false /abbrev@2.0.0: @@ -4422,6 +4685,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + /agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -4429,7 +4698,7 @@ packages: humanize-ms: 1.2.1 dev: false - /ai@2.2.27(react@18.2.0)(solid-js@1.8.7)(svelte@4.2.8)(vue@3.3.9): + /ai@2.2.27(react@18.2.0)(solid-js@1.8.11)(svelte@4.2.8)(vue@3.4.14): resolution: {integrity: sha512-s/F1CfduvLVAnrWHKqwvJLBeGadXNb7D4fmYQv+YcTxUTmqKZYPlQ5wikxteeKmJ1QajTpPI0lz0/zIm/4a7vw==} engines: {node: '>=14.6'} peerDependencies: @@ -4450,14 +4719,14 @@ packages: eventsource-parser: 1.0.0 nanoid: 3.3.6 react: 18.2.0 - solid-js: 1.8.7 - solid-swr-store: 0.10.7(solid-js@1.8.7)(swr-store@0.10.6) + solid-js: 1.8.11 + solid-swr-store: 0.10.7(solid-js@1.8.11)(swr-store@0.10.6) sswr: 2.0.0(svelte@4.2.8) svelte: 4.2.8 swr: 2.2.0(react@18.2.0) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.3.9) - vue: 3.3.9(typescript@5.3.2) + swrv: 1.0.4(vue@3.4.14) + vue: 3.4.14(typescript@5.3.2) dev: false /ajv@6.12.6: @@ -4634,6 +4903,10 @@ packages: printable-characters: 1.0.42 dev: true + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + /asn1js@3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} @@ -4997,7 +5270,7 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 '@types/estree': 1.0.5 - acorn: 8.11.2 + acorn: 8.11.3 estree-walker: 3.0.3 periscopic: 3.1.0 dev: false @@ -5072,6 +5345,10 @@ packages: repeat-string: 1.6.1 dev: false + /component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -5091,17 +5368,17 @@ packages: proto-list: 1.2.4 dev: false - /contentlayer@0.3.4(esbuild@0.19.8): + /contentlayer@0.3.4(esbuild@0.19.11): resolution: {integrity: sha512-FYDdTUFaN4yqep0waswrhcXjmMJnPD5iXDTtxcUCGdklfuIrXM2xLx51xl748cHmGA6IsC+27YZFxU6Ym13QIA==} engines: {node: '>=14.18'} hasBin: true requiresBuild: true dependencies: - '@contentlayer/cli': 0.3.4(esbuild@0.19.8) - '@contentlayer/client': 0.3.4(esbuild@0.19.8) - '@contentlayer/core': 0.3.4(esbuild@0.19.8) - '@contentlayer/source-files': 0.3.4(esbuild@0.19.8) - '@contentlayer/source-remote-files': 0.3.4(esbuild@0.19.8) + '@contentlayer/cli': 0.3.4(esbuild@0.19.11) + '@contentlayer/client': 0.3.4(esbuild@0.19.11) + '@contentlayer/core': 0.3.4(esbuild@0.19.11) + '@contentlayer/source-files': 0.3.4(esbuild@0.19.11) + '@contentlayer/source-remote-files': 0.3.4(esbuild@0.19.11) '@contentlayer/utils': 0.3.4 transitivePeerDependencies: - '@effect-ts/otel-node' @@ -5117,6 +5394,10 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} + /cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: false + /copy-anything@3.0.5: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} @@ -5124,6 +5405,11 @@ packages: is-what: 4.1.16 dev: true + /core-js@3.30.2: + resolution: {integrity: sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==} + requiresBuild: true + dev: false + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false @@ -5163,6 +5449,10 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: false + /d@1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: @@ -5301,6 +5591,13 @@ packages: dependencies: dequal: 2.0.3 + /dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + dev: false + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -5785,6 +6082,37 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true + /esbuild@0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + 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 + dev: false + /esbuild@0.19.8: resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} engines: {node: '>=12'} @@ -5813,6 +6141,7 @@ packages: '@esbuild/win32-arm64': 0.19.8 '@esbuild/win32-ia32': 0.19.8 '@esbuild/win32-x64': 0.19.8 + dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -6269,6 +6598,10 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: false + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -6399,6 +6732,15 @@ packages: fetch-blob: 3.2.0 dev: false + /formidable@2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + qs: 6.11.2 + dev: false + /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true @@ -6923,6 +7265,11 @@ packages: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: true + /hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + dev: false + /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: false @@ -8011,17 +8358,17 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: false - /mdx-bundler@9.2.1(esbuild@0.19.8): + /mdx-bundler@9.2.1(esbuild@0.19.11): resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==} engines: {node: '>=14', npm: '>=6'} peerDependencies: esbuild: 0.* dependencies: '@babel/runtime': 7.23.5 - '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.19.8) + '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.19.11) '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@mdx-js/esbuild': 2.3.0(esbuild@0.19.8) - esbuild: 0.19.8 + '@mdx-js/esbuild': 2.3.0(esbuild@0.19.11) + esbuild: 0.19.11 gray-matter: 4.0.3 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 @@ -8076,6 +8423,11 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: @@ -8604,6 +8956,12 @@ packages: mime-db: 1.52.0 dev: false + /mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: false + /mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} @@ -8753,7 +9111,7 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /next-contentlayer@0.3.4(contentlayer@0.3.4)(esbuild@0.19.8)(next@14.0.4-canary.36)(react-dom@18.2.0)(react@18.2.0): + /next-contentlayer@0.3.4(contentlayer@0.3.4)(esbuild@0.19.11)(next@14.0.4-canary.36)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UtUCwgAl159KwfhNaOwyiI7Lg6sdioyKMeh+E7jxx0CJ29JuXGxBEYmCI6+72NxFGIFZKx8lvttbbQhbnYWYSw==} peerDependencies: contentlayer: 0.3.4 @@ -8761,9 +9119,9 @@ packages: react: '*' react-dom: '*' dependencies: - '@contentlayer/core': 0.3.4(esbuild@0.19.8) + '@contentlayer/core': 0.3.4(esbuild@0.19.11) '@contentlayer/utils': 0.3.4 - contentlayer: 0.3.4(esbuild@0.19.8) + contentlayer: 0.3.4(esbuild@0.19.11) next: 14.0.4-canary.36(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8876,6 +9234,11 @@ packages: /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /nodent-runtime@3.2.1: + resolution: {integrity: sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==} + requiresBuild: true + dev: false + /nopt@7.2.0: resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9283,6 +9646,15 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -9758,8 +10130,12 @@ packages: prismjs: 1.27.0 dev: false - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} @@ -9798,7 +10174,7 @@ packages: unified: 11.0.4 dev: true - /rehype-pretty-code@0.11.0(shiki@0.14.5): + /rehype-pretty-code@0.11.0(shiki@0.14.7): resolution: {integrity: sha512-VCyDXrVio14Ipt+A5rTw3My17yjNOen12HqYuYaMIOj6m+WuqpAeYdTIlqIab+2PkWuTgzA2XCZgAHMHjUS4IQ==} engines: {node: '>=16'} peerDependencies: @@ -9809,7 +10185,7 @@ packages: hast-util-to-string: 3.0.0 parse-numeric-range: 1.3.0 rehype-parse: 9.0.0 - shiki: 0.14.5 + shiki: 0.14.7 unified: 11.0.4 unist-util-visit: 5.0.0 dev: true @@ -10109,8 +10485,17 @@ packages: resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} dev: false - /seroval@0.15.1: - resolution: {integrity: sha512-OPVtf0qmeC7RW+ScVX+7aOS+xoIM7pWcZ0jOWg2aTZigCydgRB04adfteBRbecZnnrO1WuGQ+C3tLeBBzX2zSQ==} + /seroval-plugins@1.0.4(seroval@1.0.4): + resolution: {integrity: sha512-DQ2IK6oQVvy8k+c2V5x5YCtUa/GGGsUwUBNN9UqohrZ0rWdUapBFpNMYP1bCyRHoxOJjdKGl+dieacFIpU/i1A==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + dependencies: + seroval: 1.0.4 + dev: false + + /seroval@1.0.4: + resolution: {integrity: sha512-qQs/N+KfJu83rmszFQaTxcoJoPn6KNUruX4KmnmyD0oZkUoiNvJ1rpdYKDf4YHM05k+HOgCxa3yvf15QbVijGg==} engines: {node: '>=10'} dev: false @@ -10152,8 +10537,8 @@ packages: rechoir: 0.6.2 dev: false - /shiki@0.14.5: - resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==} + /shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} dependencies: ansi-sequence-parser: 1.1.1 jsonc-parser: 3.2.0 @@ -10209,21 +10594,22 @@ packages: type-fest: 2.19.0 dev: false - /solid-js@1.8.7: - resolution: {integrity: sha512-9dzrSVieh2zj3SnJ02II6xZkonR6c+j/91b7XZUNcC6xSaldlqjjGh98F1fk5cRJ8ZTkzqF5fPIWDxEOs6QZXA==} + /solid-js@1.8.11: + resolution: {integrity: sha512-WdwmER+TwBJiN4rVQTVBxocg+9pKlOs41KzPYntrC86xO5sek8TzBYozPEZPL1IRWDouf2lMrvSbIs3CanlPvQ==} dependencies: - csstype: 3.1.2 - seroval: 0.15.1 + csstype: 3.1.3 + seroval: 1.0.4 + seroval-plugins: 1.0.4(seroval@1.0.4) dev: false - /solid-swr-store@0.10.7(solid-js@1.8.7)(swr-store@0.10.6): + /solid-swr-store@0.10.7(solid-js@1.8.11)(swr-store@0.10.6): resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.2 swr-store: ^0.10 dependencies: - solid-js: 1.8.7 + solid-js: 1.8.11 swr-store: 0.10.6 dev: false @@ -10499,6 +10885,24 @@ packages: pirates: 4.0.6 ts-interface-checker: 0.1.13 + /superagent@8.0.9: + resolution: {integrity: sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==} + engines: {node: '>=6.4.0 <13 || >=14'} + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.3.4 + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 2.1.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.11.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: false + /superjson@2.2.1: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} @@ -10533,8 +10937,8 @@ packages: dependencies: '@ampproject/remapping': 2.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - acorn: 8.11.2 + '@jridgewell/trace-mapping': 0.3.21 + acorn: 8.11.3 aria-query: 5.3.0 axobject-query: 3.2.1 code-red: 1.0.4 @@ -10566,12 +10970,12 @@ packages: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} dev: false - /swrv@1.0.4(vue@3.3.9): + /swrv@1.0.4(vue@3.4.14): resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} peerDependencies: vue: '>=3.2.26 < 4' dependencies: - vue: 3.3.9(typescript@5.3.2) + vue: 3.4.14(typescript@5.3.2) dev: false /tailwind-merge@1.14.0: @@ -11081,6 +11485,11 @@ packages: hasBin: true dev: false + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false + /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -11164,19 +11573,19 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /vue@3.3.9(typescript@5.3.2): - resolution: {integrity: sha512-sy5sLCTR8m6tvUk1/ijri3Yqzgpdsmxgj6n6yl7GXXCXqVbmW2RCXe9atE4cEI6Iv7L89v5f35fZRRr5dChP9w==} + /vue@3.4.14(typescript@5.3.2): + resolution: {integrity: sha512-Rop5Al/ZcBbBz+KjPZaZDgHDX0kUP4duEzDbm+1o91uxYUNmJrZSBuegsNIJvUGy+epLevNRNhLjm08VKTgGyw==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.3.9 - '@vue/compiler-sfc': 3.3.9 - '@vue/runtime-dom': 3.3.9 - '@vue/server-renderer': 3.3.9(vue@3.3.9) - '@vue/shared': 3.3.9 + '@vue/compiler-dom': 3.4.14 + '@vue/compiler-sfc': 3.4.14 + '@vue/runtime-dom': 3.4.14 + '@vue/server-renderer': 3.4.14(vue@3.4.14) + '@vue/shared': 3.4.14 typescript: 5.3.2 dev: false diff --git a/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx b/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx index dbf375dbe..c852bb453 100644 --- a/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx +++ b/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx @@ -1,23 +1,19 @@ -import type { Metadata } from "next" +import * as React from "react" import Link from "next/link" +import type { Metadata } from "next" import { notFound } from "next/navigation" import { db } from "@/db" import { stores } from "@/db/schema" import { env } from "@/env.mjs" -import { ArrowLeftIcon } from "@radix-ui/react-icons" +import { currentUser } from "@clerk/nextjs" import { eq } from "drizzle-orm" +import { cn } from "@/lib/utils" +import { buttonVariants } from "@/components/ui/button" import { createPaymentIntent } from "@/lib/actions/stripe" import { getCart } from "@/lib/fetchers/cart" import { getStripeAccount } from "@/lib/fetchers/stripe" -import { cn, formatPrice } from "@/lib/utils" -import { Button, buttonVariants } from "@/components/ui/button" -import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer" -import { ScrollArea } from "@/components/ui/scroll-area" -import { Separator } from "@/components/ui/separator" -import { CartLineItems } from "@/components/checkout/cart-line-items" -import { CheckoutForm } from "@/components/checkout/checkout-form" -import { CheckoutShell } from "@/components/checkout/checkout-shell" +import CheckoutContent from "@/components/checkout/checkout-content" import { Shell } from "@/components/shells/shell" export const metadata: Metadata = { @@ -33,6 +29,11 @@ interface CheckoutPageProps { } export default async function CheckoutPage({ params }: CheckoutPageProps) { + const user = await currentUser() + if (!user) { + notFound() + } + const storeId = Number(params.storeId) const store = await db @@ -61,10 +62,19 @@ export default async function CheckoutPage({ params }: CheckoutPageProps) { items: cartLineItems, }) - const total = cartLineItems.reduce( - (total, item) => total + item.quantity * Number(item.price), - 0 - ) + const clientUser = { + firstName: user.firstName, + lastName: user.lastName, + email: user.emailAddresses.find( + (emailObj) => emailObj.id === user.primaryEmailAddressId + )!.emailAddress + } + + const clientStore = { + id: store.id, + name: store.name, + stripeAccountId: store.stripeAccountId ?? "", + } if (!(isConnected && store.stripeAccountId)) { return ( @@ -94,81 +104,12 @@ export default async function CheckoutPage({ params }: CheckoutPageProps) { } return ( -
-
-
-
- -
-
-
-
- Pay {store.name} -
-
{formatPrice(total)}
-
- -
- - - - - -
+ ) } + diff --git a/src/components/checkout/cart-sheet.tsx b/src/components/checkout/cart-sheet.tsx index 3e416fa8c..d9a18f4b7 100644 --- a/src/components/checkout/cart-sheet.tsx +++ b/src/components/checkout/cart-sheet.tsx @@ -62,7 +62,7 @@ export async function CartSheet() {
Shipping - Free + Calculated at checkout
Taxes @@ -119,3 +119,4 @@ export async function CartSheet() { ) } + diff --git a/src/components/checkout/checkout-card.tsx b/src/components/checkout/checkout-card.tsx index c6487a163..49240c09e 100644 --- a/src/components/checkout/checkout-card.tsx +++ b/src/components/checkout/checkout-card.tsx @@ -12,6 +12,7 @@ import { } from "@/components/ui/card" import { Separator } from "@/components/ui/separator" import { CartLineItems } from "@/components/checkout/cart-line-items" +import ShippingLineItem from "@/components/checkout/shipping-line-item" interface CheckoutCardProps { storeId: number @@ -51,6 +52,7 @@ export async function CheckoutCard({ storeId }: CheckoutCardProps) { + @@ -69,3 +71,4 @@ export async function CheckoutCard({ storeId }: CheckoutCardProps) { ) } + diff --git a/src/components/checkout/checkout-content.tsx b/src/components/checkout/checkout-content.tsx new file mode 100644 index 000000000..cb59bec34 --- /dev/null +++ b/src/components/checkout/checkout-content.tsx @@ -0,0 +1,165 @@ +"use client" + +import * as React from "react" +import Link from "next/link" +import type { Dimensions } from "@/types" +import { ArrowLeftIcon } from "@radix-ui/react-icons" + +import { formatPrice } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer" +import { ScrollArea } from "@/components/ui/scroll-area" +import { Separator } from "@/components/ui/separator" +import ShippingLineItem from "@/components/checkout/shipping-line-item" +import { CartLineItems } from "@/components/checkout/cart-line-items" +import { CheckoutForm } from "@/components/checkout/checkout-form" +import { CheckoutShell } from "@/components/checkout/checkout-shell" + +import type { CartLineItem } from "@/types" + +interface CheckoutContentProps { + user: { + firstName: string | null + lastName: string | null + email: string + } + store: { + id: number + name: string + stripeAccountId: string + } + cartLineItems: CartLineItem[] + paymentIntentPromise: Promise<{ + clientSecret: string | null + }> +} + +export default function CheckoutContent({ + user, + store, + cartLineItems, + paymentIntentPromise, +}: CheckoutContentProps) { + const name = `${user.firstName || ""} ${user.lastName || ""}`.trim() + + const total = cartLineItems.reduce( + (total, item) => total + item.quantity * Number(item.price), + 0 + ) + + // TODO: Add support for dimension packing algorithm to calculate shipping rates + const dimensions = cartLineItems.reduce( + (dimensions, item) => { + const { width, height, length, weight } = item + if (width) dimensions.width += Number(width) + if (height) dimensions.height += Number(height) + if (length) dimensions.length += Number(length) + if (weight) dimensions.weight += Number(weight) + return dimensions + }, + { + width: 10, + height: 10, + length: 10, + weight: 10, + } + ) as Dimensions + + const [rate, setRate] = React.useState(0) + + return ( +
+
+
+
+ +
+
+
+
+ Pay {store.name} +
+
{formatPrice(total + rate)}
+
+ + +
+ + + { + setRate(shippingRate) + }} + className="container max-w-xl pr-6 lg:ml-0 lg:mr-auto" + /> + + +
+ ) +} + diff --git a/src/components/checkout/checkout-form.tsx b/src/components/checkout/checkout-form.tsx index 015e7ffb2..304f501bc 100644 --- a/src/components/checkout/checkout-form.tsx +++ b/src/components/checkout/checkout-form.tsx @@ -10,18 +10,56 @@ import { } from "@stripe/react-stripe-js" import { toast } from "sonner" +import type { + Dimensions, + EasyPostAddress, + GetRateProps, + StripeAddress, +} from "@/types/index" +import { getShippingRate } from "@/lib/actions/easypost" import { absoluteUrl, cn } from "@/lib/utils" +import { useDebounce } from "@/hooks/use-debounce" import { Button } from "@/components/ui/button" +import { Label } from "@/components/ui/label" +import { Switch } from "@/components/ui/switch" import { Icons } from "@/components/icons" // Docs: https://stripe.com/docs/payments/quickstart -interface CheckoutFormProps extends React.ComponentPropsWithoutRef<"form"> { +interface CheckoutFormProps extends Omit, 'onRateChange'> { storeId: number + userFullName: string + userEmail: string + dimensions: Dimensions + onRateChange: (rate: number) => void +} + +const transformAddress = ( + address: StripeAddress, + additionalFields?: object +): EasyPostAddress => { + const { + line1: street1, + line2: street2, + postal_code: zip, + ...restOfAddressData + } = address + const transformedAddress = { + street1, + zip, + ...restOfAddressData, + ...additionalFields, + } as EasyPostAddress + if (street2) transformedAddress.street2 = street2 + return transformedAddress } export function CheckoutForm({ storeId, + userFullName, + userEmail, + dimensions, + onRateChange, className, ...props }: CheckoutFormProps) { @@ -30,8 +68,39 @@ export function CheckoutForm({ const elements = useElements() const [email, setEmail] = React.useState("") const [message, setMessage] = React.useState(null) + const [address, setAddress] = React.useState(null) const [isLoading, setIsLoading] = React.useState(false) + const debouncedAddress = useDebounce(address, 500) + const [isPending, startTransition] = React.useTransition() + + const [confirmed, setConfirmed] = React.useState(false) + const handleConfirmedSwitchChange = (checked: boolean) => { + startTransition(async () => { + if (debouncedAddress) { + const shippingAddress = transformAddress(debouncedAddress) + const shippingRate = await getShippingRate({ + toAddress: shippingAddress, + storeId: storeId, + dimensions: dimensions, + } as GetRateProps) + + if (typeof shippingRate.rate === "number") { + onRateChange(shippingRate.rate) + setConfirmed(checked) + } else { + toast.error("Something went wrong with the address, please update it and try again.") + } + } + }) + } + + React.useEffect(() => { + setConfirmed(false) + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [debouncedAddress]) + React.useEffect(() => { if (!stripe) return @@ -64,7 +133,7 @@ export function CheckoutForm({ async function onSubmit(event: React.FormEvent) { event.preventDefault() - if (!stripe || !elements) { + if (!stripe || !elements || !debouncedAddress) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return @@ -108,11 +177,18 @@ export function CheckoutForm({ > setEmail(e.value.email)} /> { + if (e.complete) setAddress(e.value.address) + }} /> +
+ + +
) } + diff --git a/src/components/checkout/shipping-line-item.tsx b/src/components/checkout/shipping-line-item.tsx new file mode 100644 index 000000000..bc749cc3a --- /dev/null +++ b/src/components/checkout/shipping-line-item.tsx @@ -0,0 +1,54 @@ +import { Slot } from "@radix-ui/react-slot" + +import { cn, formatPrice } from "@/lib/utils" + +interface ShippingLineItemProps extends React.HTMLAttributes { + shipping: string | number + variant?: "default" | "minimal" +} + +export default function ShippingLineItem({ + shipping, + variant = "default", + className, + ...props +}: ShippingLineItemProps) { + const Comp = Slot + return ( + +
+
+
+
+
+
+ + Shipping + +
+
+
+ + {(typeof(shipping) === "string") ? shipping : formatPrice((Number(shipping)).toFixed(2))} + +
+
+
+
+
+
+ ) +} + diff --git a/src/env.mjs b/src/env.mjs index e6210eba4..85f1b4e62 100644 --- a/src/env.mjs +++ b/src/env.mjs @@ -20,6 +20,7 @@ export const env = createEnv({ STRIPE_WEBHOOK_SECRET: z.string().min(1), STRIPE_STD_MONTHLY_PRICE_ID: z.string().min(1), STRIPE_PRO_MONTHLY_PRICE_ID: z.string().min(1), + EASYPOST_API_KEY: z.string(), OPENAI_API_KEY: z.string().optional(), }, @@ -55,6 +56,7 @@ export const env = createEnv({ STRIPE_WEBHOOK_SECRET: process.env.STRIPE_WEBHOOK_SECRET, STRIPE_STD_MONTHLY_PRICE_ID: process.env.STRIPE_STD_MONTHLY_PRICE_ID, STRIPE_PRO_MONTHLY_PRICE_ID: process.env.STRIPE_PRO_MONTHLY_PRICE_ID, + EASYPOST_API_KEY: process.env.EASYPOST_API_KEY, OPENAI_API_KEY: process.env.OPENAI_API_KEY, }, /** diff --git a/src/lib/actions/easypost.ts b/src/lib/actions/easypost.ts new file mode 100644 index 000000000..7583f9cdc --- /dev/null +++ b/src/lib/actions/easypost.ts @@ -0,0 +1,57 @@ +"use server" + +import type { GetRateProps } from "@/types" +import type { Address, Parcel } from "@easypost/api" +import { Shipment } from "@easypost/api" +import { z } from "zod" + +import { easypost } from "@/lib/easypost" +import { ratesSchema } from "@/lib/validations/easypost" + +interface ShipmentResponse { + rate: number | null + error: string + ok: boolean + status: number +} + +export async function getShippingRate(input: GetRateProps): Promise { + try { + const data = ratesSchema.parse(input) + + // TODO: Update DB Schema to include store address and get from there + const storeAddress = { + company: "EasyPost", + street1: "417 Montgomery Street", + street2: "5th Floor", + city: "San Francisco", + state: "CA", + zip: "94104", + country: "US", + phone: "415-528-7555", + } + + // TODO: Once out of Beta this should become easypost.BetaRate.retrieveStatelessRates({...}) + const shipment = await easypost.Shipment.create({ + to_address: data.toAddress as Address, + from_address: storeAddress as Address, + parcel: data.dimensions as Parcel, + }) + + // handled the return like it was a response from a POST but can be changed + return { rate: Number(shipment.lowestRate().list_rate), error: 'No Error', ok: true, status: 200 } + } catch (err) { + console.error(err) + + if (err instanceof z.ZodError) { + return { rate: null, error: err.message, ok: false, status: 400 } + } + + if (err instanceof Error && "statusCode" in err) { + return { rate: null, error: err.message, ok: false, status: err.statusCode as number } + } + + return { rate: null, error: "Something went wrong.", ok: false, status: 500 } + } +} + diff --git a/src/lib/easypost.ts b/src/lib/easypost.ts new file mode 100644 index 000000000..bc35ae815 --- /dev/null +++ b/src/lib/easypost.ts @@ -0,0 +1,5 @@ +import { env } from "@/env.mjs" +import EasyPost from "@easypost/api" + +export const easypost = new EasyPost(env.EASYPOST_API_KEY) + diff --git a/src/lib/validations/easypost.ts b/src/lib/validations/easypost.ts new file mode 100644 index 000000000..766c01b3b --- /dev/null +++ b/src/lib/validations/easypost.ts @@ -0,0 +1,34 @@ +import * as z from "zod" + +export const ratesSchema = z.object({ + toAddress: z.object({ + street1: z.string(), + street2: z.string().optional(), + city: z.string(), + state: z.string(), + zip: z.string(), + country: z.string(), + company: z.string().optional(), + phone: z.string().optional(), + email: z.string().optional(), + }), + // fromAddress: z.object({ + // street1: z.string(), + // street2: z.string().optional(), + // city: z.string(), + // state: z.string(), + // zip: z.string(), + // country: z.string(), + // company: z.string().optional(), + // phone: z.string().optional(), + // email: z.string().optional(), + // }), + storeId: z.number(), + dimensions: z.object({ + length: z.number(), + width: z.number(), + height: z.number(), + weight: z.number(), + }), +}) + diff --git a/src/types/index.ts b/src/types/index.ts index a55713feb..695bba692 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -117,3 +117,46 @@ export interface UserSubscriptionPlan extends SubscriptionPlan { isCanceled: boolean isActive: boolean } + +export interface EasyPostAddress { + company?: string + street1: string + street2?: string | null + city: string + state: string + zip: string + country: string + phone?: string +} + +export interface StripeAddress { + company?: string + line1: string + line2?: string | null + city: string + state: string + postal_code: string + country: string + phone?: string +} + +export interface Dimensions { + length: number + width: number + height: number + weight: number +} + +export interface RateResponse { + rate: number + ok: boolean + status: number + error?: string +} + +// export type GetRateProps = z.infer +export interface GetRateProps { + toAddress: EasyPostAddress + storeId: number + dimensions: Dimensions +} From 67dfba45df40f7815b93cdf1e32259087a6a57c7 Mon Sep 17 00:00:00 2001 From: JDLanctot Date: Mon, 29 Jan 2024 23:04:00 -0500 Subject: [PATCH 2/3] Now toggling the shipping switch updates payment intent --- .../(checkout)/checkout/[storeId]/page.tsx | 17 +- src/components/checkout/cart-line-items.tsx | 8 +- src/components/checkout/checkout-card.tsx | 1 - src/components/checkout/checkout-content.tsx | 180 +++++++++++++---- src/components/checkout/checkout-form.tsx | 184 +++++++----------- src/components/checkout/checkout-shell.tsx | 26 +-- src/components/ui/switch.tsx | 65 +++++-- src/hooks/use-checkout-form-state.tsx | 110 +++++++++++ src/hooks/use-shipping-rate-state.tsx | 56 ++++++ src/lib/actions/easypost.ts | 65 ++++++- src/lib/actions/stripe.ts | 114 ++++++++++- src/lib/fetchers/stripe.ts | 40 +++- src/lib/validations/cart.ts | 5 + src/lib/validations/easypost.ts | 20 +- src/lib/validations/stripe.ts | 21 ++ src/types/index.ts | 6 +- 16 files changed, 701 insertions(+), 217 deletions(-) create mode 100644 src/hooks/use-checkout-form-state.tsx create mode 100644 src/hooks/use-shipping-rate-state.tsx diff --git a/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx b/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx index c852bb453..8c39c395c 100644 --- a/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx +++ b/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx @@ -10,7 +10,7 @@ import { eq } from "drizzle-orm" import { cn } from "@/lib/utils" import { buttonVariants } from "@/components/ui/button" -import { createPaymentIntent } from "@/lib/actions/stripe" +// import { createPaymentIntent } from "@/lib/actions/stripe" import { getCart } from "@/lib/fetchers/cart" import { getStripeAccount } from "@/lib/fetchers/stripe" import CheckoutContent from "@/components/checkout/checkout-content" @@ -57,10 +57,10 @@ export default async function CheckoutPage({ params }: CheckoutPageProps) { const cartLineItems = await getCart({ storeId }) - const paymentIntentPromise = createPaymentIntent({ - storeId: store.id, - items: cartLineItems, - }) + // const paymentIntentPromise = createPaymentIntent({ + // storeId: storeId, + // items: cartLineItems, + // }) const clientUser = { firstName: user.firstName, @@ -104,12 +104,11 @@ export default async function CheckoutPage({ params }: CheckoutPageProps) { } return ( - ) } - diff --git a/src/components/checkout/cart-line-items.tsx b/src/components/checkout/cart-line-items.tsx index ea43f21cc..754276b14 100644 --- a/src/components/checkout/cart-line-items.tsx +++ b/src/components/checkout/cart-line-items.tsx @@ -86,9 +86,11 @@ export function CartLineItems({ )} {variant === "default" ? ( - {`${item.category} ${ - item.subcategory ? `/ ${item.subcategory}` : "" - }`} + {`${item.category}` + // ${ + // item.subcategory ? `/ ${item.subcategory}` : "" + // }` + } ) : null}
diff --git a/src/components/checkout/checkout-card.tsx b/src/components/checkout/checkout-card.tsx index 49240c09e..3321ace79 100644 --- a/src/components/checkout/checkout-card.tsx +++ b/src/components/checkout/checkout-card.tsx @@ -71,4 +71,3 @@ export async function CheckoutCard({ storeId }: CheckoutCardProps) { ) } - diff --git a/src/components/checkout/checkout-content.tsx b/src/components/checkout/checkout-content.tsx index cb59bec34..eb9a62542 100644 --- a/src/components/checkout/checkout-content.tsx +++ b/src/components/checkout/checkout-content.tsx @@ -2,20 +2,34 @@ import * as React from "react" import Link from "next/link" -import type { Dimensions } from "@/types" +import type { CartLineItem, GetShippingRateProps } from "@/types" import { ArrowLeftIcon } from "@radix-ui/react-icons" +import { toast } from "sonner" +import { getShippingRate } from "@/lib/actions/easypost" +import { + createPaymentIntent, + updatePaymentIntentWithShipping, +} from "@/lib/actions/stripe" import { formatPrice } from "@/lib/utils" +import { useCheckoutFormState } from "@/hooks/use-checkout-form-state" +import { useDebounce } from "@/hooks/use-debounce" +import { + getDimensions, + transformAddress, + useShipping, +} from "@/hooks/use-shipping-rate-state" import { Button } from "@/components/ui/button" import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer" import { ScrollArea } from "@/components/ui/scroll-area" import { Separator } from "@/components/ui/separator" -import ShippingLineItem from "@/components/checkout/shipping-line-item" import { CartLineItems } from "@/components/checkout/cart-line-items" import { CheckoutForm } from "@/components/checkout/checkout-form" import { CheckoutShell } from "@/components/checkout/checkout-shell" - -import type { CartLineItem } from "@/types" +import ShippingLineItem from "@/components/checkout/shipping-line-item" +import { Label } from "@/components/ui/label" +import { Switch } from "@/components/ui/switch" +import { Icons } from "@/components/icons" interface CheckoutContentProps { user: { @@ -29,43 +43,94 @@ interface CheckoutContentProps { stripeAccountId: string } cartLineItems: CartLineItem[] - paymentIntentPromise: Promise<{ - clientSecret: string | null - }> } export default function CheckoutContent({ user, store, cartLineItems, - paymentIntentPromise, }: CheckoutContentProps) { + // clientSecret needs to be accessible to the Checkout Shell and Checkout Form below + const [clientSecret, setClientSecret] = React.useState(null) + + // State management for shipping related variables const name = `${user.firstName || ""} ${user.lastName || ""}`.trim() + const { rate, setRate, total } = useShipping(cartLineItems) - const total = cartLineItems.reduce( - (total, item) => total + item.quantity * Number(item.price), - 0 - ) + // Form data state management + const { + email, + address, + confirmed, + isLoading, + isPending, + updateEmail, + updateAddress, + toggleConfirmed, + updateLoading, + startTransition, + clearForm, + } = useCheckoutFormState({ + email: user.email, + address: undefined, + confirmed: false, + }) + const debouncedAddress = useDebounce(address, 500) + + // When Confirmed is toggled, we need to update the shipping rate and payment intent + const handleShippingChange = (checked: boolean) => { + startTransition(async () => { + if (debouncedAddress) { + const shippingAddress = transformAddress(debouncedAddress) + const shippingRate = await getShippingRate({ + toAddress: shippingAddress, + items: cartLineItems, + storeId: store.id, + // dimensions: dimensions, + } as GetShippingRateProps) - // TODO: Add support for dimension packing algorithm to calculate shipping rates - const dimensions = cartLineItems.reduce( - (dimensions, item) => { - const { width, height, length, weight } = item - if (width) dimensions.width += Number(width) - if (height) dimensions.height += Number(height) - if (length) dimensions.length += Number(length) - if (weight) dimensions.weight += Number(weight) - return dimensions - }, - { - width: 10, - height: 10, - length: 10, - weight: 10, - } - ) as Dimensions + const dimensions = getDimensions(cartLineItems) - const [rate, setRate] = React.useState(0) + if (typeof shippingRate.rate === "number") { + const updatedIntent = await updatePaymentIntentWithShipping({ + toAddress: shippingAddress, + storeId: store.id, + dimensions: dimensions, + items: cartLineItems, + }) + if (updatedIntent.clientSecret) { + toggleConfirmed(checked) + setRate(shippingRate.rate) + setClientSecret(updatedIntent.clientSecret) + } else { + toast.error( + "Something went wrong with setting up the payment, please try again." + ) + } + } else { + toast.error( + "Something went wrong with the address, please update it and try again." + ) + } + } + }) + } + + // On Setup make the paymentIntent and then store the clientSecret + React.useEffect(() => { + createPaymentIntent({ + storeId: store.id, + items: cartLineItems, + }) + .then((result) => { + setClientSecret(result.clientSecret) + }) + .catch((e) => { + toast.error( + "Something went wrong with setting up the payment, please try again." + ) + }) + }, [store.id, cartLineItems]) return (
@@ -102,7 +167,11 @@ export default function CheckoutContent({ className="container h-full flex-1 pr-8" /> @@ -136,30 +205,61 @@ export default function CheckoutContent({ className="container hidden w-full max-w-xl lg:ml-auto lg:mr-0 lg:flex lg:max-h-[580px] lg:pr-[4.5rem]" />
{ - setRate(shippingRate) - }} + userFullName={name} + email={email} + address={address} + debouncedAddress={debouncedAddress} + confirmed={confirmed} + updateEmail={updateEmail} + updateAddress={updateAddress} + toggleConfirmed={toggleConfirmed} + clearForm={clearForm} + isLoading={isLoading} + updateLoading={updateLoading} + isPending={isPending} className="container max-w-xl pr-6 lg:ml-0 lg:mr-auto" /> +
+ +
+ + {isPending && ( +
+
) } - diff --git a/src/components/checkout/checkout-form.tsx b/src/components/checkout/checkout-form.tsx index 304f501bc..41c7aa791 100644 --- a/src/components/checkout/checkout-form.tsx +++ b/src/components/checkout/checkout-form.tsx @@ -10,97 +10,58 @@ import { } from "@stripe/react-stripe-js" import { toast } from "sonner" -import type { - Dimensions, - EasyPostAddress, - GetRateProps, - StripeAddress, -} from "@/types/index" -import { getShippingRate } from "@/lib/actions/easypost" import { absoluteUrl, cn } from "@/lib/utils" -import { useDebounce } from "@/hooks/use-debounce" import { Button } from "@/components/ui/button" -import { Label } from "@/components/ui/label" -import { Switch } from "@/components/ui/switch" import { Icons } from "@/components/icons" +import type { StripeAddress } from "@/types/index" // Docs: https://stripe.com/docs/payments/quickstart -interface CheckoutFormProps extends Omit, 'onRateChange'> { +interface CheckoutFormProps + extends Omit< + React.ComponentPropsWithoutRef<"form">, + "updateEmail" | "updateAddress" | "toggleConfirmed" | "clearForm" | "updateLoading" + > { storeId: number userFullName: string - userEmail: string - dimensions: Dimensions - onRateChange: (rate: number) => void -} - -const transformAddress = ( - address: StripeAddress, - additionalFields?: object -): EasyPostAddress => { - const { - line1: street1, - line2: street2, - postal_code: zip, - ...restOfAddressData - } = address - const transformedAddress = { - street1, - zip, - ...restOfAddressData, - ...additionalFields, - } as EasyPostAddress - if (street2) transformedAddress.street2 = street2 - return transformedAddress + email: string + address: StripeAddress | undefined + debouncedAddress: StripeAddress | undefined + confirmed: boolean + updateEmail: (newEmail: string) => void + updateAddress: (newAddress: StripeAddress | undefined) => void + toggleConfirmed: (newConfirmed: boolean) => void + clearForm: () => void + isLoading: boolean + updateLoading: (newLoading: boolean) => void + isPending: boolean } export function CheckoutForm({ storeId, userFullName, - userEmail, - dimensions, - onRateChange, + email, + address, + debouncedAddress, + confirmed, + updateEmail, + updateAddress, + toggleConfirmed, + clearForm, + isLoading, + updateLoading, + isPending, className, ...props }: CheckoutFormProps) { + //Stripe Elements variables const id = React.useId() const stripe = useStripe() const elements = useElements() - const [email, setEmail] = React.useState("") - const [message, setMessage] = React.useState(null) - const [address, setAddress] = React.useState(null) - const [isLoading, setIsLoading] = React.useState(false) - - const debouncedAddress = useDebounce(address, 500) - const [isPending, startTransition] = React.useTransition() - - const [confirmed, setConfirmed] = React.useState(false) - const handleConfirmedSwitchChange = (checked: boolean) => { - startTransition(async () => { - if (debouncedAddress) { - const shippingAddress = transformAddress(debouncedAddress) - const shippingRate = await getShippingRate({ - toAddress: shippingAddress, - storeId: storeId, - dimensions: dimensions, - } as GetRateProps) - - if (typeof shippingRate.rate === "number") { - onRateChange(shippingRate.rate) - setConfirmed(checked) - } else { - toast.error("Something went wrong with the address, please update it and try again.") - } - } - }) - } - React.useEffect(() => { - setConfirmed(false) - - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [debouncedAddress]) + const [message, setMessage] = React.useState(null) + // When the client secret changes, we need to update the payment intent React.useEffect(() => { if (!stripe) return @@ -130,6 +91,7 @@ export function CheckoutForm({ }) }, [stripe]) + // Payment submission async function onSubmit(event: React.FormEvent) { event.preventDefault() @@ -139,8 +101,10 @@ export function CheckoutForm({ return } - setIsLoading(true) + updateLoading(true) setMessage(null) + toggleConfirmed(false) + clearForm() const { error } = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element @@ -164,7 +128,7 @@ export function CheckoutForm({ toast.error(message) - setIsLoading(false) + updateLoading(false) } return ( @@ -177,56 +141,54 @@ export function CheckoutForm({ > setEmail(e.value.email)} + options={{ defaultValues: { email: email } }} + onChange={(e) => updateEmail(e.value.email)} /> { - if (e.complete) setAddress(e.value.address) + if (e.complete) updateAddress(e.value.address) }} - /> - { + toggleConfirmed(false) }} /> -
- - -
- + )} + {confirmed && ( + + )} ) } - diff --git a/src/components/checkout/checkout-shell.tsx b/src/components/checkout/checkout-shell.tsx index 483bbeca9..5a86a0591 100644 --- a/src/components/checkout/checkout-shell.tsx +++ b/src/components/checkout/checkout-shell.tsx @@ -6,21 +6,20 @@ import { type StripeElementsOptions } from "@stripe/stripe-js" import { getStripe } from "@/lib/get-stripe" import { cn } from "@/lib/utils" +import { Icons } from "@/components/icons" // Docs: https://stripe.com/docs/payments/quickstart interface CheckoutShellProps extends React.PropsWithChildren> { storeStripeAccountId: string - paymentIntentPromise: Promise<{ - clientSecret: string | null - }> + clientSecret: string | null } export function CheckoutShell({ children, storeStripeAccountId, - paymentIntentPromise, + clientSecret, className, ...props }: CheckoutShellProps) { @@ -29,13 +28,17 @@ export function CheckoutShell({ [storeStripeAccountId] ) - // Calling createPaymentIntentAction at the client component to avoid stripe authentication error in server action - const { clientSecret } = React.use(paymentIntentPromise) - if (!clientSecret) { return (
-
+
+
+
+
) } @@ -45,13 +48,14 @@ export function CheckoutShell({ appearance: { theme: "stripe", }, + loader: "auto", } return (
- - {children} - + + {children} +
) } diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx index 5f4117f0f..7e5861f4b 100644 --- a/src/components/ui/switch.tsx +++ b/src/components/ui/switch.tsx @@ -2,28 +2,71 @@ import * as React from "react" import * as SwitchPrimitives from "@radix-ui/react-switch" +import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" +const switchRootVariants = cva( + "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50", + { + variants: { + variant: { + primary: "data-[state=checked]:bg-border data-[state=unchecked]:bg-accent", + }, + size: { + default: "h-5 w-9", + sm: "h-4 w-8", + lg: "h-6 w-12", + xl: "h-8 w-16", + }, + }, + defaultVariants: { + variant: "primary", + size: "default", + }, + } +) + +const switchThumbVariants = cva( + "pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=unchecked]:translate-x-0", + { + variants: { + variant: { + primary: "data-[state=checked]:bg-background data-[state=unchecked]:bg-background", + }, + size: { + default: "h-4 w-4 data-[state=checked]:translate-x-4", + sm: "h-3 w-3 data-[state=checked]:translate-x-4", + lg: "h-5 w-5 data-[state=checked]:translate-x-6", + xl: "h-7 w-7 data-[state=checked]:translate-x-8", + }, + }, + defaultVariants: { + variant: "primary", + size: "default", + }, + } +) + +export interface SwitchProps + extends React.ComponentPropsWithoutRef, + VariantProps, VariantProps { +} + const Switch = React.forwardRef< React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( + SwitchProps +>(({ className, variant, size, ...props }, ref) => ( )) -Switch.displayName = SwitchPrimitives.Root.displayName +Switch.displayName = "Switch" -export { Switch } +export { Switch, switchRootVariants, switchThumbVariants } diff --git a/src/hooks/use-checkout-form-state.tsx b/src/hooks/use-checkout-form-state.tsx new file mode 100644 index 000000000..9af4b8746 --- /dev/null +++ b/src/hooks/use-checkout-form-state.tsx @@ -0,0 +1,110 @@ +import { useEffect, useState, useTransition } from "react" + +import type { StripeAddress } from "@/types/index" + +interface FormState { + email: string + address: StripeAddress | undefined + confirmed: boolean +} + +function parseAddress(jsonString: string) { + try { + return JSON.parse(jsonString) as StripeAddress | undefined + } catch (e) { + console.error("Error parsing JSON:", e) + return undefined + } +} + +function parseEmail(jsonString: string) { + try { + return JSON.parse(jsonString) as string + } catch (e) { + console.error("Error parsing JSON:", e) + return "" + } +} + +function parseConfirmed(jsonString: string) { + try { + return JSON.parse(jsonString) as boolean + } catch (e) { + console.error("Error parsing JSON:", e) + return false + } +} + +export function useCheckoutFormState(initialState: FormState) { + // State declarations + const [address, setAddress] = useState(() => { + const savedAddress = localStorage.getItem("checkoutAddress") + return savedAddress ? parseAddress(savedAddress) : initialState.address + }) + + const [email, setEmail] = useState(() => { + const savedEmail = localStorage.getItem("checkoutEmail") + return savedEmail ? parseEmail(savedEmail) : initialState.email + }) + + const [confirmed, setConfirmed] = useState(() => { + const savedConfirmed = localStorage.getItem("confirmedState") + return savedConfirmed !== null ? parseConfirmed(savedConfirmed) : initialState.confirmed + }) + + const [isLoading, setIsLoading] = useState(false) + + const [isPending, startTransition] = useTransition() + + + // Effects for synchronization with local storage + useEffect(() => { + localStorage.setItem("checkoutEmail", JSON.stringify(email)) + }, [email]) + + useEffect(() => { + localStorage.setItem("checkoutAddress", JSON.stringify(address)) + }, [address]) + + useEffect(() => { + localStorage.setItem("confirmedState", JSON.stringify(confirmed)) + }, [confirmed]) + + + // Functions to update the states + const updateEmail = (newEmail: string) => { + setEmail(newEmail) + } + + const updateAddress = (newAddress: StripeAddress | undefined) => { + setAddress(newAddress) + } + + const toggleConfirmed = (newConfirmed: boolean) => { + setConfirmed(newConfirmed) + } + + const updateLoading = (newLoading: boolean) => { + setIsLoading(newLoading) + } + + const clearForm: () => void = () => { + localStorage.removeItem('confirmedState') + localStorage.removeItem('checkoutEmail') + localStorage.removeItem('checkoutAddress') + } + + return { + email, + address, + confirmed, + isLoading, + isPending, + updateEmail, + updateAddress, + toggleConfirmed, + updateLoading, + startTransition, + clearForm + } +} diff --git a/src/hooks/use-shipping-rate-state.tsx b/src/hooks/use-shipping-rate-state.tsx new file mode 100644 index 000000000..722a9d81d --- /dev/null +++ b/src/hooks/use-shipping-rate-state.tsx @@ -0,0 +1,56 @@ +"use client" + +import { useState } from "react" +import type { CartLineItem, EasyPostAddress, StripeAddress, Dimensions } from "@/types" + +export const transformAddress = ( + address: StripeAddress, + additionalFields?: object +): EasyPostAddress => { + const { + line1: street1, + line2: street2, + postal_code: zip, + ...restOfAddressData + } = address + const transformedAddress = { + street1, + zip, + ...restOfAddressData, + ...additionalFields, + } as EasyPostAddress + if (street2) transformedAddress.street2 = street2 + return transformedAddress +} + +export function useShipping(cartLineItems: CartLineItem[]) { + const [rate, setRate] = useState(0) + + const total = cartLineItems.reduce( + (total, item) => total + item.quantity * Number(item.price), + 0 + ) + + return { rate, setRate, total } +} + +export function getDimensions(cartLineItems: CartLineItem[]) { + // TODO: Add support for dimension packing algorithm to calculate shipping rates + const dimensions = cartLineItems.reduce( + (dimensions, item) => { + const { width, height, length, weight } = item + if (width) dimensions.width += Number(width) + if (height) dimensions.height += Number(height) + if (length) dimensions.length += Number(length) + if (weight) dimensions.weight += Number(weight) + return dimensions + }, + { + width: 10, + height: 10, + length: 10, + weight: 10, + } + ) as Dimensions + return dimensions +} diff --git a/src/lib/actions/easypost.ts b/src/lib/actions/easypost.ts index 7583f9cdc..2b0c1254a 100644 --- a/src/lib/actions/easypost.ts +++ b/src/lib/actions/easypost.ts @@ -1,6 +1,6 @@ "use server" -import type { GetRateProps } from "@/types" +import type { GetShippingRateProps, Dimensions } from "@/types" import type { Address, Parcel } from "@easypost/api" import { Shipment } from "@easypost/api" import { z } from "zod" @@ -15,10 +15,49 @@ interface ShipmentResponse { status: number } -export async function getShippingRate(input: GetRateProps): Promise { +export async function buyShippingLabel(shipment: Shipment) { + // Buy postage label with the lowest rate + const updatedShipment = await Shipment.buy(shipment.id, shipment.lowestRate()) + + return updatedShipment.postage_label.label_url +} + +// export async function createShipment(data: GetShippingRateProps) { +// const fromAddress = await easypost.Address.createAndVerify(data.fromAddress) +// const toAddress = await easypost.Address.createAndVerify(data.toAddress) +// const parcel = await easypost.Parcel.create(data.dimensions) + +// const shipment = await Shipment.create({ +// to_address: fromAddress, +// from_address: toAddress, +// parcel: parcel, +// }) + +// return shipment +// } + +export async function getShippingRate(input: GetShippingRateProps): Promise { try { const data = ratesSchema.parse(input) + // const store = await db + // .select({ + // street1: stores.street1, + // street2: stores.street2, + // city: stores.city, + // state: stores.state, + // zip: stores.zip, + // country: stores.country, + // }) + // .from(stores) + // .where(eq(stores.id, data.storeId)) + // .execute() + // .then((rows) => rows[0]) + + // if (!store) { + // throw new Error("Store not found.") + // } + // TODO: Update DB Schema to include store address and get from there const storeAddress = { company: "EasyPost", @@ -31,11 +70,30 @@ export async function getShippingRate(input: GetRateProps): Promise { + const { width, height, length, weight } = item + if (width) dimensions.width += Number(width) + if (height) dimensions.height += Number(height) + if (length) dimensions.length += Number(length) + if (weight) dimensions.weight += Number(weight) + return dimensions + }, + { + width: 10, + height: 10, + length: 10, + weight: 10, + } + ) as Dimensions + // TODO: Once out of Beta this should become easypost.BetaRate.retrieveStatelessRates({...}) const shipment = await easypost.Shipment.create({ to_address: data.toAddress as Address, from_address: storeAddress as Address, - parcel: data.dimensions as Parcel, + parcel: dimensions as Parcel, }) // handled the return like it was a response from a POST but can be changed @@ -54,4 +112,3 @@ export async function getShippingRate(input: GetRateProps): Promise -): Promise<{ clientSecret: string | null }> { +): Promise<{ paymentId: string | null, clientSecret: string | null }> { try { const input = createPaymentIntentSchema.parse(rawInput) @@ -193,9 +198,108 @@ export async function createPaymentIntent( application_fee_amount: fee, currency: "usd", metadata, - automatic_payment_methods: { - enabled: true, - }, + // automatic_payment_methods: { + // enabled: true, + // }, + payment_method_types: ['card', 'link'], + // payment_method_options: { + // link: { + // persistent_token: req.cookies[LINK_PERSISTENT_TOKEN_COOKIE_NAME], + // } + // } + }, + { + stripeAccount: payment.stripeAccountId, + } + ) + + // Update the cart with the payment intent id and client secret + if (paymentIntent.status === "requires_payment_method") { + await db + .update(carts) + .set({ + paymentIntentId: paymentIntent.id, + clientSecret: paymentIntent.client_secret, + }) + .where(eq(carts.id, cartId)) + } + + return { + paymentId: paymentIntent.id, + clientSecret: paymentIntent.client_secret, + } + } catch (err) { + console.error(err) + return { + paymentId: null, + clientSecret: null, + } + } +} + +export async function updatePaymentIntentWithShipping( + rawInput: z.infer +): Promise<{ clientSecret: string | null }> { + try { + const input = updatePaymentIntentSchema.parse(rawInput) + + const { isConnected, payment } = await getStripeAccount(input) + + if (!isConnected || !payment) { + throw new Error("Store not connected to Stripe.") + } + + if (!payment.stripeAccountId) { + throw new Error("Stripe account not found.") + } + + const cartId = Number(cookies().get("cartId")?.value) + + const checkoutItems: CheckoutItem[] = input.items.map((item) => ({ + productId: item.id, + price: Number(item.price), + quantity: item.quantity, + })) + + const metadata = { + cartId: isNaN(cartId) ? "" : cartId, + // Stripe metadata values must be within 500 characters string + items: JSON.stringify(checkoutItems), + } + + const { total, fee } = calculateOrderAmount(input.items) + + // Calculate shipping cost using EasyPost based on the address + const rate = await getShippingRate({ + toAddress: input.toAddress, + items: input.items, + storeId: input.storeId, + // dimensions: input.dimensions, + } as GetShippingRateProps) + + const shippingCost = rate.rate + if (typeof(shippingCost) !== "number" || shippingCost === null) { + throw new Error("Shipping cost not found.") + } else if (shippingCost < 0) { + throw new Error("Invalid shipping cost calculated.") + } + + // Create a payment intent if it doesn't exist + const paymentIntent = await stripe.paymentIntents.create( + { + amount: total, + application_fee_amount: fee + Number((shippingCost * 100).toFixed(0)), + currency: "usd", + metadata, + // automatic_payment_methods: { + // enabled: true, + // }, + payment_method_types: ['card', 'link'], + // payment_method_options: { + // link: { + // persistent_token: req.cookies[LINK_PERSISTENT_TOKEN_COOKIE_NAME], + // } + // } }, { stripeAccount: payment.stripeAccountId, diff --git a/src/lib/fetchers/stripe.ts b/src/lib/fetchers/stripe.ts index 870344e31..cd7a9cd7d 100644 --- a/src/lib/fetchers/stripe.ts +++ b/src/lib/fetchers/stripe.ts @@ -1,3 +1,5 @@ +"use server" + import { cookies } from "next/headers" import { db } from "@/db" import { payments, stores } from "@/db/schema" @@ -18,9 +20,45 @@ import { // Getting the subscription plan for a user export async function getSubscriptionPlan( - userId: string + userId: string, + userRole?: string | null ): Promise { try { + // If onboarding user, return onboarding plan which allows them to setup products to be transfered to another store + if (userRole === "onboarding") { + return { + id: "onboarding", + name: "Onboarding", + description: + "Allows the user to setup products to be transfered to another store.", + features: [ + "Create up to 50 stores", + "Create up to 100 products per store", + ], + stripePriceId: "onboarding", + price: 0, + isSubscribed: true, + isCanceled: false, + isActive: true, + } as UserSubscriptionPlan + } else if (userRole === "admin") { + return { + id: "admin", + name: "Admin", + description: + "Allows the user to verify that products are setup correctly before transfering products.", + features: [ + "Create up to 10000 stores", + "Create up to 100 products per store", + ], + stripePriceId: "admin", + price: 0, + isSubscribed: true, + isCanceled: false, + isActive: true, + } as UserSubscriptionPlan + } + const user = await clerkClient.users.getUser(userId) if (!user) { diff --git a/src/lib/validations/cart.ts b/src/lib/validations/cart.ts index 4213a48ac..28db0814b 100644 --- a/src/lib/validations/cart.ts +++ b/src/lib/validations/cart.ts @@ -11,6 +11,7 @@ export const checkoutItemSchema = cartItemSchema.extend({ price: z.number(), }) +// TODO: Remove optional on dimensions export const cartLineItemSchema = z.object({ id: z.number(), name: z.string(), @@ -28,6 +29,10 @@ export const cartLineItemSchema = z.object({ subcategory: z.string().optional().nullable(), price: z.string().regex(/^\d+(\.\d{1,2})?$/), inventory: z.number().default(0), + width: z.number().optional().nullable(), + height: z.number().optional().nullable(), + length: z.number().optional().nullable(), + weight: z.number().optional().nullable(), quantity: z.number(), storeId: z.number(), storeName: z.string().optional().nullable(), diff --git a/src/lib/validations/easypost.ts b/src/lib/validations/easypost.ts index 766c01b3b..8190ed827 100644 --- a/src/lib/validations/easypost.ts +++ b/src/lib/validations/easypost.ts @@ -1,4 +1,5 @@ import * as z from "zod" +import { cartLineItemSchema } from "@/lib/validations/cart" export const ratesSchema = z.object({ toAddress: z.object({ @@ -12,23 +13,6 @@ export const ratesSchema = z.object({ phone: z.string().optional(), email: z.string().optional(), }), - // fromAddress: z.object({ - // street1: z.string(), - // street2: z.string().optional(), - // city: z.string(), - // state: z.string(), - // zip: z.string(), - // country: z.string(), - // company: z.string().optional(), - // phone: z.string().optional(), - // email: z.string().optional(), - // }), + items: z.array(cartLineItemSchema), storeId: z.number(), - dimensions: z.object({ - length: z.number(), - width: z.number(), - height: z.number(), - weight: z.number(), - }), }) - diff --git a/src/lib/validations/stripe.ts b/src/lib/validations/stripe.ts index a97c63dd3..5685102ea 100644 --- a/src/lib/validations/stripe.ts +++ b/src/lib/validations/stripe.ts @@ -35,3 +35,24 @@ export const getPaymentIntentSchema = z.object({ paymentIntentId: z.string(), deliveryPostalCode: z.string().optional().nullable(), }) + +export const updatePaymentIntentSchema = z.object({ + toAddress: z.object({ + company: z.string().optional(), + street1: z.string(), + street2: z.string().optional().nullable(), + city: z.string(), + state: z.string(), + zip: z.string(), + country: z.string(), + phone: z.string().optional(), + }), + storeId: z.number(), + dimensions: z.object({ + length: z.number(), + width: z.number(), + height: z.number(), + weight: z.number(), + }), + items: z.array(cartLineItemSchema), +}) diff --git a/src/types/index.ts b/src/types/index.ts index 695bba692..0daea4073 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -154,9 +154,9 @@ export interface RateResponse { error?: string } -// export type GetRateProps = z.infer -export interface GetRateProps { +// export type GetShippingRateProps = z.infer +export interface GetShippingRateProps { toAddress: EasyPostAddress + items: CartLineItem[] storeId: number - dimensions: Dimensions } From 66d02cd52761063b71ccf1f0e3d69cc2cdd9bfa8 Mon Sep 17 00:00:00 2001 From: JDLanctot Date: Mon, 29 Jan 2024 23:33:33 -0500 Subject: [PATCH 3/3] Typechecking, linting, etc --- pnpm-lock.yaml | 1244 +++++++++-------- .../(checkout)/checkout/[storeId]/page.tsx | 91 +- .../checkout/[storeId]/success/page.tsx | 2 + .../(checkout)/checkout/[storeId]/page.tsx | 114 -- src/app/api/uploadthing/core.ts | 1 + src/components/checkout/cart-line-items.tsx | 9 +- src/components/checkout/cart-sheet.tsx | 1 - src/components/checkout/checkout-card.tsx | 5 +- src/components/checkout/checkout-content.tsx | 11 +- src/components/checkout/checkout-form.tsx | 9 +- src/components/checkout/checkout-shell.tsx | 8 +- .../checkout/shipping-line-item.tsx | 28 +- src/components/ui/switch.tsx | 10 +- src/hooks/use-checkout-form-state.tsx | 16 +- src/hooks/use-shipping-rate-state.tsx | 7 +- src/lib/actions/easypost.ts | 27 +- src/lib/actions/stripe.ts | 14 +- src/lib/easypost.ts | 1 - src/lib/validations/easypost.ts | 1 + 19 files changed, 731 insertions(+), 868 deletions(-) delete mode 100644 src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ac255023..3892cb53d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: dependencies: '@clerk/nextjs': specifier: ^4.29.4 - version: 4.29.4(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) + version: 4.29.5(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) '@clerk/themes': specifier: ^1.7.9 version: 1.7.9(react@18.2.0) @@ -88,10 +88,10 @@ dependencies: version: 0.0.14(react@18.2.0) '@stripe/react-stripe-js': specifier: ^2.4.0 - version: 2.4.0(@stripe/stripe-js@2.3.0)(react-dom@18.2.0)(react@18.2.0) + version: 2.4.0(@stripe/stripe-js@2.4.0)(react-dom@18.2.0)(react@18.2.0) '@stripe/stripe-js': specifier: ^2.3.0 - version: 2.3.0 + version: 2.4.0 '@t3-oss/env-nextjs': specifier: ^0.7.3 version: 0.7.3(typescript@5.3.3)(zod@3.22.4) @@ -103,13 +103,13 @@ dependencies: version: 8.11.7(react-dom@18.2.0)(react@18.2.0) '@tremor/react': specifier: ^3.13.2 - version: 3.13.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.1) + version: 3.13.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.1) '@uploadthing/react': specifier: ^6.2.0 - version: 6.2.0(next@14.1.0)(react@18.2.0)(uploadthing@6.2.0) + version: 6.2.2(next@14.1.0)(react@18.2.0)(uploadthing@6.3.1) ai: specifier: ^2.2.31 - version: 2.2.31(react@18.2.0)(solid-js@1.8.11)(svelte@4.2.9)(vue@3.4.15) + version: 2.2.31(react@18.2.0)(solid-js@1.8.11)(svelte@4.2.8)(vue@3.4.14) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -124,22 +124,22 @@ dependencies: version: 0.3.4(esbuild@0.19.11) date-fns: specifier: ^3.3.0 - version: 3.3.0 + version: 3.3.1 drizzle-orm: specifier: ^0.29.3 - version: 0.29.3(@opentelemetry/api@1.7.0)(@planetscale/database@1.14.0)(@types/react@18.2.48)(mysql2@3.7.1)(react@18.2.0) + version: 0.29.3(@opentelemetry/api@1.7.0)(@planetscale/database@1.14.0)(@types/react@18.2.48)(mysql2@3.9.1)(react@18.2.0) embla-carousel-react: specifier: 8.0.0-rc19 version: 8.0.0-rc19(react@18.2.0) mysql2: specifier: ^3.7.1 - version: 3.7.1 + version: 3.9.1 nanoid: specifier: ^5.0.4 version: 5.0.4 next: specifier: 14.1.0 - version: 14.1.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) next-contentlayer: specifier: ^0.3.4 version: 0.3.4(contentlayer@0.3.4)(esbuild@0.19.11)(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) @@ -148,7 +148,7 @@ dependencies: version: 0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) openai: specifier: ^4.25.0 - version: 4.25.0 + version: 4.26.0 react: specifier: 18.2.0 version: 18.2.0 @@ -157,7 +157,7 @@ dependencies: version: 2.3.3(react@18.2.0) react-day-picker: specifier: ^8.10.0 - version: 8.10.0(date-fns@3.3.0)(react@18.2.0) + version: 8.10.0(date-fns@3.3.1)(react@18.2.0) react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) @@ -166,7 +166,7 @@ dependencies: version: 14.2.3(react@18.2.0) react-email: specifier: ^2.0.0 - version: 2.0.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(eslint@8.56.0) + version: 2.0.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(eslint@8.56.0) react-hook-form: specifier: ^7.49.3 version: 7.49.3(react@18.2.0) @@ -187,28 +187,28 @@ dependencies: version: 8.5.3(@types/react@18.2.48)(react@18.2.0) resend: specifier: ^3.0.0 - version: 3.0.0 + version: 3.1.0 server-only: specifier: ^0.0.1 version: 0.0.1 sonner: specifier: ^1.3.1 - version: 1.3.1(react-dom@18.2.0)(react@18.2.0) + version: 1.4.0(react-dom@18.2.0)(react@18.2.0) stripe: specifier: ^14.13.0 - version: 14.13.0 + version: 14.14.0 tailwind-merge: specifier: ^2.2.0 - version: 2.2.0 + version: 2.2.1 tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.1) uploadthing: specifier: ^6.2.0 - version: 6.2.0 + version: 6.3.1 vaul: specifier: ^0.8.8 - version: 0.8.8(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + version: 0.8.9(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) zod: specifier: ^3.22.4 version: 3.22.4 @@ -231,7 +231,7 @@ devDependencies: version: 8.56.2 '@types/node': specifier: ^20.11.5 - version: 20.11.5 + version: 20.11.10 '@types/react': specifier: ^18.2.48 version: 18.2.48 @@ -243,10 +243,10 @@ devDependencies: version: 15.5.11 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + version: 6.20.0(eslint@8.56.0)(typescript@5.3.3) autoprefixer: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.33) @@ -267,7 +267,7 @@ devDependencies: version: 9.1.0(eslint@8.56.0) eslint-plugin-tailwindcss: specifier: ^3.14.0 - version: 3.14.0(tailwindcss@3.4.1) + version: 3.14.1(tailwindcss@3.4.1) postcss: specifier: ^8.4.33 version: 8.4.33 @@ -285,7 +285,7 @@ devDependencies: version: 1.2.0 rehype-pretty-code: specifier: ^0.12.5 - version: 0.12.5(shikiji@0.9.19) + version: 0.12.6(shikiji@0.10.2) rehype-slug: specifier: ^6.0.0 version: 6.0.0 @@ -323,7 +323,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.20 /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} @@ -336,20 +336,20 @@ packages: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.8 - '@babel/parser': 7.23.6 + '@babel/generator': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -358,22 +358,22 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.5 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: '@babel/compat-data': 7.23.5 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 @@ -386,27 +386,27 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/types': 7.23.5 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.5 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.5 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -417,13 +417,13 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.5 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.5 /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} @@ -437,13 +437,13 @@ packages: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.23.8: - resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 transitivePeerDependencies: - supports-color @@ -455,44 +455,67 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.5 + /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.23.6 + dev: false - /@babel/runtime@7.23.8: - resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 + /@babel/runtime@7.23.9: + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/generator': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} @@ -500,6 +523,7 @@ packages: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + dev: false /@clerk/backend@0.37.3(react@18.2.0): resolution: {integrity: sha512-ZfYacm4wNRf4Qe4fRVgfMUaQROryL6CT+Sg/qqfutoeJUXDORAMyu5Mm2kHZ+s+n1MSXnLRegDjWhILlKniUyw==} @@ -547,8 +571,8 @@ packages: - react dev: false - /@clerk/nextjs@4.29.4(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zJ3IH9LskDlCa/38q/0OAwn1YReMuVFqcw3B2kfwAEFZ17e4UalRxFgmWnionfFT7m1YEXXM51c5UDbPrejVug==} + /@clerk/nextjs@4.29.5(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-6hNaqKsg/B6HuauyMOgnhES/YWt4g/43/fbS/IHmCKgmhhLkaNpRuOspDOOoUaz3wvtb9TP/t6trgqF4W7cylA==} engines: {node: '>=14'} peerDependencies: next: '>=10' @@ -560,7 +584,7 @@ packages: '@clerk/clerk-sdk-node': 4.13.7(react@18.2.0) '@clerk/shared': 1.3.1(react@18.2.0) '@clerk/types': 3.60.0 - next: 14.1.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) path-to-regexp: 6.2.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -658,7 +682,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.3.2 gray-matter: 4.0.3 - imagescript: 1.2.18 + imagescript: 1.2.17 micromatch: 4.0.5 ts-pattern: 4.3.0 unified: 10.1.2 @@ -697,22 +721,22 @@ packages: optional: true dependencies: '@effect-ts/core': 0.60.5 - '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/sdk-trace-base@1.20.0) - '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/exporter-trace-otlp-grpc@0.39.1)(@opentelemetry/sdk-trace-base@1.20.0) - '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/sdk-trace-base@1.20.0)(@opentelemetry/sdk-trace-node@1.20.0) + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/sdk-trace-base@1.18.1) + '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/exporter-trace-otlp-grpc@0.39.1)(@opentelemetry/sdk-trace-base@1.18.1) + '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/sdk-trace-base@1.18.1)(@opentelemetry/sdk-trace-node@1.18.1) '@js-temporal/polyfill': 0.4.4 '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-node': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.20.0 + '@opentelemetry/resources': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-node': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.18.1 chokidar: 3.5.3 hash-wasm: 4.11.0 inflection: 2.0.1 memfs: 3.5.3 - oo-ascii-tree: 1.94.0 + oo-ascii-tree: 1.92.0 ts-pattern: 4.3.0 type-fest: 3.13.1 dev: false @@ -746,7 +770,7 @@ packages: '@effect-ts/system': 0.57.5 dev: false - /@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/exporter-trace-otlp-grpc@0.39.1)(@opentelemetry/sdk-trace-base@1.20.0): + /@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/exporter-trace-otlp-grpc@0.39.1)(@opentelemetry/sdk-trace-base@1.18.1): resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==} peerDependencies: '@effect-ts/core': ^0.60.2 @@ -756,14 +780,14 @@ packages: '@opentelemetry/sdk-trace-base': ^1.13.0 dependencies: '@effect-ts/core': 0.60.5 - '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/sdk-trace-base@1.20.0) + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/sdk-trace-base@1.18.1) '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.18.1(@opentelemetry/api@1.7.0) dev: false - /@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/sdk-trace-base@1.20.0)(@opentelemetry/sdk-trace-node@1.20.0): + /@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/sdk-trace-base@1.18.1)(@opentelemetry/sdk-trace-node@1.18.1): resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==} peerDependencies: '@effect-ts/core': ^0.60.2 @@ -773,14 +797,14 @@ packages: '@opentelemetry/sdk-trace-node': ^1.13.0 dependencies: '@effect-ts/core': 0.60.5 - '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/sdk-trace-base@1.20.0) + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/sdk-trace-base@1.18.1) '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-node': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-node': 1.18.1(@opentelemetry/api@1.7.0) dev: false - /@effect-ts/otel@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.20.0)(@opentelemetry/sdk-trace-base@1.20.0): + /@effect-ts/otel@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.7.0)(@opentelemetry/core@1.18.1)(@opentelemetry/sdk-trace-base@1.18.1): resolution: {integrity: sha512-AmZJHl7t0+Peh7Yb2+hqn6r9+rd9/UfeA4AMV9h0YGTdOyouyFfD3wzWlxnAUzAQ4Lrod4kC7Noruret4EpqpA==} peerDependencies: '@effect-ts/core': ^0.60.2 @@ -790,8 +814,8 @@ packages: dependencies: '@effect-ts/core': 0.60.5 '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.18.1(@opentelemetry/api@1.7.0) dev: false /@effect-ts/system@0.57.5: @@ -863,7 +887,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm@0.18.20: @@ -881,7 +904,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-x64@0.18.20: @@ -899,7 +921,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/darwin-arm64@0.18.20: @@ -917,7 +938,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-x64@0.18.20: @@ -935,7 +955,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-arm64@0.18.20: @@ -953,7 +972,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-x64@0.18.20: @@ -971,7 +989,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm64@0.18.20: @@ -989,7 +1006,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm@0.18.20: @@ -1007,7 +1023,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ia32@0.18.20: @@ -1025,7 +1040,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-loong64@0.18.20: @@ -1043,7 +1057,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-mips64el@0.18.20: @@ -1061,7 +1074,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ppc64@0.18.20: @@ -1079,7 +1091,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-riscv64@0.18.20: @@ -1097,7 +1108,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-s390x@0.18.20: @@ -1115,7 +1125,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-x64@0.18.20: @@ -1133,7 +1142,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/netbsd-x64@0.18.20: @@ -1151,7 +1159,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true /@esbuild/openbsd-x64@0.18.20: @@ -1169,7 +1176,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true /@esbuild/sunos-x64@0.18.20: @@ -1187,7 +1193,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true /@esbuild/win32-arm64@0.18.20: @@ -1205,7 +1210,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-ia32@0.18.20: @@ -1223,7 +1227,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-x64@0.18.20: @@ -1241,7 +1244,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): @@ -1264,7 +1266,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.24.0 + globals: 13.23.0 ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1286,17 +1288,17 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: false - /@floating-ui/core@1.5.3: - resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} + /@floating-ui/core@1.5.1: + resolution: {integrity: sha512-QgcKYwzcc8vvZ4n/5uklchy8KVdjJwcOeI+HnnTNclJjs2nYsy23DOCf+sSV1kBwD9yDAoVKCkv/gEPzgQU3Pw==} dependencies: - '@floating-ui/utils': 0.2.1 + '@floating-ui/utils': 0.1.6 dev: false - /@floating-ui/dom@1.5.4: - resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} + /@floating-ui/dom@1.5.3: + resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} dependencies: - '@floating-ui/core': 1.5.3 - '@floating-ui/utils': 0.2.1 + '@floating-ui/core': 1.5.1 + '@floating-ui/utils': 0.1.6 dev: false /@floating-ui/react-dom@1.3.0(react-dom@18.2.0)(react@18.2.0): @@ -1305,18 +1307,18 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.5.4 + '@floating-ui/dom': 1.5.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@floating-ui/react-dom@2.0.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==} + /@floating-ui/react-dom@2.0.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.5.4 + '@floating-ui/dom': 1.5.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -1334,16 +1336,16 @@ packages: tabbable: 6.2.0 dev: false - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + /@floating-ui/utils@0.1.6: + resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} dev: false - /@grpc/grpc-js@1.9.14: - resolution: {integrity: sha512-nOpuzZ2G3IuMFN+UPPpKrC6NsLmWsTqSsm66IRfnBt1D4pwTqE27lmbpcPM+l2Ua4gE7PfjRHI6uedAy7hoXUw==} + /@grpc/grpc-js@1.9.12: + resolution: {integrity: sha512-Um5MBuge32TS3lAKX02PGCnFM4xPT996yLgZNb5H03pn6NyJ4Iwn5YcPq6Jj9yxGRk7WOgaZFtVRH5iTdYBeUg==} engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.7.10 - '@types/node': 20.11.5 + '@types/node': 20.11.10 dev: false /@grpc/proto-loader@0.7.10: @@ -1353,7 +1355,7 @@ packages: dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 - protobufjs: 7.2.6 + protobufjs: 7.2.5 yargs: 17.7.2 dev: false @@ -1387,11 +1389,11 @@ packages: react-hook-form: 7.49.3(react@18.2.0) dev: false - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1401,8 +1403,8 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} /@ianvs/prettier-plugin-sort-imports@4.1.1(prettier@3.2.4): resolution: {integrity: sha512-kJhXq63ngpTQ2dxgf5GasbPJWsJA3LgoOdd7WGhpUSzLgLgI4IsIzYkbJf9kmpOHe7Vdm/o3PcRA3jmizXUuAQ==} @@ -1413,11 +1415,11 @@ packages: '@vue/compiler-sfc': optional: true dependencies: - '@babel/core': 7.23.7 - '@babel/generator': 7.23.6 - '@babel/parser': 7.23.6 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/core': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 prettier: 3.2.4 semver: 7.5.4 transitivePeerDependencies: @@ -1441,7 +1443,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.20 /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -1455,14 +1457,14 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.21 dev: false /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -1488,7 +1490,7 @@ packages: react: ^16.8||^17||^18 dependencies: react: 18.2.0 - web-vitals: 3.5.1 + web-vitals: 3.5.0 dev: false /@mdx-js/esbuild@2.3.0(esbuild@0.19.11): @@ -1720,7 +1722,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 + fastq: 1.15.0 /@one-ini/wasm@0.1.1: resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} @@ -1738,8 +1740,8 @@ packages: engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/context-async-hooks@1.20.0(@opentelemetry/api@1.7.0): - resolution: {integrity: sha512-PNecg4zvRF5y5h3luK/hzUEmgZtZ8hbX19TMALj3SVShYS2MrDZG6uT27uLkAwACMfK9BP7/UyXXjND5lkaC2w==} + /@opentelemetry/context-async-hooks@1.18.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-HHfJR32NH2x0b69CACCwH8m1dpNALoCTtpgmIWMNkeMGNUeKT48d4AX4xsF4uIRuUoRTbTgtSBRvS+cF97qwCQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.8.0' @@ -1757,14 +1759,14 @@ packages: '@opentelemetry/semantic-conventions': 1.13.0 dev: false - /@opentelemetry/core@1.20.0(@opentelemetry/api@1.7.0): - resolution: {integrity: sha512-lSRvk5AIdD6CtgYJcJXh0wGibQ3S/8bC2qbqKs9wK8e0K1tsWV6YkGFOqVc+jIRlCbZoIBeZzDe5UI+vb94uvg==} + /@opentelemetry/core@1.18.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-kvnUqezHMhsQvdsnhnqTNfAJs3ox/isB0SVrM1dhVFw7SsB7TstuVa6fgWnN2GdPyilIFLUvvbTZoVRmx6eiRg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.20.0 + '@opentelemetry/semantic-conventions': 1.18.1 dev: false /@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.7.0): @@ -1773,7 +1775,7 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.9.14 + '@grpc/grpc-js': 1.9.12 '@opentelemetry/api': 1.7.0 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.7.0) '@opentelemetry/otlp-grpc-exporter-base': 0.39.1(@opentelemetry/api@1.7.0) @@ -1798,11 +1800,11 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.9.14 + '@grpc/grpc-js': 1.9.12 '@opentelemetry/api': 1.7.0 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.7.0) '@opentelemetry/otlp-exporter-base': 0.39.1(@opentelemetry/api@1.7.0) - protobufjs: 7.2.6 + protobufjs: 7.2.5 dev: false /@opentelemetry/otlp-transformer@0.39.1(@opentelemetry/api@1.7.0): @@ -1820,24 +1822,24 @@ packages: '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.7.0) dev: false - /@opentelemetry/propagator-b3@1.20.0(@opentelemetry/api@1.7.0): - resolution: {integrity: sha512-rDLcZGhhe+VoKKY77U5o5IW5D+OMoXg44GYmCn68Jx3O5TBGMJ2oZBcCxLgHlAA/ZdqkdRgQD0E40s8bXq41JA==} + /@opentelemetry/propagator-b3@1.18.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-oSTUOsnt31JDx5SoEy27B5jE1/tiPvvE46w7CDKj0R5oZhCCfYH2bbSGa7NOOyDXDNqQDkgqU1DIV/xOd3f8pw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) dev: false - /@opentelemetry/propagator-jaeger@1.20.0(@opentelemetry/api@1.7.0): - resolution: {integrity: sha512-JqdKlyyrgIinR8ZhMoJrL54AAHMDEACLLXYLnabzFTHeoBEsC36ZoO98hVucrpUvkDCJMvdVHH/4cvvj+boUzg==} + /@opentelemetry/propagator-jaeger@1.18.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-Kh4M1Qewv0Tbmts6D8LgNzx99IjdE18LCmY/utMkgVyU7Bg31Yuj+X6ZyoIRKPcD2EV4rVkuRI16WVMRuGbhWA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) dev: false /@opentelemetry/resources@1.13.0(@opentelemetry/api@1.7.0): @@ -1851,15 +1853,15 @@ packages: '@opentelemetry/semantic-conventions': 1.13.0 dev: false - /@opentelemetry/resources@1.20.0(@opentelemetry/api@1.7.0): - resolution: {integrity: sha512-nOpV0vGegSq+9ze2cEDvO3BMA5pGBhmhKZiAlj+xQZjiEjPmJtdHIuBLRvptu2ahcbFJw85gIB9BYHZOvZK1JQ==} + /@opentelemetry/resources@1.18.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-JjbcQLYMttXcIabflLRuaw5oof5gToYV9fuXbcsoOeQ0BlbwUn6DAZi++PNsSz2jjPeASfDls10iaO/8BRIPRA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.20.0 + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.18.1 dev: false /@opentelemetry/sdk-logs@0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.7.0): @@ -1899,30 +1901,30 @@ packages: '@opentelemetry/semantic-conventions': 1.13.0 dev: false - /@opentelemetry/sdk-trace-base@1.20.0(@opentelemetry/api@1.7.0): - resolution: {integrity: sha512-BAIZ0hUgnhdb3OBQjn1FKGz/Iwie4l+uOMKklP7FGh7PTqEAbbzDNMJKaZQh6KepF7Fq+CZDRKslD3yrYy2Tzw==} + /@opentelemetry/sdk-trace-base@1.18.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-tRHfDxN5dO+nop78EWJpzZwHsN1ewrZRVVwo03VJa3JQZxToRDH29/+MB24+yoa+IArerdr7INFJiX/iN4gjqg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.20.0 + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.18.1 dev: false - /@opentelemetry/sdk-trace-node@1.20.0(@opentelemetry/api@1.7.0): - resolution: {integrity: sha512-3RRl4O63Wr/QyWhjreB7xilFhj3cQHWuMqESPwWHb7eJogNmjj1JQsRda/i8xj1Td4Bk+2ojC7aA8mwbKbEfPQ==} + /@opentelemetry/sdk-trace-node@1.18.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-ML0l9TNlfLoplLF1F8lb95NGKgdm6OezDS3Ymqav9sYxMd5bnH2LZVzd4xEF+ov5vpZJOGdWxJMs2nC9no7+xA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.8.0' dependencies: '@opentelemetry/api': 1.7.0 - '@opentelemetry/context-async-hooks': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/core': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-b3': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-jaeger': 1.20.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.20.0(@opentelemetry/api@1.7.0) + '@opentelemetry/context-async-hooks': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-b3': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-jaeger': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.18.1(@opentelemetry/api@1.7.0) semver: 7.5.4 dev: false @@ -1931,8 +1933,8 @@ packages: engines: {node: '>=14'} dev: false - /@opentelemetry/semantic-conventions@1.20.0: - resolution: {integrity: sha512-3zLJJCgTKYpbqFX8drl8hOCHtdchELC+kGqlVcV4mHW1DiElTtv1Nt9EKBptTd1IfL56QkuYnWJ3DeHd2Gtu/A==} + /@opentelemetry/semantic-conventions@1.18.1: + resolution: {integrity: sha512-+NLGHr6VZwcgE/2lw8zDIufOCGnzsA5CbQIMleXZTrgkBd0TanCX+MiDYJ1TOS4KL/Tqk0nFRxawnaYr6pkZkA==} engines: {node: '>=14'} dev: false @@ -1948,7 +1950,7 @@ packages: resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} engines: {node: '>=8.0.0'} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: false /@peculiar/webcrypto@1.4.1: @@ -1958,7 +1960,7 @@ packages: '@peculiar/asn1-schema': 2.3.8 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.5 - tslib: 2.4.1 + tslib: 2.6.2 webcrypto-core: 1.7.7 dev: false @@ -2023,19 +2025,19 @@ packages: /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 dev: false /@radix-ui/primitive@1.0.0: resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 dev: false /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 dev: false /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): @@ -2051,7 +2053,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) @@ -2080,7 +2082,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2106,7 +2108,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -2127,7 +2129,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -2148,7 +2150,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2172,7 +2174,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2200,7 +2202,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2228,7 +2230,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) @@ -2244,7 +2246,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 react: 18.2.0 dev: false @@ -2257,7 +2259,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@types/react': 18.2.48 react: 18.2.0 dev: false @@ -2267,7 +2269,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 react: 18.2.0 dev: false @@ -2280,7 +2282,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@types/react': 18.2.48 react: 18.2.0 dev: false @@ -2291,7 +2293,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) @@ -2325,7 +2327,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2355,7 +2357,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@types/react': 18.2.48 react: 18.2.0 dev: false @@ -2366,7 +2368,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) @@ -2389,7 +2391,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) @@ -2414,7 +2416,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) @@ -2439,7 +2441,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2458,7 +2460,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 react: 18.2.0 dev: false @@ -2471,7 +2473,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@types/react': 18.2.48 react: 18.2.0 dev: false @@ -2482,7 +2484,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) @@ -2503,7 +2505,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2526,7 +2528,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2549,7 +2551,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 dev: false @@ -2563,7 +2565,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@types/react': 18.2.48 react: 18.2.0 @@ -2582,7 +2584,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -2603,7 +2605,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2641,7 +2643,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2675,7 +2677,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2710,7 +2712,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2745,8 +2747,8 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 - '@floating-ui/react-dom': 2.0.6(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.5 + '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2775,8 +2777,8 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 - '@floating-ui/react-dom': 2.0.6(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.5 + '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2798,7 +2800,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2817,7 +2819,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -2838,7 +2840,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -2852,7 +2854,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 @@ -2872,7 +2874,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@types/react': 18.2.48 @@ -2887,7 +2889,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-slot': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2906,7 +2908,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -2927,7 +2929,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2956,7 +2958,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -2985,7 +2987,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) @@ -3026,7 +3028,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -3047,7 +3049,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) @@ -3070,7 +3072,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) react: 18.2.0 dev: false @@ -3084,7 +3086,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@types/react': 18.2.48 react: 18.2.0 @@ -3103,7 +3105,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -3130,7 +3132,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -3158,7 +3160,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -3185,7 +3187,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -3208,7 +3210,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -3240,7 +3242,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) @@ -3264,7 +3266,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 react: 18.2.0 dev: false @@ -3277,7 +3279,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@types/react': 18.2.48 react: 18.2.0 dev: false @@ -3287,7 +3289,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 dev: false @@ -3301,7 +3303,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@types/react': 18.2.48 react: 18.2.0 @@ -3312,7 +3314,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 dev: false @@ -3326,7 +3328,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@types/react': 18.2.48 react: 18.2.0 @@ -3337,7 +3339,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 react: 18.2.0 dev: false @@ -3350,7 +3352,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@types/react': 18.2.48 react: 18.2.0 dev: false @@ -3364,7 +3366,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@types/react': 18.2.48 react: 18.2.0 dev: false @@ -3378,7 +3380,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/rect': 1.0.1 '@types/react': 18.2.48 react: 18.2.0 @@ -3393,7 +3395,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) '@types/react': 18.2.48 react: 18.2.0 @@ -3412,7 +3414,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.48 '@types/react-dom': 18.2.18 @@ -3423,7 +3425,7 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 dev: false /@react-email/body@0.0.7(react@18.2.0): @@ -3584,16 +3586,6 @@ packages: react: 18.2.0 dev: false - /@react-email/render@0.0.11: - resolution: {integrity: sha512-Ec4vLkVbxoQhThBK1H++FdO4NgCeucg57qmwQ8A9xbozA2hWJiT2jJb5IA/bLE0YdixK8BeucXghJp84YZIG7A==} - engines: {node: '>=18.0.0'} - dependencies: - html-to-text: 9.0.5 - js-beautify: 1.14.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@react-email/render@0.0.12: resolution: {integrity: sha512-S8WRv/PqECEi6x0QJBj0asnAb5GFtJaHlnByxLETLkgJjc76cxMYDH4r9wdbuJ4sjkcbpwP3LPnVzwS+aIjT7g==} engines: {node: '>=18.0.0'} @@ -3640,8 +3632,8 @@ packages: react: 18.2.0 dev: false - /@rushstack/eslint-patch@1.7.0: - resolution: {integrity: sha512-Jh4t/593gxs0lJZ/z3NnasKlplXT2f+4y/LZYuaKZW5KAaiVFL/fThhs+17EbUd53jUVJ0QudYCBGbN/psvaqg==} + /@rushstack/eslint-patch@1.6.0: + resolution: {integrity: sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==} dev: true /@selderee/plugin-htmlparser2@0.11.0: @@ -3655,21 +3647,21 @@ packages: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} dev: false - /@stripe/react-stripe-js@2.4.0(@stripe/stripe-js@2.3.0)(react-dom@18.2.0)(react@18.2.0): + /@stripe/react-stripe-js@2.4.0(@stripe/stripe-js@2.4.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1jVQEL3OuhuzNlf4OdfqovHt+MkWh8Uh8xpLxx/xUFUDdF+7/kDOrGKy+xJO3WLCfZUL7NAy+/ypwXbbYZi0tg==} peerDependencies: '@stripe/stripe-js': ^1.44.1 || ^2.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@stripe/stripe-js': 2.3.0 + '@stripe/stripe-js': 2.4.0 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@stripe/stripe-js@2.3.0: - resolution: {integrity: sha512-iTwzjw1ORUR+1pH21+C/M05w+Jh5hAuE4QUei7Gnku65N7QpEaHtyVszYMYDBs6iNyLrD1tfQTSrjD6NkOA/ww==} + /@stripe/stripe-js@2.4.0: + resolution: {integrity: sha512-WFkQx1mbs2b5+7looI9IV1BLa3bIApuN3ehp9FP58xGg7KL9hCHDECgW3BwO9l9L+xBPVAD7Yjn1EhGe6EDTeA==} dev: false /@swc/core-darwin-arm64@1.3.101: @@ -3879,8 +3871,8 @@ packages: resolution: {integrity: sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==} dev: false - /@tremor/react@3.13.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.1): - resolution: {integrity: sha512-Imw5wei9A8fOUIKkqt8+XDzY8NCh88cO/hmzhv0HV+SMydj/Km0WpMvQqeo1Ft6GUIVNhcIo1L/T3/02+OwHWA==} + /@tremor/react@3.13.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.1): + resolution: {integrity: sha512-v0JTAhZr1VTj67nmrb5WF/vI5Mq3Fj7LigPYwqFZcYwrF1UXkUwv5mEt8V5GR5QVMmprmYx7A6m8baImt99IQQ==} peerDependencies: react: ^18.0.0 react-dom: '>=16.6.0' @@ -3892,8 +3884,8 @@ packages: react: 18.2.0 react-day-picker: 8.10.0(date-fns@2.30.0)(react@18.2.0) react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - recharts: 2.10.4(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + react-transition-state: 2.1.1(react-dom@18.2.0)(react@18.2.0) + recharts: 2.11.0(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) tailwind-merge: 1.14.0 transitivePeerDependencies: - prop-types @@ -3910,13 +3902,13 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.5 + '@types/node': 20.11.10 dev: false /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.5 + '@types/node': 20.11.10 dev: false /@types/cookie@0.4.1: @@ -3929,13 +3921,13 @@ packages: '@types/connect': 3.4.38 '@types/express': 4.17.14 '@types/keygrip': 1.0.6 - '@types/node': 20.11.5 + '@types/node': 20.11.10 dev: false /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 20.11.5 + '@types/node': 20.11.10 dev: false /@types/d3-array@3.2.1: @@ -4010,8 +4002,8 @@ packages: /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 20.11.5 - '@types/qs': 6.9.11 + '@types/node': 20.11.10 + '@types/qs': 6.9.10 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: false @@ -4021,12 +4013,12 @@ packages: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.17.41 - '@types/qs': 6.9.11 + '@types/qs': 6.9.10 '@types/serve-static': 1.15.5 dev: false - /@types/hast@2.3.9: - resolution: {integrity: sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==} + /@types/hast@2.3.8: + resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} dependencies: '@types/unist': 2.0.10 dev: false @@ -4085,32 +4077,32 @@ packages: /@types/ms@0.7.34: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - /@types/node-fetch@2.6.11: - resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} - dependencies: - '@types/node': 20.11.5 - form-data: 4.0.0 - dev: false - /@types/node-fetch@2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 20.11.5 + '@types/node': 20.11.10 form-data: 3.0.1 dev: false + /@types/node-fetch@2.6.9: + resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} + dependencies: + '@types/node': 20.11.10 + form-data: 4.0.0 + dev: false + /@types/node@16.18.6: resolution: {integrity: sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==} dev: false - /@types/node@18.19.8: - resolution: {integrity: sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==} + /@types/node@18.19.1: + resolution: {integrity: sha512-mZJ9V11gG5Vp0Ox2oERpeFDl+JvCwK24PGy76vVY/UgBtjwJWc5rYBThFxmbnYOm9UPZNm6wEl/sxHt2SU7x9A==} dependencies: undici-types: 5.26.5 dev: false - /@types/node@20.11.5: - resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==} + /@types/node@20.11.10: + resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==} dependencies: undici-types: 5.26.5 @@ -4129,8 +4121,8 @@ packages: /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + /@types/qs@6.9.10: + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} dev: false /@types/range-parser@1.2.7: @@ -4170,7 +4162,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.5 + '@types/node': 20.11.10 dev: false /@types/serve-static@1.15.5: @@ -4178,7 +4170,7 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.5 + '@types/node': 20.11.10 dev: false /@types/unist@2.0.10: @@ -4190,9 +4182,9 @@ packages: /@types/webpack@5.28.5(@swc/core@1.3.101)(esbuild@0.19.11): resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} dependencies: - '@types/node': 20.11.5 + '@types/node': 20.11.10 tapable: 2.2.1 - webpack: 5.89.0(@swc/core@1.3.101)(esbuild@0.19.11) + webpack: 5.90.0(@swc/core@1.3.101)(esbuild@0.19.11) transitivePeerDependencies: - '@swc/core' - esbuild @@ -4200,8 +4192,8 @@ packages: - webpack-cli dev: false - /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} + /@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -4212,11 +4204,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.20.0 + '@typescript-eslint/type-utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -4229,8 +4221,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} + /@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -4239,10 +4231,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/scope-manager': 6.20.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -4250,16 +4242,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.19.0: - resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} + /@typescript-eslint/scope-manager@6.20.0: + resolution: {integrity: sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/visitor-keys': 6.20.0 dev: true - /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} + /@typescript-eslint/type-utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -4268,8 +4260,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -4278,13 +4270,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.19.0: - resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} + /@typescript-eslint/types@6.20.0: + resolution: {integrity: sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): - resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} + /@typescript-eslint/typescript-estree@6.20.0(typescript@5.3.3): + resolution: {integrity: sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -4292,8 +4284,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -4305,8 +4297,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} + /@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -4314,9 +4306,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.20.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -4324,11 +4316,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.19.0: - resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} + /@typescript-eslint/visitor-keys@6.20.0: + resolution: {integrity: sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/types': 6.20.0 eslint-visitor-keys: 3.4.3 dev: true @@ -4346,8 +4338,8 @@ packages: resolution: {integrity: sha512-ZUo1JHOPPMZDsUw1mOhhVDIvJGlsjj6T0xJ/YJtulyJwL43S9B5pxg1cHcRuTEgjaxj7B55jiqQ6r9mDrrjH9A==} dev: false - /@uploadthing/react@6.2.0(next@14.1.0)(react@18.2.0)(uploadthing@6.2.0): - resolution: {integrity: sha512-DTD4R9OaVH/UDbs+J/s2UFMjNVQfHA+FCjAUEoa1JgTXQUfP8HvpOl8pCMcLqWx555e98bZrSgw50LjsOWGS0A==} + /@uploadthing/react@6.2.2(next@14.1.0)(react@18.2.0)(uploadthing@6.3.1): + resolution: {integrity: sha512-fDfVooLTbC5/FM1o/chPDf5i8DRxCOeRSuRl0R6yh/jIHTdDO2kwXeM5DTaBazJmaEabh5GB+I9Rwg8nU0QdVA==} peerDependencies: next: '*' react: ^17.0.2 || ^18.0.0 @@ -4357,19 +4349,19 @@ packages: optional: true dependencies: '@uploadthing/dropzone': 0.1.1 - '@uploadthing/shared': 6.1.0(@uploadthing/mime-types@0.2.2) + '@uploadthing/shared': 6.2.0(@uploadthing/mime-types@0.2.2) attr-accept: 2.2.2 file-selector: 0.6.0 - next: 14.1.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 tailwind-merge: 1.14.0 - uploadthing: 6.2.0 + uploadthing: 6.3.1 transitivePeerDependencies: - '@uploadthing/mime-types' dev: false - /@uploadthing/shared@6.1.0(@uploadthing/mime-types@0.2.2): - resolution: {integrity: sha512-pZNTqq/3QbAnLF6wRKAa9lM7MxdP057z3W3E6vZiHnhmwmdMllJpaVs3TWqe0wbSy6jcDDRLhDCuU/Vvr2KsZw==} + /@uploadthing/shared@6.2.0(@uploadthing/mime-types@0.2.2): + resolution: {integrity: sha512-GMC1gwZa9X48RZwuY7gGse7E8TXYMAMUNaYWEQL2ctVhMZv7viCPyMyZ0yMqBsQmOeGfbmycPnUeNE9IuesJGg==} peerDependencies: '@uploadthing/mime-types': ^0.2.2 peerDependenciesMeta: @@ -4377,79 +4369,80 @@ packages: optional: true dependencies: '@uploadthing/mime-types': 0.2.2 + std-env: 3.7.0 dev: false - /@vue/compiler-core@3.4.15: - resolution: {integrity: sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==} + /@vue/compiler-core@3.4.14: + resolution: {integrity: sha512-ro4Zzl/MPdWs7XwxT7omHRxAjMbDFRZEEjD+2m3NBf8YzAe3HuoSEZosXQo+m1GQ1G3LQ1LdmNh1RKTYe+ssEg==} dependencies: '@babel/parser': 7.23.6 - '@vue/shared': 3.4.15 + '@vue/shared': 3.4.14 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 dev: false - /@vue/compiler-dom@3.4.15: - resolution: {integrity: sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==} + /@vue/compiler-dom@3.4.14: + resolution: {integrity: sha512-nOZTY+veWNa0DKAceNWxorAbWm0INHdQq7cejFaWM1WYnoNSJbSEKYtE7Ir6lR/+mo9fttZpPVI9ZFGJ1juUEQ==} dependencies: - '@vue/compiler-core': 3.4.15 - '@vue/shared': 3.4.15 + '@vue/compiler-core': 3.4.14 + '@vue/shared': 3.4.14 dev: false - /@vue/compiler-sfc@3.4.15: - resolution: {integrity: sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==} + /@vue/compiler-sfc@3.4.14: + resolution: {integrity: sha512-1vHc9Kv1jV+YBZC/RJxQJ9JCxildTI+qrhtDh6tPkR1O8S+olBUekimY0km0ZNn8nG1wjtFAe9XHij+YLR8cRQ==} dependencies: '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.4.15 - '@vue/compiler-dom': 3.4.15 - '@vue/compiler-ssr': 3.4.15 - '@vue/shared': 3.4.15 + '@vue/compiler-core': 3.4.14 + '@vue/compiler-dom': 3.4.14 + '@vue/compiler-ssr': 3.4.14 + '@vue/shared': 3.4.14 estree-walker: 2.0.2 magic-string: 0.30.5 postcss: 8.4.33 source-map-js: 1.0.2 dev: false - /@vue/compiler-ssr@3.4.15: - resolution: {integrity: sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==} + /@vue/compiler-ssr@3.4.14: + resolution: {integrity: sha512-bXT6+oAGlFjTYVOTtFJ4l4Jab1wjsC0cfSfOe2B4Z0N2vD2zOBSQ9w694RsCfhjk+bC2DY5Gubb1rHZVii107Q==} dependencies: - '@vue/compiler-dom': 3.4.15 - '@vue/shared': 3.4.15 + '@vue/compiler-dom': 3.4.14 + '@vue/shared': 3.4.14 dev: false - /@vue/reactivity@3.4.15: - resolution: {integrity: sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==} + /@vue/reactivity@3.4.14: + resolution: {integrity: sha512-xRYwze5Q4tK7tT2J4uy4XLhK/AIXdU5EBUu9PLnIHcOKXO0uyXpNNMzlQKuq7B+zwtq6K2wuUL39pHA6ZQzObw==} dependencies: - '@vue/shared': 3.4.15 + '@vue/shared': 3.4.14 dev: false - /@vue/runtime-core@3.4.15: - resolution: {integrity: sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==} + /@vue/runtime-core@3.4.14: + resolution: {integrity: sha512-qu+NMkfujCoZL6cfqK5NOfxgXJROSlP2ZPs4CTcVR+mLrwl4TtycF5Tgo0QupkdBL+2kigc6EsJlTcuuZC1NaQ==} dependencies: - '@vue/reactivity': 3.4.15 - '@vue/shared': 3.4.15 + '@vue/reactivity': 3.4.14 + '@vue/shared': 3.4.14 dev: false - /@vue/runtime-dom@3.4.15: - resolution: {integrity: sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==} + /@vue/runtime-dom@3.4.14: + resolution: {integrity: sha512-B85XmcR4E7XsirEHVqhmy4HPbRT9WLFWV9Uhie3OapV9m1MEN9+Er6hmUIE6d8/l2sUygpK9RstFM2bmHEUigA==} dependencies: - '@vue/runtime-core': 3.4.15 - '@vue/shared': 3.4.15 + '@vue/runtime-core': 3.4.14 + '@vue/shared': 3.4.14 csstype: 3.1.3 dev: false - /@vue/server-renderer@3.4.15(vue@3.4.15): - resolution: {integrity: sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw==} + /@vue/server-renderer@3.4.14(vue@3.4.14): + resolution: {integrity: sha512-pwSKXQfYdJBTpvWHGEYI+akDE18TXAiLcGn+Q/2Fj8wQSHWztoo7PSvfMNqu6NDhp309QXXbPFEGCU5p85HqkA==} peerDependencies: - vue: 3.4.15 + vue: 3.4.14 dependencies: - '@vue/compiler-ssr': 3.4.15 - '@vue/shared': 3.4.15 - vue: 3.4.15(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.14 + '@vue/shared': 3.4.14 + vue: 3.4.14(typescript@5.3.3) dev: false - /@vue/shared@3.4.15: - resolution: {integrity: sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==} + /@vue/shared@3.4.14: + resolution: {integrity: sha512-nmi3BtLpvqXAWoRZ6HQ+pFJOHBU4UnH3vD3opgmwXac7vhaHKA9nj1VeGjMggdB9eLtW83eHyPCmOU1qzdsC7Q==} dev: false /@webassemblyjs/ast@1.11.6: @@ -4606,12 +4599,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - /agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -4619,7 +4606,7 @@ packages: humanize-ms: 1.2.1 dev: false - /ai@2.2.31(react@18.2.0)(solid-js@1.8.11)(svelte@4.2.9)(vue@3.4.15): + /ai@2.2.31(react@18.2.0)(solid-js@1.8.11)(svelte@4.2.8)(vue@3.4.14): resolution: {integrity: sha512-WQH13RxP+RYo9IE/FX8foNQh9gcKO/dhl9OGy5JL2bHJVBlnugPmH2CYJWaRt+mvjXHaU8txB+jzGo/fbtH2HA==} engines: {node: '>=14.6'} peerDependencies: @@ -4642,12 +4629,12 @@ packages: react: 18.2.0 solid-js: 1.8.11 solid-swr-store: 0.10.7(solid-js@1.8.11)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.9) - svelte: 4.2.9 + sswr: 2.0.0(svelte@4.2.8) + svelte: 4.2.8 swr: 2.2.0(react@18.2.0) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.4.15) - vue: 3.4.15(typescript@5.3.3) + swrv: 1.0.4(vue@3.4.14) + vue: 3.4.14(typescript@5.3.3) dev: false /ajv-keywords@3.5.2(ajv@6.12.6): @@ -4820,6 +4807,10 @@ packages: engines: {node: '>=0.10.0'} dev: false + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + /asn1js@3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} @@ -4860,8 +4851,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001579 + browserslist: 4.22.1 + caniuse-lite: 1.0.30001565 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -4876,8 +4867,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001579 + browserslist: 4.22.3 + caniuse-lite: 1.0.30001581 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -4899,13 +4890,6 @@ packages: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: dequal: 2.0.3 - dev: true - - /axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} - dependencies: - dequal: 2.0.3 - dev: false /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -4959,15 +4943,26 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.640 + caniuse-lite: 1.0.30001565 + electron-to-chromium: 1.4.601 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + update-browserslist-db: 1.0.13(browserslist@4.22.1) + + /browserslist@4.22.3: + resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001581 + electron-to-chromium: 1.4.650 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.3) + dev: true /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -4991,7 +4986,7 @@ packages: dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 - set-function-length: 1.2.0 + set-function-length: 1.1.1 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -5027,8 +5022,11 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + /caniuse-lite@1.0.30001565: + resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} + + /caniuse-lite@1.0.30001581: + resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -5472,10 +5470,6 @@ packages: engines: {node: '>=12'} dev: false - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: false - /d@1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: @@ -5496,11 +5490,11 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 dev: false - /date-fns@3.3.0: - resolution: {integrity: sha512-xuouT0GuI2W8yXhCMn/AXbSl1Av3wu2hJXxMnnILTY3bYY0UgNK0qOwVXqdFBrobW5qbX1TuOTgMw7c2H2OuhA==} + /date-fns@3.3.1: + resolution: {integrity: sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==} dev: false /debounce@2.0.0: @@ -5665,14 +5659,7 @@ packages: /dom-helpers@3.4.0: resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} dependencies: - '@babel/runtime': 7.23.8 - dev: false - - /dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dependencies: - '@babel/runtime': 7.23.8 - csstype: 3.1.3 + '@babel/runtime': 7.23.5 dev: false /dom-serializer@2.0.0: @@ -5706,7 +5693,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /dotenv-cli@7.3.0: @@ -5714,7 +5701,7 @@ packages: hasBin: true dependencies: cross-spawn: 7.0.3 - dotenv: 16.3.2 + dotenv: 16.3.1 dotenv-expand: 10.0.0 minimist: 1.2.8 dev: true @@ -5729,8 +5716,8 @@ packages: engines: {node: '>=12'} dev: false - /dotenv@16.3.2: - resolution: {integrity: sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: true @@ -5763,7 +5750,7 @@ packages: - supports-color dev: true - /drizzle-orm@0.29.3(@opentelemetry/api@1.7.0)(@planetscale/database@1.14.0)(@types/react@18.2.48)(mysql2@3.7.1)(react@18.2.0): + /drizzle-orm@0.29.3(@opentelemetry/api@1.7.0)(@planetscale/database@1.14.0)(@types/react@18.2.48)(mysql2@3.9.1)(react@18.2.0): resolution: {integrity: sha512-uSE027csliGSGYD0pqtM+SAQATMREb3eSM/U8s6r+Y0RFwTKwftnwwSkqx3oS65UBgqDOM0gMTl5UGNpt6lW0A==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' @@ -5837,7 +5824,7 @@ packages: '@opentelemetry/api': 1.7.0 '@planetscale/database': 1.14.0 '@types/react': 18.2.48 - mysql2: 3.7.1 + mysql2: 3.9.1 react: 18.2.0 dev: false @@ -5855,8 +5842,12 @@ packages: semver: 7.5.4 dev: false - /electron-to-chromium@1.4.640: - resolution: {integrity: sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==} + /electron-to-chromium@1.4.601: + resolution: {integrity: sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==} + + /electron-to-chromium@1.4.650: + resolution: {integrity: sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==} + dev: true /embla-carousel-react@8.0.0-rc19(react@18.2.0): resolution: {integrity: sha512-4BBj1HvlUqhWXFyDJOL/JbQ74jtekfdH646B1wQzM9QmWn6CEcbD/SmovKqc6B5jYTKaaGEGEEw7bpUJRajA8w==} @@ -5911,7 +5902,7 @@ packages: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.11.5 + '@types/node': 20.11.10 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -5979,8 +5970,8 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.1.0 - safe-regex-test: 1.0.2 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 @@ -6008,7 +5999,7 @@ packages: has-symbols: 1.0.3 internal-slot: 1.0.6 iterator.prototype: 1.1.2 - safe-array-concat: 1.1.0 + safe-array-concat: 1.0.1 dev: true /es-module-lexer@1.4.1: @@ -6171,12 +6162,12 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 14.1.0 - '@rushstack/eslint-patch': 1.7.0 - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@rushstack/eslint-patch': 1.6.0 + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -6223,7 +6214,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.56.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6233,8 +6224,8 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -6246,7 +6237,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -6267,17 +6258,17 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -6286,7 +6277,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -6295,7 +6286,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -6304,7 +6295,7 @@ packages: object.groupby: 1.0.1 object.values: 1.1.7 semver: 6.3.1 - tsconfig-paths: 3.15.0 + tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -6317,7 +6308,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -6370,8 +6361,8 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-tailwindcss@3.14.0(tailwindcss@3.4.1): - resolution: {integrity: sha512-SGy4JmZoP5m1bXCbcsPfQg1/axOdriJf9L22HghNMyDTM5mybg2XEkaMwgax4aR13zZJRRB1nWmkuYUn+SV6/Q==} + /eslint-plugin-tailwindcss@3.14.1(tailwindcss@3.4.1): + resolution: {integrity: sha512-orNkVzJ1fdCkj5d8AHE3tAbixNpMJRoKoHPnxZbZ6iBHTsNvOEmeBz62C3THPhFnXCXaD55SRbNjqGzMEXRoZA==} engines: {node: '>=12.13.0'} peerDependencies: tailwindcss: ^3.4.0 @@ -6418,7 +6409,7 @@ packages: '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -6437,7 +6428,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 + globals: 13.23.0 graphemer: 1.4.0 ignore: 5.3.0 imurmurhash: 0.1.4 @@ -6618,8 +6609,12 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: false + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 @@ -6640,7 +6635,7 @@ packages: engines: {node: ^12.20 || >= 14.13} dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 3.3.2 + web-streams-polyfill: 3.2.1 dev: false /file-entry-cache@6.0.1: @@ -6889,6 +6884,16 @@ packages: path-scurry: 1.10.1 dev: false + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + 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 + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -6914,8 +6919,8 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -7040,7 +7045,7 @@ packages: /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/unist': 2.0.10 hastscript: 7.2.0 property-information: 6.4.0 @@ -7081,7 +7086,7 @@ packages: /hast-util-parse-selector@3.1.1: resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 dev: false /hast-util-parse-selector@4.0.0: @@ -7093,7 +7098,7 @@ packages: /hast-util-raw@7.2.3: resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/parse5': 6.0.3 hast-util-from-parse5: 7.1.2 hast-util-to-parse5: 7.1.0 @@ -7111,7 +7116,7 @@ packages: dependencies: '@types/estree': 1.0.5 '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/unist': 2.0.10 comma-separated-tokens: 2.0.3 estree-util-attach-comments: 2.1.1 @@ -7131,7 +7136,7 @@ packages: /hast-util-to-html@8.0.4: resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/unist': 2.0.10 ccount: 2.0.1 comma-separated-tokens: 2.0.3 @@ -7169,7 +7174,7 @@ packages: /hast-util-to-parse5@7.1.0: resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 comma-separated-tokens: 2.0.3 property-information: 6.4.0 space-separated-tokens: 2.0.2 @@ -7201,7 +7206,7 @@ packages: /hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 @@ -7211,7 +7216,7 @@ packages: /hastscript@7.2.0: resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 3.1.1 property-information: 6.4.0 @@ -7294,8 +7299,8 @@ packages: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} - /imagescript@1.2.18: - resolution: {integrity: sha512-8AwTawraXovLo2PgKvFt96SZqJDwl0CnHDyrtoPUQHMmoA7u9M8EnqFZwCofSM+Uo623Z580iKW74bs2fzjoYQ==} + /imagescript@1.2.17: + resolution: {integrity: sha512-gUibUVTqbd2AeakephgVshjTL9zqh7k4Ea9yk9z8O9jjn11qU3vQWbMRDWGVzQl1t/cLeHYjclefjx8HblXo9Q==} engines: {node: '>=14.0.0'} dev: false @@ -7653,7 +7658,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.5 + '@types/node': 20.11.10 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -8100,7 +8105,7 @@ packages: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} dependencies: '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 @@ -8125,7 +8130,7 @@ packages: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} dependencies: '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/mdast': 3.0.15 '@types/unist': 2.0.10 ccount: 2.0.1 @@ -8176,7 +8181,7 @@ packages: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 @@ -8213,7 +8218,7 @@ packages: /mdast-util-to-hast@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/mdast': 3.0.15 mdast-util-definitions: 5.1.2 micromark-util-sanitize-uri: 1.2.0 @@ -8223,8 +8228,8 @@ packages: unist-util-visit: 4.1.2 dev: false - /mdast-util-to-hast@13.1.0: - resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + /mdast-util-to-hast@13.0.2: + resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} dependencies: '@types/hast': 3.0.3 '@types/mdast': 4.0.3 @@ -8234,7 +8239,6 @@ packages: trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 dev: false /mdast-util-to-markdown@1.5.0: @@ -8283,7 +8287,7 @@ packages: peerDependencies: esbuild: 0.* dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.19.11) '@fal-works/esbuild-plugin-global-externals': 2.1.2 '@mdx-js/esbuild': 2.3.0(esbuild@0.19.11) @@ -8875,6 +8879,12 @@ packages: mime-db: 1.52.0 dev: false + /mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: false + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -8945,8 +8955,8 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /mysql2@3.7.1: - resolution: {integrity: sha512-4EEqYu57mnkW5+Bvp5wBebY7PpfyrmvJ3knHcmLkp8FyBu4kqgrF2GxIjsC2tbLNZWqJaL21v/MYH7bU5f03oA==} + /mysql2@3.9.1: + resolution: {integrity: sha512-3njoWAAhGBYy0tWBabqUQcLtczZUxrmmtc2vszQUekg3kTJyZ5/IeLC3Fo04u6y6Iy5Sba7pIIa2P/gs8D3ZeQ==} engines: {node: '>= 8.0'} dependencies: denque: 2.1.0 @@ -9013,7 +9023,7 @@ packages: '@contentlayer/core': 0.3.4(esbuild@0.19.11) '@contentlayer/utils': 0.3.4 contentlayer: 0.3.4(esbuild@0.19.11) - next: 14.1.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -9030,7 +9040,7 @@ packages: react: '*' react-dom: '*' dependencies: - next: 14.1.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -9039,7 +9049,7 @@ packages: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: true - /next@14.0.5-canary.46(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0): + /next@14.0.5-canary.46(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-u8yiAK7L+fl/U9yFmq3VOpkHlImx5wg3OoDz3qxTXhPmmMzNcPbblWgxBf5d6Z+aik8BEn27L31k/tXCRzwFxA==} engines: {node: '>=18.17.0'} hasBin: true @@ -9058,12 +9068,12 @@ packages: '@opentelemetry/api': 1.7.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001579 + caniuse-lite: 1.0.30001565 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.7)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.5)(react@18.2.0) optionalDependencies: '@next/swc-darwin-arm64': 14.0.5-canary.46 '@next/swc-darwin-x64': 14.0.5-canary.46 @@ -9079,7 +9089,7 @@ packages: - babel-plugin-macros dev: false - /next@14.1.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0): + /next@14.1.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} engines: {node: '>=18.17.0'} hasBin: true @@ -9098,12 +9108,12 @@ packages: '@opentelemetry/api': 1.7.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001579 + caniuse-lite: 1.0.30001581 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.7)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.5)(react@18.2.0) optionalDependencies: '@next/swc-darwin-arm64': 14.1.0 '@next/swc-darwin-x64': 14.1.0 @@ -9270,24 +9280,24 @@ packages: mimic-fn: 2.1.0 dev: false - /oo-ascii-tree@1.94.0: - resolution: {integrity: sha512-i6UllReifEW2InBJHVFJNxrledRp3yr/yKVbpDmgWTguRe8/7BtBK3njzjvZNcPLEAtiWWxr0o9SpwYjapmTOw==} + /oo-ascii-tree@1.92.0: + resolution: {integrity: sha512-rLSPbnakn5Wb3dOIVtrmn8jfHKqWv7bROpyBiw6DExq+dOG7qC49EIs89hBhyHkvLolX0oC+0a/RMPAyHEZ+1w==} engines: {node: '>= 14.17.0'} dev: false - /openai@4.25.0: - resolution: {integrity: sha512-qLMFOizjxKuDfQkBrczZPYo6XVL4bdcuz9MR11Q+M91kGcs8dQw+O90nRcC+qWuhaGphQkfXQJMn4cd7Yew3Kg==} + /openai@4.26.0: + resolution: {integrity: sha512-HPC7tgYdeP38F3uHA5WgnoXZyGbAp9jgcIo23p6It+q/07u4C+NZ8xHKlMShsPbDDmFRpPsa3vdbXYpbhJH3eg==} hasBin: true dependencies: - '@types/node': 18.19.8 - '@types/node-fetch': 2.6.11 + '@types/node': 18.19.1 + '@types/node-fetch': 2.6.9 abort-controller: 3.0.0 agentkeepalive: 4.5.0 digest-fetch: 1.3.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.7.0 - web-streams-polyfill: 3.3.2 + web-streams-polyfill: 3.2.1 transitivePeerDependencies: - encoding dev: false @@ -9518,7 +9528,7 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.33 - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.13 /postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} @@ -9528,8 +9538,8 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -9564,15 +9574,6 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -9676,8 +9677,8 @@ packages: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: false - /protobufjs@7.2.6: - resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} + /protobufjs@7.2.5: + resolution: {integrity: sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==} engines: {node: '>=12.0.0'} requiresBuild: true dependencies: @@ -9691,7 +9692,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.11.5 + '@types/node': 20.11.10 long: 5.2.3 dev: false @@ -9750,13 +9751,13 @@ packages: react: 18.2.0 dev: false - /react-day-picker@8.10.0(date-fns@3.3.0)(react@18.2.0): + /react-day-picker@8.10.0(date-fns@3.3.1)(react@18.2.0): resolution: {integrity: sha512-mz+qeyrOM7++1NCb1ARXmkjMkzWVh2GL9YiPbRjKe0zHccvekk4HE+0MPOZOrosn8r8zTHIIeOUXTmXRqmkRmg==} peerDependencies: date-fns: ^2.28.0 || ^3.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - date-fns: 3.3.0 + date-fns: 3.3.1 react: 18.2.0 dev: false @@ -9782,7 +9783,7 @@ packages: react: 18.2.0 dev: false - /react-email@2.0.0(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(eslint@8.56.0): + /react-email@2.0.0(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(eslint@8.56.0): resolution: {integrity: sha512-XzxyWkrfZC3zF9HnAjWwB823u9eTMpAQCy+SjLMtNSh4i8WuV8Fr5LriTTz/p1RRt6aXoiV3c/ZthaDt0nvBEA==} engines: {node: '>=18.0.0'} hasBin: true @@ -9812,7 +9813,7 @@ packages: glob: 10.3.4 log-symbols: 4.1.0 mime-types: 2.1.35 - next: 14.0.5-canary.46(@babel/core@7.23.7)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.0.5-canary.46(@babel/core@7.23.5)(@opentelemetry/api@1.7.0)(react-dom@18.2.0)(react@18.2.0) normalize-path: 3.0.0 ora: 5.4.1 postcss: 8.4.32 @@ -9879,10 +9880,10 @@ packages: devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 - mdast-util-to-hast: 13.1.0 + mdast-util-to-hast: 13.0.2 react: 18.2.0 remark-parse: 11.0.0 - remark-rehype: 11.1.0 + remark-rehype: 11.0.0 unified: 11.0.4 unist-util-visit: 5.0.0 vfile: 6.0.1 @@ -9931,7 +9932,7 @@ packages: react-remove-scroll-bar: 2.3.4(@types/react@18.2.48)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.1(@types/react@18.2.48)(react@18.2.0) + use-callback-ref: 1.3.0(@types/react@18.2.48)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.48)(react@18.2.0) dev: false @@ -9950,7 +9951,7 @@ packages: react-remove-scroll-bar: 2.3.4(@types/react@18.2.48)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.1(@types/react@18.2.48)(react@18.2.0) + use-callback-ref: 1.3.0(@types/react@18.2.48)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.48)(react@18.2.0) dev: false @@ -9990,7 +9991,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -10004,7 +10005,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 react: 18.2.0 use-composed-ref: 1.3.0(react@18.2.0) use-latest: 1.2.1(@types/react@18.2.48)(react@18.2.0) @@ -10026,16 +10027,12 @@ packages: react-lifecycles-compat: 3.0.4 dev: false - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + /react-transition-state@2.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kQx5g1FVu9knoz1T1WkapjUgFz08qQ/g1OmuWGi3/AoEFfS0kStxrPlZx81urjCXdz2d+1DqLpU6TyLW/Ro04Q==} peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' dependencies: - '@babel/runtime': 7.23.8 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -10092,8 +10089,8 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.10.4(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/Q7/wdf8bW91lN3NEeCjL9RWfaiXQViJFgdnas4Eix/I8B9HAI3tHHK/CW/zDfgRMh4fzW1zlfjoz1IAapLO1Q==} + /recharts@2.11.0(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5s+u1m5Hwxb2nh0LABkE3TS/lFqFHyWl7FnPbQhHobbQQia4ih1t3o3+ikPYr31Ns+kYe4FASIthKeKi/YYvMg==} engines: {node: '>=14'} peerDependencies: prop-types: ^15.6.0 @@ -10110,7 +10107,7 @@ packages: react-smooth: 2.0.5(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) recharts-scale: 0.4.5 tiny-invariant: 1.3.1 - victory-vendor: 36.8.2 + victory-vendor: 36.8.4 dev: false /rechoir@0.6.2: @@ -10148,6 +10145,10 @@ packages: prismjs: 1.27.0 dev: false + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -10188,17 +10189,17 @@ packages: unified: 11.0.4 dev: true - /rehype-pretty-code@0.12.5(shikiji@0.9.19): - resolution: {integrity: sha512-EnLi5MrL9PROc2jfEnp6bAT+ui/k/uixg6dAT35LA1V2xq0RCpgZYD8bWbpaAUnyAgVfgsmKgXbjCqAJejFc+w==} + /rehype-pretty-code@0.12.6(shikiji@0.10.2): + resolution: {integrity: sha512-AW18s4eXwnb4PGwL0Y8BoUzBJr23epWNXndCKaZ52S4kl/4tsgM+406oCp5NdtPZsB0ItpaY+hCMv3kw58DLrA==} engines: {node: '>=18'} peerDependencies: - shikiji: ^0.7.0 || ^0.8.0 || ^0.9.0 + shikiji: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 dependencies: '@types/hast': 3.0.3 hast-util-to-string: 3.0.0 parse-numeric-range: 1.3.0 rehype-parse: 9.0.0 - shikiji: 0.9.19 + shikiji: 0.10.2 unified: 11.0.4 unist-util-visit: 5.0.0 dev: true @@ -10216,7 +10217,7 @@ packages: /rehype-stringify@9.0.4: resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 hast-util-to-html: 8.0.4 unified: 10.1.2 dev: false @@ -10296,18 +10297,18 @@ packages: /remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} dependencies: - '@types/hast': 2.3.9 + '@types/hast': 2.3.8 '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2 dev: false - /remark-rehype@11.1.0: - resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + /remark-rehype@11.0.0: + resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==} dependencies: '@types/hast': 3.0.3 '@types/mdast': 4.0.3 - mdast-util-to-hast: 13.1.0 + mdast-util-to-hast: 13.0.2 unified: 11.0.4 vfile: 6.0.1 dev: false @@ -10334,11 +10335,11 @@ packages: engines: {node: '>=0.10.0'} dev: false - /resend@3.0.0: - resolution: {integrity: sha512-LpQVIX5tFqQOtTSco8Q0NxP16zh35Sqla5LqLKIQ1PNv3BRwGMeP84cQ6feIg+JWJ3Xk/1yVoqxJJ0C+iUucbA==} + /resend@3.1.0: + resolution: {integrity: sha512-H+Ll0bAim1L1slAGzjPZlYAlWqihHAdCM14POqJ0AUgEPfwZQ3Eb6Z9HCO5Wsi3IDMHihPx+O77kzgprj5CchQ==} engines: {node: '>=18'} dependencies: - '@react-email/render': 0.0.11 + '@react-email/render': 0.0.12 dev: false /resolve-from@4.0.0: @@ -10396,8 +10397,8 @@ packages: mri: 1.2.0 dev: false - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.5 @@ -10410,9 +10411,8 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} - engines: {node: '>= 0.4'} + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 @@ -10496,12 +10496,11 @@ packages: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} dev: false - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 - function-bind: 1.1.2 get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 @@ -10535,14 +10534,14 @@ packages: rechoir: 0.6.2 dev: false - /shikiji-core@0.9.19: - resolution: {integrity: sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==} + /shikiji-core@0.10.2: + resolution: {integrity: sha512-9Of8HMlF96usXJHmCL3Gd0Fcf0EcyJUF9m8EoAKKd98mHXi0La2AZl1h6PegSFGtiYcBDK/fLuKbDa1l16r1fA==} dev: true - /shikiji@0.9.19: - resolution: {integrity: sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==} + /shikiji@0.10.2: + resolution: {integrity: sha512-wtZg3T0vtYV2PnqusWQs3mDaJBdCPWxFDrBM/SE5LfrX92gjUvfEMlc+vJnoKY6Z/S44OWaCRzNIsdBRWcTAiw==} dependencies: - shikiji-core: 0.9.19 + shikiji-core: 0.10.2 dev: true /side-channel@1.0.4: @@ -10573,7 +10572,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /snakecase-keys@3.2.1: @@ -10672,6 +10671,16 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /sonner@1.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nvkTsIuOmi9e5Wz5If8ldasJjZNVfwiXYijBi2dbijvTQnQppvMcXTFNxL/NUFWlI2yJ1JX7TREDsg+gYm9WyA==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -10729,12 +10738,12 @@ packages: engines: {node: '>= 0.6'} dev: false - /sswr@2.0.0(svelte@4.2.9): + /sswr@2.0.0(svelte@4.2.8): resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.9 + svelte: 4.2.8 swrev: 4.0.0 dev: false @@ -10745,6 +10754,10 @@ packages: type-fest: 0.7.1 dev: false + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: false + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -10858,11 +10871,11 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stripe@14.13.0: - resolution: {integrity: sha512-uLOfWtBUL1amJCTpKCXWrHntFOSaO2PWb/2hsxV/OlXLr0bz5MyU8IW1pFlmZqpw6hBqAW5Fad7Ty7xRxDYrzA==} + /stripe@14.14.0: + resolution: {integrity: sha512-P6lvKHxgDzZXto9VMstG1ucv4Ls0U9nOoQhVZABXJ33kRD7zMwkBy5Y4c3BO59O230uSTkOFPLh87YxVzkp0Mg==} engines: {node: '>=12.*'} dependencies: - '@types/node': 20.11.5 + '@types/node': 20.11.10 qs: 6.11.2 dev: false @@ -10878,7 +10891,7 @@ packages: inline-style-parser: 0.2.2 dev: false - /styled-jsx@5.1.1(@babel/core@7.23.7)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.23.5)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -10891,19 +10904,19 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.5 client-only: 0.0.1 react: 18.2.0 dev: false - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 - glob: 10.3.10 + glob: 7.1.6 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -10962,17 +10975,16 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@4.2.9: - resolution: {integrity: sha512-hsoB/WZGEPFXeRRLPhPrbRz67PhP6sqYgvwcAs+gWdSQSvNDw+/lTeUJSWe5h2xC97Fz/8QxAOqItwBzNJPU8w==} + /svelte@4.2.8: + resolution: {integrity: sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 - '@types/estree': 1.0.5 + '@jridgewell/trace-mapping': 0.3.21 acorn: 8.11.3 aria-query: 5.3.0 - axobject-query: 4.0.0 + axobject-query: 3.2.1 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 @@ -11002,12 +11014,12 @@ packages: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} dev: false - /swrv@1.0.4(vue@3.4.15): + /swrv@1.0.4(vue@3.4.14): resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} peerDependencies: vue: '>=3.2.26 < 4' dependencies: - vue: 3.4.15(typescript@5.3.3) + vue: 3.4.14(typescript@5.3.3) dev: false /tabbable@6.2.0: @@ -11021,7 +11033,13 @@ packages: /tailwind-merge@2.2.0: resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.5 + dev: false + + /tailwind-merge@2.2.1: + resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} + dependencies: + '@babel/runtime': 7.23.9 dev: false /tailwindcss-animate@1.0.7(tailwindcss@3.4.1): @@ -11056,9 +11074,9 @@ packages: postcss-js: 4.0.1(postcss@8.4.33) postcss-load-config: 4.0.2(postcss@8.4.33) postcss-nested: 6.0.1(postcss@8.4.33) - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.13 resolve: 1.22.8 - sucrase: 3.35.0 + sucrase: 3.34.0 transitivePeerDependencies: - ts-node dev: false @@ -11087,9 +11105,9 @@ packages: postcss-js: 4.0.1(postcss@8.4.33) postcss-load-config: 4.0.2(postcss@8.4.33) postcss-nested: 6.0.1(postcss@8.4.33) - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.13 resolve: 1.22.8 - sucrase: 3.35.0 + sucrase: 3.34.0 transitivePeerDependencies: - ts-node @@ -11097,7 +11115,7 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - /terser-webpack-plugin@5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.89.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.90.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -11113,14 +11131,14 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.21 '@swc/core': 1.3.101 esbuild: 0.19.11 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.27.0 - webpack: 5.89.0(@swc/core@1.3.101)(esbuild@0.19.11) + webpack: 5.90.0(@swc/core@1.3.101)(esbuild@0.19.11) dev: false /terser@5.27.0: @@ -11234,8 +11252,8 @@ packages: resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} dev: false - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 @@ -11480,23 +11498,35 @@ packages: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - /update-browserslist-db@1.0.13(browserslist@4.22.2): + /update-browserslist-db@1.0.13(browserslist@4.22.1): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 - /uploadthing@6.2.0: - resolution: {integrity: sha512-QP32VguzERaa/xeu8swvkBTUz6am7118zRXcK0rA/k+E8O7kNEdPKI43vMxDWMQMNwm0YVjsHWZLsBsj6Z6Xig==} + /update-browserslist-db@1.0.13(browserslist@4.22.3): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.3 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uploadthing@6.3.1: + resolution: {integrity: sha512-eqbUpxSYtofT/aqqXHlaNJhpK94st6rGeEr8d2QmL0gHWKauS9w7J4jQ5Q7Jfmb2kMJj+pXW3duydkev/5G6Mw==} engines: {node: '>=18.13.0'} dependencies: '@uploadthing/mime-types': 0.2.2 - '@uploadthing/shared': 6.1.0(@uploadthing/mime-types@0.2.2) + '@uploadthing/shared': 6.2.0(@uploadthing/mime-types@0.2.2) consola: 3.2.3 + std-env: 3.7.0 dev: false /uri-js@4.4.1: @@ -11504,8 +11534,8 @@ packages: dependencies: punycode: 2.3.1 - /use-callback-ref@1.3.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} + /use-callback-ref@1.3.0(@types/react@18.2.48)(react@18.2.0): + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -11614,8 +11644,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /vaul@0.8.8(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Z9K2b90M/LtY/sRyM1yfA8Y4mHC/5WIqhO2u7Byr49r5LQXkLGdVXiehsnjtws9CL+DyknwTuRMJXlCOHTqg/g==} + /vaul@0.8.9(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-gpmtmZRWDPP6niQh14JfRIFUYZVyfvAWyA/7rUINOfNlO/2K7uEvI5rLXEXkxZIRFyUZj+TPHLFMirkegPHjrw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 @@ -11671,8 +11701,8 @@ packages: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - /victory-vendor@36.8.2: - resolution: {integrity: sha512-NfSQi7ISCdBbDpn3b6rg+8RpFZmWIM9mcks48BbogHE2F6h1XKdA34oiCKP5hP1OGvTotDRzsexiJKzrK4Exuw==} + /victory-vendor@36.8.4: + resolution: {integrity: sha512-30dOGZVjrOraxzflyZozjwYBYnIjhX2c18kuVNiiZlRHx++8zXGptlXSAm57M87Y2WLN10XGbn8kTXntqteKUw==} dependencies: '@types/d3-array': 3.2.1 '@types/d3-ease': 3.0.2 @@ -11690,19 +11720,19 @@ packages: d3-timer: 3.0.1 dev: false - /vue@3.4.15(typescript@5.3.3): - resolution: {integrity: sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ==} + /vue@3.4.14(typescript@5.3.3): + resolution: {integrity: sha512-Rop5Al/ZcBbBz+KjPZaZDgHDX0kUP4duEzDbm+1o91uxYUNmJrZSBuegsNIJvUGy+epLevNRNhLjm08VKTgGyw==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.15 - '@vue/compiler-sfc': 3.4.15 - '@vue/runtime-dom': 3.4.15 - '@vue/server-renderer': 3.4.15(vue@3.4.15) - '@vue/shared': 3.4.15 + '@vue/compiler-dom': 3.4.14 + '@vue/compiler-sfc': 3.4.14 + '@vue/runtime-dom': 3.4.14 + '@vue/server-renderer': 3.4.14(vue@3.4.14) + '@vue/shared': 3.4.14 typescript: 5.3.3 dev: false @@ -11723,8 +11753,8 @@ packages: /web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - /web-streams-polyfill@3.3.2: - resolution: {integrity: sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==} + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} dev: false @@ -11733,8 +11763,8 @@ packages: engines: {node: '>= 14'} dev: false - /web-vitals@3.5.1: - resolution: {integrity: sha512-xQ9lvIpfLxUj0eSmT79ZjRoU5wIRfIr7pNukL7ZE4EcWZSmfZQqOlhuAGfkVa3EFmzPHZhWhXfm2i5ys+THVPg==} + /web-vitals@3.5.0: + resolution: {integrity: sha512-f5YnCHVG9Y6uLCePD4tY8bO/Ge15NPEQWtvm3tPzDKygloiqtb4SVqRHBcrIAqo2ztqX5XueqDn97zHF0LdT6w==} dev: false /webcrypto-core@1.7.7: @@ -11744,7 +11774,7 @@ packages: '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.5 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /webidl-conversions@3.0.1: @@ -11756,8 +11786,8 @@ packages: engines: {node: '>=10.13.0'} dev: false - /webpack@5.89.0(@swc/core@1.3.101)(esbuild@0.19.11): - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + /webpack@5.90.0(@swc/core@1.3.101)(esbuild@0.19.11): + resolution: {integrity: sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -11773,7 +11803,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.11.3 acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.22.2 + browserslist: 4.22.1 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.4.1 @@ -11787,7 +11817,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.89.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.90.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/src/app/(checkout)/checkout/[storeId]/page.tsx b/src/app/(checkout)/checkout/[storeId]/page.tsx index 35e7337fb..3c44f8f27 100644 --- a/src/app/(checkout)/checkout/[storeId]/page.tsx +++ b/src/app/(checkout)/checkout/[storeId]/page.tsx @@ -1,6 +1,6 @@ import * as React from "react" -import Link from "next/link" import type { Metadata } from "next" +import Link from "next/link" import { notFound } from "next/navigation" import { db } from "@/db" import { stores } from "@/db/schema" @@ -8,11 +8,11 @@ import { env } from "@/env.mjs" import { currentUser } from "@clerk/nextjs" import { eq } from "drizzle-orm" -import { cn } from "@/lib/utils" -import { buttonVariants } from "@/components/ui/button" // import { createPaymentIntent } from "@/lib/actions/stripe" import { getCart } from "@/lib/fetchers/cart" import { getStripeAccount } from "@/lib/fetchers/stripe" +import { cn } from "@/lib/utils" +import { buttonVariants } from "@/components/ui/button" import CheckoutContent from "@/components/checkout/checkout-content" import { Shell } from "@/components/shells/shell" @@ -67,7 +67,7 @@ export default async function CheckoutPage({ params }: CheckoutPageProps) { lastName: user.lastName, email: user.emailAddresses.find( (emailObj) => emailObj.id === user.primaryEmailAddressId - )!.emailAddress + )!.emailAddress, } const clientStore = { @@ -104,90 +104,11 @@ export default async function CheckoutPage({ params }: CheckoutPageProps) { } return ( -<<<<<<< HEAD:src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx - -======= -
-
-
-
- -
-
-
-
- Pay {store.name} -
-
{formatPrice(total)}
-
- -
- - - - - -
->>>>>>> upstream/main:src/app/(checkout)/checkout/[storeId]/page.tsx ) } diff --git a/src/app/(checkout)/checkout/[storeId]/success/page.tsx b/src/app/(checkout)/checkout/[storeId]/success/page.tsx index e0d6a41e8..8fc594400 100644 --- a/src/app/(checkout)/checkout/[storeId]/success/page.tsx +++ b/src/app/(checkout)/checkout/[storeId]/success/page.tsx @@ -39,7 +39,9 @@ export default async function OrderSuccessPage({ const storeId = Number(params.storeId) const { payment_intent, + // eslint-disable-next-line @typescript-eslint/no-unused-vars payment_intent_client_secret, + // eslint-disable-next-line @typescript-eslint/no-unused-vars redirect_status, delivery_postal_code, } = searchParams ?? {} diff --git a/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx b/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx deleted file mode 100644 index 8c39c395c..000000000 --- a/src/app/(lobby)/(checkout)/checkout/[storeId]/page.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import * as React from "react" -import Link from "next/link" -import type { Metadata } from "next" -import { notFound } from "next/navigation" -import { db } from "@/db" -import { stores } from "@/db/schema" -import { env } from "@/env.mjs" -import { currentUser } from "@clerk/nextjs" -import { eq } from "drizzle-orm" - -import { cn } from "@/lib/utils" -import { buttonVariants } from "@/components/ui/button" -// import { createPaymentIntent } from "@/lib/actions/stripe" -import { getCart } from "@/lib/fetchers/cart" -import { getStripeAccount } from "@/lib/fetchers/stripe" -import CheckoutContent from "@/components/checkout/checkout-content" -import { Shell } from "@/components/shells/shell" - -export const metadata: Metadata = { - metadataBase: new URL(env.NEXT_PUBLIC_APP_URL), - title: "Checkout", - description: "Checkout with store items", -} - -interface CheckoutPageProps { - params: { - storeId: string - } -} - -export default async function CheckoutPage({ params }: CheckoutPageProps) { - const user = await currentUser() - if (!user) { - notFound() - } - - const storeId = Number(params.storeId) - - const store = await db - .select({ - id: stores.id, - name: stores.name, - stripeAccountId: stores.stripeAccountId, - }) - .from(stores) - .where(eq(stores.id, storeId)) - .execute() - .then((rows) => rows[0]) - - if (!store) { - notFound() - } - - const { isConnected } = await getStripeAccount({ - storeId, - }) - - const cartLineItems = await getCart({ storeId }) - - // const paymentIntentPromise = createPaymentIntent({ - // storeId: storeId, - // items: cartLineItems, - // }) - - const clientUser = { - firstName: user.firstName, - lastName: user.lastName, - email: user.emailAddresses.find( - (emailObj) => emailObj.id === user.primaryEmailAddressId - )!.emailAddress - } - - const clientStore = { - id: store.id, - name: store.name, - stripeAccountId: store.stripeAccountId ?? "", - } - - if (!(isConnected && store.stripeAccountId)) { - return ( - -
-
- Store is not connected to Stripe -
-
- Store owner needs to connect their store to Stripe to accept - payments -
- - Back to cart - -
-
- ) - } - - return ( - - ) -} diff --git a/src/app/api/uploadthing/core.ts b/src/app/api/uploadthing/core.ts index da5c62bf5..2b2aeb54d 100644 --- a/src/app/api/uploadthing/core.ts +++ b/src/app/api/uploadthing/core.ts @@ -8,6 +8,7 @@ export const ourFileRouter = { // Define as many FileRoutes as you like, each with a unique routeSlug productImage: f({ image: { maxFileSize: "4MB", maxFileCount: 3 } }) // Set permissions and file types for this FileRoute + // eslint-disable-next-line @typescript-eslint/no-unused-vars .middleware(async (req) => { // This code runs on your server before upload const user = await currentUser() diff --git a/src/components/checkout/cart-line-items.tsx b/src/components/checkout/cart-line-items.tsx index 024d7b49e..c5341fbd9 100644 --- a/src/components/checkout/cart-line-items.tsx +++ b/src/components/checkout/cart-line-items.tsx @@ -86,10 +86,11 @@ export function CartLineItems({ )} {variant === "default" ? ( - {`${item.category}` - // ${ - // item.subcategory ? `/ ${item.subcategory}` : "" - // }` + { + `${item.category}` + // ${ + // item.subcategory ? `/ ${item.subcategory}` : "" + // }` } ) : null} diff --git a/src/components/checkout/cart-sheet.tsx b/src/components/checkout/cart-sheet.tsx index 0fa0c52a8..5358bc9e0 100644 --- a/src/components/checkout/cart-sheet.tsx +++ b/src/components/checkout/cart-sheet.tsx @@ -119,4 +119,3 @@ export async function CartSheet() { ) } - diff --git a/src/components/checkout/checkout-card.tsx b/src/components/checkout/checkout-card.tsx index 3321ace79..b33230f7c 100644 --- a/src/components/checkout/checkout-card.tsx +++ b/src/components/checkout/checkout-card.tsx @@ -52,7 +52,10 @@ export async function CheckoutCard({ storeId }: CheckoutCardProps) { - + diff --git a/src/components/checkout/checkout-content.tsx b/src/components/checkout/checkout-content.tsx index eb9a62542..43616e792 100644 --- a/src/components/checkout/checkout-content.tsx +++ b/src/components/checkout/checkout-content.tsx @@ -21,14 +21,14 @@ import { } from "@/hooks/use-shipping-rate-state" import { Button } from "@/components/ui/button" import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer" +import { Label } from "@/components/ui/label" import { ScrollArea } from "@/components/ui/scroll-area" import { Separator } from "@/components/ui/separator" +import { Switch } from "@/components/ui/switch" import { CartLineItems } from "@/components/checkout/cart-line-items" import { CheckoutForm } from "@/components/checkout/checkout-form" import { CheckoutShell } from "@/components/checkout/checkout-shell" import ShippingLineItem from "@/components/checkout/shipping-line-item" -import { Label } from "@/components/ui/label" -import { Switch } from "@/components/ui/switch" import { Icons } from "@/components/icons" interface CheckoutContentProps { @@ -125,6 +125,7 @@ export default function CheckoutContent({ .then((result) => { setClientSecret(result.clientSecret) }) + // eslint-disable-next-line @typescript-eslint/no-unused-vars .catch((e) => { toast.error( "Something went wrong with setting up the payment, please try again." @@ -143,7 +144,7 @@ export default function CheckoutContent({ className="group flex w-28 items-center space-x-2 lg:flex-auto" >