From 8e22cf881215394d49de1b177c1ba45dcb700f30 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Mon, 18 Nov 2024 19:16:56 +0000 Subject: [PATCH] [Ecosystem Portal] Fix: WalletConnect Connection (#5438) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CNCT-2258 --- ## PR-Codex overview This PR focuses on enhancing the `wallet-ui` application, introducing multi-tenancy support, updating configurations, and improving code quality with better imports and utility functions. ### Detailed summary - Removed unused files: `erc20.ts`, `Erc20Token.ts` - Added `isMultiTenant` utility for environment checks - Updated `README.md` for ecosystem portal - Enhanced routing with ecosystem ID in redirects - Introduced new configuration files for `knip` and `biome` - Updated ESLint rules and configurations - Refactored image handling to use a new `Image` component - Streamlined various imports across components and hooks > The following files were skipped due to too many changes: `pnpm-lock.yaml` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .github/labeler.yml | 6 + apps/wallet-ui/.env.example | 4 +- apps/wallet-ui/.eslintrc.js | 71 ++++ apps/wallet-ui/README.md | 2 +- apps/wallet-ui/biome.json | 16 + apps/wallet-ui/knip.json | 8 + apps/wallet-ui/package.json | 14 +- apps/wallet-ui/postcss.config.mjs | 2 +- .../src/app/[ecosystem]/(authed)/layout.tsx | 5 +- .../(authed)/wallet/[address]/page.tsx | 8 +- .../src/app/[ecosystem]/login/layout.tsx | 11 +- apps/wallet-ui/src/app/[ecosystem]/page.tsx | 11 +- .../wallet-ui/src/app/[ecosystem]/wc/page.tsx | 16 +- apps/wallet-ui/src/app/layout.tsx | 2 +- apps/wallet-ui/src/app/not-found.tsx | 2 + .../src/components/ChainCombobox.tsx | 6 +- apps/wallet-ui/src/components/ChainIcon.tsx | 5 +- .../wallet-ui/src/components/ConnectEmbed.tsx | 17 +- apps/wallet-ui/src/components/NftCard.tsx | 3 +- apps/wallet-ui/src/components/NftModal.tsx | 3 +- apps/wallet-ui/src/components/ui/image.tsx | 18 + apps/wallet-ui/src/hooks/useRouter.ts | 18 + apps/wallet-ui/src/lib/assets/erc20.ts | 73 ---- apps/wallet-ui/src/lib/assets/erc721.ts | 2 +- apps/wallet-ui/src/lib/auth.ts | 12 +- apps/wallet-ui/src/lib/redirect.ts | 13 + apps/wallet-ui/src/lib/utils.ts | 3 + apps/wallet-ui/src/middleware.ts | 10 +- apps/wallet-ui/src/types/Erc20Token.ts | 9 - apps/wallet-ui/src/util/simplehash.ts | 9 - .../core/hooks/wallets/useCallsStatus.ts | 2 +- pnpm-lock.yaml | 346 ++++++++---------- 32 files changed, 400 insertions(+), 327 deletions(-) create mode 100644 apps/wallet-ui/.eslintrc.js create mode 100644 apps/wallet-ui/biome.json create mode 100644 apps/wallet-ui/knip.json create mode 100644 apps/wallet-ui/src/components/ui/image.tsx create mode 100644 apps/wallet-ui/src/hooks/useRouter.ts delete mode 100644 apps/wallet-ui/src/lib/assets/erc20.ts create mode 100644 apps/wallet-ui/src/lib/redirect.ts delete mode 100644 apps/wallet-ui/src/types/Erc20Token.ts diff --git a/.github/labeler.yml b/.github/labeler.yml index 651291e184c..2056bcab74d 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -8,6 +8,12 @@ playground: packages: - changed-files: - any-glob-to-any-file: "packages/**/*" +sdk: + - changed-files: + - any-glob-to-any-file: "packages/thirdweb/**/*" portal: - changed-files: - any-glob-to-any-file: "apps/portal/**/*" +"Ecosystem Portal": + - changed-files: + - any-glob-to-any-file: "apps/wallet-ui/**/*" diff --git a/apps/wallet-ui/.env.example b/apps/wallet-ui/.env.example index d5c7ab44066..809fbc9ce1d 100644 --- a/apps/wallet-ui/.env.example +++ b/apps/wallet-ui/.env.example @@ -1,5 +1,7 @@ # Root domain for the app -NEXT_PUBLIC_ROOT_DOMAIN=ecosystem.localhost:3000 +NEXT_PUBLIC_ROOT_DOMAIN=localhost:3000 +# If set to production, multi-tenant subdomains will be used +NEXT_PUBLIC_ENVIRONMENT=development # Thirdweb client ID NEXT_PUBLIC_THIRDWEB_CLIENT_ID= # Thirdweb API key diff --git a/apps/wallet-ui/.eslintrc.js b/apps/wallet-ui/.eslintrc.js new file mode 100644 index 00000000000..f0a1be98074 --- /dev/null +++ b/apps/wallet-ui/.eslintrc.js @@ -0,0 +1,71 @@ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@next/next/recommended", + ], + rules: { + "react-compiler/react-compiler": "error", + "no-restricted-syntax": [ + "error", + { + selector: "CallExpression[callee.name='useEffect']", + message: + 'Are you *sure* you need to use "useEffect" here? If you loading any async function prefer using "useQuery".', + }, + { + selector: "CallExpression[callee.name='createContext']", + message: + 'Are you *sure* you need to use a "Context"? In almost all cases you should prefer passing props directly.', + }, + ], + "no-restricted-imports": [ + "error", + { + paths: [ + { + name: "next/navigation", + importNames: ["useRouter"], + message: + 'Use `import { useRouter } from "@/lib/useRouter";` instead', + }, + ], + }, + ], + }, + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint", "react-compiler"], + parserOptions: { + ecmaVersion: 2019, + ecmaFeatures: { + impliedStrict: true, + jsx: true, + }, + warnOnUnsupportedTypeScriptVersion: true, + }, + settings: { + react: { + createClass: "createReactClass", + pragma: "React", + version: "detect", + }, + }, + overrides: [ + // enable rule specifically for TypeScript files + { + files: ["*.ts", "*.tsx"], + rules: { + "@typescript-eslint/explicit-module-boundary-types": ["off"], + }, + }, + // THIS NEEDS TO GO LAST! + { + files: ["*.ts", "*.js", "*.tsx", "*.jsx"], + extends: ["biome"], + }, + ], + env: { + browser: true, + node: true, + }, +}; diff --git a/apps/wallet-ui/README.md b/apps/wallet-ui/README.md index 0a5be79580f..ecd8ae6f9da 100644 --- a/apps/wallet-ui/README.md +++ b/apps/wallet-ui/README.md @@ -1 +1 @@ -# thirdweb Wallet UI +# thirdweb Ecosystem Portal diff --git a/apps/wallet-ui/biome.json b/apps/wallet-ui/biome.json new file mode 100644 index 00000000000..b287b3aca79 --- /dev/null +++ b/apps/wallet-ui/biome.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.2/schema.json", + "extends": ["../../biome.json"], + "overrides": [ + { + "include": ["src/css/swagger-ui.css"], + "linter": { + "rules": { + "suspicious": { + "noImportantInKeyframe": "off" + } + } + } + } + ] +} diff --git a/apps/wallet-ui/knip.json b/apps/wallet-ui/knip.json new file mode 100644 index 00000000000..34399e5e665 --- /dev/null +++ b/apps/wallet-ui/knip.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://unpkg.com/knip@latest/schema.json", + "next": true, + "ignore": ["src/components/ui/**"], + "ignoreBinaries": ["biome"], + "ignoreDependencies": ["thirdweb"], + "project": ["src/**"] +} diff --git a/apps/wallet-ui/package.json b/apps/wallet-ui/package.json index c3e139a4bbf..dabb6276b11 100644 --- a/apps/wallet-ui/package.json +++ b/apps/wallet-ui/package.json @@ -6,8 +6,8 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "biome check ./src", - "fix": "biome check ./src --fix" + "lint": "biome check ./src && knip && eslint ./src", + "fix": "biome check ./src --fix && knip --fix --allow-remove-files && eslint ./src --fix" }, "dependencies": { "@hookform/resolvers": "^3.9.1", @@ -16,7 +16,6 @@ "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-popover": "^1.1.2", "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-toast": "^1.2.2", "@tanstack/react-query": "5.60.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -27,6 +26,7 @@ "react": "19.0.0-rc-69d4b800-20241021", "react-dom": "19.0.0-rc-69d4b800-20241021", "react-hook-form": "7.52.0", + "server-only": "^0.0.1", "sonner": "^1.7.0", "tailwind-merge": "^2.5.4", "tailwindcss-animate": "^1.0.7", @@ -35,12 +35,18 @@ "zod": "3.23.8" }, "devDependencies": { + "@next/eslint-plugin-next": "15.0.3", "@types/node": "20.14.9", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", + "@typescript-eslint/eslint-plugin": "7.14.1", + "@typescript-eslint/parser": "7.14.1", "eslint": "8.57.0", - "eslint-config-next": "15.0.3", + "eslint-config-biome": "1.9.3", + "eslint-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110", + "knip": "5.37.0", "postcss": "8.4.49", + "postcss-load-config": "^6.0.1", "tailwindcss": "3.4.15", "typescript": "5.6.3" } diff --git a/apps/wallet-ui/postcss.config.mjs b/apps/wallet-ui/postcss.config.mjs index 1a69fd2a450..cf6b86a905a 100644 --- a/apps/wallet-ui/postcss.config.mjs +++ b/apps/wallet-ui/postcss.config.mjs @@ -5,4 +5,4 @@ const config = { }, }; -export default config; +export default config; \ No newline at end of file diff --git a/apps/wallet-ui/src/app/[ecosystem]/(authed)/layout.tsx b/apps/wallet-ui/src/app/[ecosystem]/(authed)/layout.tsx index ff3f5ae029d..8a2f53189b8 100644 --- a/apps/wallet-ui/src/app/[ecosystem]/(authed)/layout.tsx +++ b/apps/wallet-ui/src/app/[ecosystem]/(authed)/layout.tsx @@ -1,4 +1,5 @@ import ConnectButton from "@/components/ConnectButton"; +import { Image } from "@/components/ui/image"; import { authedOnly } from "@/lib/auth"; import { getEcosystemInfo } from "@/lib/ecosystems"; import { resolveScheme } from "thirdweb/storage"; @@ -12,14 +13,14 @@ export default async function Layout(props: { const { children } = props; - await authedOnly(); + await authedOnly(params.ecosystem); const ecosystem = await getEcosystemInfo(params.ecosystem); return (
- {ecosystem.name}; searchParams: Promise<{ chainId?: string; uri?: string }>; }) { - const searchParams = await props.searchParams; + const [searchParams, params] = await Promise.all([ + props.searchParams, + props.params, + ]); const { chainId, uri } = searchParams; - - const params = await props.params; - const { address } = params; return ( diff --git a/apps/wallet-ui/src/app/[ecosystem]/login/layout.tsx b/apps/wallet-ui/src/app/[ecosystem]/login/layout.tsx index c28be22248f..91aeef71333 100644 --- a/apps/wallet-ui/src/app/[ecosystem]/login/layout.tsx +++ b/apps/wallet-ui/src/app/[ecosystem]/login/layout.tsx @@ -1,12 +1,15 @@ -import { redirect } from "next/navigation"; -import { getCurrentUser } from "../../../lib/auth"; +import { getCurrentUser } from "@/lib/auth"; +import { redirect } from "@/lib/redirect"; export default async function Layout({ children, -}: { children: React.ReactNode }) { + params, +}: { children: React.ReactNode; params: Promise<{ ecosystem: string }> }) { + const { ecosystem } = await params; + const userAddress = await getCurrentUser(); if (userAddress) { - redirect(`/wallet/${userAddress}`); + redirect(`/wallet/${userAddress}`, ecosystem); } return ( diff --git a/apps/wallet-ui/src/app/[ecosystem]/page.tsx b/apps/wallet-ui/src/app/[ecosystem]/page.tsx index 4ca2814303d..8cf3cc56e81 100644 --- a/apps/wallet-ui/src/app/[ecosystem]/page.tsx +++ b/apps/wallet-ui/src/app/[ecosystem]/page.tsx @@ -1,10 +1,13 @@ import { getCurrentUser } from "@/lib/auth"; -import { redirect } from "next/navigation"; +import { redirect } from "@/lib/redirect"; -export default async function Page() { +export default async function Page({ + params, +}: { params: Promise<{ ecosystem: string }> }) { + const { ecosystem } = await params; const user = await getCurrentUser(); if (user) { - redirect("/wallet/${user}"); + redirect(`/wallet/${user}`, ecosystem); } - redirect("/login"); + redirect("/login", ecosystem); } diff --git a/apps/wallet-ui/src/app/[ecosystem]/wc/page.tsx b/apps/wallet-ui/src/app/[ecosystem]/wc/page.tsx index b83388f18c5..a279f0ba92d 100644 --- a/apps/wallet-ui/src/app/[ecosystem]/wc/page.tsx +++ b/apps/wallet-ui/src/app/[ecosystem]/wc/page.tsx @@ -1,19 +1,25 @@ // This page is to accept a Wallet Connect request import { getCurrentUser } from "@/lib/auth"; -import { redirect } from "next/navigation"; +import { redirect } from "@/lib/redirect"; export default async function Page(props: { + params: Promise<{ ecosystem: string }>; searchParams: Promise<{ uri: string }>; }) { - const searchParams = await props.searchParams; - + const [params, searchParams] = await Promise.all([ + props.params, + props.searchParams, + ]); const { uri } = searchParams; const currentUser = await getCurrentUser(); if (!currentUser) { - redirect(`/login?uri=${encodeURIComponent(uri)}`); + redirect(`/login?uri=${encodeURIComponent(uri)}`, params.ecosystem); } - redirect(`/wallet/${currentUser}?uri=${encodeURIComponent(uri)}`); + redirect( + `/wallet/${currentUser}?uri=${encodeURIComponent(uri)}`, + params.ecosystem, + ); } diff --git a/apps/wallet-ui/src/app/layout.tsx b/apps/wallet-ui/src/app/layout.tsx index a1305cfea4e..3b0f489cf66 100644 --- a/apps/wallet-ui/src/app/layout.tsx +++ b/apps/wallet-ui/src/app/layout.tsx @@ -1,7 +1,7 @@ import Providers from "@/components/Providers"; +import { cn } from "@/lib/utils"; import { Inter } from "next/font/google"; import "./globals.css"; -import { cn } from "../lib/utils"; const inter = Inter({ subsets: ["latin"] }); diff --git a/apps/wallet-ui/src/app/not-found.tsx b/apps/wallet-ui/src/app/not-found.tsx index 7ef09f00cc4..7e2f2654e1d 100644 --- a/apps/wallet-ui/src/app/not-found.tsx +++ b/apps/wallet-ui/src/app/not-found.tsx @@ -1,3 +1,5 @@ +/* eslint-disable @next/next/no-img-element */ + export default function NotFound() { return (
diff --git a/apps/wallet-ui/src/components/ChainCombobox.tsx b/apps/wallet-ui/src/components/ChainCombobox.tsx index 013214f932c..95e29042e95 100644 --- a/apps/wallet-ui/src/components/ChainCombobox.tsx +++ b/apps/wallet-ui/src/components/ChainCombobox.tsx @@ -14,9 +14,10 @@ import { PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; +import { useRouter } from "@/hooks/useRouter"; import { cn } from "@/lib/utils"; import { ChevronsUpDown } from "lucide-react"; -import { usePathname, useRouter, useSearchParams } from "next/navigation"; +import { useParams, usePathname, useSearchParams } from "next/navigation"; import React from "react"; import type { ChainMetadata } from "thirdweb/chains"; import { ChainIcon } from "./ChainIcon"; @@ -24,6 +25,7 @@ import { ChainIcon } from "./ChainIcon"; export function ChainCombobox({ chains }: { chains: ChainMetadata[] }) { const router = useRouter(); const pathname = usePathname(); + const params = useParams(); const searchParams = useSearchParams(); const [open, setOpen] = React.useState(false); const [value, setValue] = React.useState(searchParams.get("chainId") ?? "0"); @@ -43,7 +45,7 @@ export function ChainCombobox({ chains }: { chains: ChainMetadata[] }) { const search = current.toString(); const query = search ? `?${search}` : ""; - router.push(`${pathname}${query}`); + router.push(`${pathname}${query}`, params.ecosystem as string); }; return ( diff --git a/apps/wallet-ui/src/components/ChainIcon.tsx b/apps/wallet-ui/src/components/ChainIcon.tsx index b86aaa43b98..6ba308ec1aa 100644 --- a/apps/wallet-ui/src/components/ChainIcon.tsx +++ b/apps/wallet-ui/src/components/ChainIcon.tsx @@ -1,7 +1,8 @@ "use client"; +import { Image } from "@/components/ui/image"; +import { client } from "@/lib/client"; import { useQuery } from "@tanstack/react-query"; import { resolveScheme } from "thirdweb/storage"; -import { client } from "../lib/client"; const fallbackChainIcon = "data:image/svg+xml;charset=UTF-8,%3csvg width='15' height='14' viewBox='0 0 15 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M7 8.04238e-07C5.1435 8.04238e-07 3.36301 0.737501 2.05025 2.05025C0.7375 3.36301 0 5.1435 0 7C0 7.225 -1.52737e-07 7.445 0.0349998 7.665C0.16385 9.0151 0.68213 10.2988 1.52686 11.3598C2.37158 12.4209 3.50637 13.2137 4.79326 13.642C6.0801 14.0702 7.4637 14.1153 8.7758 13.7719C10.0879 13.4285 11.2719 12.7113 12.184 11.7075C13.0961 10.7038 13.6969 9.4567 13.9135 8.1178C14.1301 6.7789 13.9531 5.406 13.4039 4.16587C12.8548 2.92574 11.9573 1.87184 10.8204 1.13228C9.6835 0.392721 8.3563 -0.000649196 7 8.04238e-07ZM7 1C8.581 1.00137 10.0975 1.62668 11.22 2.74V3.24C9.2438 2.55991 7.0956 2.56872 5.125 3.265C4.96758 3.1116 4.76997 3.00586 4.555 2.96H4.43C4.37 2.75 4.315 2.54 4.27 2.325C4.225 2.11 4.2 1.92 4.175 1.715C5.043 1.24658 6.0137 1.00091 7 1ZM5.5 3.935C7.3158 3.32693 9.2838 3.34984 11.085 4C10.8414 5.2703 10.3094 6.4677 9.53 7.5C9.312 7.4077 9.0707 7.3855 8.8395 7.4366C8.6083 7.4877 8.3988 7.6094 8.24 7.785C8.065 7.685 7.89 7.585 7.74 7.47C6.7307 6.7966 5.8877 5.9023 5.275 4.855C5.374 4.73221 5.4461 4.58996 5.4866 4.43749C5.5271 4.28502 5.5351 4.12575 5.51 3.97L5.5 3.935ZM3.5 2.135C3.5 2.24 3.53 2.35 3.55 2.455C3.595 2.675 3.655 2.89 3.715 3.105C3.52353 3.21838 3.36943 3.38531 3.2717 3.58522C3.17397 3.78513 3.13688 4.00927 3.165 4.23C2.37575 4.7454 1.67078 5.3795 1.075 6.11C1.19455 5.3189 1.47112 4.55966 1.88843 3.87701C2.30575 3.19437 2.85539 2.60208 3.505 2.135H3.5ZM3.5 9.99C3.30481 10.0555 3.13037 10.1714 2.9943 10.3259C2.85822 10.4804 2.76533 10.6681 2.725 10.87H2.405C1.59754 9.9069 1.1146 8.7136 1.025 7.46L1.08 7.365C1.70611 6.3942 2.52463 5.562 3.485 4.92C3.62899 5.0704 3.81094 5.179 4.01162 5.2345C4.2123 5.2899 4.42423 5.2901 4.625 5.235C5.2938 6.3652 6.208 7.3306 7.3 8.06C7.505 8.195 7.715 8.32 7.925 8.44C7.9082 8.6312 7.9391 8.8237 8.015 9C7.1 9.7266 6.0445 10.256 4.915 10.555C4.78401 10.3103 4.57028 10.1201 4.31199 10.0184C4.05369 9.9167 3.76766 9.9102 3.505 10L3.5 9.99ZM7 12.99C5.9831 12.9903 4.98307 12.7304 4.095 12.235L4.235 12.205C4.43397 12.1397 4.61176 12.0222 4.74984 11.8648C4.88792 11.7074 4.98122 11.5158 5.02 11.31C6.2985 10.984 7.4921 10.3872 8.52 9.56C8.7642 9.7027 9.0525 9.75 9.3295 9.6927C9.6064 9.6355 9.8524 9.4778 10.02 9.25C10.7254 9.4334 11.4511 9.5275 12.18 9.53H12.445C11.9626 10.5673 11.1938 11.4451 10.2291 12.0599C9.2643 12.6747 8.144 13.0009 7 13V12.99ZM10.255 8.54C10.2545 8.3304 10.1975 8.1249 10.09 7.945C10.9221 6.8581 11.5012 5.5991 11.785 4.26C12.035 4.37667 12.2817 4.50667 12.525 4.65C13.0749 5.9495 13.1493 7.4012 12.735 8.75C11.9049 8.8142 11.0698 8.7484 10.26 8.555L10.255 8.54Z' fill='%23646D7A'/%3e%3c/svg%3e"; @@ -32,7 +33,7 @@ export function ChainIcon(props: { }); return ( -
{(data.image_url || data.collection.image_url) && ( - {data.name}
- {data.name} { + alt: string; // Making alt required for accessibility +} + +export const Image = ({ alt, ...props }: ImageProps) => { + // biome-ignore lint/a11y/useAltText: alt is required + return ( + {alt} + ); +}; diff --git a/apps/wallet-ui/src/hooks/useRouter.ts b/apps/wallet-ui/src/hooks/useRouter.ts new file mode 100644 index 00000000000..11247271ec7 --- /dev/null +++ b/apps/wallet-ui/src/hooks/useRouter.ts @@ -0,0 +1,18 @@ +/* eslint-disable no-restricted-imports */ + +import { isMultiTenant } from "@/lib/utils"; +import { useRouter as useNextRouter } from "next/navigation"; + +export function useRouter() { + const router = useNextRouter(); + + return { + ...router, + push: (path: string, ecosystemId: string) => { + if (isMultiTenant && ecosystemId) { + return router.push(`/${ecosystemId}${path}`); + } + return router.push(path); + }, + }; +} diff --git a/apps/wallet-ui/src/lib/assets/erc20.ts b/apps/wallet-ui/src/lib/assets/erc20.ts deleted file mode 100644 index afb3d200660..00000000000 --- a/apps/wallet-ui/src/lib/assets/erc20.ts +++ /dev/null @@ -1,73 +0,0 @@ -import "server-only"; -import type { Erc20Token } from "@/types/Erc20Token"; -import { chainIdToName, nameToChainId } from "@/util/simplehash"; -import type { Address } from "thirdweb"; - -export type GetErc20TokensParams = { - owner: Address; - chainIds: number[]; - limit?: number; - cursor?: string; -}; - -export async function getErc20Tokens({ - owner, - chainIds, - limit = 50, - cursor, -}: GetErc20TokensParams): Promise<{ - nextCursor?: string; - tokens: Erc20Token[]; -}> { - const chainlist = chainIds - .map((id) => { - try { - return `${chainIdToName(id)},`; - } catch { - // Ignore unsupported chains when fetching assets - } - }) - .join("") - .slice(0, -1); // remove trailing comma - - const queryParams = new URLSearchParams({ - wallet_addresses: owner, - limit: limit.toString(), - chains: chainlist, - }); - - if (cursor) { - queryParams.append("cursor", cursor); - } - - const options = { - method: "GET", - headers: { - accept: "application/json", - "X-API-KEY": process.env.SIMPLEHASH_API_KEY as string, - }, - }; - - const response = await fetch( - `https://api.simplehash.com/api/v0/fungibles/balances?${decodeURIComponent(queryParams.toString())}`, - options, - ); - - if (!response.ok) { - response.body?.cancel(); - throw new Error("Failed to fetch ERC20tokens"); - } - - const data = await response.json(); - - return { - nextCursor: data.next_cursor, - // biome-ignore lint/suspicious/noExplicitAny: false - tokens: data.fungibles.map((token: any) => ({ - name: token.name, - symbol: token.symbol, - decimals: token.decimals, - chainId: nameToChainId(token.chain), - })), - }; -} diff --git a/apps/wallet-ui/src/lib/assets/erc721.ts b/apps/wallet-ui/src/lib/assets/erc721.ts index 75fca188ddc..529a08d2122 100644 --- a/apps/wallet-ui/src/lib/assets/erc721.ts +++ b/apps/wallet-ui/src/lib/assets/erc721.ts @@ -3,7 +3,7 @@ import type { Erc721Token } from "@/types/Erc721Token"; import { chainIdToName, nameToChainId } from "@/util/simplehash"; import type { Address } from "thirdweb"; -export type GetErc721TokensParams = { +type GetErc721TokensParams = { owner: Address; chainIds: number[]; limit?: number; diff --git a/apps/wallet-ui/src/lib/auth.ts b/apps/wallet-ui/src/lib/auth.ts index 7b1bdd933a6..c0909408d09 100644 --- a/apps/wallet-ui/src/lib/auth.ts +++ b/apps/wallet-ui/src/lib/auth.ts @@ -1,8 +1,8 @@ "use server"; import "server-only"; +import { redirect } from "@/lib/redirect"; import { secp256k1 } from "@noble/curves/secp256k1"; import { cookies } from "next/headers"; -import { redirect } from "next/navigation"; import { toHex } from "thirdweb"; import { type GenerateLoginPayloadParams, @@ -41,7 +41,6 @@ export async function login(payload: VerifyLoginPayloadParams) { secure: process.env.NODE_ENV !== "development", sameSite: "strict", maxAge: 3600, - domain: process.env.NEXT_PUBLIC_ROOT_DOMAIN, path: "/", }); return true; @@ -49,15 +48,16 @@ export async function login(payload: VerifyLoginPayloadParams) { return false; } -export async function authedOnly() { - const loggedIn = await getCurrentUser(); +export async function authedOnly(ecosystemId: string) { + const loggedIn = await isLoggedIn(); if (loggedIn) { return; } - redirect("/login"); + + redirect("/login", ecosystemId); } -export async function isLoggedIn(): Promise { +async function isLoggedIn(): Promise { const user = await getCurrentUser(); return !!user; } diff --git a/apps/wallet-ui/src/lib/redirect.ts b/apps/wallet-ui/src/lib/redirect.ts new file mode 100644 index 00000000000..841702b8343 --- /dev/null +++ b/apps/wallet-ui/src/lib/redirect.ts @@ -0,0 +1,13 @@ +import { redirect as nextRedirect } from "next/navigation"; +import { isMultiTenant } from "./utils"; + +/** + * Wraps Next's redirect to add the ecosystem ID if we're in development mode. + * In dev, we don't use subdomains. We can't move this to middleware because the edge runtime does not support the JWT verification. + */ +export function redirect(path: string, ecosystemId: string) { + if (isMultiTenant) { + return nextRedirect(`/${ecosystemId}${path}`); + } + return nextRedirect(path); +} diff --git a/apps/wallet-ui/src/lib/utils.ts b/apps/wallet-ui/src/lib/utils.ts index 365058cebd7..ef955e3cf05 100644 --- a/apps/wallet-ui/src/lib/utils.ts +++ b/apps/wallet-ui/src/lib/utils.ts @@ -4,3 +4,6 @@ import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } + +export const isMultiTenant = + process.env.NEXT_PUBLIC_ENVIRONMENT !== "production"; diff --git a/apps/wallet-ui/src/middleware.ts b/apps/wallet-ui/src/middleware.ts index 04e74265ff8..1ec5a53b90d 100644 --- a/apps/wallet-ui/src/middleware.ts +++ b/apps/wallet-ui/src/middleware.ts @@ -1,4 +1,5 @@ import { type NextRequest, NextResponse } from "next/server"; +import { isMultiTenant } from "./lib/utils"; export const config = { matcher: [ @@ -12,7 +13,6 @@ export const config = { "/((?!api/|_next/|_static/|_vercel|[\\w-]+\\.\\w+).*)", ], }; - const ROOT_DOMAIN = process.env.NEXT_PUBLIC_ROOT_DOMAIN; export default async function middleware(req: NextRequest) { // Get the request hostname (e.g. demo.thirdweb.com) @@ -24,6 +24,11 @@ export default async function middleware(req: NextRequest) { searchParams.length > 0 ? `?${searchParams}` : "" }`; + // If running development environment, do not rewrite + if (isMultiTenant) { + return NextResponse.next(); + } + // keep root application at `/` if (hostname === ROOT_DOMAIN || hostname === null) { return NextResponse.next(); @@ -31,6 +36,7 @@ export default async function middleware(req: NextRequest) { // rewrite everything else to `/[ecosystem]/... dynamic route const ecosystem = hostname.split(".")[0]; + const rewriteUrl = new URL(`/${ecosystem}${path}`, req.url); - return NextResponse.rewrite(new URL(`/${ecosystem}${path}`, req.url)); + return NextResponse.rewrite(rewriteUrl); } diff --git a/apps/wallet-ui/src/types/Erc20Token.ts b/apps/wallet-ui/src/types/Erc20Token.ts deleted file mode 100644 index 0aca1a52364..00000000000 --- a/apps/wallet-ui/src/types/Erc20Token.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Address } from "thirdweb"; - -export type Erc20Token = { - address: Address; - name: string; - symbol: string; - decimals: number; - chainId: number; -}; diff --git a/apps/wallet-ui/src/util/simplehash.ts b/apps/wallet-ui/src/util/simplehash.ts index 706e005a918..b4f9c9315f2 100644 --- a/apps/wallet-ui/src/util/simplehash.ts +++ b/apps/wallet-ui/src/util/simplehash.ts @@ -49,15 +49,6 @@ export function chainIdToName(chainId: number) { throw new Error(`Unknown chain id: ${chainId}`); } -export function chainIdToLabel(chainId: number) { - const chain = chainIdNameMap.find((chain) => chain.id === chainId); - if (chain) { - return chain.label; - } - - throw new Error(`Unknown chain id: ${chainId}`); -} - export function nameToChainId(name: string) { const chain = chainIdNameMap.find((chain) => chain.name === name); if (chain) { diff --git a/packages/thirdweb/src/react/core/hooks/wallets/useCallsStatus.ts b/packages/thirdweb/src/react/core/hooks/wallets/useCallsStatus.ts index a0acea37274..1e8f5833fc5 100644 --- a/packages/thirdweb/src/react/core/hooks/wallets/useCallsStatus.ts +++ b/packages/thirdweb/src/react/core/hooks/wallets/useCallsStatus.ts @@ -7,7 +7,7 @@ import { useActiveWallet } from "./useActiveWallet.js"; /** * A hook to get a call bundle's current status according to [EIP-5792](https://eips.ethereum.org/EIPS/eip-5792). * - * @note This function is dependent on the wallet's support for EIP-5792 and could throw an error if it's not supported. + * This function is dependent on the wallet's support for EIP-5792 and could throw an error if it's not supported. * * @returns a React Query object. * @beta diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6e61d8ec21..2caee02cc4e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -137,7 +137,7 @@ importers: version: 1.1.4(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@sentry/nextjs': specifier: 8.38.0 - version: 8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + version: 8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) '@shazow/whatsabi': specifier: ^0.16.0 version: 0.16.0(@noble/hashes@1.5.0)(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -158,7 +158,7 @@ importers: version: link:../../packages/service-utils '@vercel/functions': specifier: ^1.4.2 - version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0(@aws-sdk/client-sts@3.693.0)) + version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0) '@vercel/og': specifier: ^0.6.2 version: 0.6.3 @@ -290,7 +290,7 @@ importers: version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -339,7 +339,7 @@ importers: version: 8.4.4(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.4.4 - version: 8.4.4(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.27.0)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + version: 8.4.4(@swc/core@1.9.2)(esbuild@0.24.0)(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.27.0)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) '@storybook/react': specifier: 8.4.4 version: 8.4.4(@storybook/test@8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) @@ -387,7 +387,7 @@ importers: version: 10.4.20(postcss@8.4.49) checkly: specifier: ^4.8.1 - version: 4.9.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 4.9.1(@swc/core@1.9.2)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) eslint: specifier: 8.57.0 version: 8.57.0 @@ -414,7 +414,7 @@ importers: version: 8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) tailwindcss: specifier: 3.4.15 - version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) typescript: specifier: 5.6.3 version: 5.6.3 @@ -532,10 +532,10 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.15 - version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) typescript: specifier: 5.6.3 version: 5.6.3 @@ -547,13 +547,13 @@ importers: version: 1.0.5(react@19.0.0-rc-69d4b800-20241021) '@mdx-js/loader': specifier: ^2.3.0 - version: 2.3.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))) + version: 2.3.0(webpack@5.96.1) '@mdx-js/react': specifier: ^2.3.0 version: 2.3.0(react@19.0.0-rc-69d4b800-20241021) '@next/mdx': specifier: 15.0.3 - version: 15.0.3(@mdx-js/loader@2.3.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))))(@mdx-js/react@2.3.0(react@19.0.0-rc-69d4b800-20241021)) + version: 15.0.3(@mdx-js/loader@2.3.0(webpack@5.96.1))(@mdx-js/react@2.3.0(react@19.0.0-rc-69d4b800-20241021)) '@radix-ui/react-dialog': specifier: 1.1.2 version: 1.1.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) @@ -634,7 +634,7 @@ importers: version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -692,7 +692,7 @@ importers: version: 1.2.4 eslint-plugin-tailwindcss: specifier: ^3.17.5 - version: 3.17.5(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3))) + version: 3.17.5(tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@15.0.3(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)) @@ -701,7 +701,7 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.15 - version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) tsx: specifier: 4.19.2 version: 4.19.2 @@ -729,9 +729,6 @@ importers: '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) - '@radix-ui/react-toast': - specifier: ^1.2.2 - version: 1.2.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@tanstack/react-query': specifier: 5.60.2 version: 5.60.2(react@19.0.0-rc-69d4b800-20241021) @@ -762,6 +759,9 @@ importers: react-hook-form: specifier: 7.52.0 version: 7.52.0(react@19.0.0-rc-69d4b800-20241021) + server-only: + specifier: ^0.0.1 + version: 0.0.1 sonner: specifier: ^1.7.0 version: 1.7.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) @@ -770,7 +770,7 @@ importers: version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -781,6 +781,9 @@ importers: specifier: 3.23.8 version: 3.23.8 devDependencies: + '@next/eslint-plugin-next': + specifier: 15.0.3 + version: 15.0.3 '@types/node': specifier: 20.14.9 version: 20.14.9 @@ -790,18 +793,33 @@ importers: '@types/react-dom': specifier: npm:types-react-dom@19.0.0-rc.1 version: types-react-dom@19.0.0-rc.1 + '@typescript-eslint/eslint-plugin': + specifier: 7.14.1 + version: 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/parser': + specifier: 7.14.1 + version: 7.14.1(eslint@8.57.0)(typescript@5.6.3) eslint: specifier: 8.57.0 version: 8.57.0 - eslint-config-next: - specifier: 15.0.3 - version: 15.0.3(eslint@8.57.0)(typescript@5.6.3) + eslint-config-biome: + specifier: 1.9.3 + version: 1.9.3 + eslint-plugin-react-compiler: + specifier: 19.0.0-beta-a7bf2bd-20241110 + version: 19.0.0-beta-a7bf2bd-20241110(eslint@8.57.0) + knip: + specifier: 5.37.0 + version: 5.37.0(@types/node@20.14.9)(typescript@5.6.3) postcss: specifier: 8.4.49 version: 8.4.49 + postcss-load-config: + specifier: ^6.0.1 + version: 6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.0) tailwindcss: specifier: 3.4.15 - version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) typescript: specifier: 5.6.3 version: 5.6.3 @@ -4357,19 +4375,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toast@1.2.2': - resolution: {integrity: sha512-Z6pqSzmAP/bFJoqMAston4eSNa+ud44NSZTiZUmUen+IOZ5nBY8kzuU5WDBVyFXPtcW6yUalOHsxM/BP6Sv8ww==} - peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-tooltip@1.1.4': resolution: {integrity: sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==} peerDependencies: @@ -5504,9 +5509,6 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/types@0.1.15': resolution: {integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==} @@ -11383,6 +11385,24 @@ packages: ts-node: optional: true + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + postcss-loader@8.1.1: resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} engines: {node: '>= 18.12.0'} @@ -17197,11 +17217,11 @@ snapshots: react: 19.0.0-rc-69d4b800-20241021 react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) - '@mdx-js/loader@2.3.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)))': + '@mdx-js/loader@2.3.0(webpack@5.96.1)': dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1 transitivePeerDependencies: - supports-color @@ -17341,11 +17361,11 @@ snapshots: dependencies: fast-glob: 3.3.1 - '@next/mdx@15.0.3(@mdx-js/loader@2.3.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))))(@mdx-js/react@2.3.0(react@19.0.0-rc-69d4b800-20241021))': + '@next/mdx@15.0.3(@mdx-js/loader@2.3.0(webpack@5.96.1))(@mdx-js/react@2.3.0(react@19.0.0-rc-69d4b800-20241021))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 2.3.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))) + '@mdx-js/loader': 2.3.0(webpack@5.96.1) '@mdx-js/react': 2.3.0(react@19.0.0-rc-69d4b800-20241021) '@next/swc-darwin-arm64@15.0.3': @@ -17495,7 +17515,7 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - '@oclif/core@2.8.11(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)': + '@oclif/core@2.8.11(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3)': dependencies: '@types/cli-progress': 3.11.5 ansi-escapes: 4.3.2 @@ -17521,7 +17541,7 @@ snapshots: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3) + ts-node: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) tslib: 2.8.1 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -17558,10 +17578,10 @@ snapshots: dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-not-found@2.3.23(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)': + '@oclif/plugin-not-found@2.3.23(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3)': dependencies: '@oclif/color': 1.0.13 - '@oclif/core': 2.8.11(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3) + '@oclif/core': 2.8.11(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -17586,9 +17606,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)': + '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3)': dependencies: - '@oclif/core': 2.8.11(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3) + '@oclif/core': 2.8.11(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) chalk: 4.1.2 debug: 4.3.7(supports-color@8.1.1) fs-extra: 9.1.0 @@ -17977,7 +17997,7 @@ snapshots: dependencies: playwright: 1.48.2 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.27.0)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.27.0)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.39.0 @@ -17987,7 +18007,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) optionalDependencies: type-fest: 4.27.0 webpack-hot-middleware: 2.26.1 @@ -18504,26 +18524,6 @@ snapshots: '@types/react': types-react@19.0.0-rc.1 '@types/react-dom': types-react-dom@19.0.0-rc.1 - '@radix-ui/react-toast@1.2.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-portal': 1.1.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) - '@radix-ui/react-visually-hidden': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-69d4b800-20241021 - react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) - optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - '@radix-ui/react-tooltip@1.1.4(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -19005,7 +19005,7 @@ snapshots: '@sentry/types': 8.38.0 '@sentry/utils': 8.38.0 - '@sentry/nextjs@8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@sentry/nextjs@8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) @@ -19019,7 +19019,7 @@ snapshots: '@sentry/types': 8.38.0 '@sentry/utils': 8.38.0 '@sentry/vercel-edge': 8.38.0 - '@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + '@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) chalk: 3.0.0 next: 15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) resolve: 1.22.8 @@ -19109,12 +19109,12 @@ snapshots: '@sentry/types': 8.38.0 '@sentry/utils': 8.38.0 - '@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0))': dependencies: '@sentry/bundler-plugin-core': 2.22.6 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) transitivePeerDependencies: - encoding - supports-color @@ -19736,7 +19736,7 @@ snapshots: ts-dedent: 2.2.0 vite: 5.4.11(@types/node@22.9.0)(lightningcss@1.28.1)(terser@5.36.0) - '@storybook/builder-webpack5@8.4.4(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': + '@storybook/builder-webpack5@8.4.4(@swc/core@1.9.2)(esbuild@0.24.0)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': dependencies: '@storybook/core-webpack': 8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) '@types/node': 22.9.0 @@ -19745,23 +19745,23 @@ snapshots: case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.1 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) es-module-lexer: 1.5.4 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) - html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) + html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) magic-string: 0.30.12 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 storybook: 8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + style-loader: 3.3.4(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2)(esbuild@0.24.0)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) - webpack-dev-middleware: 6.1.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) + webpack-dev-middleware: 6.1.3(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -19838,7 +19838,7 @@ snapshots: dependencies: storybook: 8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.4.4(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.27.0)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@storybook/nextjs@8.4.4(@swc/core@1.9.2)(esbuild@0.24.0)(next@15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.27.0)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) @@ -19853,31 +19853,31 @@ snapshots: '@babel/preset-react': 7.25.9(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.27.0)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) - '@storybook/builder-webpack5': 8.4.4(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) - '@storybook/preset-react-webpack': 8.4.4(@storybook/test@8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.27.0)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) + '@storybook/builder-webpack5': 8.4.4(@swc/core@1.9.2)(esbuild@0.24.0)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) + '@storybook/preset-react-webpack': 8.4.4(@storybook/test@8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.2)(esbuild@0.24.0)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) '@storybook/react': 8.4.4(@storybook/test@8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) '@storybook/test': 8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) '@types/node': 22.9.0 '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) - css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) + css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) find-up: 5.0.0 image-size: 1.1.1 loader-utils: 3.3.1 next: 15.0.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) pnp-webpack-plugin: 1.7.0(typescript@5.6.3) postcss: 8.4.49 - postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) react: 19.0.0-rc-69d4b800-20241021 react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 13.3.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + sass-loader: 13.3.3(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) semver: 7.6.3 storybook: 8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + style-loader: 3.3.4(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0-rc-69d4b800-20241021) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -19885,7 +19885,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.6.3 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -19905,11 +19905,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.4.4(@storybook/test@8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': + '@storybook/preset-react-webpack@8.4.4(@storybook/test@8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.2)(esbuild@0.24.0)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': dependencies: '@storybook/core-webpack': 8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) '@storybook/react': 8.4.4(@storybook/test@8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) '@types/node': 22.9.0 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -19921,7 +19921,7 @@ snapshots: semver: 7.6.3 storybook: 8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -19936,7 +19936,7 @@ snapshots: dependencies: storybook: 8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0))': dependencies: debug: 4.3.7(supports-color@8.1.1) endent: 2.1.0 @@ -19946,7 +19946,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.6.3) tslib: 2.8.1 typescript: 5.6.3 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) transitivePeerDependencies: - supports-color @@ -20385,7 +20385,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.9.2': optional: true - '@swc/core@1.9.2(@swc/helpers@0.5.15)': + '@swc/core@1.9.2': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.15 @@ -20400,7 +20400,6 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.9.2 '@swc/core-win32-ia32-msvc': 1.9.2 '@swc/core-win32-x64-msvc': 1.9.2 - '@swc/helpers': 0.5.15 optional: true '@swc/counter@0.1.3': {} @@ -20409,11 +20408,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - optional: true - '@swc/types@0.1.15': dependencies: '@swc/counter': 0.1.3 @@ -20913,7 +20907,7 @@ snapshots: '@urql/core': 5.0.8(graphql@16.9.0) wonka: 6.3.4 - '@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0(@aws-sdk/client-sts@3.693.0))': + '@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0)': optionalDependencies: '@aws-sdk/credential-provider-web-identity': 3.693.0(@aws-sdk/client-sts@3.693.0) @@ -21806,12 +21800,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) babel-plugin-istanbul@6.1.1: dependencies: @@ -22264,13 +22258,13 @@ snapshots: check-error@2.1.1: {} - checkly@4.9.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): + checkly@4.9.1(@swc/core@1.9.2)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: - '@oclif/core': 2.8.11(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3) + '@oclif/core': 2.8.11(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) '@oclif/plugin-help': 5.1.20 - '@oclif/plugin-not-found': 2.3.23(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3) + '@oclif/plugin-not-found': 2.3.23(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) '@oclif/plugin-plugins': 5.4.4 - '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3) + '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) acorn: 8.8.1 acorn-walk: 8.2.0 @@ -22727,7 +22721,7 @@ snapshots: css-color-keywords@1.0.0: {} - css-loader@6.11.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + css-loader@6.11.0(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -22738,7 +22732,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) css-select@4.3.0: dependencies: @@ -23434,8 +23428,8 @@ snapshots: '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0) eslint-plugin-react: 7.37.2(eslint@8.57.0) eslint-plugin-react-hooks: 5.0.0(eslint@8.57.0) @@ -23454,19 +23448,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -23494,18 +23488,18 @@ snapshots: - bluebird - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -23516,7 +23510,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -23626,11 +23620,11 @@ snapshots: eslint-plugin-svg-jsx@1.2.4: {} - eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3))): + eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))): dependencies: fast-glob: 3.3.2 postcss: 8.4.49 - tailwindcss: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)) + tailwindcss: 3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) eslint-scope@5.1.1: dependencies: @@ -24304,7 +24298,7 @@ snapshots: cross-spawn: 7.0.5 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -24319,7 +24313,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.3 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) form-data-encoder@2.1.4: {} @@ -24803,7 +24797,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + html-webpack-plugin@5.6.3(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -24811,7 +24805,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) htmlparser2@3.10.1: dependencies: @@ -27365,7 +27359,7 @@ snapshots: node-int64@0.4.0: {} - node-polyfill-webpack-plugin@2.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -27392,7 +27386,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) node-releases@2.0.18: {} @@ -28001,22 +27995,31 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)): dependencies: lilconfig: 3.1.2 yaml: 2.6.0 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3) + ts-node: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) - postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + postcss-load-config@6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.0): + dependencies: + lilconfig: 3.1.2 + optionalDependencies: + jiti: 2.4.0 + postcss: 8.4.49 + tsx: 4.19.2 + yaml: 2.6.0 + + postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: cosmiconfig: 9.0.0(typescript@5.6.3) jiti: 1.21.6 postcss: 8.4.49 semver: 7.6.3 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) transitivePeerDependencies: - typescript @@ -29187,10 +29190,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@13.3.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + sass-loader@13.3.3(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: neo-async: 2.6.2 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) satori@0.10.9: dependencies: @@ -29718,9 +29721,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + style-loader@3.3.4(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) style-to-object@0.4.4: dependencies: @@ -29863,11 +29866,11 @@ snapshots: tailwind-merge@2.5.4: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))): dependencies: - tailwindcss: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)) + tailwindcss: 3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) - tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)): + tailwindcss@3.4.15(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -29886,7 +29889,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -29965,29 +29968,18 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + terser-webpack-plugin@5.3.10(@swc/core@1.9.2)(esbuild@0.24.0)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.36.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) optionalDependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.15) + '@swc/core': 1.9.2 esbuild: 0.24.0 - terser-webpack-plugin@5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.36.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) - optionalDependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.15) - terser-webpack-plugin@5.3.10(webpack@5.96.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -30127,7 +30119,7 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@20.14.9)(typescript@5.6.3): + ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -30145,7 +30137,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.15) + '@swc/core': 1.9.2 ts-pnp@1.2.0(typescript@5.6.3): optionalDependencies: @@ -30953,7 +30945,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)): + webpack-dev-middleware@6.1.3(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -30961,7 +30953,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.96.1(@swc/core@1.9.2)(esbuild@0.24.0) webpack-hot-middleware@2.26.1: dependencies: @@ -31005,37 +30997,7 @@ snapshots: - esbuild - uglify-js - webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - browserslist: 4.24.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0): + webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -31057,7 +31019,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(esbuild@0.24.0)) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2)(esbuild@0.24.0)(webpack@5.96.1(@swc/core@1.9.2)(esbuild@0.24.0)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: