diff --git a/.vscode/settings.json b/.vscode/settings.json index cb65c624a45..119c7599e9b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,5 +24,8 @@ }, "[javascript]": { "editor.defaultFormatter": "biomejs.biome" + }, + "[css]": { + "editor.defaultFormatter": "biomejs.biome" } } diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 9aee2c9facd..7c5ac32296e 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -78,8 +78,6 @@ "papaparse": "^5.4.1", "pluralize": "^8.0.0", "posthog-js": "1.67.1", - "prism-react-renderer": "^2.3.1", - "prismjs": "^1.29.0", "qrcode": "^1.5.3", "react": "19.0.0-rc-69d4b800-20241021", "react-children-utilities": "^2.10.0", @@ -94,6 +92,7 @@ "recharts": "^2.13.3", "remark-gfm": "^4.0.0", "server-only": "^0.0.1", + "shiki": "1.22.2", "sonner": "^1.7.0", "spdx-correct": "^3.2.0", "swagger-ui-react": "^5.17.14", diff --git a/apps/dashboard/src/@/components/ui/CodeBlock.tsx b/apps/dashboard/src/@/components/ui/CodeBlock.tsx deleted file mode 100644 index 0f7beefbfa5..00000000000 --- a/apps/dashboard/src/@/components/ui/CodeBlock.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Highlight } from "prism-react-renderer"; -import { cn } from "../../lib/utils"; -import { CopyButton } from "./CopyButton"; -import { Card } from "./card"; - -interface CodeBlockProps { - code: string; - language?: string; - className?: string; - canCopy?: boolean; -} - -export const CodeBlock = ({ - code, - language = "sh", - canCopy = true, -}: CodeBlockProps) => { - return ( - - {({ className, tokens, getLineProps, getTokenProps }) => ( - - {canCopy && ( - - )} - -
- {tokens.map((line, i) => ( - // biome-ignore lint/suspicious/noArrayIndexKey: index IS the key here -
- {line.map((token, key) => ( - // biome-ignore lint/suspicious/noArrayIndexKey: index IS the key here - - ))} -
- ))} -
-
- )} -
- ); -}; diff --git a/apps/dashboard/src/@/components/ui/code.tsx b/apps/dashboard/src/@/components/ui/code.tsx deleted file mode 100644 index 876b87b4896..00000000000 --- a/apps/dashboard/src/@/components/ui/code.tsx +++ /dev/null @@ -1,36 +0,0 @@ -"use client"; - -import { useClipboard } from "hooks/useClipboard"; -import { CheckIcon, CopyIcon } from "lucide-react"; -import { cn } from "../../lib/utils"; -import { Button } from "./button"; - -export function PlainTextCodeBlock(props: { - code: string; - copyButtonClassName?: string; -}) { - const { hasCopied, onCopy } = useClipboard(props.code); - - return ( -
- - {props.code} - - -
- ); -} diff --git a/apps/dashboard/src/@/components/ui/code/RenderCode.tsx b/apps/dashboard/src/@/components/ui/code/RenderCode.tsx new file mode 100644 index 00000000000..dad2918b8e9 --- /dev/null +++ b/apps/dashboard/src/@/components/ui/code/RenderCode.tsx @@ -0,0 +1,70 @@ +import { ScrollShadow } from "@/components/ui/ScrollShadow/ScrollShadow"; +import { Button } from "@/components/ui/button"; +import { ToolTipLabel } from "@/components/ui/tooltip"; +import { cn } from "@/lib/utils"; +import { CheckIcon, CopyIcon } from "lucide-react"; +import { useState } from "react"; + +export function RenderCode(props: { + code: string; + html: string; + className?: string; + scrollableClassName?: string; +}) { + return ( +
+ +
+ + +
+ ); +} + +function CopyButton(props: { + text: string; + className?: string; + iconClassName?: string; +}) { + const [isCopied, setIsCopied] = useState(false); + return ( + + + + ); +} diff --git a/apps/dashboard/src/@/components/ui/code/code.client.tsx b/apps/dashboard/src/@/components/ui/code/code.client.tsx new file mode 100644 index 00000000000..927181c597b --- /dev/null +++ b/apps/dashboard/src/@/components/ui/code/code.client.tsx @@ -0,0 +1,57 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { keepPreviousData, useQuery } from "@tanstack/react-query"; +import type { BundledLanguage } from "shiki"; +import { Spinner } from "../../ui/Spinner/Spinner"; +import { RenderCode } from "./RenderCode"; +import { getCodeHtml } from "./getCodeHtml"; + +export type CodeProps = { + code: string; + lang: BundledLanguage; + className?: string; + scrollableClassName?: string; + loadingClassName?: string; + keepPreviousDataOnCodeChange?: boolean; +}; + +export const CodeClient: React.FC = ({ + code, + lang, + className, + scrollableClassName, + loadingClassName, + keepPreviousDataOnCodeChange = false, +}) => { + const codeQuery = useQuery({ + queryKey: ["html", code], + queryFn: () => getCodeHtml(code, lang), + placeholderData: keepPreviousDataOnCodeChange + ? keepPreviousData + : undefined, + retry: false, + }); + + if (!codeQuery.data) { + return ( +
+ +
+ ); + } + + return ( + + ); +}; diff --git a/apps/dashboard/src/@/components/ui/code/code.server.tsx b/apps/dashboard/src/@/components/ui/code/code.server.tsx new file mode 100644 index 00000000000..12446f1a0ed --- /dev/null +++ b/apps/dashboard/src/@/components/ui/code/code.server.tsx @@ -0,0 +1,18 @@ +import type { BundledLanguage } from "shiki"; +import { RenderCode } from "./RenderCode"; +import { getCodeHtml } from "./getCodeHtml"; + +export type CodeProps = { + code: string; + lang: BundledLanguage; + className?: string; +}; + +export const CodeServer: React.FC = async ({ + code, + lang, + className, +}) => { + const { html, formattedCode } = await getCodeHtml(code, lang); + return ; +}; diff --git a/apps/dashboard/src/@/components/ui/code/code.stories.tsx b/apps/dashboard/src/@/components/ui/code/code.stories.tsx new file mode 100644 index 00000000000..b364a29be49 --- /dev/null +++ b/apps/dashboard/src/@/components/ui/code/code.stories.tsx @@ -0,0 +1,115 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { BadgeContainer, mobileViewport } from "stories/utils"; +import { CodeClient } from "./code.client"; + +const meta = { + title: "code/lang", + component: Component, + parameters: {}, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Desktop: Story = { + args: {}, +}; + +export const Mobile: Story = { + args: {}, + parameters: { + viewport: mobileViewport("iphone14"), + }, +}; + +const tsCode = `\ +type User = { + name: string; + age: number; +} + +function logUser(user: User) { + console.log(user) +} +`; + +const jsCode = `\ +import { getContract } from "thirdweb"; +import { sepolia } from "thirdweb/chains"; +import { getOwnedNFTs } from "thirdweb/extensions/erc1155"; + +const contract = getContract({ + client, + address: "0x1234...", + chain: sepolia, +}); +`; + +const jsxCode = `\ +import { ThirdwebProvider } from "thirdweb/react"; + +function Main() { + return ( + + + + ); +}`; + +const tsxCode = `\ +type User = { + name: string; + age: number; +} + +function UserInfo(props: { user: User }) { + return
{props.user.name}
+} +`; + +const tsxCodeWithFormError = `\ +// This piece of code has invalid syntax and can't be formatted by prettier +// this should not crash the page - and be rendered as is without formatting +// the format error is logged in console + +type User = // missing { here + name: string; + age: number; +} + +function UserInfo(props: { user: User }) { + return
{props.user.name}
+} +`; + +const bashCode = "pnpm i thirdweb"; + +function Component() { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ ); +} diff --git a/apps/dashboard/src/@/components/ui/code/getCodeHtml.tsx b/apps/dashboard/src/@/components/ui/code/getCodeHtml.tsx new file mode 100644 index 00000000000..e87e2410f70 --- /dev/null +++ b/apps/dashboard/src/@/components/ui/code/getCodeHtml.tsx @@ -0,0 +1,45 @@ +import * as parserBabel from "prettier/plugins/babel"; +import * as estree from "prettier/plugins/estree"; +import { format } from "prettier/standalone"; +import { type BundledLanguage, codeToHtml } from "shiki"; + +function isPrettierSupportedLang(lang: BundledLanguage) { + return ( + lang === "js" || + lang === "jsx" || + lang === "ts" || + lang === "tsx" || + lang === "javascript" || + lang === "typescript" || + lang === "css" || + lang === "json" + ); +} + +export async function getCodeHtml(code: string, lang: BundledLanguage) { + const formattedCode = isPrettierSupportedLang(lang) + ? await format(code, { + parser: "babel-ts", + plugins: [parserBabel, estree], + printWidth: 60, + }).catch((e) => { + console.error(e); + console.error("Failed to format code"); + console.log({ + code, + lang, + }); + return code; + }) + : code; + + const html = await codeToHtml(formattedCode, { + lang: lang, + themes: { + light: "github-light", + dark: "github-dark-default", + }, + }); + + return { html, formattedCode }; +} diff --git a/apps/dashboard/src/@/components/ui/code/plaintext-code.stories.tsx b/apps/dashboard/src/@/components/ui/code/plaintext-code.stories.tsx new file mode 100644 index 00000000000..6e29ffe3043 --- /dev/null +++ b/apps/dashboard/src/@/components/ui/code/plaintext-code.stories.tsx @@ -0,0 +1,52 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { BadgeContainer, mobileViewport } from "stories/utils"; +import { PlainTextCodeBlock } from "./plaintext-code"; + +const meta = { + title: "code/plaintext", + component: Component, + parameters: {}, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Desktop: Story = { + args: {}, +}; + +export const Mobile: Story = { + args: {}, + parameters: { + viewport: mobileViewport("iphone14"), + }, +}; + +const jsCode = `\ +import { getContract } from "thirdweb"; +import { sepolia } from "thirdweb/chains"; +import { getOwnedNFTs } from "thirdweb/extensions/erc1155"; + +const contract = getContract({ + client, + address: "0x1234...", + chain: sepolia, +}); +`; + +const overflowText = + "123456789abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz"; + +function Component() { + return ( +
+ + + + + + + +
+ ); +} diff --git a/apps/dashboard/src/@/components/ui/code/plaintext-code.tsx b/apps/dashboard/src/@/components/ui/code/plaintext-code.tsx new file mode 100644 index 00000000000..595714d58a1 --- /dev/null +++ b/apps/dashboard/src/@/components/ui/code/plaintext-code.tsx @@ -0,0 +1,52 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { useClipboard } from "hooks/useClipboard"; +import { CheckIcon, CopyIcon } from "lucide-react"; +import { ScrollShadow } from "../ScrollShadow/ScrollShadow"; +import { Button } from "../button"; + +export function PlainTextCodeBlock(props: { + code: string; + copyButtonClassName?: string; + className?: string; + scrollableClassName?: string; + codeClassName?: string; +}) { + const { hasCopied, onCopy } = useClipboard(props.code); + + return ( +
+ + + {props.code} + + + + +
+ ); +} diff --git a/apps/dashboard/src/@/styles/globals.css b/apps/dashboard/src/@/styles/globals.css index d89596e0c75..45302ce3ef9 100644 --- a/apps/dashboard/src/@/styles/globals.css +++ b/apps/dashboard/src/@/styles/globals.css @@ -156,3 +156,13 @@ input:-webkit-autofill:active { /* Revert background color */ transition: background-color 5000s ease-in-out 0s; } + +.dark .shiki, +.dark .shiki span { + color: var(--shiki-dark) !important; + background-color: var(--background) !important; + /* Optional, if you also want font styles */ + font-style: var(--shiki-dark-font-style) !important; + font-weight: var(--shiki-dark-font-weight) !important; + text-decoration: var(--shiki-dark-text-decoration) !important; +} diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/listing-drawer.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/listing-drawer.tsx index d414680f7c4..c8aa6e5398d 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/listing-drawer.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/listing-drawer.tsx @@ -12,7 +12,7 @@ import type { } from "thirdweb/extensions/marketplace"; import { useActiveAccount } from "thirdweb/react"; -import { CodeBlock } from "@/components/ui/CodeBlock"; +import { CodeClient } from "@/components/ui/code/code.client"; import { NFTMediaWithEmptyState } from "tw-components/nft-media"; import { CancelTab } from "./cancel-tab"; import { LISTING_STATUS } from "./types"; @@ -148,13 +148,11 @@ export const ListingDrawer: React.FC = ({ {data?.asset.metadata.properties ? (

Attributes

-
) : null} diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/embed/embed-setup.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/embed/embed-setup.tsx index b1009256a8a..69c8e49bbd7 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/embed/embed-setup.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/embed/embed-setup.tsx @@ -1,6 +1,7 @@ "use client"; import { Button } from "@/components/ui/button"; +import { CodeClient } from "@/components/ui/code/code.client"; import { useApiKeys, useCreateApiKey } from "@3rdweb-sdk/react/hooks/useApi"; import { Flex, FormControl, Input, Select } from "@chakra-ui/react"; import { LazyCreateAPIKeyDialog } from "components/settings/ApiKeys/Create/LazyCreateAPIKeyDialog"; @@ -16,14 +17,7 @@ import type { StoredChain } from "stores/chainStores"; import type { ThirdwebContract } from "thirdweb"; import type { ChainMetadata } from "thirdweb/chains"; import { useActiveAccount } from "thirdweb/react"; -import { - Card, - CodeBlock, - FormHelperText, - FormLabel, - Heading, - Text, -} from "tw-components"; +import { Card, FormHelperText, FormLabel, Heading, Text } from "tw-components"; interface EmbedSetupProps { contract: ThirdwebContract; @@ -535,12 +529,10 @@ export const EmbedSetup: React.FC = ({ Embed Code -
)} @@ -363,7 +362,7 @@ const transaction = prepareContractCall({ contract, method: resolveMethod("${parsedData.functionName}"), params: [${displayParams.join(", ")}], - value: ${parsedData.value ? `${parsedData.value}n` : ""}, + ${parsedData.value ? `value: ${parsedData.value}n,` : ""} }); const result = await simulateTransaction({ diff --git a/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-access-token-button.tsx b/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-access-token-button.tsx index 0de1c6be3a7..795e4c5b801 100644 --- a/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-access-token-button.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-access-token-button.tsx @@ -1,3 +1,4 @@ +import { PlainTextCodeBlock } from "@/components/ui/code/plaintext-code"; import { useEngineCreateAccessToken } from "@3rdweb-sdk/react/hooks/useEngine"; import { Flex, @@ -13,7 +14,7 @@ import { useTrack } from "hooks/analytics/useTrack"; import { useTxNotifications } from "hooks/useTxNotifications"; import { CirclePlusIcon } from "lucide-react"; import { useState } from "react"; -import { Button, Checkbox, CodeBlock, Text } from "tw-components"; +import { Button, Checkbox, Text } from "tw-components"; interface AddAccessTokenButtonProps { instanceUrl: string; @@ -82,7 +83,7 @@ export const AddAccessTokenButton: React.FC = ({ Access token
- + This access token will not be shown again. diff --git a/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-keypair-button.tsx b/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-keypair-button.tsx index 358ec4cf889..ad25e65a410 100644 --- a/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-keypair-button.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/add-keypair-button.tsx @@ -1,3 +1,4 @@ +import { PlainTextCodeBlock } from "@/components/ui/code/plaintext-code"; import { type KeypairAlgorithm, useEngineAddKeypair, @@ -21,7 +22,7 @@ import { useTrack } from "hooks/analytics/useTrack"; import { useTxNotifications } from "hooks/useTxNotifications"; import { CirclePlusIcon } from "lucide-react"; import { useState } from "react"; -import { Button, CodeBlock, FormLabel, Text } from "tw-components"; +import { Button, FormLabel, Text } from "tw-components"; const KEYPAIR_ALGORITHM_DETAILS: Record< KeypairAlgorithm, @@ -156,27 +157,19 @@ export const AddKeypairButton: React.FC = ({
- Extract the public key. - Print the public key. - + diff --git a/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/engine-access-tokens.tsx b/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/engine-access-tokens.tsx index 76a190392ff..53bd2fd5f76 100644 --- a/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/engine-access-tokens.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/access-tokens/components/engine-access-tokens.tsx @@ -1,5 +1,6 @@ "use client"; +import { CodeClient } from "@/components/ui/code/code.client"; import { InlineCode } from "@/components/ui/inline-code"; import { useEngineAccessTokens, @@ -8,7 +9,7 @@ import { } from "@3rdweb-sdk/react/hooks/useEngine"; import { ButtonGroup, Flex } from "@chakra-ui/react"; import { useState } from "react"; -import { Button, CodeBlock, Heading, Link, Text } from "tw-components"; +import { Button, Heading, Link, Text } from "tw-components"; import { AccessTokensTable } from "./access-tokens-table"; import { AddAccessTokenButton } from "./add-access-token-button"; import { AddKeypairButton } from "./add-keypair-button"; @@ -107,8 +108,8 @@ const StandardAccessTokensPanel = ({ Set the header. - /backend-wallet/get-all", { headers: { authorization: "Bearer ", @@ -158,8 +159,8 @@ const KeypairAuthenticationPanel = ({ Set the header. - { - return ; + return ( + + ); }, }), columnHelper.accessor("algorithm", { diff --git a/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/storage/page.tsx b/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/storage/page.tsx index 66dd94f77fe..5157370bc92 100644 --- a/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/storage/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/storage/page.tsx @@ -179,24 +179,22 @@ export default function Page() { const storageSnippets = { react: `// Check out the latest docs here: https://portal.thirdweb.com/typescript/v5/storage -// Initialize your provider import { ThirdwebProvider } from "thirdweb/react"; +import { upload } from "thirdweb/storage"; +import { MediaRenderer } from "thirdweb/react"; -function Provider() { +// Wrap your app in ThirdwebProvider +function Providers() { return ( - ... + ); } -// Upload files to IPFS -import { upload } from "thirdweb/storage"; - -function App() { - const uploadData = () => { - // And upload the data with the upload function +function UploadFiles() { + const uploadData = async () => { const uri = await upload({ client, // thirdweb client files: [ @@ -204,15 +202,13 @@ function App() { ], }); } - ... -} -// Render files from IPFS -import { MediaRenderer } from "thirdweb/react"; + return
...
+} -function App() { + // Supported types: image, video, audio, 3d model, html +function ShowFiles() { return ( - // Supported types: image, video, audio, 3d model, html ); }`, diff --git a/apps/dashboard/src/components/connect/CodePlayground.tsx b/apps/dashboard/src/components/connect/CodePlayground.tsx index 238a826dd13..30348291360 100644 --- a/apps/dashboard/src/components/connect/CodePlayground.tsx +++ b/apps/dashboard/src/components/connect/CodePlayground.tsx @@ -1,3 +1,4 @@ +import { CodeClient } from "@/components/ui/code/code.client"; import { Flex, List, @@ -7,13 +8,13 @@ import { TabPanels, Tabs, } from "@chakra-ui/react"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ChakraNextImage } from "components/Image"; import type { CodeEnvironment } from "components/contract-tabs/code/types"; import { Aurora } from "components/homepage/Aurora"; import { connectPlaygroundData } from "components/product-pages/common/connect/data"; -import { themes } from "prism-react-renderer"; import { useState } from "react"; -import { Button, Card, CodeBlock } from "tw-components"; +import { Button, Card } from "tw-components"; import { COMMANDS, formatSnippet, @@ -23,6 +24,8 @@ import ConnectPlaygroundButton, { } from "./ConnectPlaygroundButton"; import ConnectPlaygroundTab from "./ConnectPlaygroundTab"; +const queryClient = new QueryClient(); + const CodePlayground = ({ TRACKING_CATEGORY, }: { @@ -124,6 +127,7 @@ const CodePlayground = ({ position="relative" zIndex={3} mt="-2px" + flexShrink={0} > - - + - + ); diff --git a/apps/dashboard/src/components/contract-components/published-contract/markdown-renderer.tsx b/apps/dashboard/src/components/contract-components/published-contract/markdown-renderer.tsx index 100a19bebd3..c66c792917a 100644 --- a/apps/dashboard/src/components/contract-components/published-contract/markdown-renderer.tsx +++ b/apps/dashboard/src/components/contract-components/published-contract/markdown-renderer.tsx @@ -1,3 +1,4 @@ +import { CodeClient } from "@/components/ui/code/code.client"; import { Box, type BoxProps, @@ -16,7 +17,7 @@ import { import { onlyText } from "react-children-utilities"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; -import { CodeBlock, Heading, Text } from "tw-components"; +import { Heading, Text } from "tw-components"; const ChakraReactMarkdown = chakra(ReactMarkdown); @@ -123,12 +124,13 @@ export const MarkdownRenderer: React.FC< if (props?.className) { const language = props.className.replace("language-", ""); return ( - +
+ +
); } diff --git a/apps/dashboard/src/components/contract-components/shared/sources-accordion.tsx b/apps/dashboard/src/components/contract-components/shared/sources-accordion.tsx index 61c75c2230d..0314479df80 100644 --- a/apps/dashboard/src/components/contract-components/shared/sources-accordion.tsx +++ b/apps/dashboard/src/components/contract-components/shared/sources-accordion.tsx @@ -1,3 +1,4 @@ +import { CodeClient } from "@/components/ui/code/code.client"; import { Accordion, AccordionButton, @@ -6,7 +7,7 @@ import { AccordionPanel, } from "@chakra-ui/react"; import type { Abi } from "abitype"; -import { CodeBlock, Heading } from "tw-components"; +import { Heading } from "tw-components"; import type { SourceFile } from "../types"; interface SourcesAccordionProps { @@ -37,10 +38,10 @@ export const SourcesAccordion: React.FC = ({ {isExpanded && ( - )} @@ -48,11 +49,12 @@ export const SourcesAccordion: React.FC = ({ )} )} - {sources.map((signature) => ( + {sources.map((signature, i) => ( = ({ {isExpanded && ( - )} diff --git a/apps/dashboard/src/components/contract-functions/contract-function-comment.tsx b/apps/dashboard/src/components/contract-functions/contract-function-comment.tsx index 79373af931e..818f9b23fd6 100644 --- a/apps/dashboard/src/components/contract-functions/contract-function-comment.tsx +++ b/apps/dashboard/src/components/contract-functions/contract-function-comment.tsx @@ -1,5 +1,5 @@ -import { CodeBlock } from "@/components/ui/CodeBlock"; import { Badge } from "@/components/ui/badge"; +import { CodeClient } from "@/components/ui/code/code.client"; import { useContractSources } from "contract-ui/hooks/useContractSources"; import { useMemo } from "react"; import type { ThirdwebContract } from "thirdweb"; @@ -36,7 +36,7 @@ export default function ContractFunctionComment({

About this function Beta

- + ); } diff --git a/apps/dashboard/src/components/contract-functions/interactive-abi-function.tsx b/apps/dashboard/src/components/contract-functions/interactive-abi-function.tsx index 241e44797ff..e55957d3c40 100644 --- a/apps/dashboard/src/components/contract-functions/interactive-abi-function.tsx +++ b/apps/dashboard/src/components/contract-functions/interactive-abi-function.tsx @@ -1,6 +1,8 @@ "use client"; import { Badge } from "@/components/ui/badge"; +import { CodeClient } from "@/components/ui/code/code.client"; +import { PlainTextCodeBlock } from "@/components/ui/code/plaintext-code"; import { InlineCode } from "@/components/ui/inline-code"; import { ToolTipLabel } from "@/components/ui/tooltip"; import { @@ -35,7 +37,6 @@ import { parseAbiParams, stringify } from "thirdweb/utils"; import { Button, Card, - CodeBlock, FormErrorMessage, FormHelperText, FormLabel, @@ -44,18 +45,24 @@ import { TrackedLink, } from "tw-components"; -function formatResponseData(data: unknown): string { +function formatResponseData(data: unknown): { + type: "json" | "text"; + data: string; +} { // Early exit if data is already a string, // otherwise JSON.stringify(data) will wrap it in extra quotes - which will affect the value for [Copy button] if (typeof data === "string") { // "" is a valid response. For example, some token has `symbol` === "" if (data === "") { - return `""`; + return { type: "text", data: `""` }; } - return data; + return { type: "text", data }; } if (typeof data === "bigint") { - return data.toString(); + return { + type: "text", + data: data.toString(), + }; } if (typeof data === "object") { @@ -72,7 +79,10 @@ function formatResponseData(data: unknown): string { } } - return stringify(data, null, 2); + return { + type: "json", + data: stringify(data, null, 2), + }; } function formatError(error: Error): string { @@ -426,35 +436,36 @@ export const InteractiveAbiFunction: React.FC = ({ )} - - {/* If the result is an IPFS URI, show a handy link so that users can open it in a new tab */} - {formattedResponseData.startsWith("ipfs://") && ( - - - Open in gateway - - + + {formattedResponseData.type === "text" ? ( + + ) : ( + )} + + {/* If the result is an IPFS URI, show a handy link so that users can open it in a new tab */} + {formattedResponseData.type === "text" && + formattedResponseData.data.startsWith("ipfs://") && ( + + + Open in gateway + + + )} {/* Same with the logic above but this time it's applied to traditional urls */} - {(formattedResponseData.startsWith("https://") || - formattedResponseData.startsWith("http://")) && ( + {((formattedResponseData.type === "text" && + formattedResponseData.data.startsWith("https://")) || + formattedResponseData.data.startsWith("http://")) && ( diff --git a/apps/dashboard/src/components/contract-tabs/code/CodeSegment.tsx b/apps/dashboard/src/components/contract-tabs/code/CodeSegment.tsx index d549f7c3f63..784b126cff6 100644 --- a/apps/dashboard/src/components/contract-tabs/code/CodeSegment.tsx +++ b/apps/dashboard/src/components/contract-tabs/code/CodeSegment.tsx @@ -1,10 +1,11 @@ +import { CodeClient } from "@/components/ui/code/code.client"; import { ButtonGroup, Flex, Icon } from "@chakra-ui/react"; import { JavaScriptIcon } from "components/icons/brand-icons/JavaScriptIcon"; import { ReactIcon } from "components/icons/brand-icons/ReactIcon"; import { TypeScriptIcon } from "components/icons/brand-icons/TypeScriptIcon"; import { UnityIcon } from "components/icons/brand-icons/UnityIcon"; import { type Dispatch, type JSX, type SetStateAction, useMemo } from "react"; -import { Button, CodeBlock } from "tw-components"; +import { Button } from "tw-components"; import type { ComponentWithChildren } from "types/component-with-children"; import type { CodeEnvironment, @@ -116,16 +117,17 @@ export const CodeSegment: React.FC = ({ {onlyTabs ? null : ( <> - = ({ defaultLanguage = "javascript", docs = "https://portal.thirdweb.com/", @@ -92,69 +87,45 @@ export const CodeSelector: React.FC = ({ return ( <> - - {Object.keys(landingSnippets).map((key) => - landingSnippets[key as keyof typeof landingSnippets] ? ( - - {key === "javascript" - ? "JavaScript" - : key === "react-native" - ? "React Native" - : key} - - ) : null, - )} - - - - +
+
+ {Object.keys(landingSnippets).map((key) => + landingSnippets[key as keyof typeof landingSnippets] ? ( + + {key === "javascript" + ? "JavaScript" + : key === "react-native" + ? "React Native" + : key} + + ) : null, + )} +
+
+ +
+ + + {/* Links for Replit and Docs */} - +
= ({ }) } /> - - +
+
); }; diff --git a/apps/dashboard/src/core-ui/batch-upload/batch-table.tsx b/apps/dashboard/src/core-ui/batch-upload/batch-table.tsx index d0477e8c907..6c9ed3b5769 100644 --- a/apps/dashboard/src/core-ui/batch-upload/batch-table.tsx +++ b/apps/dashboard/src/core-ui/batch-upload/batch-table.tsx @@ -1,3 +1,4 @@ +import { CodeClient } from "@/components/ui/code/code.client"; import { ToolTipLabel } from "@/components/ui/tooltip"; import { Box, @@ -27,7 +28,7 @@ import { import { useMemo } from "react"; import { type Column, usePagination, useTable } from "react-table"; import type { NFTInput } from "thirdweb/utils"; -import { CodeBlock, Text } from "tw-components"; +import { Text } from "tw-components"; const FileImage: React.FC = ({ src, ...props }) => { const img = useImageFileOrUrl( @@ -115,11 +116,10 @@ export const BatchTable: React.FC = ({ // biome-ignore lint/suspicious/noExplicitAny: FIXME Cell: ({ cell }: { cell: any }) => cell.value ? ( - ) : null, }, diff --git a/apps/dashboard/src/core-ui/batch-upload/upload-step.tsx b/apps/dashboard/src/core-ui/batch-upload/upload-step.tsx index 8127e4a5cb1..05bdc61ec51 100644 --- a/apps/dashboard/src/core-ui/batch-upload/upload-step.tsx +++ b/apps/dashboard/src/core-ui/batch-upload/upload-step.tsx @@ -68,11 +68,19 @@ export const UploadStep: React.FC = ({
  • Files must contain one .csv or .json file with metadata. -{" "} - + Download example.csv .{" "} - + Download example.json . @@ -111,16 +119,24 @@ export const UploadStep: React.FC = ({ automatically for you. If you already have the files uploaded, you can add an and/or column and add the IPFS hashes - there. - + there.{" "} + Download example.csv
  • If you want to make your media files map to your NFTs, you can add the name of your files to the and - column. - + column.{" "} + Download example.csv
  • diff --git a/apps/dashboard/src/tw-components/code-block.tsx b/apps/dashboard/src/tw-components/code-block.tsx deleted file mode 100644 index fb6d14dffc3..00000000000 --- a/apps/dashboard/src/tw-components/code-block.tsx +++ /dev/null @@ -1,134 +0,0 @@ -"use client"; - -import { - Box, - Code, - type CodeProps, - IconButton, - useColorModeValue, -} from "@chakra-ui/react"; -import { useClipboard } from "hooks/useClipboard"; -import { CheckIcon, CopyIcon } from "lucide-react"; -import { Highlight, Prism, themes } from "prism-react-renderer"; -import { Text } from "./text"; - -const darkThemeDefault = themes.vsDark; -const lightThemeDefault = themes.vsLight; - -type PrismTheme = typeof darkThemeDefault; - -// add solidity lang support for code -(typeof global !== "undefined" ? global : window).Prism = Prism; -require("prismjs/components/prism-solidity"); -// end add solidity support - -interface CodeBlockProps extends Omit { - code: string; - codeValue?: string; - language?: string; - canCopy?: boolean; - wrap?: boolean; - prefix?: string; - darkTheme?: PrismTheme; - lightTheme?: PrismTheme; -} -export const CodeBlock: React.FC = ({ - code, - codeValue, - language = "sh", - px = 4, - py = 2, - w = "full", - borderRadius = "md", - borderColor = "borderColor", - borderWidth = "1px", - fontFamily = "mono", - backgroundColor, - prefix, - canCopy = true, - wrap = true, - darkTheme, - lightTheme, - ...restCodeProps -}) => { - const theme = useColorModeValue( - lightTheme || lightThemeDefault, - darkTheme || darkThemeDefault, - ); - const { onCopy, hasCopied } = useClipboard(codeValue || code); - - if (!code) { - return null; - } - - return ( - - {({ className, style, tokens, getLineProps, getTokenProps }) => ( - - {canCopy && code && ( - - ) : ( - - ) - } - /> - )} - - {tokens.map((line, i) => ( - // biome-ignore lint/suspicious/noArrayIndexKey: index IS the key here - - {line.map((token, key) => ( - // biome-ignore lint/suspicious/noArrayIndexKey: index IS the key here - - ))} - - ))} - - - )} - - ); -}; diff --git a/apps/dashboard/src/tw-components/index.ts b/apps/dashboard/src/tw-components/index.ts index 6aeb033b753..0a29b0e9d65 100644 --- a/apps/dashboard/src/tw-components/index.ts +++ b/apps/dashboard/src/tw-components/index.ts @@ -2,7 +2,6 @@ export * from "./badge"; export * from "./button"; export * from "./card"; export * from "./checkbox"; -export * from "./code-block"; export * from "./form"; export * from "./heading"; export * from "./link"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28cb6fb276f..8b248e077b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -137,7 +137,7 @@ importers: version: 1.1.3(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.37.1 - version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@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.1)) + version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@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.1)(esbuild@0.23.1)) '@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) @@ -221,7 +221,7 @@ importers: version: 0.4.3(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) nextjs-toploader: specifier: ^1.6.12 - version: 1.6.12(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))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + version: 1.6.12(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) papaparse: specifier: ^5.4.1 version: 5.4.1 @@ -231,12 +231,6 @@ importers: posthog-js: specifier: 1.67.1 version: 1.67.1 - prism-react-renderer: - specifier: ^2.3.1 - version: 2.4.0(react@19.0.0-rc-69d4b800-20241021) - prismjs: - specifier: ^1.29.0 - version: 1.29.0 qrcode: specifier: ^1.5.3 version: 1.5.4 @@ -279,6 +273,9 @@ importers: server-only: specifier: ^0.0.1 version: 0.0.1 + shiki: + specifier: 1.22.2 + version: 1.22.2 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) @@ -293,7 +290,7 @@ importers: version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -342,7 +339,7 @@ importers: version: 8.4.2(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.4.2 - version: 8.4.2(@swc/core@1.9.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))(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1)) + version: 8.4.2(@swc/core@1.9.1)(esbuild@0.23.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))(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) '@storybook/react': specifier: 8.4.2 version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) @@ -408,7 +405,7 @@ importers: version: 5.36.3(@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)) + version: 4.2.3(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)) postcss: specifier: 8.4.47 version: 8.4.47 @@ -417,7 +414,7 @@ importers: version: 8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) tailwindcss: specifier: 3.4.14 - version: 3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)) typescript: specifier: 5.6.3 version: 5.6.3 @@ -535,10 +532,10 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.14 - version: 3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3))) typescript: specifier: 5.6.3 version: 5.6.3 @@ -601,7 +598,7 @@ importers: version: 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) nextjs-toploader: specifier: ^1.6.12 - version: 1.6.12(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))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + version: 1.6.12(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) node-html-parser: specifier: ^6.1.13 version: 6.1.13 @@ -637,7 +634,7 @@ importers: version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -698,13 +695,13 @@ importers: version: 3.17.5(tailwindcss@3.4.14(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)) + version: 4.2.3(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)) postcss: specifier: 8.4.47 version: 8.4.47 tailwindcss: specifier: 3.4.14 - version: 3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)) tsx: specifier: 4.19.2 version: 4.19.2 @@ -773,7 +770,7 @@ importers: version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -804,7 +801,7 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.14 - version: 3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) + version: 3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)) typescript: specifier: 5.6.3 version: 5.6.3 @@ -987,7 +984,7 @@ importers: version: 2.0.0(react-native@0.76.1(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)) '@size-limit/preset-big-lib': specifier: 11.1.6 - version: 11.1.6(bufferutil@4.0.8)(esbuild@0.23.1)(size-limit@11.1.6)(utf-8-validate@5.0.10) + version: 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) '@storybook/addon-essentials': specifier: 8.4.2 version: 8.4.2(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(types-react@19.0.0-rc.1)(webpack-sources@3.2.3) @@ -5677,9 +5674,6 @@ packages: '@types/pluralize@0.0.33': resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} - '@types/prismjs@1.26.4': - resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==} - '@types/qrcode@1.5.5': resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} @@ -11373,11 +11367,6 @@ packages: resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} engines: {node: '>=18'} - prism-react-renderer@2.4.0: - resolution: {integrity: sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==} - peerDependencies: - react: '>=16.0.0' - prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} engines: {node: '>=6'} @@ -17803,7 +17792,7 @@ snapshots: dependencies: playwright: 1.48.2 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.26.1)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.26.1)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.38.1 @@ -17813,7 +17802,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.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) optionalDependencies: type-fest: 4.26.1 webpack-hot-middleware: 2.26.1 @@ -18935,7 +18924,7 @@ snapshots: '@sentry/types': 8.37.1 '@sentry/utils': 8.37.1 - '@sentry/nextjs@8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@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.1))': + '@sentry/nextjs@8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@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.1)(esbuild@0.23.1))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) @@ -18949,7 +18938,7 @@ snapshots: '@sentry/types': 8.37.1 '@sentry/utils': 8.37.1 '@sentry/vercel-edge': 8.37.1 - '@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.9.1)) + '@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) 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 @@ -19037,12 +19026,12 @@ snapshots: '@sentry/types': 8.37.1 '@sentry/utils': 8.37.1 - '@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.9.1))': + '@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1))': dependencies: '@sentry/bundler-plugin-core': 2.22.6 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) transitivePeerDependencies: - encoding - supports-color @@ -19109,11 +19098,11 @@ snapshots: dependencies: size-limit: 11.1.6 - '@size-limit/preset-big-lib@11.1.6(bufferutil@4.0.8)(esbuild@0.23.1)(size-limit@11.1.6)(utf-8-validate@5.0.10)': + '@size-limit/preset-big-lib@11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10)': dependencies: '@size-limit/file': 11.1.6(size-limit@11.1.6) '@size-limit/time': 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) - '@size-limit/webpack': 11.1.6(esbuild@0.23.1)(size-limit@11.1.6) + '@size-limit/webpack': 11.1.6(size-limit@11.1.6) size-limit: 11.1.6 transitivePeerDependencies: - '@swc/core' @@ -19133,11 +19122,11 @@ snapshots: - supports-color - utf-8-validate - '@size-limit/webpack@11.1.6(esbuild@0.23.1)(size-limit@11.1.6)': + '@size-limit/webpack@11.1.6(size-limit@11.1.6)': dependencies: nanoid: 5.0.7 size-limit: 11.1.6 - webpack: 5.96.1(esbuild@0.23.1) + webpack: 5.96.1 transitivePeerDependencies: - '@swc/core' - esbuild @@ -19668,7 +19657,7 @@ snapshots: transitivePeerDependencies: - webpack-sources - '@storybook/builder-webpack5@8.4.2(@swc/core@1.9.1)(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': + '@storybook/builder-webpack5@8.4.2(@swc/core@1.9.1)(esbuild@0.23.1)(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': dependencies: '@storybook/core-webpack': 8.4.2(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) '@types/node': 22.9.0 @@ -19677,23 +19666,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.1)) + css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) 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.1)) - html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.9.1)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) + html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) magic-string: 0.30.12 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 storybook: 8.4.2(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.1)) - terser-webpack-plugin: 5.3.10(@swc/core@1.9.1)(webpack@5.96.1(@swc/core@1.9.1)) + style-loader: 3.3.4(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.1)(esbuild@0.23.1)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) 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.1) - webpack-dev-middleware: 6.1.3(webpack@5.96.1(@swc/core@1.9.1)) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) + webpack-dev-middleware: 6.1.3(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -19772,7 +19761,7 @@ snapshots: dependencies: storybook: 8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.4.2(@swc/core@1.9.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))(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1))': + '@storybook/nextjs@8.4.2(@swc/core@1.9.1)(esbuild@0.23.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))(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.3)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) @@ -19787,31 +19776,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.26.1)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1)) - '@storybook/builder-webpack5': 8.4.2(@swc/core@1.9.1)(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) - '@storybook/preset-react-webpack': 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.1)(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.2(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.26.1)(webpack-hot-middleware@2.26.1)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) + '@storybook/builder-webpack5': 8.4.2(@swc/core@1.9.1)(esbuild@0.23.1)(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) + '@storybook/preset-react-webpack': 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.1)(esbuild@0.23.1)(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) '@storybook/react': 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3) '@storybook/test': 8.4.2(storybook@8.4.2(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.1)) - css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.1)) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) + css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) 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.1)) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) pnp-webpack-plugin: 1.7.0(typescript@5.6.3) postcss: 8.4.47 - postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)) + postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) 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.1)) + sass-loader: 13.3.3(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) semver: 7.6.3 storybook: 8.4.2(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.1)) + style-loader: 3.3.4(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) 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 @@ -19819,7 +19808,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.6.3 - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -19839,11 +19828,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.4.2(@storybook/test@8.4.2(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.1)(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': + '@storybook/preset-react-webpack@8.4.2(@storybook/test@8.4.2(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)))(@swc/core@1.9.1)(esbuild@0.23.1)(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.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))(typescript@5.6.3)': dependencies: '@storybook/core-webpack': 8.4.2(storybook@8.4.2(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) '@storybook/react': 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(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.2(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.1)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) '@types/node': 22.9.0 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -19855,7 +19844,7 @@ snapshots: semver: 7.6.3 storybook: 8.4.2(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.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -19870,7 +19859,7 @@ snapshots: dependencies: storybook: 8.4.2(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.1))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1))': dependencies: debug: 4.3.7(supports-color@8.1.1) endent: 2.1.0 @@ -19880,7 +19869,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.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) transitivePeerDependencies: - supports-color @@ -20649,8 +20638,6 @@ snapshots: '@types/pluralize@0.0.33': {} - '@types/prismjs@1.26.4': {} - '@types/qrcode@1.5.5': dependencies: '@types/node': 20.14.9 @@ -20971,7 +20958,7 @@ snapshots: sirv: 3.0.0 tinyglobby: 0.2.10 tinyrainbow: 1.2.0 - vitest: 2.1.4(@types/node@22.9.0)(@vitest/ui@2.1.4)(happy-dom@15.11.0)(msw@2.6.2(@types/node@22.9.0)(typescript@5.6.3))(terser@5.36.0) + vitest: 2.1.4(@types/node@20.14.9)(@vitest/ui@2.1.4)(happy-dom@15.11.0)(msw@2.6.2(@types/node@20.14.9)(typescript@5.6.3))(terser@5.36.0) '@vitest/utils@2.0.5': dependencies: @@ -21746,12 +21733,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.1)): + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): 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.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) babel-plugin-istanbul@6.1.1: dependencies: @@ -22683,7 +22670,7 @@ snapshots: css-color-keywords@1.0.0: {} - css-loader@6.11.0(webpack@5.96.1(@swc/core@1.9.1)): + css-loader@6.11.0(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -22694,7 +22681,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) css-select@4.3.0: dependencies: @@ -23356,7 +23343,7 @@ snapshots: 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(@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)(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) @@ -23387,7 +23374,7 @@ snapshots: 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 @@ -23426,7 +23413,7 @@ snapshots: 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 @@ -23551,7 +23538,7 @@ snapshots: dependencies: fast-glob: 3.3.2 postcss: 8.4.47 - tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) + tailwindcss: 3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)) eslint-scope@5.1.1: dependencies: @@ -24119,7 +24106,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.1)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: '@babel/code-frame': 7.26.0 chalk: 4.1.2 @@ -24134,7 +24121,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.3 - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) form-data-encoder@2.1.4: {} @@ -24629,7 +24616,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.96.1(@swc/core@1.9.1)): + html-webpack-plugin@5.6.3(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -24637,7 +24624,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) htmlparser2@3.10.1: dependencies: @@ -27077,7 +27064,7 @@ snapshots: react: 19.0.0-rc-69d4b800-20241021 react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) - next-sitemap@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)): + next-sitemap@4.2.3(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)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.6 @@ -27117,7 +27104,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextjs-toploader@1.6.12(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))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): + nextjs-toploader@1.6.12(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): dependencies: 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) nprogress: 0.2.0 @@ -27176,7 +27163,7 @@ snapshots: node-int64@0.4.0: {} - node-polyfill-webpack-plugin@2.0.1(webpack@5.96.1(@swc/core@1.9.1)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -27203,7 +27190,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) node-releases@2.0.18: {} @@ -27827,7 +27814,7 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.47 - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 @@ -27835,14 +27822,14 @@ snapshots: postcss: 8.4.47 ts-node: 10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3) - postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)): + postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: cosmiconfig: 9.0.0(typescript@5.6.3) jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) transitivePeerDependencies: - typescript @@ -27967,12 +27954,6 @@ snapshots: dependencies: parse-ms: 4.0.0 - prism-react-renderer@2.4.0(react@19.0.0-rc-69d4b800-20241021): - dependencies: - '@types/prismjs': 1.26.4 - clsx: 2.1.1 - react: 19.0.0-rc-69d4b800-20241021 - prismjs@1.27.0: {} prismjs@1.29.0: {} @@ -29019,10 +29000,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@13.3.3(webpack@5.96.1(@swc/core@1.9.1)): + sass-loader@13.3.3(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: neo-async: 2.6.2 - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) satori@0.10.9: dependencies: @@ -29550,9 +29531,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.96.1(@swc/core@1.9.1)): + style-loader@3.3.4(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) style-to-object@0.4.4: dependencies: @@ -29695,11 +29676,11 @@ snapshots: tailwind-merge@2.5.4: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3))): dependencies: - tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) + tailwindcss: 3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)) - tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)): + tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -29718,7 +29699,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.3)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.9.1)(@types/node@20.14.9)(typescript@5.6.3)) postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -29805,26 +29786,16 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.9.1)(webpack@5.96.1(@swc/core@1.9.1)): + terser-webpack-plugin@5.3.10(@swc/core@1.9.1)(esbuild@0.23.1)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): 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.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) optionalDependencies: '@swc/core': 1.9.1 - - terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.96.1(esbuild@0.23.1)): - 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(esbuild@0.23.1) - optionalDependencies: esbuild: 0.23.1 terser-webpack-plugin@5.3.10(webpack@5.96.1): @@ -30820,7 +30791,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.96.1(@swc/core@1.9.1)): + webpack-dev-middleware@6.1.3(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -30828,7 +30799,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.96.1(@swc/core@1.9.1) + webpack: 5.96.1(@swc/core@1.9.1)(esbuild@0.23.1) webpack-hot-middleware@2.26.1: dependencies: @@ -30872,37 +30843,7 @@ snapshots: - esbuild - uglify-js - webpack@5.96.1(@swc/core@1.9.1): - 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.1)(webpack@5.96.1(@swc/core@1.9.1)) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack@5.96.1(esbuild@0.23.1): + webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -30924,7 +30865,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.96.1(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.1)(esbuild@0.23.1)(webpack@5.96.1(@swc/core@1.9.1)(esbuild@0.23.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: