From e5393efcee65f432bf0c33bf5409a9fa8e81978c Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Wed, 18 Sep 2024 10:18:49 +0000 Subject: [PATCH 01/78] [Dashboard] erc20 transfer Drawer (#4643) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chakra-ui Drawer -> Shadcn's Sheet --- ## PR-Codex overview This PR introduces a new `Sheet` component for modals and refactors the transfer token functionality to use the `Sheet` component. ### Detailed summary - Added `Sheet`, `SheetContent`, `SheetFooter`, `SheetHeader`, `SheetTitle`, `SheetTrigger` components - Refactored token transfer functionality to use the new `Sheet` component - Updated imports and dependencies to include new components and utilities > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/dashboard/src/@/components/ui/sheet.tsx | 143 +++++++++++++++ .../tokens/components/transfer-button.tsx | 164 ++++++++++++++---- .../tabs/tokens/components/transfer-form.tsx | 133 -------------- 3 files changed, 278 insertions(+), 162 deletions(-) create mode 100644 apps/dashboard/src/@/components/ui/sheet.tsx delete mode 100644 apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-form.tsx diff --git a/apps/dashboard/src/@/components/ui/sheet.tsx b/apps/dashboard/src/@/components/ui/sheet.tsx new file mode 100644 index 00000000000..42b45afe482 --- /dev/null +++ b/apps/dashboard/src/@/components/ui/sheet.tsx @@ -0,0 +1,143 @@ +"use client"; + +import * as SheetPrimitive from "@radix-ui/react-dialog"; +import { type VariantProps, cva } from "class-variance-authority"; +import { X } from "lucide-react"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Sheet = SheetPrimitive.Root; + +const SheetTrigger = SheetPrimitive.Trigger; + +const SheetClose = SheetPrimitive.Close; + +const SheetPortal = SheetPrimitive.Portal; + +const SheetOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetOverlay.displayName = SheetPrimitive.Overlay.displayName; + +const sheetVariants = cva( + "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 border-border", + { + variants: { + side: { + top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top", + bottom: + "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom", + left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm", + right: + "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm", + }, + }, + defaultVariants: { + side: "right", + }, + }, +); + +interface SheetContentProps + extends React.ComponentPropsWithoutRef, + VariantProps {} + +const SheetContent = React.forwardRef< + React.ElementRef, + SheetContentProps +>(({ side = "right", className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)); +SheetContent.displayName = SheetPrimitive.Content.displayName; + +const SheetHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +SheetHeader.displayName = "SheetHeader"; + +const SheetFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +SheetFooter.displayName = "SheetFooter"; + +const SheetTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetTitle.displayName = SheetPrimitive.Title.displayName; + +const SheetDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetDescription.displayName = SheetPrimitive.Description.displayName; + +export { + Sheet, + SheetPortal, + SheetOverlay, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +}; diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx index e91b75c909a..f0b5242e5a3 100644 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx +++ b/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx @@ -1,49 +1,155 @@ -import { Icon, useDisclosure } from "@chakra-ui/react"; +import { + Sheet, + SheetContent, + SheetFooter, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "@/components/ui/sheet"; +import { FormControl, Icon, Input } from "@chakra-ui/react"; +import { TransactionButton } from "components/buttons/TransactionButton"; +import { SolidityInput } from "contract-ui/components/solidity-inputs"; +import { useTrack } from "hooks/analytics/useTrack"; +import { useTxNotifications } from "hooks/useTxNotifications"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; import { FiSend } from "react-icons/fi"; -import type { ThirdwebContract } from "thirdweb"; -import { balanceOf } from "thirdweb/extensions/erc20"; -import { useActiveAccount, useReadContract } from "thirdweb/react"; -import { Button, Drawer } from "tw-components"; -import { TokenTransferForm } from "./transfer-form"; +import { type ThirdwebContract, ZERO_ADDRESS } from "thirdweb"; +import * as ERC20Ext from "thirdweb/extensions/erc20"; +import { + useActiveAccount, + useReadContract, + useSendAndConfirmTransaction, +} from "thirdweb/react"; +import { + Button, + FormErrorMessage, + FormHelperText, + FormLabel, +} from "tw-components"; interface TokenTransferButtonProps { contract: ThirdwebContract; } +const TRANSFER_FORM_ID = "token-transfer-form"; + export const TokenTransferButton: React.FC = ({ contract, ...restButtonProps }) => { - const { isOpen, onOpen, onClose } = useDisclosure(); const address = useActiveAccount()?.address; - const tokenBalanceQuery = useReadContract(balanceOf, { + const tokenBalanceQuery = useReadContract(ERC20Ext.balanceOf, { contract, address: address || "", queryOptions: { enabled: !!address }, }); - + const trackEvent = useTrack(); + const form = useForm({ defaultValues: { amount: "0", to: "" } }); const hasBalance = tokenBalanceQuery.data && tokenBalanceQuery.data > 0n; + const { onSuccess, onError } = useTxNotifications( + "Successfully transferred tokens", + "Failed to transfer tokens", + contract, + ); + + const decimalsQuery = useReadContract(ERC20Ext.decimals, { contract }); + const sendConfirmation = useSendAndConfirmTransaction(); + const [open, setOpen] = useState(false); return ( - <> - - - - - + + + + + + + Transfer tokens + +
+
+ + To Address + + Enter the address to transfer to. + + {form.formState.errors.to?.message} + + + + Amount + + + How many would you like to transfer? + + + {form.formState.errors.amount?.message} + + +
+
+ + { + trackEvent({ + category: "token", + action: "transfer", + label: "attempt", + }); + const transaction = ERC20Ext.transfer({ + contract, + amount: d.amount, + to: d.to, + }); + sendConfirmation.mutate(transaction, { + onSuccess: () => { + trackEvent({ + category: "token", + action: "transfer", + label: "success", + }); + form.reset({ amount: "0", to: "" }); + onSuccess(); + setOpen(false); + }, + onError: (error) => { + trackEvent({ + category: "token", + action: "transfer", + label: "error", + error, + }); + onError(error); + }, + }); + })} + > + Transfer Tokens + + +
+
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-form.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-form.tsx deleted file mode 100644 index c0ea8c74db9..00000000000 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-form.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import { - DrawerBody, - DrawerFooter, - DrawerHeader, - FormControl, - Input, - Stack, - useModalContext, -} from "@chakra-ui/react"; -import { TransactionButton } from "components/buttons/TransactionButton"; -import { SolidityInput } from "contract-ui/components/solidity-inputs"; -import { useTrack } from "hooks/analytics/useTrack"; -import { useTxNotifications } from "hooks/useTxNotifications"; -import { useForm } from "react-hook-form"; -import { type ThirdwebContract, ZERO_ADDRESS } from "thirdweb"; -import { decimals, transfer } from "thirdweb/extensions/erc20"; -import { useReadContract, useSendAndConfirmTransaction } from "thirdweb/react"; -import { - FormErrorMessage, - FormHelperText, - FormLabel, - Heading, -} from "tw-components"; - -const TRANSFER_FORM_ID = "token-transfer-form"; - -interface TokenTransferFormProps { - contract: ThirdwebContract; -} - -export const TokenTransferForm: React.FC = ({ - contract, -}) => { - const trackEvent = useTrack(); - - const form = useForm({ defaultValues: { amount: "0", to: "" } }); - const modalContext = useModalContext(); - - const { onSuccess, onError } = useTxNotifications( - "Successfully transferred tokens", - "Failed to transfer tokens", - contract, - ); - - const decimalsQuery = useReadContract(decimals, { contract }); - - const sendConfirmation = useSendAndConfirmTransaction(); - - return ( - <> - - Transfer tokens - - - - - - To Address - - Enter the address to transfer to. - - {form.formState.errors.to?.message} - - - - Amount - - - How many would you like to transfer? - - - {form.formState.errors.amount?.message} - - - - - - - { - trackEvent({ - category: "token", - action: "transfer", - label: "attempt", - }); - const transaction = transfer({ - contract, - amount: d.amount, - to: d.to, - }); - sendConfirmation.mutate(transaction, { - onSuccess: () => { - trackEvent({ - category: "token", - action: "transfer", - label: "success", - }); - onSuccess(); - modalContext.onClose(); - }, - onError: (error) => { - trackEvent({ - category: "token", - action: "transfer", - label: "error", - error, - }); - onError(error); - }, - }); - })} - > - Transfer Tokens - - - - ); -}; From 6e69959dc1ab5fe8d5dbed9e8045f6447a14dfb2 Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Wed, 18 Sep 2024 11:36:33 +0000 Subject: [PATCH 02/78] [Dashboard] Replace Chakra-ui's useClipboard (#4660) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to refactor code by centralizing the `useClipboard` hook and importing it where needed. ### Detailed summary - Centralized `useClipboard` hook in a separate file - Imported `useClipboard` in multiple components for code reusability > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../AnimatedCLICommand/AnimatedCLICommand.tsx | 3 +- .../components/homepage/CodeBlock/index.tsx | 2 +- .../tabs/embed/components/embed-setup.tsx | 2 +- .../tabs/events/components/events-feed.tsx | 2 +- .../tabs/overview/components/LatestEvents.tsx | 2 +- .../overview/components/PermissionsTable.tsx | 2 +- .../components/permissions-editor.tsx | 2 +- apps/dashboard/src/hooks/useClipboard.ts | 34 +++++++++++++++++++ .../src/tw-components/AddressCopyButton.tsx | 3 +- apps/dashboard/src/tw-components/button.tsx | 2 +- .../src/tw-components/code-block.tsx | 2 +- 11 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 apps/dashboard/src/hooks/useClipboard.ts diff --git a/apps/dashboard/src/components/homepage/AnimatedCLICommand/AnimatedCLICommand.tsx b/apps/dashboard/src/components/homepage/AnimatedCLICommand/AnimatedCLICommand.tsx index 5b11e78dc7a..9f8d494b55d 100644 --- a/apps/dashboard/src/components/homepage/AnimatedCLICommand/AnimatedCLICommand.tsx +++ b/apps/dashboard/src/components/homepage/AnimatedCLICommand/AnimatedCLICommand.tsx @@ -1,6 +1,7 @@ -import { Icon, IconButton, useClipboard } from "@chakra-ui/react"; +import { Icon, IconButton } from "@chakra-ui/react"; import { IoMdCheckmark } from "@react-icons/all-files/io/IoMdCheckmark"; import { useTrack } from "hooks/analytics/useTrack"; +import { useClipboard } from "hooks/useClipboard"; import { FiCopy } from "react-icons/fi"; export const CopyButton: React.FC<{ text: string }> = ({ text }) => { diff --git a/apps/dashboard/src/components/homepage/CodeBlock/index.tsx b/apps/dashboard/src/components/homepage/CodeBlock/index.tsx index ed708e1322e..b8a02140ba3 100644 --- a/apps/dashboard/src/components/homepage/CodeBlock/index.tsx +++ b/apps/dashboard/src/components/homepage/CodeBlock/index.tsx @@ -5,11 +5,11 @@ import { Flex, Icon, IconButton, - useClipboard, useColorModeValue, useTheme, } from "@chakra-ui/react"; import { IoMdCheckmark } from "@react-icons/all-files/io/IoMdCheckmark"; +import { useClipboard } from "hooks/useClipboard"; import { Highlight, themes } from "prism-react-renderer"; import { useEffect, useRef, useState } from "react"; import { BsLightning } from "react-icons/bs"; diff --git a/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx b/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx index 713cae4bec7..96a2cc668d1 100644 --- a/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx +++ b/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx @@ -8,11 +8,11 @@ import { Select, Stack, useBreakpointValue, - useClipboard, } from "@chakra-ui/react"; import { IoMdCheckmark } from "@react-icons/all-files/io/IoMdCheckmark"; import { useTrack } from "hooks/analytics/useTrack"; import { useSupportedChainsRecord } from "hooks/chains/configureChains"; +import { useClipboard } from "hooks/useClipboard"; import { useTxNotifications } from "hooks/useTxNotifications"; import { useMemo } from "react"; import { useForm } from "react-hook-form"; diff --git a/apps/dashboard/src/contract-ui/tabs/events/components/events-feed.tsx b/apps/dashboard/src/contract-ui/tabs/events/components/events-feed.tsx index 794ff8fe12c..9fc5525e860 100644 --- a/apps/dashboard/src/contract-ui/tabs/events/components/events-feed.tsx +++ b/apps/dashboard/src/contract-ui/tabs/events/components/events-feed.tsx @@ -23,11 +23,11 @@ import { Stack, Switch, Tooltip, - useClipboard, useToast, } from "@chakra-ui/react"; import { AiOutlineQuestionCircle } from "@react-icons/all-files/ai/AiOutlineQuestionCircle"; import { AnimatePresence, motion } from "framer-motion"; +import { useClipboard } from "hooks/useClipboard"; import { useSearchParams } from "next/navigation"; import { useRouter } from "next/router"; import { Fragment, useMemo, useState } from "react"; diff --git a/apps/dashboard/src/contract-ui/tabs/overview/components/LatestEvents.tsx b/apps/dashboard/src/contract-ui/tabs/overview/components/LatestEvents.tsx index 72cd74c428b..3146d2b7cac 100644 --- a/apps/dashboard/src/contract-ui/tabs/overview/components/LatestEvents.tsx +++ b/apps/dashboard/src/contract-ui/tabs/overview/components/LatestEvents.tsx @@ -13,11 +13,11 @@ import { Spinner, Stack, Tooltip, - useClipboard, useToast, } from "@chakra-ui/react"; import { useTabHref } from "contract-ui/utils"; import { AnimatePresence, motion } from "framer-motion"; +import { useClipboard } from "hooks/useClipboard"; import { useState } from "react"; import { FiCopy } from "react-icons/fi"; import type { ThirdwebContract } from "thirdweb"; diff --git a/apps/dashboard/src/contract-ui/tabs/overview/components/PermissionsTable.tsx b/apps/dashboard/src/contract-ui/tabs/overview/components/PermissionsTable.tsx index fdb62cb8aff..2381be6f08e 100644 --- a/apps/dashboard/src/contract-ui/tabs/overview/components/PermissionsTable.tsx +++ b/apps/dashboard/src/contract-ui/tabs/overview/components/PermissionsTable.tsx @@ -8,11 +8,11 @@ import { Stack, Tag, Tooltip, - useClipboard, useToast, } from "@chakra-ui/react"; import { useTabHref } from "contract-ui/utils"; import { AnimatePresence, motion } from "framer-motion"; +import { useClipboard } from "hooks/useClipboard"; import { useMemo } from "react"; import { FiCopy } from "react-icons/fi"; import { type ThirdwebContract, ZERO_ADDRESS } from "thirdweb"; diff --git a/apps/dashboard/src/contract-ui/tabs/permissions/components/permissions-editor.tsx b/apps/dashboard/src/contract-ui/tabs/permissions/components/permissions-editor.tsx index 24a97a2b51e..b4e4135a784 100644 --- a/apps/dashboard/src/contract-ui/tabs/permissions/components/permissions-editor.tsx +++ b/apps/dashboard/src/contract-ui/tabs/permissions/components/permissions-editor.tsx @@ -13,10 +13,10 @@ import { InputRightAddon, Stack, Tooltip, - useClipboard, useToast, } from "@chakra-ui/react"; import { DelayedDisplay } from "components/delayed-display/delayed-display"; +import { useClipboard } from "hooks/useClipboard"; import { useState } from "react"; import { useFieldArray, useFormContext } from "react-hook-form"; import { BiPaste } from "react-icons/bi"; diff --git a/apps/dashboard/src/hooks/useClipboard.ts b/apps/dashboard/src/hooks/useClipboard.ts new file mode 100644 index 00000000000..c2a615eda49 --- /dev/null +++ b/apps/dashboard/src/hooks/useClipboard.ts @@ -0,0 +1,34 @@ +import { useCallback, useEffect, useState } from "react"; + +/** + * todo: this hook is copied from the SDK, so might as well expose it from the SDK + * and use it here? + */ +export function useClipboard(text: string, delay = 1500) { + const [hasCopied, setHasCopied] = useState(false); + + const onCopy = useCallback(async () => { + await navigator.clipboard.writeText(text); + setHasCopied(true); + }, [text]); + + // legitimate usecase + // eslint-disable-next-line no-restricted-syntax + useEffect(() => { + let timeoutId: number | null = null; + + if (hasCopied) { + timeoutId = window.setTimeout(() => { + setHasCopied(false); + }, delay); + } + + return () => { + if (timeoutId) { + window.clearTimeout(timeoutId); + } + }; + }, [hasCopied, delay]); + + return { onCopy, hasCopied }; +} diff --git a/apps/dashboard/src/tw-components/AddressCopyButton.tsx b/apps/dashboard/src/tw-components/AddressCopyButton.tsx index 96845362667..91b9077cf05 100644 --- a/apps/dashboard/src/tw-components/AddressCopyButton.tsx +++ b/apps/dashboard/src/tw-components/AddressCopyButton.tsx @@ -1,5 +1,6 @@ -import { Icon, Tooltip, useClipboard, useToast } from "@chakra-ui/react"; +import { Icon, Tooltip, useToast } from "@chakra-ui/react"; import { useTrack } from "hooks/analytics/useTrack"; +import { useClipboard } from "hooks/useClipboard"; import { FiCopy } from "react-icons/fi"; import { Button, diff --git a/apps/dashboard/src/tw-components/button.tsx b/apps/dashboard/src/tw-components/button.tsx index 54e9a39b476..7d6bf5ae488 100644 --- a/apps/dashboard/src/tw-components/button.tsx +++ b/apps/dashboard/src/tw-components/button.tsx @@ -8,9 +8,9 @@ import { Link, forwardRef, useButtonGroup, - useClipboard, } from "@chakra-ui/react"; import { useTrack } from "hooks/analytics/useTrack"; +import { useClipboard } from "hooks/useClipboard"; import { forwardRef as reactForwardRef } from "react"; import { FiCheck, FiCopy, FiExternalLink } from "react-icons/fi"; import { fontWeights, letterSpacings, lineHeights } from "theme/typography"; diff --git a/apps/dashboard/src/tw-components/code-block.tsx b/apps/dashboard/src/tw-components/code-block.tsx index 08670fd2b65..4f3e1185a96 100644 --- a/apps/dashboard/src/tw-components/code-block.tsx +++ b/apps/dashboard/src/tw-components/code-block.tsx @@ -6,10 +6,10 @@ import { type CodeProps, Icon, IconButton, - useClipboard, useColorModeValue, } from "@chakra-ui/react"; import { IoMdCheckmark } from "@react-icons/all-files/io/IoMdCheckmark"; +import { useClipboard } from "hooks/useClipboard"; import { Highlight, Prism, themes } from "prism-react-renderer"; import { FiCopy } from "react-icons/fi"; import { Text } from "./text"; From 6ce7c83a3b9eb2374ad2f8163d9c6a68bba4bc42 Mon Sep 17 00:00:00 2001 From: joaquim-verges Date: Wed, 18 Sep 2024 12:18:39 +0000 Subject: [PATCH 03/78] chore: update @mobile-wallet-protocol/client to 0.0.3 (#4665) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #4663 --- ## PR-Codex overview This PR updates `@mobile-wallet-protocol/client` to version 0.0.3 and aligns package dependencies and TypeScript type definitions. ### Detailed summary - Updated `@mobile-wallet-protocol/client` to 0.0.3 - Aligned package dependencies - Adjusted TypeScript type definitions for various modules > 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}` --- .changeset/few-suns-boil.md | 6 + packages/react-native-adapter/package.json | 7 +- packages/thirdweb/package.json | 74 ++---- pnpm-lock.yaml | 288 +++++++++------------ 4 files changed, 146 insertions(+), 229 deletions(-) create mode 100644 .changeset/few-suns-boil.md diff --git a/.changeset/few-suns-boil.md b/.changeset/few-suns-boil.md new file mode 100644 index 00000000000..85d3aced611 --- /dev/null +++ b/.changeset/few-suns-boil.md @@ -0,0 +1,6 @@ +--- +"@thirdweb-dev/react-native-adapter": patch +"thirdweb": patch +--- + +Update @mobile-wallet-protocol/client to 0.0.3 diff --git a/packages/react-native-adapter/package.json b/packages/react-native-adapter/package.json index 88ed187b37a..9cec8f19543 100644 --- a/packages/react-native-adapter/package.json +++ b/packages/react-native-adapter/package.json @@ -23,14 +23,11 @@ }, "./package.json": "./package.json" }, - "files": [ - "dist/*", - "src/*" - ], + "files": ["dist/*", "src/*"], "dependencies": { "@aws-sdk/client-lambda": "3.651.1", "@aws-sdk/credential-providers": "3.651.1", - "@mobile-wallet-protocol/client": "0.0.2", + "@mobile-wallet-protocol/client": "0.0.3", "@walletconnect/react-native-compat": "2.13.2", "aws-amplify": "5.3.19" }, diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index f8cb26a0918..e18515031bb 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -127,60 +127,24 @@ }, "typesVersions": { "*": { - "adapters/*": [ - "./dist/types/exports/adapters/*.d.ts" - ], - "auth": [ - "./dist/types/exports/auth.d.ts" - ], - "chains": [ - "./dist/types/exports/chains.d.ts" - ], - "contract": [ - "./dist/types/exports/contract.d.ts" - ], - "deploys": [ - "./dist/types/exports/deploys.d.ts" - ], - "event": [ - "./dist/types/exports/event.d.ts" - ], - "extensions/*": [ - "./dist/types/exports/extensions/*.d.ts" - ], - "pay": [ - "./dist/types/exports/pay.d.ts" - ], - "react": [ - "./dist/types/exports/react.d.ts" - ], - "react-native": [ - "./dist/types/exports/react-native.d.ts" - ], - "rpc": [ - "./dist/types/exports/rpc.d.ts" - ], - "storage": [ - "./dist/types/exports/storage.d.ts" - ], - "transaction": [ - "./dist/types/exports/transaction.d.ts" - ], - "utils": [ - "./dist/types/exports/utils.d.ts" - ], - "wallets": [ - "./dist/types/exports/wallets.d.ts" - ], - "wallets/*": [ - "./dist/types/exports/wallets/*.d.ts" - ], - "modules": [ - "./dist/types/exports/modules.d.ts" - ], - "social": [ - "./dist/types/exports/social.d.ts" - ] + "adapters/*": ["./dist/types/exports/adapters/*.d.ts"], + "auth": ["./dist/types/exports/auth.d.ts"], + "chains": ["./dist/types/exports/chains.d.ts"], + "contract": ["./dist/types/exports/contract.d.ts"], + "deploys": ["./dist/types/exports/deploys.d.ts"], + "event": ["./dist/types/exports/event.d.ts"], + "extensions/*": ["./dist/types/exports/extensions/*.d.ts"], + "pay": ["./dist/types/exports/pay.d.ts"], + "react": ["./dist/types/exports/react.d.ts"], + "react-native": ["./dist/types/exports/react-native.d.ts"], + "rpc": ["./dist/types/exports/rpc.d.ts"], + "storage": ["./dist/types/exports/storage.d.ts"], + "transaction": ["./dist/types/exports/transaction.d.ts"], + "utils": ["./dist/types/exports/utils.d.ts"], + "wallets": ["./dist/types/exports/wallets.d.ts"], + "wallets/*": ["./dist/types/exports/wallets/*.d.ts"], + "modules": ["./dist/types/exports/modules.d.ts"], + "social": ["./dist/types/exports/social.d.ts"] } }, "browser": { @@ -331,7 +295,7 @@ "@chromatic-com/storybook": "2.0.2", "@codspeed/vitest-plugin": "3.1.1", "@coinbase/wallet-mobile-sdk": "1.1.2", - "@mobile-wallet-protocol/client": "0.0.2", + "@mobile-wallet-protocol/client": "0.0.3", "@react-native-async-storage/async-storage": "1.24.0", "@storybook/addon-essentials": "8.3.1", "@storybook/addon-interactions": "8.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6fd160fc1a5..5407fdbd80a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -211,7 +211,7 @@ importers: version: 4.1.0(react@18.3.1) '@sentry/nextjs': specifier: 8.30.0 - version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) '@shazow/whatsabi': specifier: ^0.14.1 version: 0.14.1(@noble/hashes@1.5.0)(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -370,7 +370,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -419,7 +419,7 @@ importers: version: 8.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.3.1 - version: 8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + version: 8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) '@storybook/react': specifier: 8.3.1 version: 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) @@ -467,7 +467,7 @@ importers: version: 10.4.20(postcss@8.4.47) checkly: specifier: ^4.8.1 - version: 4.9.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + version: 4.9.0(@swc/core@1.7.26)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) eslint: specifier: 8.57.0 version: 8.57.0 @@ -497,7 +497,7 @@ importers: version: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) typescript: specifier: 5.6.2 version: 5.6.2 @@ -612,10 +612,10 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) typescript: specifier: 5.6.2 version: 5.6.2 @@ -627,13 +627,13 @@ importers: version: 1.0.0(react@18.3.1) '@mdx-js/loader': specifier: ^2.3.0 - version: 2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))) + version: 2.3.0(webpack@5.94.0) '@mdx-js/react': specifier: ^2.3.0 version: 2.3.0(react@18.3.1) '@next/mdx': specifier: ^13.5.6 - version: 13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))))(@mdx-js/react@2.3.0(react@18.3.1)) + version: 13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0))(@mdx-js/react@2.3.0(react@18.3.1)) '@radix-ui/react-dialog': specifier: 1.1.1 version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -717,7 +717,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -772,7 +772,7 @@ importers: version: 1.2.4 eslint-plugin-tailwindcss: specifier: ^3.15.1 - version: 3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2))) + version: 3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -781,7 +781,7 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) tsx: specifier: ^4.19.1 version: 4.19.1 @@ -850,7 +850,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -881,7 +881,7 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) typescript: specifier: 5.6.2 version: 5.6.2 @@ -898,8 +898,8 @@ importers: specifier: ^1 version: 1.0.13(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) '@mobile-wallet-protocol/client': - specifier: 0.0.2 - version: 0.0.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + specifier: 0.0.3 + version: 0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) '@react-native-async-storage/async-storage': specifier: ^1 || ^2 version: 1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) @@ -1059,8 +1059,8 @@ importers: specifier: 1.1.2 version: 1.1.2(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) '@mobile-wallet-protocol/client': - specifier: 0.0.2 - version: 0.0.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + specifier: 0.0.3 + version: 0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) '@react-native-async-storage/async-storage': specifier: 1.24.0 version: 1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) @@ -1171,7 +1171,7 @@ importers: devDependencies: tsup: specifier: 8.2.4 - version: 8.2.4(@microsoft/api-extractor@7.47.9(@types/node@22.5.5))(@swc/core@1.7.26(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2)(yaml@2.5.1) + version: 8.2.4(@microsoft/api-extractor@7.47.9(@types/node@20.14.9))(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2)(yaml@2.5.1) packages: @@ -4434,8 +4434,8 @@ packages: '@microsoft/tsdoc@0.15.0': resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} - '@mobile-wallet-protocol/client@0.0.2': - resolution: {integrity: sha512-tVCbVCxBosZjZ6jMfCBsEPXBwABt3WQVk19JNNqGNAF6ZAcdsjZ7QsGpVeplTwmBemlP29RbigCJS02LOZV0BQ==} + '@mobile-wallet-protocol/client@0.0.3': + resolution: {integrity: sha512-t6tu32ah205C/lRo2RyApsK2LxVESWzABfu3M9fEIkx6dF8bAaCLUKlakgLPesy7uuMXCe/xy8doON8Xa/ceKw==} peerDependencies: '@react-native-async-storage/async-storage': '*' expo: '*' @@ -7004,9 +7004,6 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.13': - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} @@ -23065,11 +23062,11 @@ snapshots: jju: 1.4.0 read-yaml-file: 1.1.0 - '@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13)))': + '@mdx-js/loader@2.3.0(webpack@5.94.0)': dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13)) + webpack: 5.94.0 transitivePeerDependencies: - supports-color @@ -23109,24 +23106,24 @@ snapshots: '@metamask/safe-event-emitter@2.0.0': {} - '@microsoft/api-extractor-model@7.29.8(@types/node@22.5.5)': + '@microsoft/api-extractor-model@7.29.8(@types/node@20.14.9)': dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/node-core-library': 5.9.0(@types/node@20.14.9) transitivePeerDependencies: - '@types/node' optional: true - '@microsoft/api-extractor@7.47.9(@types/node@22.5.5)': + '@microsoft/api-extractor@7.47.9(@types/node@20.14.9)': dependencies: - '@microsoft/api-extractor-model': 7.29.8(@types/node@22.5.5) + '@microsoft/api-extractor-model': 7.29.8(@types/node@20.14.9) '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/node-core-library': 5.9.0(@types/node@20.14.9) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.2(@types/node@22.5.5) - '@rushstack/ts-command-line': 4.22.8(@types/node@22.5.5) + '@rushstack/terminal': 0.14.2(@types/node@20.14.9) + '@rushstack/ts-command-line': 4.22.8(@types/node@20.14.9) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -23146,7 +23143,7 @@ snapshots: '@microsoft/tsdoc@0.15.0': {} - '@mobile-wallet-protocol/client@0.0.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': + '@mobile-wallet-protocol/client@0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@noble/ciphers': 0.5.3 '@noble/curves': 1.6.0 @@ -23158,7 +23155,7 @@ snapshots: react: 18.3.1 react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - '@mobile-wallet-protocol/client@0.0.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': + '@mobile-wallet-protocol/client@0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@noble/ciphers': 0.5.3 '@noble/curves': 1.6.0 @@ -23262,11 +23259,11 @@ snapshots: dependencies: glob: 10.3.10 - '@next/mdx@13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))))(@mdx-js/react@2.3.0(react@18.3.1))': + '@next/mdx@13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0))(@mdx-js/react@2.3.0(react@18.3.1))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))) + '@mdx-js/loader': 2.3.0(webpack@5.94.0) '@mdx-js/react': 2.3.0(react@18.3.1) '@next/swc-darwin-arm64@14.2.11': @@ -23393,7 +23390,7 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - '@oclif/core@2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/core@2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': dependencies: '@types/cli-progress': 3.11.5 ansi-escapes: 4.3.2 @@ -23419,7 +23416,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.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) tslib: 2.7.0 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -23456,10 +23453,10 @@ snapshots: dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-not-found@2.3.23(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/plugin-not-found@2.3.23(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': dependencies: '@oclif/color': 1.0.13 - '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -23484,9 +23481,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': dependencies: - '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) chalk: 4.1.2 debug: 4.3.6(supports-color@8.1.1) fs-extra: 9.1.0 @@ -23821,7 +23818,7 @@ snapshots: dependencies: playwright: 1.47.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.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.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.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.38.1 @@ -23831,7 +23828,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) optionalDependencies: type-fest: 4.26.1 webpack-hot-middleware: 2.26.1 @@ -25473,7 +25470,7 @@ snapshots: '@rushstack/eslint-patch@1.10.4': {} - '@rushstack/node-core-library@5.9.0(@types/node@22.5.5)': + '@rushstack/node-core-library@5.9.0(@types/node@20.14.9)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -25484,7 +25481,7 @@ snapshots: resolve: 1.22.8 semver: 7.5.4 optionalDependencies: - '@types/node': 22.5.5 + '@types/node': 20.14.9 optional: true '@rushstack/rig-package@0.5.3': @@ -25493,17 +25490,17 @@ snapshots: strip-json-comments: 3.1.1 optional: true - '@rushstack/terminal@0.14.2(@types/node@22.5.5)': + '@rushstack/terminal@0.14.2(@types/node@20.14.9)': dependencies: - '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/node-core-library': 5.9.0(@types/node@20.14.9) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.5.5 + '@types/node': 20.14.9 optional: true - '@rushstack/ts-command-line@4.22.8(@types/node@22.5.5)': + '@rushstack/ts-command-line@4.22.8(@types/node@20.14.9)': dependencies: - '@rushstack/terminal': 0.14.2(@types/node@22.5.5) + '@rushstack/terminal': 0.14.2(@types/node@20.14.9) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -25626,7 +25623,7 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1))': + '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -25638,14 +25635,14 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 '@sentry/vercel-edge': 8.30.0 - '@sentry/webpack-plugin': 2.22.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + '@sentry/webpack-plugin': 2.22.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) chalk: 3.0.0 next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resolve: 1.22.8 rollup: 3.29.4 stacktrace-parser: 0.1.10 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -25724,12 +25721,12 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/webpack-plugin@2.22.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1))': + '@sentry/webpack-plugin@2.22.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': dependencies: '@sentry/bundler-plugin-core': 2.22.3 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) transitivePeerDependencies: - encoding - supports-color @@ -26377,7 +26374,7 @@ snapshots: - supports-color - webpack-sources - '@storybook/builder-webpack5@8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': + '@storybook/builder-webpack5@8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': dependencies: '@storybook/core-webpack': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@types/node': 22.5.5 @@ -26386,25 +26383,25 @@ 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.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) es-module-lexer: 1.5.4 express: 4.21.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) fs-extra: 11.2.0 - html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) magic-string: 0.30.11 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) - webpack-dev-middleware: 6.1.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack-dev-middleware: 6.1.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -26487,7 +26484,7 @@ snapshots: dependencies: storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1))': + '@storybook/nextjs@8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) @@ -26502,32 +26499,32 @@ snapshots: '@babel/preset-react': 7.24.7(@babel/core@7.25.2) '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) '@babel/runtime': 7.25.6 - '@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.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) - '@storybook/builder-webpack5': 8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) - '@storybook/preset-react-webpack': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.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.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + '@storybook/builder-webpack5': 8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) + '@storybook/preset-react-webpack': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) '@storybook/react': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) '@storybook/test': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@types/node': 22.5.5 '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) - css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) find-up: 5.0.0 fs-extra: 11.2.0 image-size: 1.1.1 loader-utils: 3.3.1 next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) pnp-webpack-plugin: 1.7.0(typescript@5.6.2) postcss: 8.4.47 - postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 13.3.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + sass-loader: 13.3.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) styled-jsx: 5.1.6(@babel/core@7.25.2)(react@18.3.1) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -26535,7 +26532,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -26555,11 +26552,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': + '@storybook/preset-react-webpack@8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': dependencies: '@storybook/core-webpack': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@storybook/react': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) '@types/node': 22.5.5 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -26572,7 +26569,7 @@ snapshots: semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -26587,7 +26584,7 @@ snapshots: dependencies: storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': dependencies: debug: 4.3.7(supports-color@8.1.1) endent: 2.1.0 @@ -26597,7 +26594,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.6.2) tslib: 2.7.0 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) transitivePeerDependencies: - supports-color @@ -27083,7 +27080,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.7.26': optional: true - '@swc/core@1.7.26(@swc/helpers@0.5.13)': + '@swc/core@1.7.26': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -27098,16 +27095,10 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.7.26 '@swc/core-win32-ia32-msvc': 1.7.26 '@swc/core-win32-x64-msvc': 1.7.26 - '@swc/helpers': 0.5.13 optional: true '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.13': - dependencies: - tslib: 2.7.0 - optional: true - '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 @@ -28823,12 +28814,12 @@ snapshots: dependencies: '@babel/core': 7.25.2 - babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) babel-plugin-macros@3.1.0: dependencies: @@ -29317,13 +29308,13 @@ snapshots: check-error@2.1.1: {} - checkly@4.9.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10): + checkly@4.9.0(@swc/core@1.7.26)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: - '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) '@oclif/plugin-help': 5.1.20 - '@oclif/plugin-not-found': 2.3.23(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/plugin-not-found': 2.3.23(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) '@oclif/plugin-plugins': 5.4.4 - '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) acorn: 8.8.1 acorn-walk: 8.2.0 @@ -29807,7 +29798,7 @@ snapshots: css-color-keywords@1.0.0: {} - css-loader@6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + css-loader@6.11.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -29818,7 +29809,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) css-select@4.3.0: dependencies: @@ -30842,11 +30833,11 @@ snapshots: eslint-plugin-svg-jsx@1.2.4: {} - eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2))): + eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))): dependencies: fast-glob: 3.3.2 postcss: 8.4.47 - tailwindcss: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)) + tailwindcss: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) eslint-plugin-tsdoc@0.3.0: dependencies: @@ -31620,7 +31611,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -31635,7 +31626,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) form-data-encoder@2.1.4: {} @@ -32191,7 +32182,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -32199,7 +32190,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) htmlparser2@3.10.1: dependencies: @@ -34742,7 +34733,7 @@ snapshots: util: 0.11.1 vm-browserify: 1.1.2 - node-polyfill-webpack-plugin@2.0.1(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -34769,7 +34760,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) node-releases@2.0.18: {} @@ -35371,13 +35362,13 @@ 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(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.5.1): dependencies: @@ -35388,14 +35379,14 @@ snapshots: tsx: 4.19.1 yaml: 2.5.1 - postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: cosmiconfig: 9.0.0(typescript@5.6.2) jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) transitivePeerDependencies: - typescript @@ -36725,10 +36716,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@13.3.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + sass-loader@13.3.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: neo-async: 2.6.2 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) satori@0.10.9: dependencies: @@ -37281,9 +37272,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + style-loader@3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) style-to-object@0.4.4: dependencies: @@ -37432,11 +37423,11 @@ snapshots: tailwind-merge@2.5.2: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))): dependencies: - tailwindcss: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)) + tailwindcss: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) - tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)): + tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -37455,7 +37446,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(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -37546,29 +37537,18 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(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.32.0 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) optionalDependencies: - '@swc/core': 1.7.26(@swc/helpers@0.5.13) + '@swc/core': 1.7.26 esbuild: 0.23.1 - terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.32.0 - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13)) - optionalDependencies: - '@swc/core': 1.7.26(@swc/helpers@0.5.13) - terser-webpack-plugin@5.3.10(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -37732,7 +37712,7 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.14.9)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -37750,7 +37730,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.26(@swc/helpers@0.5.13) + '@swc/core': 1.7.26 ts-pnp@1.2.0(typescript@5.6.2): optionalDependencies: @@ -37783,7 +37763,7 @@ snapshots: tslib@2.7.0: {} - tsup@8.2.4(@microsoft/api-extractor@7.47.9(@types/node@22.5.5))(@swc/core@1.7.26(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2)(yaml@2.5.1): + tsup@8.2.4(@microsoft/api-extractor@7.47.9(@types/node@20.14.9))(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 @@ -37802,8 +37782,8 @@ snapshots: sucrase: 3.35.0 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.47.9(@types/node@22.5.5) - '@swc/core': 1.7.26(@swc/helpers@0.5.13) + '@microsoft/api-extractor': 7.47.9(@types/node@20.14.9) + '@swc/core': 1.7.26 postcss: 8.4.47 typescript: 5.6.2 transitivePeerDependencies: @@ -38670,7 +38650,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)): + webpack-dev-middleware@6.1.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -38678,7 +38658,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) webpack-hot-middleware@2.26.1: dependencies: @@ -38722,37 +38702,7 @@ snapshots: - esbuild - uglify-js - webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13)): - dependencies: - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.23.3 - 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.7.26(@swc/helpers@0.5.13))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1): + webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1): dependencies: '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 @@ -38774,7 +38724,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.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: From f66f99096aed4dd09b50ab7497102365375e3f9d Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Wed, 18 Sep 2024 12:40:30 +0000 Subject: [PATCH 04/78] [SDK] Improve tests for marketplace DirectListings (#4619) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview This PR updates the Marketplace Direct Listings tests for ERC721 and ERC1155 contracts. ### Detailed summary - Refactors test setup and contract deployment - Updates NFT minting and approval transactions - Improves listing creation and validation checks - Enhances buy transaction testing for ERC721 tokens > The following files were skipped due to too many changes: `packages/thirdweb/src/extensions/marketplace/direct-listings/direct-listings.test.ts` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../direct-listings/direct-listings.test.ts | 711 ++++++++---------- 1 file changed, 317 insertions(+), 394 deletions(-) diff --git a/packages/thirdweb/src/extensions/marketplace/direct-listings/direct-listings.test.ts b/packages/thirdweb/src/extensions/marketplace/direct-listings/direct-listings.test.ts index 49214afd85f..ca52a89d144 100644 --- a/packages/thirdweb/src/extensions/marketplace/direct-listings/direct-listings.test.ts +++ b/packages/thirdweb/src/extensions/marketplace/direct-listings/direct-listings.test.ts @@ -1,25 +1,21 @@ -import { beforeAll, describe, expect, it } from "vitest"; +import { describe, expect, it } from "vitest"; +import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js"; import { ANVIL_CHAIN } from "../../../../test/src/chains.js"; import { TEST_CLIENT } from "../../../../test/src/test-clients.js"; import { TEST_ACCOUNT_A, TEST_ACCOUNT_B, + TEST_ACCOUNT_C, } from "../../../../test/src/test-wallets.js"; -import { - type ThirdwebContract, - getContract, -} from "../../../contract/contract.js"; +import { getContract } from "../../../contract/contract.js"; import { parseEventLogs } from "../../../event/actions/parse-logs.js"; +import { setApprovalForAll as setApprovalForAll721 } from "../../../extensions/erc721/__generated__/IERC721A/write/setApprovalForAll.js"; +import { mintTo as mintToErc1155 } from "../../../extensions/erc1155/write/mintTo.js"; import { sendAndConfirmTransaction } from "../../../transaction/actions/send-and-confirm-transaction.js"; import { balanceOf as balanceOfErc721 } from "../../erc721/__generated__/IERC721A/read/balanceOf.js"; -import { approve as approveErc721 } from "../../erc721/__generated__/IERC721A/write/approve.js"; -import { tokensMintedEvent as tokensMintedEventErc721 } from "../../erc721/__generated__/IMintableERC721/events/TokensMinted.js"; import { mintTo as mintToErc721 } from "../../erc721/write/mintTo.js"; import { balanceOf as balanceOfErc1155 } from "../../erc1155/__generated__/IERC1155/read/balanceOf.js"; -import { setApprovalForAll } from "../../erc1155/__generated__/IERC1155/write/setApprovalForAll.js"; -import { claimTo } from "../../erc1155/drops/write/claimTo.js"; -import { setClaimConditions } from "../../erc1155/drops/write/setClaimConditions.js"; -import { lazyMint } from "../../erc1155/write/lazyMint.js"; +import { setApprovalForAll as setApprovalForAll1155 } from "../../erc1155/__generated__/IERC1155/write/setApprovalForAll.js"; import { deployERC721Contract } from "../../prebuilts/deploy-erc721.js"; import { deployERC1155Contract } from "../../prebuilts/deploy-erc1155.js"; import { deployMarketplaceContract } from "../../prebuilts/deploy-marketplace.js"; @@ -32,434 +28,361 @@ import { isListingValid } from "./utils.js"; import { buyFromListing } from "./write/buyFromListing.js"; import { createListing } from "./write/createListing.js"; -describe.skip("Marketplace: Direct Listings", () => { - describe("ERC721", () => { - let nftTokenId: bigint; - let marketplaceContract: ThirdwebContract; - let erc721Contract: ThirdwebContract; - beforeAll(async () => { - marketplaceContract = getContract({ - address: await deployMarketplaceContract({ - account: TEST_ACCOUNT_A, - chain: ANVIL_CHAIN, - client: TEST_CLIENT, - params: { - name: "TestMarketPlace", - }, - }), - client: TEST_CLIENT, - chain: ANVIL_CHAIN, - }); - - // also deploy an ERC721 contract - erc721Contract = getContract({ - address: await deployERC721Contract({ - type: "TokenERC721", - account: TEST_ACCOUNT_A, - chain: ANVIL_CHAIN, - client: TEST_CLIENT, - params: { - name: "TestERC721", - }, - }), - client: TEST_CLIENT, - chain: ANVIL_CHAIN, - }); +const chain = ANVIL_CHAIN; +const client = TEST_CLIENT; + +describe.runIf(process.env.TW_SECRET_KEY)("Marketplace Direct Listings", () => { + it("should work with ERC721 and ERC1155", async () => { + const marketplaceAddress = await deployMarketplaceContract({ + account: TEST_ACCOUNT_A, + chain, + client, + params: { + name: "TestMarketPlace", + contractURI: TEST_CONTRACT_URI, + }, + }); + const erc721Address = await deployERC721Contract({ + type: "TokenERC721", + account: TEST_ACCOUNT_B, + chain, + client, + params: { + name: "TestERC721", + contractURI: TEST_CONTRACT_URI, + }, + }); + const erc1155Address = await deployERC1155Contract({ + type: "TokenERC1155", + account: TEST_ACCOUNT_C, + chain, + client, + params: { + name: "TestERC1155", + contractURI: TEST_CONTRACT_URI, + }, + }); + + const marketplaceContract = getContract({ + address: marketplaceAddress, + chain, + client, + }); + const erc721Contract = getContract({ + address: erc721Address, + chain, + client, + }); + const erc1155Contract = getContract({ + address: erc1155Address, + chain, + client, + }); - const receipt = await sendAndConfirmTransaction({ + // Mint some NFTs in parallel + await Promise.all([ + sendAndConfirmTransaction({ + account: TEST_ACCOUNT_B, transaction: mintToErc721({ contract: erc721Contract, - to: TEST_ACCOUNT_A.address, - nft: { name: "Test:ERC721:DirectListing" }, + nft: { name: "erc721 #0" }, + to: TEST_ACCOUNT_B.address, }), - account: TEST_ACCOUNT_A, - }); - - const mintEvents = parseEventLogs({ - events: [tokensMintedEventErc721()], - logs: receipt.logs, - }); + }), + sendAndConfirmTransaction({ + account: TEST_ACCOUNT_C, + transaction: mintToErc1155({ + contract: erc1155Contract, + nft: { name: "erc1155 #0" }, + to: TEST_ACCOUNT_C.address, + supply: 100n, + }), + }), + ]); - expect(mintEvents.length).toBe(1); - expect(mintEvents[0]?.args.tokenIdMinted).toBeDefined(); + // Set NFT approvals + await Promise.all([ + sendAndConfirmTransaction({ + account: TEST_ACCOUNT_B, + transaction: setApprovalForAll721({ + contract: erc721Contract, + approved: true, + operator: marketplaceAddress, + }), + }), + sendAndConfirmTransaction({ + account: TEST_ACCOUNT_C, + transaction: setApprovalForAll1155({ + contract: erc1155Contract, + approved: true, + operator: marketplaceAddress, + }), + }), + ]); - nftTokenId = mintEvents[0]?.args.tokenIdMinted as bigint; - // does a lot of stuff, this may take a while - }, 120_000); + // ---- set up completed ---- // - it("should work for basic listings (Native Currency)", async () => { - // listings should be 0 length to start - const listings = await getAllListings({ + // listings should be 0 length to start + const [allListings, totalListingCount] = await Promise.all([ + getAllListings({ contract: marketplaceContract, - }); - expect(listings.length).toBe(0); - // oh and so should totalListings - expect(await totalListings({ contract: marketplaceContract })).toBe(0n); - - // approve first - const approveTx = approveErc721({ - contract: erc721Contract, - to: marketplaceContract.address, - tokenId: nftTokenId, - }); - - await sendAndConfirmTransaction({ - transaction: approveTx, - account: TEST_ACCOUNT_A, - }); - - const transaction = createListing({ + }), + totalListings({ contract: marketplaceContract }), + ]); + expect(allListings.length).toBe(0); + // oh and so should totalListings + expect(totalListingCount).toBe(0n); + + const receipt = await sendAndConfirmTransaction({ + transaction: createListing({ contract: marketplaceContract, assetContractAddress: erc721Contract.address, - tokenId: nftTokenId, + tokenId: 0n, pricePerToken: "1", - }); - const receipt = await sendAndConfirmTransaction({ - transaction, - account: TEST_ACCOUNT_A, - }); + }), + account: TEST_ACCOUNT_B, + }); - const listingEvents = parseEventLogs({ - events: [newListingEvent()], - logs: receipt.logs, - }); + const listingEvents = parseEventLogs({ + events: [newListingEvent()], + logs: receipt.logs, + }); - expect(listingEvents.length).toBe(1); + expect(listingEvents.length).toBe(1); - // biome-ignore lint/style/noNonNullAssertion: OK in tests - const listingEvent = listingEvents[0]!; + // biome-ignore lint/style/noNonNullAssertion: OK in tests + const listingEvent = listingEvents[0]!; - expect(listingEvent.args.listingCreator).toBe(TEST_ACCOUNT_A.address); - expect(listingEvent.args.assetContract).toBe(erc721Contract.address); + expect(listingEvent.args.listingCreator).toBe(TEST_ACCOUNT_B.address); + expect(listingEvent.args.assetContract).toBe(erc721Contract.address); - // at this point listings should be 1 - const listingsAfter = await getAllListings({ + const [ + listingsAfter, + validListings, + totalListingCount2, + firstListing, + nftBalanceOfAccountABeforePurchase, + ] = await Promise.all([ + getAllListings({ contract: marketplaceContract, - }); - expect(listingsAfter.length).toBe(1); - // valid listings should also be 1! - const validListings = await getAllValidListings({ + }), + getAllValidListings({ contract: marketplaceContract, - }); - expect(validListings.length).toBe(1); - // and totalListings should be 1 - expect(await totalListings({ contract: marketplaceContract })).toBe(1n); - - // explicitly retrieve the listing! - const listing = await getListing({ + }), + totalListings({ contract: marketplaceContract }), + getListing({ contract: marketplaceContract, listingId: listingEvent.args.listingId, - }); - - expect(listing).toBeDefined(); - expect(listing.status).toBe("ACTIVE"); - expect(listing.creatorAddress).toBe(TEST_ACCOUNT_A.address); - expect(listing.assetContractAddress).toBe(erc721Contract.address); - expect(listing.tokenId).toBe(nftTokenId); - expect(listing.currencyValuePerToken).toMatchInlineSnapshot(` - { - "decimals": 18, - "displayValue": "1", - "name": "Anvil Ether", - "symbol": "ETH", - "value": 1000000000000000000n, - } - `); - expect(listing.asset).toMatchInlineSnapshot(` - { - "id": 0n, - "metadata": { - "name": "Test:ERC721:DirectListing", - }, - "owner": null, - "tokenURI": "ipfs://QmewoGwuooC1Vno1ZTnmKmEUaimDygraR1fEEHdTeraF34/0", - "type": "ERC721", - } - `); - - // check the listing is valid - const listingValidity = await isListingValid({ - listing, - contract: marketplaceContract, - quantity: 1n, - }); + }), + balanceOfErc721({ + contract: erc721Contract, + owner: TEST_ACCOUNT_A.address, + }), + ]); + + // at this point listings should be 1 + expect(listingsAfter.length).toBe(1); + // valid listings should also be 1! + expect(validListings.length).toBe(1); + // and totalListings should be 1 + expect(totalListingCount2).toBe(1n); + expect(firstListing).toBeDefined(); + expect(firstListing.status).toBe("ACTIVE"); + expect(firstListing.creatorAddress).toBe(TEST_ACCOUNT_B.address); + expect(firstListing.assetContractAddress).toBe(erc721Contract.address); + expect(firstListing.tokenId).toBe(0n); + expect(firstListing.currencyValuePerToken).toMatchInlineSnapshot(` + { + "decimals": 18, + "displayValue": "1", + "name": "Anvil Ether", + "symbol": "ETH", + "value": 1000000000000000000n, + } + `); + expect(firstListing.asset.metadata.name).toBe("erc721 #0"); + expect(firstListing.asset.id).toBe(0n); + expect(firstListing.asset.owner).toBe(null); + // check the listing is valid + const firstListingValidity = await isListingValid({ + listing: firstListing, + contract: marketplaceContract, + quantity: 1n, + }); - expect(listingValidity).toMatchInlineSnapshot(` - { - "valid": true, - } + expect(firstListingValidity).toMatchInlineSnapshot(` + { + "valid": true, + } `); + expect(nftBalanceOfAccountABeforePurchase).toBe(0n); - // expect the buyer to have an initial balance of 0 - await expect( - balanceOfErc721({ - contract: erc721Contract, - owner: TEST_ACCOUNT_B.address, - }), - ).resolves.toBe(0n); - - const buyTx = buyFromListing({ + await sendAndConfirmTransaction({ + transaction: buyFromListing({ contract: marketplaceContract, listingId: listingEvent.args.listingId, - recipient: TEST_ACCOUNT_B.address, + recipient: TEST_ACCOUNT_A.address, quantity: 1n, - }); - - await sendAndConfirmTransaction({ - transaction: buyTx, - account: TEST_ACCOUNT_B, - }); - - // expect the buyer to have a new balance of 1 - await expect( - balanceOfErc721({ - contract: erc721Contract, - owner: TEST_ACCOUNT_B.address, - }), - ).resolves.toBe(1n); - // expect the seller to no longer have the token - await expect( - balanceOfErc721({ - contract: erc721Contract, - owner: TEST_ACCOUNT_A.address, - }), - ).resolves.toBe(0n); + }), + account: TEST_ACCOUNT_A, }); - }); - - describe("ERC1155 Drop", () => { - let nftTokenId: bigint; - let marketplaceContract: ThirdwebContract; - let erc1155Contract: ThirdwebContract; - beforeAll(async () => { - marketplaceContract = getContract({ - address: await deployMarketplaceContract({ - account: TEST_ACCOUNT_A, - chain: ANVIL_CHAIN, - client: TEST_CLIENT, - params: { - name: "TestMarketPlace", - }, - }), - client: TEST_CLIENT, - chain: ANVIL_CHAIN, - }); - - // also deploy an ERC721 contract - erc1155Contract = getContract({ - address: await deployERC1155Contract({ - type: "DropERC1155", - account: TEST_ACCOUNT_A, - chain: ANVIL_CHAIN, - client: TEST_CLIENT, - params: { - name: "TestERC1155", - }, - }), - client: TEST_CLIENT, - chain: ANVIL_CHAIN, - }); - - // lazy mint 10 tokens - await expect( - sendAndConfirmTransaction({ - transaction: lazyMint({ - contract: erc1155Contract, - nfts: [{ name: "Test:ERC1155:DirectListing" }], - }), - account: TEST_ACCOUNT_A, - }), - ).resolves.toBeDefined(); - - // set claim condition (just public is fine) - await expect( - sendAndConfirmTransaction({ - transaction: setClaimConditions({ - contract: erc1155Contract, - tokenId: 0n, - phases: [{}], - }), - account: TEST_ACCOUNT_A, - }), - ).resolves.toBeDefined(); - - // claim 10 tokens - await expect( - sendAndConfirmTransaction({ - transaction: claimTo({ - contract: erc1155Contract, - tokenId: 0n, - to: TEST_ACCOUNT_A.address, - quantity: 10n, - }), - account: TEST_ACCOUNT_A, - }), - ).resolves.toBeDefined(); - - nftTokenId = 0n; - // does a lot of stuff, this may take a while - }, 120_000); - - it("should work for basic listings (Native Currency)", async () => { - // listings should be 0 length to start - const listings = await getAllListings({ - contract: marketplaceContract, - }); - expect(listings.length).toBe(0); - // oh and so should totalListings - expect(await totalListings({ contract: marketplaceContract })).toBe(0n); - // approve first - - await sendAndConfirmTransaction({ - transaction: setApprovalForAll({ - contract: erc1155Contract, - operator: marketplaceContract.address, - approved: true, - }), - account: TEST_ACCOUNT_A, - }); - - // this should fail because we're listing more than we have - await expect( - sendAndConfirmTransaction({ - transaction: createListing({ - contract: marketplaceContract, - assetContractAddress: erc1155Contract.address, - tokenId: nftTokenId, - pricePerToken: "1", - quantity: 20n, - }), - account: TEST_ACCOUNT_A, - }), - ).rejects.toThrowErrorMatchingInlineSnapshot(` - [TransactionError: Error - Marketplace: not owner or approved tokens. - - contract: ${marketplaceContract.address} - chainId: 31337] - `); - - // this should work because we're listing the correct amount - const receipt = await sendAndConfirmTransaction({ + const [ + nftBalanceOfAccountAAfterPurchase, + nftBalanceOfAccountBAfterPurchase, + ] = await Promise.all([ + balanceOfErc721({ + contract: erc721Contract, + owner: TEST_ACCOUNT_A.address, + }), + balanceOfErc721({ + contract: erc721Contract, + owner: TEST_ACCOUNT_B.address, + }), + ]); + // expect the buyer to have a new balance of 1 + expect(nftBalanceOfAccountAAfterPurchase).toBe(1n); + // expect the seller to no longer have the nft + expect(nftBalanceOfAccountBAfterPurchase).toBe(0n); + + /** + * ============ now do the same tests but for ERC1155 ============= + */ + + // this should fail because we're listing more than we have + await expect( + sendAndConfirmTransaction({ transaction: createListing({ contract: marketplaceContract, assetContractAddress: erc1155Contract.address, - tokenId: nftTokenId, - pricePerToken: "0.01", - quantity: 1n, + tokenId: 0n, + pricePerToken: "1", + quantity: 101n, }), - account: TEST_ACCOUNT_A, - }); + account: TEST_ACCOUNT_C, + }), + ).rejects.toThrowErrorMatchingInlineSnapshot(` + [TransactionError: Error - Marketplace: not owner or approved tokens. - const listingEvents = parseEventLogs({ - events: [newListingEvent()], - logs: receipt.logs, - }); + contract: ${marketplaceContract.address} + chainId: 31337] + `); - expect(listingEvents.length).toBe(1); + const receipt1155 = await sendAndConfirmTransaction({ + transaction: createListing({ + contract: marketplaceContract, + assetContractAddress: erc1155Contract.address, + tokenId: 0n, + pricePerToken: "0.01", + quantity: 1n, + }), + account: TEST_ACCOUNT_C, + }); - // biome-ignore lint/style/noNonNullAssertion: OK in tests - const listingEvent = listingEvents[0]!; + const listingEvents1155 = parseEventLogs({ + events: [newListingEvent()], + logs: receipt1155.logs, + }); - expect(listingEvent.args.listingCreator).toBe(TEST_ACCOUNT_A.address); - expect(listingEvent.args.assetContract).toBe(erc1155Contract.address); + expect(listingEvents.length).toBe(1); - // at this point listings should be 1 - const listingsAfter = await getAllListings({ - contract: marketplaceContract, - }); - expect(listingsAfter.length).toBe(1); - // valid listings should also be 1! - const validListings = await getAllValidListings({ - contract: marketplaceContract, - }); - expect(validListings.length).toBe(1); - // and totalListings should be 1 - expect(await totalListings({ contract: marketplaceContract })).toBe(1n); + // biome-ignore lint/style/noNonNullAssertion: OK in tests + const listingEvent1155 = listingEvents1155[0]!; - // explicitly retrieve the listing! - const listing = await getListing({ + expect(listingEvent1155.args.listingCreator).toBe(TEST_ACCOUNT_C.address); + expect(listingEvent1155.args.assetContract).toBe(erc1155Contract.address); + + const [ + listings1155After, + validListings1155, + totalListingCountAfter1155, + secondListing, + nft1155BalanceOfAccountABeforePurchase, + ] = await Promise.all([ + getAllListings({ contract: marketplaceContract, - listingId: listingEvent.args.listingId, - }); - - expect(listing).toBeDefined(); - expect(listing.status).toBe("ACTIVE"); - expect(listing.creatorAddress).toBe(TEST_ACCOUNT_A.address); - expect(listing.assetContractAddress).toBe(erc1155Contract.address); - expect(listing.tokenId).toBe(nftTokenId); - expect(listing.currencyValuePerToken).toMatchInlineSnapshot(` - { - "decimals": 18, - "displayValue": "0.01", - "name": "Anvil Ether", - "symbol": "ETH", - "value": 10000000000000000n, - } - `); - expect(listing.asset).toMatchInlineSnapshot(` - { - "id": 0n, - "metadata": { - "name": "Test:ERC1155:DirectListing", - }, - "owner": null, - "supply": 10n, - "tokenURI": "ipfs://QmdwzcoSGSzoRSMBk2efkHjGVRsyUaR2Lm79YTuL324NtM/0", - "type": "ERC1155", - } - `); - - // check the listing is valid - const listingValidity = await isListingValid({ - listing, + }), + getAllValidListings({ contract: marketplaceContract, - quantity: 1n, - }); + }), + totalListings({ contract: marketplaceContract }), + getListing({ + contract: marketplaceContract, + listingId: listingEvent1155.args.listingId, + }), + balanceOfErc1155({ + contract: erc1155Contract, + owner: TEST_ACCOUNT_A.address, + tokenId: 0n, + }), + ]); + + // at this point listings should be 2 + expect(listings1155After.length).toBe(2); + // valid listings should be 1 still because the first listing has been bought + expect(validListings1155.length).toBe(1); + // and totalListings should be 2 + expect(totalListingCountAfter1155).toBe(2n); + expect(secondListing).toBeDefined(); + expect(secondListing.status).toBe("ACTIVE"); + expect(secondListing.creatorAddress).toBe(TEST_ACCOUNT_C.address); + expect(secondListing.assetContractAddress).toBe(erc1155Contract.address); + expect(secondListing.tokenId).toBe(0n); + expect(secondListing.currencyValuePerToken).toMatchInlineSnapshot(` + { + "decimals": 18, + "displayValue": "0.01", + "name": "Anvil Ether", + "symbol": "ETH", + "value": 10000000000000000n, + } + `); + expect(secondListing.asset.metadata.name).toBe("erc1155 #0"); + expect(secondListing.asset.id).toBe(0n); + + // check the listing is valid + const listingValidity = await isListingValid({ + listing: secondListing, + contract: marketplaceContract, + quantity: 1n, + }); - expect(listingValidity).toMatchInlineSnapshot(` - { - "valid": true, - } - `); + expect(listingValidity).toMatchInlineSnapshot(` + { + "valid": true, + } + `); - // expect the buyer to have an initial balance of 0 - await expect( - balanceOfErc1155({ - contract: erc1155Contract, - owner: TEST_ACCOUNT_B.address, - tokenId: nftTokenId, - }), - ).resolves.toBe(0n); + expect(nft1155BalanceOfAccountABeforePurchase).toBe(0n); - const buyTx = buyFromListing({ + await sendAndConfirmTransaction({ + transaction: buyFromListing({ contract: marketplaceContract, - listingId: listingEvent.args.listingId, - recipient: TEST_ACCOUNT_B.address, + listingId: listingEvent1155.args.listingId, + recipient: TEST_ACCOUNT_A.address, quantity: 1n, - }); - - await sendAndConfirmTransaction({ - transaction: buyTx, - account: TEST_ACCOUNT_B, - }); - - // expect the buyer to have a new balance of 1 - await expect( - balanceOfErc1155({ - contract: erc1155Contract, - owner: TEST_ACCOUNT_B.address, - tokenId: nftTokenId, - }), - ).resolves.toBe(1n); - // expect the seller to only have 9 of the tokens - await expect( - balanceOfErc1155({ - contract: erc1155Contract, - owner: TEST_ACCOUNT_A.address, - tokenId: nftTokenId, - }), - ).resolves.toBe(9n); + }), + account: TEST_ACCOUNT_A, }); + + const [ + nft1155BalanceOfAccountAAfterPurchase, + nft1155BalanceOfAccountCAfterPurchase, + ] = await Promise.all([ + balanceOfErc1155({ + contract: erc1155Contract, + owner: TEST_ACCOUNT_A.address, + tokenId: 0n, + }), + balanceOfErc1155({ + contract: erc1155Contract, + owner: TEST_ACCOUNT_C.address, + tokenId: 0n, + }), + ]); + // expect the buyer to have a new balance of 1 + expect(nft1155BalanceOfAccountAAfterPurchase).toBe(1n); + // expect the seller to have one less 1155 token + expect(nft1155BalanceOfAccountCAfterPurchase).toBe(99n); }); }); From bb51afa723475f3a213506f381dfe792d5e80c50 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Wed, 18 Sep 2024 17:56:14 +0000 Subject: [PATCH 05/78] simplify build tooling and remove redundant dependencies (#4664) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview This PR updates dependencies, TypeScript configurations, and package versions across multiple packages. It also refactors code in the `dashboard` app for improved functionality and type safety. ### Detailed summary - Updated `next` version to `14.2.12` in `wallet-ui`, `playground-web`, and `portal`. - Updated `@types/react` to `^18.3.7` in `wallet-ui`, `playground-web`, and `portal`. - Updated `eslint` and related plugins in `dashboard` and `portal`. - Refactored code in `dashboard` app for improved functionality and type safety. - Updated `@walletconnect` packages to version `2.16.2` in `thirdweb`. - Modified TypeScript configurations in `typedoc-gen` and `service-utils`. - Updated `react-native-svg` to version `15.7.1` in `portal`. - Updated `posthog-js` to version `1.161.6` in `wallet-ui` and `portal`. - Updated `happy-dom` to version `^15.7.4` in `portal`. - Updated `typescript` to version `5.6.2` in `typedoc-gen` and `dashboard`. > The following files were skipped due to too many changes: `apps/dashboard/package.json`, `apps/dashboard/src/core-ui/sidebar/tunnel.tsx`, `apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts`, `packages/typedoc-gen/tsconfig.base.json`, `packages/service-utils/tsconfig.base.json`, `packages/service-utils/package.json`, `pnpm-lock.yaml` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/dashboard/.eslintrc.js | 4 +- apps/dashboard/package.json | 14 +- .../react/hooks/useLoggedInUser.ts | 18 +- .../chainlist/components/client/search.tsx | 13 +- apps/dashboard/src/core-ui/sidebar/tunnel.tsx | 31 +- apps/playground-web/package.json | 7 +- apps/portal/.eslintrc.json | 28 +- apps/portal/package.json | 8 +- apps/wallet-ui/package.json | 4 +- package.json | 15 +- packages/service-utils/cf-worker/package.json | 4 - packages/service-utils/node/package.json | 4 - packages/service-utils/package.json | 52 +- packages/service-utils/tsconfig.base.json | 47 + packages/service-utils/tsconfig.build.json | 16 + packages/service-utils/tsconfig.json | 15 +- packages/thirdweb/package.json | 12 +- packages/tw-tsconfig/CHANGELOG.md | 49 - packages/tw-tsconfig/LICENSE | 201 - packages/tw-tsconfig/base.json | 22 - packages/tw-tsconfig/next.json | 20 - packages/tw-tsconfig/package.json | 17 - packages/tw-tsconfig/react-library.json | 11 - .../tw-tsconfig/react-native-library.json | 20 - packages/tw-tsconfig/sdk.json | 10 - packages/typedoc-gen/package.json | 21 +- packages/typedoc-gen/tsconfig.base.json | 47 + packages/typedoc-gen/tsconfig.build.json | 16 + packages/typedoc-gen/tsconfig.json | 18 +- pnpm-lock.yaml | 4600 +++++++---------- turbo.json | 4 - 31 files changed, 2080 insertions(+), 3268 deletions(-) delete mode 100644 packages/service-utils/cf-worker/package.json delete mode 100644 packages/service-utils/node/package.json create mode 100644 packages/service-utils/tsconfig.base.json create mode 100644 packages/service-utils/tsconfig.build.json delete mode 100644 packages/tw-tsconfig/CHANGELOG.md delete mode 100644 packages/tw-tsconfig/LICENSE delete mode 100644 packages/tw-tsconfig/base.json delete mode 100644 packages/tw-tsconfig/next.json delete mode 100644 packages/tw-tsconfig/package.json delete mode 100644 packages/tw-tsconfig/react-library.json delete mode 100644 packages/tw-tsconfig/react-native-library.json delete mode 100644 packages/tw-tsconfig/sdk.json create mode 100644 packages/typedoc-gen/tsconfig.base.json create mode 100644 packages/typedoc-gen/tsconfig.build.json diff --git a/apps/dashboard/.eslintrc.js b/apps/dashboard/.eslintrc.js index fc9d8c92612..bb5a8d77c31 100644 --- a/apps/dashboard/.eslintrc.js +++ b/apps/dashboard/.eslintrc.js @@ -2,9 +2,7 @@ module.exports = { extends: [ "eslint:recommended", "plugin:@typescript-eslint/recommended", - "plugin:import/typescript", "plugin:@next/next/recommended", - "plugin:promise/recommended", "plugin:storybook/recommended", ], rules: { @@ -98,7 +96,7 @@ module.exports = { ], }, parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint", "import", "react-compiler"], + plugins: ["@typescript-eslint", "react-compiler"], parserOptions: { ecmaVersion: 2019, ecmaFeatures: { diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 8bf44e356a8..e0225de63c8 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -68,14 +68,14 @@ "ipaddr.js": "^2.2.0", "lottie-react": "^2.4.0", "lucide-react": "0.441.0", - "next": "14.2.11", + "next": "14.2.12", "next-plausible": "^3.12.0", "next-seo": "^6.5.0", "next-themes": "^0.3.0", "nextjs-toploader": "^1.6.12", "papaparse": "^5.4.1", "pluralize": "^8.0.0", - "posthog-js": "1.161.5", + "posthog-js": "1.161.6", "posthog-js-opensource": "npm:posthog-js@1.67.1", "prism-react-renderer": "^2.3.1", "prismjs": "^1.29.0", @@ -108,8 +108,8 @@ "devDependencies": { "@chakra-ui/cli": "^2.4.1", "@chromatic-com/storybook": "2.0.2", - "@next/bundle-analyzer": "14.2.11", - "@next/eslint-plugin-next": "14.2.11", + "@next/bundle-analyzer": "14.2.12", + "@next/eslint-plugin-next": "14.2.12", "@playwright/test": "1.47.1", "@storybook/addon-essentials": "8.3.1", "@storybook/addon-interactions": "8.3.1", @@ -125,7 +125,7 @@ "@types/papaparse": "^5.3.14", "@types/pluralize": "^0.0.33", "@types/qrcode": "^1.5.5", - "@types/react": "^18.3.6", + "@types/react": "^18.3.7", "@types/react-dom": "^18", "@types/react-table": "^7.7.20", "@types/spdx-correct": "^3.1.3", @@ -136,9 +136,7 @@ "checkly": "^4.8.1", "eslint": "8.57.0", "eslint-config-biome": "1.8.3", - "eslint-plugin-import": "^2.30.0", - "eslint-plugin-promise": "^6.2.0", - "eslint-plugin-react-compiler": "0.0.0-experimental-9ed098e-20240725", + "eslint-plugin-react-compiler": "0.0.0-experimental-ca16900-20240916", "eslint-plugin-storybook": "^0.8.0", "next-sitemap": "^4.2.3", "postcss": "8.4.47", diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts index e15a8a54d0d..d38e224dc3d 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts @@ -3,7 +3,7 @@ import { useDashboardRouter } from "@/lib/DashboardRouter"; import { useQuery } from "@tanstack/react-query"; import type { EnsureLoginResponse } from "app/api/auth/ensure-login/route"; import { usePathname } from "next/navigation"; -import { useEffect, useRef } from "react"; +import { useEffect, useState } from "react"; import { useActiveAccount, useActiveWalletConnectionStatus, @@ -27,10 +27,16 @@ export function useLoggedInUser(): { const connectionStatus = useActiveWalletConnectionStatus(); // this is to work around the fact that `connectionStatus` ends up as "disconnected" // which we *do* care about, but only after we have been "connecting" at least once - const statusWasEverConnecting = useRef(false); - if (connectionStatus === "connecting" || connectionStatus === "connected") { - statusWasEverConnecting.current = true; - } + const [statusWasEverConnecting, setStatusWasEverConnecting] = useState( + connectionStatus === "connecting" || connectionStatus === "connected", + ); + // needs to be a useEffect for now + // eslint-disable-next-line no-restricted-syntax + useEffect(() => { + if (connectionStatus === "connecting" || connectionStatus === "connected") { + setStatusWasEverConnecting(true); + } + }, [connectionStatus]); const query = useQuery({ // enabled if: @@ -40,7 +46,7 @@ export function useLoggedInUser(): { enabled: !!pathname && connectionStatus !== "connecting" && - statusWasEverConnecting.current && + statusWasEverConnecting && isLoginRequired(pathname), // the last "persist", part of the queryKey, is to make sure that we do not cache this query in indexDB // convention in v4 of the SDK that we are (ab)using here diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/chainlist/components/client/search.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/chainlist/components/client/search.tsx index 50814d6ca3e..38307136225 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/chainlist/components/client/search.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/chainlist/components/client/search.tsx @@ -5,7 +5,7 @@ import { Input } from "@/components/ui/input"; import { useDashboardRouter } from "@/lib/DashboardRouter"; import { SearchIcon, XCircleIcon } from "lucide-react"; import { usePathname, useSearchParams } from "next/navigation"; -import { useRef } from "react"; +import { useEffect, useRef } from "react"; import { useDebouncedCallback } from "use-debounce"; function cleanUrl(url: string) { @@ -22,10 +22,13 @@ export const SearchInput: React.FC = () => { const inputRef = useRef(null); - // hah, no need for useEffect here this just works! - if (inputRef.current?.value && !searchParams?.get("query")) { - inputRef.current.value = ""; - } + // eslint-disable-next-line no-restricted-syntax + useEffect(() => { + // reset the input if the query param is removed + if (inputRef.current?.value && !searchParams?.get("query")) { + inputRef.current.value = ""; + } + }, [searchParams]); const handleSearch = useDebouncedCallback((term: string) => { const params = new URLSearchParams(searchParams ?? undefined); diff --git a/apps/dashboard/src/core-ui/sidebar/tunnel.tsx b/apps/dashboard/src/core-ui/sidebar/tunnel.tsx index e042024a76b..317d959d910 100644 --- a/apps/dashboard/src/core-ui/sidebar/tunnel.tsx +++ b/apps/dashboard/src/core-ui/sidebar/tunnel.tsx @@ -1,9 +1,9 @@ "use client"; -import { useIsomorphicLayoutEffect } from "@/lib/useIsomorphicLayoutEffect"; -import { useRef, useState } from "react"; +import { useMemo } from "react"; import { createPortal } from "react-dom"; import type { ComponentWithChildren } from "types/component-with-children"; +import { ClientOnly } from "../../components/ClientOnly/ClientOnly"; export const SIDEBAR_WIDTH = 240; @@ -11,23 +11,20 @@ export const SIDEBAR_TUNNEL_ID = "sidebar-tunnel"; export const SideBarTunnel: ComponentWithChildren = ({ children }) => { return ( - {children} + + {children} + ); }; -type ClientOnlyPortalProps = { selector: string }; +type PortalProps = { selector: string }; -const ClientOnlyPortal: ComponentWithChildren = ({ - children, - selector, -}) => { - const ref = useRef(null); - const [mounted, setMounted] = useState(false); - - useIsomorphicLayoutEffect(() => { - ref.current = document.getElementById(selector); - setMounted(true); - }, [selector]); - - return mounted && ref.current ? createPortal(children, ref.current) : null; +const Portal: ComponentWithChildren = ({ children, selector }) => { + return useMemo(() => { + const elem = document.getElementById(selector); + if (elem) { + return createPortal(children, elem); + } + return null; + }, [children, selector]); }; diff --git a/apps/playground-web/package.json b/apps/playground-web/package.json index f9ac0411120..f6cf33e2de6 100644 --- a/apps/playground-web/package.json +++ b/apps/playground-web/package.json @@ -30,7 +30,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "lucide-react": "0.441.0", - "next": "14.2.11", + "next": "14.2.12", "next-themes": "^0.3.0", "prettier": "^3.3.2", "react": "18.3.1", @@ -43,12 +43,11 @@ }, "devDependencies": { "@types/node": "20.14.9", - "@types/react": "^18.3.6", + "@types/react": "^18.3.7", "@types/react-dom": "^18", - "babel-plugin-react-compiler": "0.0.0-experimental-592953e-20240517", "eslint": "8.57.0", "eslint-config-next": "14.2.11", - "eslint-plugin-react-compiler": "0.0.0-experimental-9ed098e-20240725", + "eslint-plugin-react-compiler": "0.0.0-experimental-ca16900-20240916", "postcss": "8.4.47", "tailwindcss": "3.4.11", "tailwindcss-animate": "^1.0.7", diff --git a/apps/portal/.eslintrc.json b/apps/portal/.eslintrc.json index d573a0abc51..181a171538d 100644 --- a/apps/portal/.eslintrc.json +++ b/apps/portal/.eslintrc.json @@ -1,16 +1,16 @@ { - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint", "svg-jsx"], - "extends": [ - "next/core-web-vitals", - "plugin:tailwindcss/recommended", - "plugin:mdx/recommended", - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "@typescript-eslint/no-explicit-any": "off", - "svg-jsx/camel-case-dash": "error" - } + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint", "svg-jsx"], + "extends": [ + "next/core-web-vitals", + "plugin:tailwindcss/recommended", + "plugin:mdx/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-explicit-any": "off", + "svg-jsx/camel-case-dash": "error" + } } diff --git a/apps/portal/package.json b/apps/portal/package.json index b86a601693e..4f989f1aea1 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -33,10 +33,10 @@ "flexsearch": "^0.7.43", "github-slugger": "^2.0.0", "lucide-react": "0.441.0", - "next": "14.2.11", + "next": "14.2.12", "nextjs-toploader": "^1.6.12", "node-html-parser": "^6.1.13", - "posthog-js": "1.161.5", + "posthog-js": "1.161.6", "prettier": "^3.3.2", "react": "18.3.1", "react-dom": "18.3.1", @@ -56,7 +56,7 @@ "@types/flexsearch": "^0.7.6", "@types/mdx": "^2.0.13", "@types/node": "20.14.9", - "@types/react": "^18.3.6", + "@types/react": "^18.3.7", "@types/react-dom": "^18", "@types/react-html-parser": "^2.0.6", "@types/tryghost__content-api": "^1.3.16", @@ -65,7 +65,7 @@ "autoprefixer": "^10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.11", - "eslint-plugin-mdx": "^2.3.4", + "eslint-plugin-mdx": "^3.1.5", "eslint-plugin-svg-jsx": "^1.2.4", "eslint-plugin-tailwindcss": "^3.15.1", "next-sitemap": "^4.2.3", diff --git a/apps/wallet-ui/package.json b/apps/wallet-ui/package.json index b505cc18b91..c8c289008f4 100644 --- a/apps/wallet-ui/package.json +++ b/apps/wallet-ui/package.json @@ -22,7 +22,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.0", "lucide-react": "0.441.0", - "next": "14.2.11", + "next": "14.2.12", "next-themes": "^0.3.0", "react": "18.3.1", "react-dom": "18.3.1", @@ -36,7 +36,7 @@ }, "devDependencies": { "@types/node": "20.14.9", - "@types/react": "^18.3.6", + "@types/react": "^18.3.7", "@types/react-dom": "^18", "eslint": "8.57.0", "eslint-config-next": "14.2.11", diff --git a/package.json b/package.json index b847c21e3eb..35e744802d8 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,6 @@ "hotlink-revert": "node ./scripts/hotlink/hotlink-revert.mjs" }, "devDependencies": { - "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/preset-env": "^7.25.4", - "@babel/preset-typescript": "^7.24.7", "@biomejs/biome": "1.9.1", "@changesets/changelog-github": "0.5.0", "@changesets/cli": "2.27.8", @@ -52,17 +48,12 @@ "@manypkg/get-packages": "2.2.2", "@playwright/test": "1.47.1", "@size-limit/preset-big-lib": "11.1.5", - "@types/bun": "1.1.8", + "@types/bun": "1.1.9", "@types/node": "20.14.9", - "@types/react": "^18.3.6", + "@types/react": "^18.3.7", "@viem/anvil": "0.0.10", "@vitest/coverage-v8": "2.1.1", "dotenv-mono": "^1.3.14", - "eslint-plugin-i18next": "^6.1.0", - "eslint-plugin-import": "^2.30.0", - "eslint-plugin-inclusive-language": "^2.2.1", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-tsdoc": "^0.3.0", "knip": "^5.30.2", "mitata": "0.1.14", "react": "18.3.1", @@ -104,5 +95,5 @@ "@typescript-eslint/typescript-estree": "^7.14.1" } }, - "packageManager": "pnpm@9.4.0" + "packageManager": "pnpm@9.10.0" } diff --git a/packages/service-utils/cf-worker/package.json b/packages/service-utils/cf-worker/package.json deleted file mode 100644 index 1e8173c1c31..00000000000 --- a/packages/service-utils/cf-worker/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "dist/thirdweb-dev-service-utils-cf-worker.cjs.js", - "module": "dist/thirdweb-dev-service-utils-cf-worker.esm.js" -} diff --git a/packages/service-utils/node/package.json b/packages/service-utils/node/package.json deleted file mode 100644 index 2ad7daded02..00000000000 --- a/packages/service-utils/node/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "dist/thirdweb-dev-service-utils-node.cjs.js", - "module": "dist/thirdweb-dev-service-utils-node.esm.js" -} diff --git a/packages/service-utils/package.json b/packages/service-utils/package.json index 47e06f7e757..76af37ac6e0 100644 --- a/packages/service-utils/package.json +++ b/packages/service-utils/package.json @@ -1,23 +1,38 @@ { "name": "@thirdweb-dev/service-utils", "version": "0.4.38", - "main": "dist/thirdweb-dev-service-utils.cjs.js", - "module": "dist/thirdweb-dev-service-utils.esm.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "typings": "dist/types/index.d.ts", "exports": { ".": { - "module": "./dist/thirdweb-dev-service-utils.esm.js", - "default": "./dist/thirdweb-dev-service-utils.cjs.js" + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js" }, "./node": { - "module": "./node/dist/thirdweb-dev-service-utils-node.esm.js", - "default": "./node/dist/thirdweb-dev-service-utils-node.cjs.js" + "types": "./dist/types/node/index.d.ts", + "import": "./dist/esm/node/index.js", + "default": "./dist/cjs/node/index.js" }, "./cf-worker": { - "module": "./cf-worker/dist/thirdweb-dev-service-utils-cf-worker.esm.js", - "default": "./cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.js" + "types": "./dist/types/cf-worker/index.d.ts", + "import": "./dist/esm/cf-worker/index.js", + "default": "./dist/cjs/cf-worker/index.js" }, "./package.json": "./package.json" }, + "typesVersions": { + "*": { + "node": [ + "./dist/types/node/index.d.ts" + ], + "cf-worker": [ + "./dist/types/cf-worker/index.d.ts" + ] + } + }, "repository": "https://github.com/thirdweb-dev/js/tree/main/packages/pay", "license": "Apache-2.0", "bugs": { @@ -25,27 +40,15 @@ }, "author": "thirdweb eng ", "files": [ - "dist/", - "node/", - "cf-worker/" + "dist/" ], - "preconstruct": { - "entrypoints": [ - "index.ts", - "cf-worker/index.ts", - "node/index.ts" - ], - "exports": true - }, "sideEffects": false, "dependencies": { "aws4fetch": "1.0.20", "zod": "3.23.8" }, "devDependencies": { - "@cloudflare/workers-types": "4.20240405.0", - "@preconstruct/cli": "2.7.0", - "@thirdweb-dev/tsconfig": "workspace:*", + "@cloudflare/workers-types": "4.20240909.0", "@types/node": "20.14.9", "typescript": "5.6.2" }, @@ -54,7 +57,10 @@ "lint": "biome check ./src", "fix": "biome check ./src --fix", "clean": "rm -rf dist/", - "build": "tsc && preconstruct build", + "build": "pnpm clean && pnpm build:types && pnpm build:cjs && pnpm build:esm", + "build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", + "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", + "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", "push": "yalc push", "test": "vitest run" } diff --git a/packages/service-utils/tsconfig.base.json b/packages/service-utils/tsconfig.base.json new file mode 100644 index 00000000000..2b519cac7ea --- /dev/null +++ b/packages/service-utils/tsconfig.base.json @@ -0,0 +1,47 @@ +{ + // This tsconfig file contains the shared config for the build (tsconfig.build.json) and type checking (tsconfig.json) config. + "include": [], + "compilerOptions": { + // Incremental builds + // NOTE: Enabling incremental builds speeds up `tsc`. Keep in mind though that it does not reliably bust the cache when the `tsconfig.json` file changes. + "incremental": false, + + // Type checking + "strict": true, + "useDefineForClassFields": true, // Not enabled by default in `strict` mode unless we bump `target` to ES2022. + "noFallthroughCasesInSwitch": true, // Not enabled by default in `strict` mode. + "noImplicitReturns": true, // Not enabled by default in `strict` mode. + "useUnknownInCatchVariables": true, // TODO: This would normally be enabled in `strict` mode but would require some adjustments to the codebase. + "noImplicitOverride": true, // Not enabled by default in `strict` mode. + "noUnusedLocals": true, // Not enabled by default in `strict` mode. + "noUnusedParameters": true, // Not enabled by default in `strict` mode. + "exactOptionalPropertyTypes": false, // Not enabled by default in `strict` mode. + "noUncheckedIndexedAccess": true, // Not enabled by default in `strict` mode. + + // JavaScript support + "allowJs": false, + "checkJs": false, + + // Interop constraints + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "verbatimModuleSyntax": true, + "importHelpers": true, // This is only used for build validation. Since we do not have `tslib` installed, this will fail if we accidentally make use of anything that'd require injection of helpers. + + // Language and environment + "moduleResolution": "NodeNext", + "module": "NodeNext", + "target": "ES2021", // Setting this to `ES2021` enables native support for `Node v16+`: https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping. + "lib": [ + "ES2022", // By using ES2022 we get access to the `.cause` property on `Error` instances. + "DOM" // We are adding `DOM` here to get the `fetch`, etc. types. This should be removed once these types are available via DefinitelyTyped. + ], + + // Skip type checking for node modules + "skipLibCheck": true, + + // jsx for "/react" portion + "jsx": "react-jsx" + } +} diff --git a/packages/service-utils/tsconfig.build.json b/packages/service-utils/tsconfig.build.json new file mode 100644 index 00000000000..3ae3943df87 --- /dev/null +++ b/packages/service-utils/tsconfig.build.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["src"], + "exclude": [ + "src/**/*.test.ts", + "src/**/*.test.tsx", + "src/**/*.test-d.ts", + "src/**/*.bench.ts", + "src/**/*.macro.ts" + ], + "compilerOptions": { + "moduleResolution": "node", + "sourceMap": true, + "rootDir": "./src" + } +} diff --git a/packages/service-utils/tsconfig.json b/packages/service-utils/tsconfig.json index fb29f63a064..bc683d70754 100644 --- a/packages/service-utils/tsconfig.json +++ b/packages/service-utils/tsconfig.json @@ -1,5 +1,14 @@ { - "extends": "@thirdweb-dev/tsconfig/sdk.json", - "include": ["src", "types"], - "exclude": ["dist", "build", "node_modules"] + // This configuration is used for local development and type checking. + "extends": "./tsconfig.base.json", + "include": ["src", "test"], + "exclude": [], + // "references": [{ "path": "./scripts/tsconfig.json" }], + "compilerOptions": { + "baseUrl": ".", + "outDir": "./dist", + "paths": { + "~test/*": ["./test/src/*"] + } + } } diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index e18515031bb..6d62f1a84da 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -175,8 +175,8 @@ "@radix-ui/react-icons": "1.3.0", "@radix-ui/react-tooltip": "1.1.2", "@tanstack/react-query": "5.56.2", - "@walletconnect/ethereum-provider": "2.16.1", - "@walletconnect/sign-client": "2.16.1", + "@walletconnect/ethereum-provider": "2.16.2", + "@walletconnect/sign-client": "2.16.2", "abitype": "1.0.5", "fast-text-encoding": "^1.0.6", "fuse.js": "7.0.0", @@ -184,7 +184,7 @@ "mipd": "0.0.7", "node-libs-browser": "2.2.1", "uqr": "0.1.2", - "viem": "2.21.7" + "viem": "2.21.9" }, "peerDependencies": { "@aws-sdk/client-lambda": "^3", @@ -309,7 +309,7 @@ "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.2", "@types/cross-spawn": "^6.0.6", - "@types/react": "^18.3.6", + "@types/react": "^18.3.7", "@vitejs/plugin-react": "^4.3.1", "@vitest/ui": "2.1.1", "amazon-cognito-identity-js": "6.3.12", @@ -319,13 +319,13 @@ "ethers6": "npm:ethers@6.13.2", "expo-linking": "6.3.1", "expo-web-browser": "13.0.3", - "happy-dom": "^14.12.0", + "happy-dom": "^15.7.4", "msw": "2.4.7", "react-native": "0.75.3", "react-native-aes-gcm-crypto": "0.2.2", "react-native-passkey": "3.0.0-beta2", "react-native-quick-crypto": "0.7.4", - "react-native-svg": "15.6.0", + "react-native-svg": "15.7.1", "storybook": "8.3.1", "typescript": "5.6.2", "vite": "5.4.5" diff --git a/packages/tw-tsconfig/CHANGELOG.md b/packages/tw-tsconfig/CHANGELOG.md deleted file mode 100644 index 76898c6e867..00000000000 --- a/packages/tw-tsconfig/CHANGELOG.md +++ /dev/null @@ -1,49 +0,0 @@ -# @thirdweb-dev/tsconfig - -## 0.1.7 - -### Patch Changes - -- [#787](https://github.com/thirdweb-dev/js/pull/787) [`d2c7f6d7`](https://github.com/thirdweb-dev/js/commit/d2c7f6d758787fab102ecc0cec16ac74f3c87a1f) Thanks [@iketw](https://github.com/iketw)! - [ReactNative] Adds Device Wallet - -## 0.1.6 - -### Patch Changes - -- [#771](https://github.com/thirdweb-dev/js/pull/771) [`e3161e59`](https://github.com/thirdweb-dev/js/commit/e3161e5986e1831c6dae517889b6a6ba181ccd36) Thanks [@iketw](https://github.com/iketw)! - [ReactNativeSDK] Use wallet metadata from the wallet class - -## 0.1.5 - -### Patch Changes - -- [#522](https://github.com/thirdweb-dev/js/pull/522) [`18ba6b3`](https://github.com/thirdweb-dev/js/commit/18ba6b381ee5c72e0fe599ab9b32f2ef66443d5f) Thanks [@iketw](https://github.com/iketw)! - [React Native SDK] init package - -## 0.1.4 - -### Patch Changes - -- [#61](https://github.com/thirdweb-dev/js/pull/61) [`3287c2b`](https://github.com/thirdweb-dev/js/commit/3287c2b0f233332fe4a095f973deed8efab91db6) Thanks [@jnsdls](https://github.com/jnsdls)! - fix versions in dependencies before releasing stable - -## 0.1.3 - -### Patch Changes - -- [`5644ccd`](https://github.com/thirdweb-dev/js/commit/5644ccd3ee2ff330e4e5840d3266033376750117) Thanks [@jnsdls](https://github.com/jnsdls)! - bump versions again - -## 0.1.2 - -### Patch Changes - -- [`091f175`](https://github.com/thirdweb-dev/js/commit/091f1758604d40e825ea28a13c2699d67bc75d8c) Thanks [@jnsdls](https://github.com/jnsdls)! - release-all-packages - -## 0.1.1 - -### Patch Changes - -- [#46](https://github.com/thirdweb-dev/js/pull/46) [`349b5c1`](https://github.com/thirdweb-dev/js/commit/349b5c1e028a06616d40de84257fd8d1cf05df83) Thanks [@jnsdls](https://github.com/jnsdls)! - imrprove babel & tsconfig settings - -## 0.1.0 - -### Minor Changes - -- 3abe26c: initialze monorepo packages diff --git a/packages/tw-tsconfig/LICENSE b/packages/tw-tsconfig/LICENSE deleted file mode 100644 index 88e8b41ee6d..00000000000 --- a/packages/tw-tsconfig/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2021 Non-Fungible Labs, Inc - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/packages/tw-tsconfig/base.json b/packages/tw-tsconfig/base.json deleted file mode 100644 index 3b3f4166c60..00000000000 --- a/packages/tw-tsconfig/base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", - "compilerOptions": { - "composite": false, - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "inlineSources": false, - "isolatedModules": true, - "moduleResolution": "node", - "noUnusedLocals": false, - "noUnusedParameters": false, - "preserveWatchOutput": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "noUncheckedIndexedAccess": true - }, - "exclude": ["node_modules"] -} diff --git a/packages/tw-tsconfig/next.json b/packages/tw-tsconfig/next.json deleted file mode 100644 index 1c4bd37f76d..00000000000 --- a/packages/tw-tsconfig/next.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", - "extends": "./base.json", - "compilerOptions": { - "allowJs": true, - "declaration": false, - "declarationMap": false, - "incremental": true, - "jsx": "preserve", - "lib": ["dom", "dom.iterable", "esnext"], - "module": "esnext", - "noEmit": true, - "resolveJsonModule": true, - "rootDir": "src", - "target": "es5" - }, - "include": ["src", "next-env.d.ts"], - "exclude": ["node_modules"] -} diff --git a/packages/tw-tsconfig/package.json b/packages/tw-tsconfig/package.json deleted file mode 100644 index 088f569db5b..00000000000 --- a/packages/tw-tsconfig/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@thirdweb-dev/tsconfig", - "version": "0.1.7", - "license": "Apache-2.0", - "main": "index.js", - "files": [ - "base.json", - "node14.json", - "nextjs.json", - "react-library.json", - "sdk.json" - ], - "publishConfig": { - "access": "public" - }, - "repository": "https://github.com/thirdweb-dev/js/tree/main/packages/tw-tsconfig" -} diff --git a/packages/tw-tsconfig/react-library.json b/packages/tw-tsconfig/react-library.json deleted file mode 100644 index 5148ac04717..00000000000 --- a/packages/tw-tsconfig/react-library.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", - "extends": "./base.json", - "compilerOptions": { - "jsx": "react-jsx", - "lib": ["dom", "ES2020"], - "module": "ESNext", - "target": "ES2020" - } -} diff --git a/packages/tw-tsconfig/react-native-library.json b/packages/tw-tsconfig/react-native-library.json deleted file mode 100644 index 8b326fd73f2..00000000000 --- a/packages/tw-tsconfig/react-native-library.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Native Library", - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "declaration": true, - "esModuleInterop": true, - "isolatedModules": false, - "jsx": "react-native", - "lib": ["es6", "es2015", "es2016", "es2017", "es2018"], - "module": "ESNext", - "moduleResolution": "node", - "noUnusedParameters": true, - "noUnusedLocals": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "ES2020" - } -} diff --git a/packages/tw-tsconfig/sdk.json b/packages/tw-tsconfig/sdk.json deleted file mode 100644 index 7c859070504..00000000000 --- a/packages/tw-tsconfig/sdk.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "SDK Library", - "extends": "./base.json", - "compilerOptions": { - "module": "ESNext", - "target": "ES2021", - "resolveJsonModule": true - } -} diff --git a/packages/typedoc-gen/package.json b/packages/typedoc-gen/package.json index e3c95314ecd..61f15dd5d49 100644 --- a/packages/typedoc-gen/package.json +++ b/packages/typedoc-gen/package.json @@ -3,10 +3,23 @@ "name": "typedoc-gen", "version": "1.0.2", "description": "", - "main": "dist/index.mjs", - "types": "dist/index.d.ts", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "typings": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js" + } + }, "scripts": { - "build": "tsup src/index.ts --format esm --dts", + "clean": "rm -rf dist/", + "build": "pnpm clean && pnpm build:types && pnpm build:cjs && pnpm build:esm", + "build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", + "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", + "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", "watch": "tsup src/index.ts --format esm --dts --watch" }, "keywords": [], @@ -16,6 +29,6 @@ "typedoc": "0.26.7" }, "devDependencies": { - "tsup": "8.2.4" + "typescript": "5.6.2" } } diff --git a/packages/typedoc-gen/tsconfig.base.json b/packages/typedoc-gen/tsconfig.base.json new file mode 100644 index 00000000000..2b519cac7ea --- /dev/null +++ b/packages/typedoc-gen/tsconfig.base.json @@ -0,0 +1,47 @@ +{ + // This tsconfig file contains the shared config for the build (tsconfig.build.json) and type checking (tsconfig.json) config. + "include": [], + "compilerOptions": { + // Incremental builds + // NOTE: Enabling incremental builds speeds up `tsc`. Keep in mind though that it does not reliably bust the cache when the `tsconfig.json` file changes. + "incremental": false, + + // Type checking + "strict": true, + "useDefineForClassFields": true, // Not enabled by default in `strict` mode unless we bump `target` to ES2022. + "noFallthroughCasesInSwitch": true, // Not enabled by default in `strict` mode. + "noImplicitReturns": true, // Not enabled by default in `strict` mode. + "useUnknownInCatchVariables": true, // TODO: This would normally be enabled in `strict` mode but would require some adjustments to the codebase. + "noImplicitOverride": true, // Not enabled by default in `strict` mode. + "noUnusedLocals": true, // Not enabled by default in `strict` mode. + "noUnusedParameters": true, // Not enabled by default in `strict` mode. + "exactOptionalPropertyTypes": false, // Not enabled by default in `strict` mode. + "noUncheckedIndexedAccess": true, // Not enabled by default in `strict` mode. + + // JavaScript support + "allowJs": false, + "checkJs": false, + + // Interop constraints + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "verbatimModuleSyntax": true, + "importHelpers": true, // This is only used for build validation. Since we do not have `tslib` installed, this will fail if we accidentally make use of anything that'd require injection of helpers. + + // Language and environment + "moduleResolution": "NodeNext", + "module": "NodeNext", + "target": "ES2021", // Setting this to `ES2021` enables native support for `Node v16+`: https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping. + "lib": [ + "ES2022", // By using ES2022 we get access to the `.cause` property on `Error` instances. + "DOM" // We are adding `DOM` here to get the `fetch`, etc. types. This should be removed once these types are available via DefinitelyTyped. + ], + + // Skip type checking for node modules + "skipLibCheck": true, + + // jsx for "/react" portion + "jsx": "react-jsx" + } +} diff --git a/packages/typedoc-gen/tsconfig.build.json b/packages/typedoc-gen/tsconfig.build.json new file mode 100644 index 00000000000..3ae3943df87 --- /dev/null +++ b/packages/typedoc-gen/tsconfig.build.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["src"], + "exclude": [ + "src/**/*.test.ts", + "src/**/*.test.tsx", + "src/**/*.test-d.ts", + "src/**/*.bench.ts", + "src/**/*.macro.ts" + ], + "compilerOptions": { + "moduleResolution": "node", + "sourceMap": true, + "rootDir": "./src" + } +} diff --git a/packages/typedoc-gen/tsconfig.json b/packages/typedoc-gen/tsconfig.json index e0cf3b000bd..bc683d70754 100644 --- a/packages/typedoc-gen/tsconfig.json +++ b/packages/typedoc-gen/tsconfig.json @@ -1,12 +1,14 @@ { + // This configuration is used for local development and type checking. + "extends": "./tsconfig.base.json", + "include": ["src", "test"], + "exclude": [], + // "references": [{ "path": "./scripts/tsconfig.json" }], "compilerOptions": { - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - "module": "commonjs" /* Specify what module code is generated. */, - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - "strict": true /* Enable all strict type-checking options. */, - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "noUncheckedIndexedAccess": true /* Include 'undefined' in index signature results */, - "noEmit": false /* Do not emit outputs. */ + "baseUrl": ".", + "outDir": "./dist", + "paths": { + "~test/*": ["./test/src/*"] + } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5407fdbd80a..9a846756c07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,18 +32,6 @@ importers: .: devDependencies: - '@babel/plugin-transform-flow-strip-types': - specifier: ^7.25.2 - version: 7.25.2(@babel/core@7.25.2) - '@babel/plugin-transform-private-methods': - specifier: ^7.25.4 - version: 7.25.4(@babel/core@7.25.2) - '@babel/preset-env': - specifier: ^7.25.4 - version: 7.25.4(@babel/core@7.25.2) - '@babel/preset-typescript': - specifier: ^7.24.7 - version: 7.24.7(@babel/core@7.25.2) '@biomejs/biome': specifier: 1.9.1 version: 1.9.1 @@ -66,38 +54,23 @@ importers: specifier: 11.1.5 version: 11.1.5(bufferutil@4.0.8)(size-limit@11.1.5)(utf-8-validate@6.0.4) '@types/bun': - specifier: 1.1.8 - version: 1.1.8 + specifier: 1.1.9 + version: 1.1.9 '@types/node': specifier: 20.14.9 version: 20.14.9 '@types/react': - specifier: ^18.3.6 - version: 18.3.6 + specifier: ^18.3.7 + version: 18.3.7 '@viem/anvil': specifier: 0.0.10 version: 0.0.10(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@vitest/coverage-v8': specifier: 2.1.1 - version: 2.1.1(vitest@2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.32.0)) + version: 2.1.1(vitest@2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.33.0)) dotenv-mono: specifier: ^1.3.14 version: 1.3.14 - eslint-plugin-i18next: - specifier: ^6.1.0 - version: 6.1.0 - eslint-plugin-import: - specifier: ^2.30.0 - version: 2.30.0(eslint@9.10.0(jiti@1.21.6)) - eslint-plugin-inclusive-language: - specifier: ^2.2.1 - version: 2.2.1 - eslint-plugin-prettier: - specifier: ^5.2.1 - version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.10.0(jiti@1.21.6)))(eslint@9.10.0(jiti@1.21.6))(prettier@3.3.3) - eslint-plugin-tsdoc: - specifier: ^0.3.0 - version: 0.3.0 knip: specifier: ^5.30.2 version: 5.30.2(@types/node@20.14.9)(typescript@5.6.2) @@ -127,7 +100,7 @@ importers: version: 5.6.2 vitest: specifier: 2.1.1 - version: 2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.32.0) + version: 2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.33.0) yalc: specifier: 1.0.0-pre.53 version: 1.0.0-pre.53 @@ -136,7 +109,7 @@ importers: dependencies: '@chakra-ui/react': specifier: ^2.8.2 - version: 2.8.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.8.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/styled-system': specifier: ^2.9.2 version: 2.9.2 @@ -145,73 +118,73 @@ importers: version: 2.1.2(@chakra-ui/styled-system@2.9.2) '@coinbase/onchainkit': specifier: ^0.14.2 - version: 0.14.2(@tanstack/react-query@5.56.2(react@18.3.1))(@xmtp/frames-validator@0.6.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(graphql-request@7.1.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 0.14.2(@tanstack/react-query@5.56.2(react@18.3.1))(@xmtp/frames-validator@0.6.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(graphql-request@7.1.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.21.9(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)) '@emotion/react': specifier: 11.13.3 - version: 11.13.3(@types/react@18.3.6)(react@18.3.1) + version: 11.13.3(@types/react@18.3.7)(react@18.3.1) '@emotion/styled': specifier: 11.13.0 - version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1) + version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) '@hookform/resolvers': specifier: ^3.9.0 version: 3.9.0(react-hook-form@7.52.0(react@18.3.1)) '@n8tb1t/use-scroll-position': specifier: ^2.0.3 - version: 2.0.3(@types/react@18.3.6)(react@18.3.1) + version: 2.0.3(@types/react@18.3.7)(react@18.3.1) '@radix-ui/react-alert-dialog': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-aspect-ratio': specifier: ^1.0.3 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-avatar': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-checkbox': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: 1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.1 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-hover-card': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.0 - version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-radio-group': specifier: ^1.2.0 - version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-select': specifier: ^2.1.1 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.6)(react@18.3.1) + version: 1.1.0(@types/react@18.3.7)(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: 1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-icons/all-files': specifier: ^4.1.0 version: 4.1.0(react@18.3.1) '@sentry/nextjs': specifier: 8.30.0 - version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) '@shazow/whatsabi': specifier: ^0.14.1 version: 0.14.1(@noble/hashes@1.5.0)(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -238,7 +211,7 @@ importers: version: 1.0.5(typescript@5.6.2)(zod@3.23.8) chakra-react-select: specifier: ^4.7.6 - version: 4.9.2(kftkeeraumrjrdtzyuwmqpfho4) + version: 4.9.2(ooyxqpmhhomg5ipsk5jt3smuua) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -276,20 +249,20 @@ importers: specifier: 0.441.0 version: 0.441.0(react@18.3.1) next: - specifier: 14.2.11 - version: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.2.12 + version: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-plausible: specifier: ^3.12.0 - version: 3.12.2(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.12.2(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-seo: specifier: ^6.5.0 - version: 6.6.0(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.6.0(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nextjs-toploader: specifier: ^1.6.12 - version: 1.6.12(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.6.12(next@14.2.12(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) papaparse: specifier: ^5.4.1 version: 5.4.1 @@ -297,8 +270,8 @@ importers: specifier: ^8.0.0 version: 8.0.0 posthog-js: - specifier: 1.161.5 - version: 1.161.5 + specifier: 1.161.6 + version: 1.161.6 posthog-js-opensource: specifier: npm:posthog-js@1.67.1 version: posthog-js@1.67.1 @@ -337,7 +310,7 @@ importers: version: 9.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.3.6)(react@18.3.1) + version: 9.0.1(@types/react@18.3.7)(react@18.3.1) react-otp-input: specifier: ^3.1.1 version: 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -364,13 +337,13 @@ importers: version: 3.2.0 swagger-ui-react: specifier: ^5.17.14 - version: 5.17.14(@types/react@18.3.6)(ramda@0.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.17.14(@types/react@18.3.7)(ramda@0.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.5.2 version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -391,11 +364,11 @@ importers: specifier: 2.0.2 version: 2.0.2(react@18.3.1) '@next/bundle-analyzer': - specifier: 14.2.11 - version: 14.2.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + specifier: 14.2.12 + version: 14.2.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@next/eslint-plugin-next': - specifier: 14.2.11 - version: 14.2.11 + specifier: 14.2.12 + version: 14.2.12 '@playwright/test': specifier: 1.47.1 version: 1.47.1 @@ -419,7 +392,7 @@ importers: version: 8.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.3.1 - version: 8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + version: 8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) '@storybook/react': specifier: 8.3.1 version: 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) @@ -442,8 +415,8 @@ importers: specifier: ^1.5.5 version: 1.5.5 '@types/react': - specifier: ^18.3.6 - version: 18.3.6 + specifier: ^18.3.7 + version: 18.3.7 '@types/react-dom': specifier: ^18 version: 18.3.0 @@ -467,28 +440,22 @@ importers: version: 10.4.20(postcss@8.4.47) checkly: specifier: ^4.8.1 - version: 4.9.0(@swc/core@1.7.26)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + version: 4.9.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) eslint: specifier: 8.57.0 version: 8.57.0 eslint-config-biome: specifier: 1.8.3 version: 1.8.3 - eslint-plugin-import: - specifier: ^2.30.0 - version: 2.30.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0) - eslint-plugin-promise: - specifier: ^6.2.0 - version: 6.6.0(eslint@8.57.0) eslint-plugin-react-compiler: - specifier: 0.0.0-experimental-9ed098e-20240725 - version: 0.0.0-experimental-9ed098e-20240725(eslint@8.57.0) + specifier: 0.0.0-experimental-ca16900-20240916 + version: 0.0.0-experimental-ca16900-20240916(eslint@8.57.0) eslint-plugin-storybook: specifier: ^0.8.0 version: 0.8.0(eslint@8.57.0)(typescript@5.6.2) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 4.2.3(next@14.2.12(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) postcss: specifier: 8.4.47 version: 8.4.47 @@ -497,7 +464,7 @@ importers: version: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) typescript: specifier: 5.6.2 version: 5.6.2 @@ -506,43 +473,43 @@ importers: dependencies: '@radix-ui/react-accordion': specifier: ^1.2.0 - version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-checkbox': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: 1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.1 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.0 - version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-radio-group': specifier: ^1.2.0 - version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-select': specifier: ^2.1.1 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.6)(react@18.3.1) + version: 1.1.0(@types/react@18.3.7)(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: 1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': specifier: 5.56.2 version: 5.56.2(react@18.3.1) @@ -556,8 +523,8 @@ importers: specifier: 0.441.0 version: 0.441.0(react@18.3.1) next: - specifier: 14.2.11 - version: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.2.12 + version: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -590,14 +557,11 @@ importers: specifier: 20.14.9 version: 20.14.9 '@types/react': - specifier: ^18.3.6 - version: 18.3.6 + specifier: ^18.3.7 + version: 18.3.7 '@types/react-dom': specifier: ^18 version: 18.3.0 - babel-plugin-react-compiler: - specifier: 0.0.0-experimental-592953e-20240517 - version: 0.0.0-experimental-592953e-20240517 eslint: specifier: 8.57.0 version: 8.57.0 @@ -605,17 +569,17 @@ importers: specifier: 14.2.11 version: 14.2.11(eslint@8.57.0)(typescript@5.6.2) eslint-plugin-react-compiler: - specifier: 0.0.0-experimental-9ed098e-20240725 - version: 0.0.0-experimental-9ed098e-20240725(eslint@8.57.0) + specifier: 0.0.0-experimental-ca16900-20240916 + version: 0.0.0-experimental-ca16900-20240916(eslint@8.57.0) postcss: specifier: 8.4.47 version: 8.4.47 tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) typescript: specifier: 5.6.2 version: 5.6.2 @@ -627,25 +591,25 @@ importers: version: 1.0.0(react@18.3.1) '@mdx-js/loader': specifier: ^2.3.0 - version: 2.3.0(webpack@5.94.0) + version: 2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))) '@mdx-js/react': specifier: ^2.3.0 version: 2.3.0(react@18.3.1) '@next/mdx': specifier: ^13.5.6 - version: 13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0))(@mdx-js/react@2.3.0(react@18.3.1)) + version: 13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))))(@mdx-js/react@2.3.0(react@18.3.1)) '@radix-ui/react-dialog': specifier: 1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.1 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.6)(react@18.3.1) + version: 1.1.0(@types/react@18.3.7)(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': specifier: 5.56.2 version: 5.56.2(react@18.3.1) @@ -674,17 +638,17 @@ importers: specifier: 0.441.0 version: 0.441.0(react@18.3.1) next: - specifier: 14.2.11 - version: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.2.12 + version: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nextjs-toploader: specifier: ^1.6.12 - version: 1.6.12(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.6.12(next@14.2.12(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) node-html-parser: specifier: ^6.1.13 version: 6.1.13 posthog-js: - specifier: 1.161.5 - version: 1.161.5 + specifier: 1.161.6 + version: 1.161.6 prettier: specifier: ^3.3.2 version: 3.3.3 @@ -717,7 +681,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -738,8 +702,8 @@ importers: specifier: 20.14.9 version: 20.14.9 '@types/react': - specifier: ^18.3.6 - version: 18.3.6 + specifier: ^18.3.7 + version: 18.3.7 '@types/react-dom': specifier: ^18 version: 18.3.0 @@ -765,23 +729,23 @@ importers: specifier: 14.2.11 version: 14.2.11(eslint@8.57.0)(typescript@5.6.2) eslint-plugin-mdx: - specifier: ^2.3.4 - version: 2.3.4(eslint@8.57.0) + specifier: ^3.1.5 + version: 3.1.5(eslint@8.57.0) eslint-plugin-svg-jsx: specifier: ^1.2.4 version: 1.2.4 eslint-plugin-tailwindcss: specifier: ^3.15.1 - version: 3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 4.2.3(next@14.2.12(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) postcss: specifier: 8.4.47 version: 8.4.47 tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) tsx: specifier: ^4.19.1 version: 4.19.1 @@ -799,19 +763,19 @@ importers: version: 1.4.0 '@radix-ui/react-dialog': specifier: 1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.0 - version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.6)(react@18.3.1) + version: 1.1.0(@types/react@18.3.7)(react@18.3.1) '@radix-ui/react-toast': specifier: ^1.2.1 - version: 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': specifier: 5.56.2 version: 5.56.2(react@18.3.1) @@ -823,13 +787,13 @@ importers: version: 2.1.1 cmdk: specifier: ^1.0.0 - version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lucide-react: specifier: 0.441.0 version: 0.441.0(react@18.3.1) next: - specifier: 14.2.11 - version: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.2.12 + version: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -850,7 +814,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -865,8 +829,8 @@ importers: specifier: 20.14.9 version: 20.14.9 '@types/react': - specifier: ^18.3.6 - version: 18.3.6 + specifier: ^18.3.7 + version: 18.3.7 '@types/react-dom': specifier: ^18 version: 18.3.0 @@ -881,7 +845,7 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.11 - version: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) typescript: specifier: 5.6.2 version: 5.6.2 @@ -896,25 +860,25 @@ importers: version: 3.651.1(@aws-sdk/client-sso-oidc@3.651.1(@aws-sdk/client-sts@3.651.1)) '@coinbase/wallet-mobile-sdk': specifier: ^1 - version: 1.0.13(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + version: 1.0.13(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) '@mobile-wallet-protocol/client': specifier: 0.0.3 - version: 0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) '@react-native-async-storage/async-storage': specifier: ^1 || ^2 - version: 1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + version: 1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@react-native-community/netinfo': specifier: ^11 - version: 11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + version: 11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@walletconnect/react-native-compat': specifier: 2.13.2 - version: 2.13.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@react-native-community/netinfo@11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-application@5.9.1(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + version: 2.13.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@react-native-community/netinfo@11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-application@5.9.1(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) amazon-cognito-identity-js: specifier: ^6 version: 6.3.12 aws-amplify: specifier: 5.3.19 - version: 5.3.19(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + version: 5.3.19(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) expo-application: specifier: ^5 version: 5.9.1(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)) @@ -926,19 +890,19 @@ importers: version: 13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)) react-native: specifier: '>=0.70' - version: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + version: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) react-native-aes-gcm-crypto: specifier: ^0.2 - version: 0.2.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.2.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) react-native-get-random-values: specifier: ^1 - version: 1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + version: 1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) react-native-quick-crypto: specifier: '>=0.7.0-rc.6 || >=0.7' - version: 0.7.4(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.7.4(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) react-native-svg: specifier: ^15 - version: 15.6.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + version: 15.6.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) typescript: specifier: '>=5.0.4' version: 5.5.4 @@ -953,14 +917,8 @@ importers: version: 3.23.8 devDependencies: '@cloudflare/workers-types': - specifier: 4.20240405.0 - version: 4.20240405.0 - '@preconstruct/cli': - specifier: 2.7.0 - version: 2.7.0 - '@thirdweb-dev/tsconfig': - specifier: workspace:* - version: link:../tw-tsconfig + specifier: 4.20240909.0 + version: 4.20240909.0 '@types/node': specifier: 20.14.9 version: 20.14.9 @@ -975,10 +933,10 @@ importers: version: 4.0.4 '@emotion/react': specifier: 11.13.3 - version: 11.13.3(@types/react@18.3.6)(react@18.3.1) + version: 11.13.3(@types/react@18.3.7)(react@18.3.1) '@emotion/styled': specifier: 11.13.0 - version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1) + version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) '@google/model-viewer': specifier: 2.1.1 version: 2.1.1 @@ -993,25 +951,25 @@ importers: version: 1.6.2 '@radix-ui/react-dialog': specifier: 1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-scope': specifier: 1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-icons': specifier: 1.3.0 version: 1.3.0(react@18.3.1) '@radix-ui/react-tooltip': specifier: 1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': specifier: 5.56.2 version: 5.56.2(react@18.3.1) '@walletconnect/ethereum-provider': - specifier: 2.16.1 - version: 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(@types/react@18.3.6)(bufferutil@4.0.8)(ioredis@5.4.1)(react@18.3.1)(utf-8-validate@5.0.10) + specifier: 2.16.2 + version: 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(@types/react@18.3.7)(bufferutil@4.0.8)(ioredis@5.4.1)(react@18.3.1)(utf-8-validate@5.0.10) '@walletconnect/sign-client': - specifier: 2.16.1 - version: 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) + specifier: 2.16.2 + version: 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) abitype: specifier: 1.0.5 version: 1.0.5(typescript@5.6.2)(zod@3.23.8) @@ -1040,8 +998,8 @@ importers: specifier: 0.1.2 version: 0.1.2 viem: - specifier: 2.21.7 - version: 2.21.7(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) + specifier: 2.21.9 + version: 2.21.9(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) devDependencies: '@aws-sdk/client-lambda': specifier: 3.651.1 @@ -1054,16 +1012,16 @@ importers: version: 2.0.2(react@18.3.1) '@codspeed/vitest-plugin': specifier: 3.1.1 - version: 3.1.1(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))(vitest@2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@14.12.3)(msw@2.4.7(typescript@5.6.2))(terser@5.32.0)) + version: 3.1.1(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))(vitest@2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.7(typescript@5.6.2))(terser@5.33.0)) '@coinbase/wallet-mobile-sdk': specifier: 1.1.2 - version: 1.1.2(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + version: 1.1.2(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) '@mobile-wallet-protocol/client': specifier: 0.0.3 - version: 0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) '@react-native-async-storage/async-storage': specifier: 1.24.0 - version: 1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + version: 1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@storybook/addon-essentials': specifier: 8.3.1 version: 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-sources@3.2.3) @@ -1084,7 +1042,7 @@ importers: version: 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) '@storybook/react-vite': specifier: 8.3.0 - version: 8.3.0(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.21.3)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))(webpack-sources@3.2.3) + version: 8.3.0(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.21.3)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))(webpack-sources@3.2.3) '@storybook/test': specifier: 8.3.1 version: 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) @@ -1093,7 +1051,7 @@ importers: version: 6.5.0 '@testing-library/react': specifier: ^16.0.0 - version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/user-event': specifier: ^14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) @@ -1101,11 +1059,11 @@ importers: specifier: ^6.0.6 version: 6.0.6 '@types/react': - specifier: ^18.3.6 - version: 18.3.6 + specifier: ^18.3.7 + version: 18.3.7 '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.1(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0)) + version: 4.3.1(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0)) '@vitest/ui': specifier: 2.1.1 version: 2.1.1(vitest@2.1.1) @@ -1114,7 +1072,7 @@ importers: version: 6.3.12 aws-amplify: specifier: 5.3.19 - version: 5.3.19(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + version: 5.3.19(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) cross-spawn: specifier: 7.0.3 version: 7.0.3 @@ -1131,26 +1089,26 @@ importers: specifier: 13.0.3 version: 13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)) happy-dom: - specifier: ^14.12.0 - version: 14.12.3 + specifier: ^15.7.4 + version: 15.7.4 msw: specifier: 2.4.7 version: 2.4.7(typescript@5.6.2) react-native: specifier: 0.75.3 - version: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + version: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) react-native-aes-gcm-crypto: specifier: 0.2.2 - version: 0.2.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.2.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) react-native-passkey: specifier: 3.0.0-beta2 - version: 3.0.0-beta2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + version: 3.0.0-beta2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) react-native-quick-crypto: specifier: 0.7.4 - version: 0.7.4(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.7.4(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) react-native-svg: - specifier: 15.6.0 - version: 15.6.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + specifier: 15.7.1 + version: 15.7.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) storybook: specifier: 8.3.1 version: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -1159,9 +1117,7 @@ importers: version: 5.6.2 vite: specifier: 5.4.5 - version: 5.4.5(@types/node@22.5.5)(terser@5.32.0) - - packages/tw-tsconfig: {} + version: 5.4.5(@types/node@22.5.5)(terser@5.33.0) packages/typedoc-gen: dependencies: @@ -1169,9 +1125,9 @@ importers: specifier: 0.26.7 version: 0.26.7(typescript@5.6.2) devDependencies: - tsup: - specifier: 8.2.4 - version: 8.2.4(@microsoft/api-extractor@7.47.9(@types/node@20.14.9))(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2)(yaml@2.5.1) + typescript: + specifier: 5.6.2 + version: 5.6.2 packages: @@ -2746,10 +2702,6 @@ packages: resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.5': - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} @@ -3371,8 +3323,8 @@ packages: resolution: {integrity: sha512-7bPIliISedeIpnVKbzktysFYW5n56bN91kxuOj1XXKixmjbUHRUMvcXd4K2liN6MiR5ZqJtmtcPsZ6CebbGlEA==} engines: {node: '>=16.0.0', yarn: '>=1.22.18'} - '@cloudflare/workers-types@4.20240405.0': - resolution: {integrity: sha512-sEVOhyOgXUwfLkgHqbLZa/sfkSYrh7/zLmI6EZNibPaVPvAnAcItbNNl3SAlLyLKuwf8m4wAIAgu9meKWCvXjg==} + '@cloudflare/workers-types@4.20240909.0': + resolution: {integrity: sha512-4knwtX6efxIsIxawdmPyynU9+S8A78wntU8eUIEldStWP4gNgxGkeWcfCMXulTx8oxr3DU4aevHyld9HGV8VKQ==} '@codspeed/core@3.1.1': resolution: {integrity: sha512-ONhERVDAtkm0nc+FYPivDozoMOlNUP2BWRBFDJYATGA18Iap5Kd2mZ1/Lwz54RB5+g+3YDOpsvotHa4hd3Q+7Q==} @@ -3915,34 +3867,14 @@ packages: resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.18.0': - resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.0': resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.10.0': - resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.1.0': - resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ethersproject/abi@5.7.0': resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} @@ -4162,10 +4094,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} - engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -4358,9 +4286,6 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -4421,19 +4346,6 @@ packages: '@metamask/safe-event-emitter@2.0.0': resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} - '@microsoft/api-extractor-model@7.29.8': - resolution: {integrity: sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==} - - '@microsoft/api-extractor@7.47.9': - resolution: {integrity: sha512-TTq30M1rikVsO5wZVToQT/dGyJY7UXJmjiRtkHPLb74Prx3Etw8+bX7Bv7iLuby6ysb7fuu1NFWqma+csym8Jw==} - hasBin: true - - '@microsoft/tsdoc-config@0.17.0': - resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} - - '@microsoft/tsdoc@0.15.0': - resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} - '@mobile-wallet-protocol/client@0.0.3': resolution: {integrity: sha512-t6tu32ah205C/lRo2RyApsK2LxVESWzABfu3M9fEIkx6dF8bAaCLUKlakgLPesy7uuMXCe/xy8doON8Xa/ceKw==} peerDependencies: @@ -4449,26 +4361,26 @@ packages: '@molt/types@0.2.0': resolution: {integrity: sha512-p6ChnEZDGjg9PYPec9BK6Yp5/DdSrYQvXTBAtgrnqX6N36cZy37ql1c8Tc5LclfIYBNG7EZp8NBcRTYJwyi84g==} - '@motionone/animation@10.17.0': - resolution: {integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg==} + '@motionone/animation@10.18.0': + resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} - '@motionone/dom@10.17.0': - resolution: {integrity: sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q==} + '@motionone/dom@10.18.0': + resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} - '@motionone/easing@10.17.0': - resolution: {integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg==} + '@motionone/easing@10.18.0': + resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} - '@motionone/generators@10.17.0': - resolution: {integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ==} + '@motionone/generators@10.18.0': + resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} '@motionone/svelte@10.16.4': resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} - '@motionone/types@10.17.0': - resolution: {integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA==} + '@motionone/types@10.17.1': + resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} - '@motionone/utils@10.17.0': - resolution: {integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg==} + '@motionone/utils@10.18.0': + resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} '@motionone/vue@10.16.4': resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} @@ -4484,18 +4396,21 @@ packages: '@types/react': '*' react: '*' - '@next/bundle-analyzer@14.2.11': - resolution: {integrity: sha512-wFPjuXVlLkheng8BTG/K8UN8lRg93E5ZdE9gSmxpRP0XwC58w1B8wITXWeTD/Js4ObxyhxhiCrZzt2X+QJrrMw==} + '@next/bundle-analyzer@14.2.12': + resolution: {integrity: sha512-X0ipzQcl3LoNErGnQKOI1dC1hu+FzltaogDuZAhkchuFi/1G+WnFJUVK5VBqXmXzRJPhpTxMfI4ZdTJjAl9Tmw==} '@next/env@13.5.6': resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==} - '@next/env@14.2.11': - resolution: {integrity: sha512-HYsQRSIXwiNqvzzYThrBwq6RhXo3E0n8j8nQnAs8i4fCEo2Zf/3eS0IiRA8XnRg9Ha0YnpkyJZIZg1qEwemrHw==} + '@next/env@14.2.12': + resolution: {integrity: sha512-3fP29GIetdwVIfIRyLKM7KrvJaqepv+6pVodEbx0P5CaMLYBtx+7eEg8JYO5L9sveJO87z9eCReceZLi0hxO1Q==} '@next/eslint-plugin-next@14.2.11': resolution: {integrity: sha512-7mw+xW7Y03Ph4NTCcAzYe+vu4BNjEHZUfZayyF3Y1D9RX6c5NIe25m1grHEAkyUuaqjRxOYhnCNeglOkIqLkBA==} + '@next/eslint-plugin-next@14.2.12': + resolution: {integrity: sha512-cPrKbXtK8NTThOOFNxRGGTw+5s02Ek8z8ri/hZqeKs6uP8LOTGqFyBy6hpCXt7TvLzzriWiiwRyD4h0XYmPEEg==} + '@next/mdx@13.5.6': resolution: {integrity: sha512-2AMyCrz1SxSWNUpADyLz3RbPbq0GHrchbO7Msvg7IsH8MrTw3VYaZSI1KNa6JzZIoykwtNVSEL+uBmPZi106Jw==} peerDependencies: @@ -4507,56 +4422,56 @@ packages: '@mdx-js/react': optional: true - '@next/swc-darwin-arm64@14.2.11': - resolution: {integrity: sha512-eiY9u7wEJZWp/Pga07Qy3ZmNEfALmmSS1HtsJF3y1QEyaExu7boENz11fWqDmZ3uvcyAxCMhTrA1jfVxITQW8g==} + '@next/swc-darwin-arm64@14.2.12': + resolution: {integrity: sha512-crHJ9UoinXeFbHYNok6VZqjKnd8rTd7K3Z2zpyzF1ch7vVNKmhjv/V7EHxep3ILoN8JB9AdRn/EtVVyG9AkCXw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.11': - resolution: {integrity: sha512-lnB0zYCld4yE0IX3ANrVMmtAbziBb7MYekcmR6iE9bujmgERl6+FK+b0MBq0pl304lYe7zO4yxJus9H/Af8jbg==} + '@next/swc-darwin-x64@14.2.12': + resolution: {integrity: sha512-JbEaGbWq18BuNBO+lCtKfxl563Uw9oy2TodnN2ioX00u7V1uzrsSUcg3Ep9ce+P0Z9es+JmsvL2/rLphz+Frcw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.11': - resolution: {integrity: sha512-Ulo9TZVocYmUAtzvZ7FfldtwUoQY0+9z3BiXZCLSUwU2bp7GqHA7/bqrfsArDlUb2xeGwn3ZuBbKtNK8TR0A8w==} + '@next/swc-linux-arm64-gnu@14.2.12': + resolution: {integrity: sha512-qBy7OiXOqZrdp88QEl2H4fWalMGnSCrr1agT/AVDndlyw2YJQA89f3ttR/AkEIP9EkBXXeGl6cC72/EZT5r6rw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.11': - resolution: {integrity: sha512-fH377DnKGyUnkWlmUpFF1T90m0dADBfK11dF8sOQkiELF9M+YwDRCGe8ZyDzvQcUd20Rr5U7vpZRrAxKwd3Rzg==} + '@next/swc-linux-arm64-musl@14.2.12': + resolution: {integrity: sha512-EfD9L7o9biaQxjwP1uWXnk3vYZi64NVcKUN83hpVkKocB7ogJfyH2r7o1pPnMtir6gHZiGCeHKagJ0yrNSLNHw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.11': - resolution: {integrity: sha512-a0TH4ZZp4NS0LgXP/488kgvWelNpwfgGTUCDXVhPGH6pInb7yIYNgM4kmNWOxBFt+TIuOH6Pi9NnGG4XWFUyXQ==} + '@next/swc-linux-x64-gnu@14.2.12': + resolution: {integrity: sha512-iQ+n2pxklJew9IpE47hE/VgjmljlHqtcD5UhZVeHICTPbLyrgPehaKf2wLRNjYH75udroBNCgrSSVSVpAbNoYw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.11': - resolution: {integrity: sha512-DYYZcO4Uir2gZxA4D2JcOAKVs8ZxbOFYPpXSVIgeoQbREbeEHxysVsg3nY4FrQy51e5opxt5mOHl/LzIyZBoKA==} + '@next/swc-linux-x64-musl@14.2.12': + resolution: {integrity: sha512-rFkUkNwcQ0ODn7cxvcVdpHlcOpYxMeyMfkJuzaT74xjAa5v4fxP4xDk5OoYmPi8QNLDs3UgZPMSBmpBuv9zKWA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.11': - resolution: {integrity: sha512-PwqHeKG3/kKfPpM6of1B9UJ+Er6ySUy59PeFu0Un0LBzJTRKKAg2V6J60Yqzp99m55mLa+YTbU6xj61ImTv9mg==} + '@next/swc-win32-arm64-msvc@14.2.12': + resolution: {integrity: sha512-PQFYUvwtHs/u0K85SG4sAdDXYIPXpETf9mcEjWc0R4JmjgMKSDwIU/qfZdavtP6MPNiMjuKGXHCtyhR/M5zo8g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.11': - resolution: {integrity: sha512-0U7PWMnOYIvM74GY6rbH6w7v+vNPDVH1gUhlwHpfInJnNe5LkmUZqhp7FNWeNa5wbVgRcRi1F1cyxp4dmeLLvA==} + '@next/swc-win32-ia32-msvc@14.2.12': + resolution: {integrity: sha512-FAj2hMlcbeCV546eU2tEv41dcJb4NeqFlSXU/xL/0ehXywHnNpaYajOUvn3P8wru5WyQe6cTZ8fvckj/2XN4Vw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.2.11': - resolution: {integrity: sha512-gQpS7mcgovWoaTG1FbS5/ojF7CGfql1Q0ZLsMrhcsi2Sr9HEqsUZ70MPJyaYBXbk6iEAP7UXMD9HC8KY1qNwvA==} + '@next/swc-win32-x64-msvc@14.2.12': + resolution: {integrity: sha512-yu8QvV53sBzoIVRHsxCHqeuS8jYq6Lrmdh0briivuh+Brsp6xjg80MAozUsBTAV9KNmY08KlX0KYTWz1lbPzEg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4602,14 +4517,18 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@npmcli/config@6.4.1': - resolution: {integrity: sha512-uSz+elSGzjCMANWa5IlbGczLYPkNI/LeR+cHrgaTqTrTSh9RHhOFA4daD2eRUz6lMtOW+Fnsb+qv7V2Zz8ML0g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/config@8.3.4': + resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} + engines: {node: ^16.14.0 || >=18.0.0} '@npmcli/fs@3.1.1': resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/git@5.0.8': + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} + '@npmcli/map-workspaces@3.0.6': resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4618,6 +4537,14 @@ packages: resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/package-json@5.2.1': + resolution: {integrity: sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/promise-spawn@7.0.2': + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + '@oclif/color@1.0.13': resolution: {integrity: sha512-/2WZxKCNjeHlQogCs1VBtJWlPXjwWke/9gMrwsVsrUt00g2V6LUBvwgwrxhrXepjOmq4IZ5QeNbpDMEOUlx/JA==} engines: {node: '>=12.0.0'} @@ -4985,19 +4912,12 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} - '@polka/url@1.0.0-next.25': - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + '@polka/url@1.0.0-next.27': + resolution: {integrity: sha512-MU0SYgcrBdSVLu7Tfow3VY4z1odzlaTYRjt3WQ0z8XbjDWReuy+EALt2HdjhrwD2HPiW2GY+KTSw4HLv4C/EOA==} '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@preconstruct/cli@2.7.0': - resolution: {integrity: sha512-reluhXnOCPYhltV9wZZe07v9Eir6+9HiwQtdsUgvmm6UndtDr1kRr2jtObnDtXTjt7LEpU4+TD43+3+Tu7Qebw==} - hasBin: true - - '@preconstruct/hook@0.4.0': - resolution: {integrity: sha512-a7mrlPTM3tAFJyz43qb4pPVpUx8j8TzZBFsNFqcKcE/sEakNXRlQAuCT4RGZRf9dQiiUnBahzSIWawU4rENl+Q==} - '@prisma/instrumentation@5.19.1': resolution: {integrity: sha512-VLnzMQq7CWroL5AeaW0Py2huiNKeoMfCH3SUxstdzPrlWQi6UQ9UrfcbUkNHlVFqOMacqy8X/8YtE0kuKDpD9w==} @@ -5882,18 +5802,6 @@ packages: resolution: {integrity: sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==} engines: {node: '>=14.15'} - '@rollup/plugin-alias@3.1.9': - resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} - engines: {node: '>=8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - - '@rollup/plugin-commonjs@15.1.0': - resolution: {integrity: sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^2.22.0 - '@rollup/plugin-commonjs@26.0.1': resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} engines: {node: '>=16.0.0 || 14 >= 14.17'} @@ -5903,28 +5811,6 @@ packages: rollup: optional: true - '@rollup/plugin-json@4.1.0': - resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - - '@rollup/plugin-node-resolve@11.2.1': - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - - '@rollup/plugin-replace@2.4.2': - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - - '@rollup/pluginutils@3.1.0': - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -5934,161 +5820,81 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.21.2': - resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.21.3': resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.21.2': - resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.21.3': resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.21.2': - resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.21.3': resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.2': - resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.21.3': resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.21.2': - resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.21.3': resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.2': - resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.3': resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.2': - resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.3': resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.2': - resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.3': resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': - resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.2': - resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.3': resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.2': - resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.3': resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.2': - resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.3': resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.2': - resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.3': resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.21.2': - resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.21.3': resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.2': - resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.3': resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.2': - resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.3': resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==} cpu: [x64] @@ -6100,30 +5906,8 @@ packages: '@rushstack/eslint-patch@1.10.4': resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} - '@rushstack/node-core-library@5.9.0': - resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/rig-package@0.5.3': - resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - - '@rushstack/terminal@0.14.2': - resolution: {integrity: sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/ts-command-line@4.22.8': - resolution: {integrity: sha512-XbFjOoV7qZHJnSuFUHv0pKaFA4ixyCuki+xMjsMfDwfvQjs5MYG0IK5COal3tRnG7KCDe2l/G+9LrzYE/RJhgg==} - - '@scure/base@1.1.8': - resolution: {integrity: sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg==} + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} '@scure/bip32@1.4.0': resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} @@ -7092,9 +6876,6 @@ packages: '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - '@types/argparse@1.0.38': - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -7116,8 +6897,8 @@ packages: '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - '@types/bun@1.1.8': - resolution: {integrity: sha512-PIwVFQKPviksiibobyvcWtMvMFMTj91T8dQEh9l1P3Ypr3ZuVn9w7HSr+5mTNrPqD1xpdDLEErzZPU8gqHBu6g==} + '@types/bun@1.1.9': + resolution: {integrity: sha512-SXJRejXpmAc3qxyN/YS4/JGWEzLf4dDBa5fLtRDipQXHqNccuMU4EUYCooXNTsylG0DmwFQsGgEDHxZF+3DqRw==} '@types/cli-progress@3.11.5': resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} @@ -7191,21 +6972,18 @@ packages: '@types/escodegen@0.0.6': resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@0.0.39': - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - '@types/estree@0.0.51': resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/express-serve-static-core@4.19.5': resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} @@ -7284,9 +7062,6 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -7320,9 +7095,6 @@ packages: '@types/node@22.5.5': resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/papaparse@5.3.14': resolution: {integrity: sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g==} @@ -7368,11 +7140,8 @@ packages: '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - '@types/react@18.3.6': - resolution: {integrity: sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==} - - '@types/resolve@1.17.1': - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + '@types/react@18.3.7': + resolution: {integrity: sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -7676,15 +7445,15 @@ packages: '@vitest/utils@2.1.1': resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} - '@walletconnect/core@2.16.1': - resolution: {integrity: sha512-UlsnEMT5wwFvmxEjX8s4oju7R3zadxNbZgsFeHEsjh7uknY2zgmUe1Lfc5XU6zyPb1Jx7Nqpdx1KN485ee8ogw==} + '@walletconnect/core@2.16.2': + resolution: {integrity: sha512-Xf1SqLSB8KffNsgUGDE/CguAcKMD+3EKfqfqNhWpimxe1QDZDUw8xq+nnxfx6MAb8fdx9GYe6Lvknx2SAAeAHw==} engines: {node: '>=18'} '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} - '@walletconnect/ethereum-provider@2.16.1': - resolution: {integrity: sha512-oD7DNCssUX3plS5gGUZ9JQ63muQB/vxO68X6RzD2wd8gBsYtSPw4BqYFc7KTO6dUizD6gfPirw32yW2pTvy92w==} + '@walletconnect/ethereum-provider@2.16.2': + resolution: {integrity: sha512-ubIevPEhW27dkmnU//E8qBOc7s8A4CyFJWc2bgwPEEDGQxw/LJPuEJQ+H5MPuhsui7+utVULNMoM693LLVHi7g==} '@walletconnect/events@1.0.1': resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -7747,20 +7516,20 @@ packages: '@walletconnect/safe-json@1.0.2': resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} - '@walletconnect/sign-client@2.16.1': - resolution: {integrity: sha512-s2Tx2n2duxt+sHtuWXrN9yZVaHaYqcEcjwlTD+55/vs5NUPlISf+fFmZLwSeX1kUlrSBrAuxPUcqQuRTKcjLOA==} + '@walletconnect/sign-client@2.16.2': + resolution: {integrity: sha512-R/hk2P3UN5u3FV22E7h9S/Oy8IbDwaBGH7St/BzOpJCjFmf6CF5S3GZVjrXPBesvRF94CROkqMF89wz5HkZepA==} '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} - '@walletconnect/types@2.16.1': - resolution: {integrity: sha512-9P4RG4VoDEF+yBF/n2TF12gsvT/aTaeZTVDb/AOayafqiPnmrQZMKmNCJJjq1sfdsDcHXFcZWMGsuCeSJCmrXA==} + '@walletconnect/types@2.16.2': + resolution: {integrity: sha512-IIV9kQh6b/WpwhfgPixpziE+8XK/FtdnfvN1oOMs5h+lgwr46OJknPY2p7eS6vvdvEP3xMEc1Kbu1i4tlnroiw==} - '@walletconnect/universal-provider@2.16.1': - resolution: {integrity: sha512-q/tyWUVNenizuClEiaekx9FZj/STU1F3wpDK4PUIh3xh+OmUI5fw2dY3MaNDjyb5AyrS0M8BuQDeuoSuOR/Q7w==} + '@walletconnect/universal-provider@2.16.2': + resolution: {integrity: sha512-2kUywHZmkFuhflcQQgoJzy6DS7/zmitgiStyG2slXJAeItT36xXVrasoLFjRZ4fZZCavq6lkrAXCd2Tk6/pa3A==} - '@walletconnect/utils@2.16.1': - resolution: {integrity: sha512-aoQirVoDoiiEtYeYDtNtQxFzwO/oCrz9zqeEEXYJaAwXlGVTS34KFe7W3/Rxd/pldTYKFOZsku2EzpISfH8Wsw==} + '@walletconnect/utils@2.16.2': + resolution: {integrity: sha512-CEMxMCIqvwXd8YIEXfBoCiWY8DtUevJ/w14Si+cmTHWHBDWKRZll7+QUXgICIBx5kyX3GMAKNABaTlg2A2CPSg==} '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -7884,8 +7653,8 @@ packages: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} acorn@7.4.1: @@ -7925,14 +7694,6 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -7941,14 +7702,6 @@ packages: ajv: optional: true - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -7962,12 +7715,6 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - - ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} - ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -8119,10 +7866,6 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -8258,8 +8001,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517: - resolution: {integrity: sha512-OjG1SVaeQZaJrqkMFJatg8W/MTow8Ak5rx2SI0ETQBO1XvOk/XZGMbltNCPdFJLKghBYoBjC+Y3Ap/Xr7B01mA==} + babel-plugin-react-compiler@0.0.0-experimental-ca8e0be-20240916: + resolution: {integrity: sha512-S/fMyIedoXdIVEleWMctmllsjXIDQwGiB8Z5v12L+lGKJ7n28K/8aFzVFcDpICnIIP3tXuAo0rF1bfn0MYb7YQ==} babel-plugin-react-native-web@0.19.12: resolution: {integrity: sha512-eYZ4+P6jNcB37lObWIg0pUbi7+3PKoU1Oie2j0C8UF3cXyXoR74tO2NBjI/FORb2LJyItJZEAmjU5pSaJYEL1w==} @@ -8434,24 +8177,14 @@ packages: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} - bun-types@1.1.26: - resolution: {integrity: sha512-n7jDe62LsB2+WE8Q8/mT3azkPaatKlj/2MyP6hi3mKvPz9oPpB6JW/Ll6JHtNLudasFFuvfgklYSE+rreGvBjw==} - - bundle-require@5.0.0: - resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' + bun-types@1.1.27: + resolution: {integrity: sha512-rHXAiIDefeMS/fleNM1rRDYqolJGNRdch3+AuCRwcZWaqTa1vjGBNsahH/HVV7Y82frllYhJomCVSEiHzLzkgg==} busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -8530,6 +8263,9 @@ packages: caniuse-lite@1.0.30001657: resolution: {integrity: sha512-DPbJAlP8/BAXy3IgiWmZKItubb3TYGP0WscQQlVGIfT4s/YlFYVuJgyOsQNP7rJRChx/qdMeLJQJP0Sgg2yjNA==} + caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true @@ -8918,8 +8654,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-es@1.1.0: - resolution: {integrity: sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw==} + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -9138,9 +8874,6 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - dataloader@2.2.2: - resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} - date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} @@ -9206,10 +8939,6 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -9491,6 +9220,9 @@ packages: emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -9552,6 +9284,9 @@ packages: eol@0.9.1: resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -9663,12 +9398,6 @@ packages: typescript: optional: true - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: 8.57.0 - eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -9685,9 +9414,9 @@ packages: eslint-plugin-import-x: optional: true - eslint-mdx@2.3.4: - resolution: {integrity: sha512-u4NszEUyoGtR7Q0A4qs0OymsEQdCO6yqWlTzDa9vGWsK7aMotdnW0hqifHTkf6lEtA2vHk2xlkWHTCrhYLyRbw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + eslint-mdx@3.1.5: + resolution: {integrity: sha512-ynztX0k7CQ3iDL7fDEIeg3g0O/d6QPv7IBI9fdYLhXp5fAp0fi8X22xF/D3+Pk0f90R27uwqa1clHpay6t0l8Q==} + engines: {node: '>=18.0.0'} peerDependencies: eslint: 8.57.0 @@ -9733,10 +9462,6 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-i18next@6.1.0: - resolution: {integrity: sha512-upFtY6JyrJk8+nKp7utxlYyq5PMo/+FdgJIXpA29QdAaGR1whVmybUz2F5W+0TQYqIirekq4cSwWlej/ealBuA==} - engines: {node: '>=0.10.0'} - eslint-plugin-import@2.30.0: resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} engines: {node: '>=4'} @@ -9747,9 +9472,6 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-inclusive-language@2.2.1: - resolution: {integrity: sha512-RL6avDWXCS0Dcp9axhvHRUp65qG07qjOrh6J4BNNahPvRY3PuYGnAd0H1strZ9cob79JiEW4Bq0j3gEuzbv0/A==} - eslint-plugin-jsx-a11y@6.10.0: resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} engines: {node: '>=4.0'} @@ -9762,34 +9484,14 @@ packages: peerDependencies: eslint: 8.57.0 - eslint-plugin-mdx@2.3.4: - resolution: {integrity: sha512-kr6tgaifKL+AVGYMtdYc2VCsIjfYQXuUCKz4rK58d2DpnPFHrmgXIOC7NcMvaEld+VOEpxBSCCnjnsf4IVCQGg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: 8.57.0 - - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: 8.57.0 - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-promise@6.6.0: - resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-plugin-mdx@3.1.5: + resolution: {integrity: sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==} + engines: {node: '>=18.0.0'} peerDependencies: eslint: 8.57.0 - eslint-plugin-react-compiler@0.0.0-experimental-9ed098e-20240725: - resolution: {integrity: sha512-Xv2iD8kU6R4Wdjdh1WhdP8UnSqSV+/XcadxwBCmMr836fQUoXGuw/uVGc01v9opZs9SwKzo+8My6ayVCgAinPA==} + eslint-plugin-react-compiler@0.0.0-experimental-ca16900-20240916: + resolution: {integrity: sha512-T3iL6Veei4EMNdBtn9p/kUDlXFZAXVQ0scfF1hOjJE88Lmlg7f1zHRAcGQ4Z6ClVPnOikZ1/yGNB4l/ui47Anw==} engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} peerDependencies: eslint: 8.57.0 @@ -9822,9 +9524,6 @@ packages: peerDependencies: tailwindcss: ^3.4.0 - eslint-plugin-tsdoc@0.3.0: - resolution: {integrity: sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==} - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -9833,37 +9532,15 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.0.2: - resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true - eslint@9.10.0: - resolution: {integrity: sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9877,10 +9554,6 @@ packages: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -9916,8 +9589,8 @@ packages: estree-util-visit@1.2.1: resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} - estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -10062,15 +9735,9 @@ packages: fast-base64-decode@1.0.0: resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==} - fast-deep-equal@2.0.1: - resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-equals@5.0.1: resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} engines: {node: '>=6.0.0'} @@ -10132,9 +9799,6 @@ packages: fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -10174,10 +9838,6 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - file-selector@0.6.0: resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} engines: {node: '>= 12'} @@ -10251,10 +9911,6 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - flat@6.0.1: resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==} engines: {node: '>=18'} @@ -10306,6 +9962,10 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + fork-ts-checker-webpack-plugin@8.0.0: resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} @@ -10501,10 +10161,6 @@ packages: github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - glob-base@0.3.0: - resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==} - engines: {node: '>=0.10.0'} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -10549,11 +10205,6 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} @@ -10566,10 +10217,6 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -10628,21 +10275,13 @@ packages: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} - h3@1.11.1: - resolution: {integrity: sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==} - - happy-dom@14.12.3: - resolution: {integrity: sha512-vsYlEs3E9gLwA1Hp+w3qzu+RUDFf4VTT8cyKqVICoZ2k7WM++Qyd2LwzyTi5bqMJFiIC/vNpTDYuxdreENRK/g==} - engines: {node: '>=16.0.0'} + h3@1.12.0: + resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==} happy-dom@15.7.4: resolution: {integrity: sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==} engines: {node: '>=18.0.0'} - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -10764,9 +10403,6 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hosted-git-info@3.0.8: resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==} engines: {node: '>=10'} @@ -10867,9 +10503,6 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - humps@2.0.1: - resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} - hyperlinker@1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} @@ -10927,12 +10560,8 @@ packages: import-in-the-middle@1.11.0: resolution: {integrity: sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q==} - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - - import-meta-resolve@2.2.2: - resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -11072,10 +10701,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} @@ -11108,10 +10733,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - is-dotfile@1.0.3: - resolution: {integrity: sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==} - engines: {node: '>=0.10.0'} - is-empty@1.2.0: resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} @@ -11169,9 +10790,6 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-nan@1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} @@ -11203,10 +10821,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -11396,10 +11010,6 @@ packages: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -11424,10 +11034,6 @@ packages: join-component@1.1.0: resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} @@ -11671,12 +11277,8 @@ packages: lit@2.8.0: resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} - load-plugin@5.1.0: - resolution: {integrity: sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + load-plugin@6.0.3: + resolution: {integrity: sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==} loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} @@ -11733,9 +11335,6 @@ packages: lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -11830,16 +11429,10 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} @@ -11868,10 +11461,6 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} @@ -11981,15 +11570,24 @@ packages: mdast-util-mdx-expression@2.0.0: resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} mdast-util-mdx-jsx@3.1.2: resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} + mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} @@ -12053,10 +11651,6 @@ packages: memory-cache@0.2.0: resolution: {integrity: sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==} - meow@7.1.1: - resolution: {integrity: sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==} - engines: {node: '>=10'} - merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -12184,18 +11778,33 @@ packages: micromark-extension-mdx-expression@1.0.8: resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + micromark-extension-mdx-jsx@1.0.5: resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + micromark-extension-mdx-jsx@3.0.1: + resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + micromark-extension-mdx-md@1.0.1: resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + micromark-extension-mdxjs-esm@1.0.5: resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + micromark-factory-destination@1.1.0: resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} @@ -12211,6 +11820,9 @@ packages: micromark-factory-mdx-expression@1.0.9: resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + micromark-factory-mdx-expression@2.0.2: + resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==} + micromark-factory-space@1.1.0: resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} @@ -12274,6 +11886,9 @@ packages: micromark-util-events-to-acorn@1.2.3: resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + micromark-util-events-to-acorn@2.0.2: + resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} @@ -12402,9 +12017,6 @@ packages: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} - minimatch@3.0.8: - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -12424,10 +12036,6 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -12493,8 +12101,8 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.0: - resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} + mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} @@ -12623,8 +12231,8 @@ packages: react: ^16.8 || ^17 || ^18 react-dom: ^16.8 || ^17 || ^18 - next@14.2.11: - resolution: {integrity: sha512-8MDFqHBhdmR2wdfaWc8+lW3A/hppFe1ggQ9vgIu/g2/2QEMYJrPoQP6b+VNk56gIug/bStysAmrpUKtj3XN8Bw==} + next@14.2.12: + resolution: {integrity: sha512-cDOtUSIeoOvt1skKNihdExWMTybx3exnvbFbb9ecZDIxlvIbREQzt9A5Km3Zn3PfU+IFjyYGsHS+lN9VInAGKA==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -12668,9 +12276,8 @@ packages: node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} - node-addon-api@7.1.0: - resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} - engines: {node: ^16 || ^18 || >= 20} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} node-dir@0.1.17: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} @@ -12731,8 +12338,9 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -12749,6 +12357,10 @@ packages: npm-bundled@1.1.2: resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-normalize-package-bin@1.0.1: resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} @@ -12768,6 +12380,10 @@ packages: engines: {node: '>=10'} hasBin: true + npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} + npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} @@ -12924,8 +12540,8 @@ packages: ofetch@1.3.4: resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} - ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + ohash@1.1.4: + resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} @@ -13136,10 +12752,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - parse-glob@3.0.4: - resolution: {integrity: sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==} - engines: {node: '>=0.10.0'} - parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -13148,9 +12760,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-json@6.0.2: - resolution: {integrity: sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} @@ -13305,8 +12917,8 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} - pkg-types@1.1.1: - resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} + pkg-types@1.2.0: + resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} @@ -13374,24 +12986,6 @@ 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'} @@ -13470,8 +13064,8 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - posthog-js@1.161.5: - resolution: {integrity: sha512-KGkb12grSQvGRauH6z+AUB83c4dgWqzmJFDjyMXarWRafaLN80HzjN1jk806x27HvdDXi21jtwiXekioWzEQ9g==} + posthog-js@1.161.6: + resolution: {integrity: sha512-UO0z/YTuan55Kl5Yg9Xs5x1PKUkm2zGKUNPioznb4GLRcxFnLBkWoeKQXNro2YZsYJvK+MY8jlF3cdGa8BZ8/Q==} posthog-js@1.67.1: resolution: {integrity: sha512-gvdCVrrxoRYbtNTCUt2/YdZ+tfSfzcl72ym/dtRVCYJpwlCUIKnNJ3E2g7Bbw1+Ki6CvGxdu9r7jHIWnvJAMuw==} @@ -13492,10 +13086,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -13546,10 +13136,6 @@ packages: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} - proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - proc-log@4.2.0: resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -13568,6 +13154,18 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + promise@7.3.1: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} @@ -13917,6 +13515,12 @@ packages: react: '*' react-native: '*' + react-native-svg@15.7.1: + resolution: {integrity: sha512-Xc11L4t6/DtmUwrQqHR7S45Qy3cIWpcfGlmEatVeZ9c1N8eAK79heJmGRgCOVrXESrrLEHfP/AYGf0BGyrvV6A==} + peerDependencies: + react: '*' + react-native: '*' + react-native-url-polyfill@1.3.0: resolution: {integrity: sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==} peerDependencies: @@ -14052,14 +13656,6 @@ packages: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -14206,6 +13802,9 @@ packages: remark-mdx@2.3.0: resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + remark-mdx@3.0.1: + resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} @@ -14218,9 +13817,6 @@ packages: remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} - remark-stringify@10.0.3: - resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} - remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} @@ -14261,10 +13857,6 @@ packages: resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==} engines: {node: '>= 4.0.0'} - requireindex@1.1.0: - resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} - engines: {node: '>=0.10.5'} - requireindex@1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} @@ -14328,6 +13920,10 @@ packages: resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} engines: {node: '>=4'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -14353,21 +13949,11 @@ packages: ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true - rollup@4.21.2: - resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.21.3: resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -14397,8 +13983,8 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} - safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} safer-buffer@2.1.2: @@ -14454,11 +14040,6 @@ packages: sembear@0.5.2: resolution: {integrity: sha512-Ij1vCAdFgWABd7zTg50Xw1/p0JgESNxuLlneEAsmBrKishA06ulTTL/SHGmNy2Zud7+rKrHTKNI6moJsn1ppAQ==} - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} @@ -14636,10 +14217,6 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -14659,14 +14236,6 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -14781,10 +14350,6 @@ packages: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-length@6.0.0: resolution: {integrity: sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==} engines: {node: '>=16'} @@ -14797,6 +14362,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} @@ -15082,6 +14651,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.33.0: + resolution: {integrity: sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==} + engines: {node: '>=10'} + hasBin: true + test-exclude@7.0.1: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} @@ -15164,9 +14738,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - to-vfile@7.2.4: - resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==} - toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} @@ -15185,9 +14756,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - traverse@0.6.10: resolution: {integrity: sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==} engines: {node: '>= 0.4'} @@ -15196,10 +14764,6 @@ packages: resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} engines: {node: '>= 0.4'} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - tree-sitter-json@0.20.2: resolution: {integrity: sha512-eUxrowp4F1QEGk/i7Sa+Xl8Crlfp7J0AXxX1QdJEQKQYMWhgMbCIgyQvpO3Q0P9oyTrNQxRLlRipDS44a8EtRw==} @@ -15212,10 +14776,6 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - trim-right@1.0.1: resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} engines: {node: '>=0.10.0'} @@ -15285,25 +14845,6 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsup@8.2.4: - resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - tsx@4.19.1: resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} engines: {node: '>=18.0.0'} @@ -15367,10 +14908,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} @@ -15387,22 +14924,18 @@ packages: resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==} engines: {node: '>=6'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + type-fest@4.26.1: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} @@ -15454,11 +14987,6 @@ packages: types-ramda@0.30.0: resolution: {integrity: sha512-oVPw/KHB5M0Du0txTEKKM8xZOG9cZBRdCVXvwHYuNJUVkAiJ9oWyqkA+9Bj2gjMsHgkkhsYevobQBWs8I2/Xvw==} - typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -15476,15 +15004,12 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} uint8arrays@3.1.0: resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} - uint8arrays@3.1.1: - resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} - ulid@2.3.0: resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} hasBin: true @@ -15508,8 +15033,8 @@ packages: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - unenv@1.9.0: - resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==} + unenv@1.10.0: + resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} @@ -15533,8 +15058,8 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} - unified-engine@10.1.0: - resolution: {integrity: sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==} + unified-engine@11.2.1: + resolution: {integrity: sha512-xBAdZ8UY2X4R9Hm6X6kMne4Nz0PlpOc1oE6DPeqJnewr5Imkb8uT5Eyvy1h7xNekPL3PSWh3ZJyNrMW6jnNQBg==} unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -15564,8 +15089,8 @@ packages: unist-util-generated@2.0.1: resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - unist-util-inspect@7.0.2: - resolution: {integrity: sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==} + unist-util-inspect@8.1.0: + resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} @@ -15576,6 +15101,9 @@ packages: unist-util-position-from-estree@1.1.2: resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + unist-util-position@4.0.4: resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} @@ -15647,22 +15175,22 @@ packages: unraw@3.0.0: resolution: {integrity: sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==} - unstorage@1.10.2: - resolution: {integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==} + unstorage@1.12.0: + resolution: {integrity: sha512-ARZYTXiC+e8z3lRM7/qY9oyaOkaozCeNd2xoz7sYK9fv7OLGhVsf+BZbmASqiK/HTZ7T6eAlnVq9JynZppyk3w==} peerDependencies: - '@azure/app-configuration': ^1.5.0 - '@azure/cosmos': ^4.0.0 + '@azure/app-configuration': ^1.7.0 + '@azure/cosmos': ^4.1.1 '@azure/data-tables': ^13.2.2 - '@azure/identity': ^4.0.1 + '@azure/identity': ^4.4.1 '@azure/keyvault-secrets': ^4.8.0 - '@azure/storage-blob': ^12.17.0 - '@capacitor/preferences': ^5.0.7 + '@azure/storage-blob': ^12.24.0 + '@capacitor/preferences': ^6.0.2 '@netlify/blobs': ^6.5.0 || ^7.0.0 - '@planetscale/database': ^1.16.0 - '@upstash/redis': ^1.28.4 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.0 '@vercel/kv': ^1.0.1 idb-keyval: ^6.2.1 - ioredis: ^5.3.2 + ioredis: ^5.4.1 peerDependenciesMeta: '@azure/app-configuration': optional: true @@ -15827,9 +15355,6 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - v8-compile-cache@2.4.0: - resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} - valid-url@1.0.9: resolution: {integrity: sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==} @@ -15865,14 +15390,14 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - vfile-reporter@7.0.5: - resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} + vfile-reporter@8.1.1: + resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==} - vfile-sort@3.0.1: - resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} + vfile-sort@4.0.0: + resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==} - vfile-statistics@2.0.1: - resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} + vfile-statistics@3.0.0: + resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} @@ -15886,8 +15411,8 @@ packages: victory-vendor@36.9.2: resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} - viem@2.21.7: - resolution: {integrity: sha512-PFgppakInuHX31wHDx1dzAjhj4t6Po6WrWtutDi33z2vabIT0Wv8qT6tl7DLqfLy2NkTqfN2mdshYLeoI5ZHvQ==} + viem@2.21.9: + resolution: {integrity: sha512-fWPDX2ABEo/mLiDN+wsmYJDJk0a/ZCafquxInR2+HZv/7UTgHbLgjZs4SotpEeFAYjgVThJ7A9TPmrRjaaYqvw==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -16030,9 +15555,6 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - webidl-conversions@5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} @@ -16092,9 +15614,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -16330,12 +15849,6 @@ packages: peerDependencies: zod: ^3.18.0 - zod-validation-error@3.3.0: - resolution: {integrity: sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.18.0 - zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -16366,13 +15879,13 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@aws-amplify/analytics@6.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/analytics@6.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-firehose': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-kinesis': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-personalize-events': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-firehose': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-kinesis': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-personalize-events': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/util-utf8-browser': 3.6.1 lodash: 4.17.21 tslib: 1.14.1 @@ -16381,13 +15894,13 @@ snapshots: - encoding - react-native - '@aws-amplify/analytics@6.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/analytics@6.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-firehose': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-kinesis': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-personalize-events': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-firehose': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-kinesis': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-personalize-events': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/util-utf8-browser': 3.6.1 lodash: 4.17.21 tslib: 1.14.1 @@ -16396,13 +15909,13 @@ snapshots: - encoding - react-native - '@aws-amplify/api-graphql@3.4.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/api-graphql@3.4.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) graphql: 15.8.0 tslib: 1.14.1 uuid: 3.4.0 @@ -16412,13 +15925,13 @@ snapshots: - encoding - react-native - '@aws-amplify/api-graphql@3.4.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/api-graphql@3.4.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) graphql: 15.8.0 tslib: 1.14.1 uuid: 3.4.0 @@ -16428,9 +15941,9 @@ snapshots: - encoding - react-native - '@aws-amplify/api-rest@3.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/api-rest@3.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) axios: 1.7.4 tslib: 1.14.1 url: 0.11.0 @@ -16439,9 +15952,9 @@ snapshots: - encoding - react-native - '@aws-amplify/api-rest@3.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/api-rest@3.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) axios: 1.7.4 tslib: 1.14.1 url: 0.11.0 @@ -16450,29 +15963,29 @@ snapshots: - encoding - react-native - '@aws-amplify/api@5.4.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/api@5.4.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/api-graphql': 3.4.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/api-graphql': 3.4.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) tslib: 1.14.1 transitivePeerDependencies: - debug - encoding - react-native - '@aws-amplify/api@5.4.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/api@5.4.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/api-graphql': 3.4.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/api-graphql': 3.4.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/api-rest': 3.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) tslib: 1.14.1 transitivePeerDependencies: - debug - encoding - react-native - '@aws-amplify/auth@5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/auth@5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) amazon-cognito-identity-js: 6.3.13 buffer: 4.9.2 tslib: 1.14.1 @@ -16481,9 +15994,9 @@ snapshots: - encoding - react-native - '@aws-amplify/auth@5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/auth@5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) amazon-cognito-identity-js: 6.3.13 buffer: 4.9.2 tslib: 1.14.1 @@ -16492,31 +16005,31 @@ snapshots: - encoding - react-native - '@aws-amplify/cache@5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/cache@5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) tslib: 1.14.1 transitivePeerDependencies: - encoding - react-native - '@aws-amplify/cache@5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/cache@5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) tslib: 1.14.1 transitivePeerDependencies: - encoding - react-native - '@aws-amplify/core@5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/core@5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-js': 1.2.2 - '@aws-sdk/client-cloudwatch-logs': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-cloudwatch-logs': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/types': 3.6.1 '@aws-sdk/util-hex-encoding': 3.6.1 '@types/node-fetch': 2.6.4 isomorphic-unfetch: 3.1.0 - react-native-url-polyfill: 1.3.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + react-native-url-polyfill: 1.3.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) tslib: 1.14.1 universal-cookie: 4.0.4 zen-observable-ts: 0.8.19 @@ -16524,15 +16037,15 @@ snapshots: - encoding - react-native - '@aws-amplify/core@5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/core@5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-js': 1.2.2 - '@aws-sdk/client-cloudwatch-logs': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-cloudwatch-logs': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/types': 3.6.1 '@aws-sdk/util-hex-encoding': 3.6.1 '@types/node-fetch': 2.6.4 isomorphic-unfetch: 3.1.0 - react-native-url-polyfill: 1.3.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + react-native-url-polyfill: 1.3.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) tslib: 1.14.1 universal-cookie: 4.0.4 zen-observable-ts: 0.8.19 @@ -16540,12 +16053,12 @@ snapshots: - encoding - react-native - '@aws-amplify/datastore@4.7.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/datastore@4.7.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) amazon-cognito-identity-js: 6.3.13 buffer: 4.9.2 idb: 5.0.6 @@ -16559,12 +16072,12 @@ snapshots: - encoding - react-native - '@aws-amplify/datastore@4.7.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/datastore@4.7.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) amazon-cognito-identity-js: 6.3.13 buffer: 4.9.2 idb: 5.0.6 @@ -16578,9 +16091,9 @@ snapshots: - encoding - react-native - '@aws-amplify/geo@2.3.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/geo@2.3.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/client-location': 3.186.3 '@turf/boolean-clockwise': 6.5.0 camelcase-keys: 6.2.2 @@ -16590,9 +16103,9 @@ snapshots: - encoding - react-native - '@aws-amplify/geo@2.3.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/geo@2.3.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/client-location': 3.186.3 '@turf/boolean-clockwise': 6.5.0 camelcase-keys: 6.2.2 @@ -16602,9 +16115,9 @@ snapshots: - encoding - react-native - '@aws-amplify/interactions@5.2.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/interactions@5.2.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/client-lex-runtime-service': 3.186.3 '@aws-sdk/client-lex-runtime-v2': 3.186.3 base-64: 1.0.0 @@ -16616,9 +16129,9 @@ snapshots: - encoding - react-native - '@aws-amplify/interactions@5.2.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/interactions@5.2.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/client-lex-runtime-service': 3.186.3 '@aws-sdk/client-lex-runtime-v2': 3.186.3 base-64: 1.0.0 @@ -16630,10 +16143,10 @@ snapshots: - encoding - react-native - '@aws-amplify/notifications@1.6.13(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/notifications@1.6.13(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-amplify/rtn-push-notification': 1.1.14 lodash: 4.17.21 uuid: 3.4.0 @@ -16641,10 +16154,10 @@ snapshots: - encoding - react-native - '@aws-amplify/notifications@1.6.13(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/notifications@1.6.13(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-amplify/rtn-push-notification': 1.1.14 lodash: 4.17.21 uuid: 3.4.0 @@ -16652,15 +16165,15 @@ snapshots: - encoding - react-native - '@aws-amplify/predictions@5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/predictions@5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-comprehend': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-polly': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-rekognition': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-textract': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-sdk/client-translate': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-comprehend': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-polly': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-rekognition': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-textract': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/client-translate': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/eventstream-marshaller': 3.6.1 '@aws-sdk/util-utf8-node': 3.6.1 buffer: 4.9.2 @@ -16670,15 +16183,15 @@ snapshots: - encoding - react-native - '@aws-amplify/predictions@5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/predictions@5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-comprehend': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-polly': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-rekognition': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-textract': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-sdk/client-translate': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-comprehend': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-polly': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-rekognition': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-textract': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/client-translate': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/eventstream-marshaller': 3.6.1 '@aws-sdk/util-utf8-node': 3.6.1 buffer: 4.9.2 @@ -16688,11 +16201,11 @@ snapshots: - encoding - react-native - '@aws-amplify/pubsub@5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/pubsub@5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) buffer: 4.9.2 graphql: 15.8.0 tslib: 1.14.1 @@ -16703,11 +16216,11 @@ snapshots: - encoding - react-native - '@aws-amplify/pubsub@5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/pubsub@5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) buffer: 4.9.2 graphql: 15.8.0 tslib: 1.14.1 @@ -16720,9 +16233,9 @@ snapshots: '@aws-amplify/rtn-push-notification@1.1.14': {} - '@aws-amplify/storage@5.9.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-amplify/storage@5.9.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/md5-js': 3.6.1 '@aws-sdk/types': 3.6.1 buffer: 4.9.2 @@ -16733,9 +16246,9 @@ snapshots: - encoding - react-native - '@aws-amplify/storage@5.9.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-amplify/storage@5.9.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/md5-js': 3.6.1 '@aws-sdk/types': 3.6.1 buffer: 4.9.2 @@ -16861,7 +16374,7 @@ snapshots: '@aws-sdk/types': 3.6.1 tslib: 1.14.1 - '@aws-sdk/client-cloudwatch-logs@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-cloudwatch-logs@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -16873,7 +16386,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -16897,7 +16410,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-cloudwatch-logs@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-cloudwatch-logs@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -16909,7 +16422,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -16979,7 +16492,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-comprehend@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-comprehend@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -16991,7 +16504,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17016,7 +16529,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-comprehend@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-comprehend@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17028,7 +16541,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17053,7 +16566,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-firehose@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-firehose@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17065,7 +16578,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17089,7 +16602,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-firehose@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-firehose@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17101,7 +16614,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17125,7 +16638,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-kinesis@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-kinesis@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17140,7 +16653,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17165,7 +16678,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-kinesis@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-kinesis@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17180,7 +16693,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17378,7 +16891,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-personalize-events@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-personalize-events@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17390,7 +16903,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17414,7 +16927,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-personalize-events@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-personalize-events@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17426,7 +16939,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17450,7 +16963,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-polly@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-polly@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17462,7 +16975,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17486,7 +16999,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-polly@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-polly@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17498,7 +17011,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17522,7 +17035,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-rekognition@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-rekognition@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17534,7 +17047,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17559,7 +17072,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-rekognition@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-rekognition@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17571,7 +17084,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17806,7 +17319,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-textract@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-textract@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17818,7 +17331,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17842,7 +17355,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-textract@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-textract@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17854,7 +17367,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17878,7 +17391,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-translate@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/client-translate@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17890,7 +17403,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -17915,7 +17428,7 @@ snapshots: transitivePeerDependencies: - react-native - '@aws-sdk/client-translate@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/client-translate@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-crypto/sha256-browser': 1.2.2 '@aws-crypto/sha256-js': 1.2.2 @@ -17927,7 +17440,7 @@ snapshots: '@aws-sdk/middleware-content-length': 3.6.1 '@aws-sdk/middleware-host-header': 3.6.1 '@aws-sdk/middleware-logger': 3.6.1 - '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@aws-sdk/middleware-serde': 3.6.1 '@aws-sdk/middleware-signing': 3.6.1 '@aws-sdk/middleware-stack': 3.6.1 @@ -18394,23 +17907,23 @@ snapshots: tslib: 2.7.0 uuid: 8.3.2 - '@aws-sdk/middleware-retry@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@aws-sdk/middleware-retry@3.6.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@aws-sdk/protocol-http': 3.6.1 '@aws-sdk/service-error-classification': 3.6.1 '@aws-sdk/types': 3.6.1 - react-native-get-random-values: 1.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + react-native-get-random-values: 1.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) tslib: 1.14.1 uuid: 3.4.0 transitivePeerDependencies: - react-native - '@aws-sdk/middleware-retry@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@aws-sdk/middleware-retry@3.6.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: '@aws-sdk/protocol-http': 3.6.1 '@aws-sdk/service-error-classification': 3.6.1 '@aws-sdk/types': 3.6.1 - react-native-get-random-values: 1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + react-native-get-random-values: 1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) tslib: 1.14.1 uuid: 3.4.0 transitivePeerDependencies: @@ -18625,7 +18138,7 @@ snapshots: '@aws-sdk/querystring-parser': 3.6.1 '@aws-sdk/types': 3.6.1 tslib: 1.14.1 - url: 0.11.3 + url: 0.11.4 '@aws-sdk/url-parser@3.186.0': dependencies: @@ -20775,12 +20288,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.24.5': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - '@babel/types@7.24.7': dependencies: '@babel/helper-string-parser': 7.24.7 @@ -20847,69 +20354,69 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 - '@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/descendant': 3.1.0(react@18.3.1) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/anatomy@2.2.2': {} - '@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/breakpoint-utils@2.0.8': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) @@ -20918,8 +20425,8 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) - '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@zag-js/focus-visible': 0.16.0 react: 18.3.1 @@ -20939,10 +20446,10 @@ snapshots: '@chakra-ui/shared-utils': 2.0.5 react: 18.3.1 - '@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/color-mode@2.2.0(react@18.3.1)': @@ -20950,9 +20457,9 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) react: 18.3.1 - '@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/counter@2.1.0(react@18.3.1)': @@ -20962,9 +20469,9 @@ snapshots: '@chakra-ui/shared-utils': 2.0.5 react: 18.3.1 - '@chakra-ui/css-reset@2.3.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(react@18.3.1)': + '@chakra-ui/css-reset@2.3.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(react@18.3.1)': dependencies: - '@emotion/react': 11.13.3(@types/react@18.3.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 '@chakra-ui/descendant@3.1.0(react@18.3.1)': @@ -20975,7 +20482,7 @@ snapshots: '@chakra-ui/dom-utils@2.1.0': {} - '@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) @@ -20986,27 +20493,27 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/event-utils@2.0.8': {} - '@chakra-ui/focus-lock@2.1.0(@types/react@18.3.6)(react@18.3.1)': + '@chakra-ui/focus-lock@2.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: '@chakra-ui/dom-utils': 2.1.0 react: 18.3.1 - react-focus-lock: 2.12.1(@types/react@18.3.6)(react@18.3.1) + react-focus-lock: 2.12.1(@types/react@18.3.7)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/hooks@2.2.1(react@18.3.1)': @@ -21017,38 +20524,38 @@ snapshots: copy-to-clipboard: 3.3.3 react: 18.3.1 - '@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/object-utils': 2.1.0 '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/breakpoint-utils': 2.0.8 - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/object-utils': 2.1.0 '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/lazy-utils@2.0.5': {} @@ -21057,15 +20564,15 @@ snapshots: dependencies: react: 18.3.1 - '@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/breakpoint-utils': 2.0.8 '@chakra-ui/react-env': 3.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/clickable': 2.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1) @@ -21081,35 +20588,35 @@ snapshots: '@chakra-ui/react-use-outside-click': 2.2.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(@types/react@18.3.6)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(@types/react@18.3.7)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.6)(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.7)(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.10(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll: 2.5.10(@types/react@18.3.7)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/counter': 2.1.0(react@18.3.1) - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) @@ -21119,14 +20626,14 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/number-utils@2.0.7': {} '@chakra-ui/object-utils@2.1.0': {} - '@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/descendant': 3.1.0(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) @@ -21134,12 +20641,12 @@ snapshots: '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/lazy-utils': 2.0.5 '@chakra-ui/popper': 3.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) @@ -21150,7 +20657,7 @@ snapshots: '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -21168,32 +20675,32 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/provider@2.4.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/provider@2.4.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/react-env': 3.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) '@chakra-ui/utils': 2.0.15 - '@emotion/react': 11.13.3(@types/react@18.3.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) '@zag-js/focus-visible': 0.16.0 react: 18.3.1 @@ -21304,92 +20811,92 @@ snapshots: '@chakra-ui/utils': 2.0.15 react: 18.3.1 - '@chakra-ui/react@2.8.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react@2.8.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/counter': 2.1.0(react@18.3.1) - '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) - '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.6)(react@18.3.1) - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) + '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.7)(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/hooks': 2.2.1(react@18.3.1) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/live-region': 2.1.0(react@18.3.1) - '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(@types/react@18.3.6)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(@types/react@18.3.7)(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/popper': 3.1.0(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/provider': 2.4.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/provider': 2.4.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-env': 3.1.0(react@18.3.1) - '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) - '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) + '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) '@chakra-ui/theme-utils': 2.0.21 - '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/utils': 2.0.15 - '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@emotion/react': 11.13.3(@types/react@18.3.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/shared-utils@2.0.5': {} - '@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-use-previous': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/number-utils': 2.0.7 '@chakra-ui/react-context': 2.1.0(react@18.3.1) @@ -21401,29 +20908,29 @@ snapshots: '@chakra-ui/react-use-pan-event': 2.1.0(react@18.3.1) '@chakra-ui/react-use-size': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/styled-system@2.9.2': @@ -21432,15 +20939,15 @@ snapshots: csstype: 3.1.3 lodash.mergewith: 4.6.2 - '@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1)': + '@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/color-mode': 2.2.0(react@18.3.1) '@chakra-ui/object-utils': 2.1.0 @@ -21448,19 +20955,19 @@ snapshots: '@chakra-ui/styled-system': 2.9.2 '@chakra-ui/theme-utils': 2.0.21 '@chakra-ui/utils': 2.0.15 - '@emotion/react': 11.13.3(@types/react@18.3.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-fast-compare: 3.2.2 - '@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/clickable': 2.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1) @@ -21471,21 +20978,21 @@ snapshots: '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2)': @@ -21509,23 +21016,23 @@ snapshots: '@chakra-ui/styled-system': 2.9.2 '@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2) - '@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-use-timeout': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/dom-utils': 2.1.0 '@chakra-ui/popper': 3.1.0(react@18.3.1) @@ -21535,7 +21042,7 @@ snapshots: '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) framer-motion: 11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21553,9 +21060,9 @@ snapshots: framesync: 6.1.2 lodash.mergewith: 4.6.2 - '@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@changesets/apply-release-plan@7.0.5': @@ -21729,7 +21236,7 @@ snapshots: - '@chromatic-com/playwright' - react - '@cloudflare/workers-types@4.20240405.0': {} + '@cloudflare/workers-types@4.20240909.0': {} '@codspeed/core@3.1.1': dependencies: @@ -21740,15 +21247,15 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@3.1.1(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))(vitest@2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@14.12.3)(msw@2.4.7(typescript@5.6.2))(terser@5.32.0))': + '@codspeed/vitest-plugin@3.1.1(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))(vitest@2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.7(typescript@5.6.2))(terser@5.33.0))': dependencies: '@codspeed/core': 3.1.1 - vite: 5.4.5(@types/node@22.5.5)(terser@5.32.0) - vitest: 2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@14.12.3)(msw@2.4.7(typescript@5.6.2))(terser@5.32.0) + vite: 5.4.5(@types/node@22.5.5)(terser@5.33.0) + vitest: 2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.7(typescript@5.6.2))(terser@5.33.0) transitivePeerDependencies: - debug - '@coinbase/onchainkit@0.14.2(@tanstack/react-query@5.56.2(react@18.3.1))(@xmtp/frames-validator@0.6.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(graphql-request@7.1.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@coinbase/onchainkit@0.14.2(@tanstack/react-query@5.56.2(react@18.3.1))(@xmtp/frames-validator@0.6.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(graphql-request@7.1.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.21.9(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: '@tanstack/react-query': 5.56.2(react@18.3.1) '@xmtp/frames-validator': 0.6.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) @@ -21756,9 +21263,9 @@ snapshots: graphql-request: 7.1.0(graphql@16.9.0) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - viem: 2.21.7(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.9(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) - '@coinbase/wallet-mobile-sdk@1.0.13(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': + '@coinbase/wallet-mobile-sdk@1.0.13(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@metamask/safe-event-emitter': 2.0.0 bn.js: 5.2.1 @@ -21767,10 +21274,10 @@ snapshots: events: 3.3.0 expo: 51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10) react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) - react-native-mmkv: 2.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native-mmkv: 2.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) - '@coinbase/wallet-mobile-sdk@1.1.2(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': + '@coinbase/wallet-mobile-sdk@1.1.2(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@metamask/safe-event-emitter': 2.0.0 bn.js: 5.2.1 @@ -21779,8 +21286,8 @@ snapshots: events: 3.3.0 expo: 51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10) react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - react-native-mmkv: 2.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native-mmkv: 2.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) '@coinbase/wallet-sdk@4.0.4': dependencies: @@ -21793,18 +21300,18 @@ snapshots: '@corex/deepmerge@4.0.43': {} - '@craftzdog/react-native-buffer@6.0.5(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': + '@craftzdog/react-native-buffer@6.0.5(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: ieee754: 1.2.1 - react-native-quick-base64: 2.1.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + react-native-quick-base64: 2.1.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) transitivePeerDependencies: - react - react-native - '@craftzdog/react-native-buffer@6.0.5(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': + '@craftzdog/react-native-buffer@6.0.5(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: ieee754: 1.2.1 - react-native-quick-base64: 2.1.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + react-native-quick-base64: 2.1.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) transitivePeerDependencies: - react - react-native @@ -21856,7 +21363,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1)': + '@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 @@ -21868,7 +21375,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 transitivePeerDependencies: - supports-color @@ -21882,18 +21389,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1)': + '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.3(@types/react@18.3.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) '@emotion/serialize': 1.3.1 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) '@emotion/utils': 1.4.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 transitivePeerDependencies: - supports-color @@ -22119,23 +21626,10 @@ snapshots: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0(jiti@1.21.6))': - dependencies: - eslint: 9.10.0(jiti@1.21.6) - eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} '@eslint-community/regexpp@4.11.1': {} - '@eslint/config-array@0.18.0': - dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -22150,30 +21644,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.1.0': - dependencies: - ajv: 6.12.6 - debug: 4.3.7(supports-color@8.1.1) - espree: 10.1.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - '@eslint/js@8.57.0': {} - '@eslint/js@9.10.0': {} - - '@eslint/object-schema@2.1.4': {} - - '@eslint/plugin-kit@0.1.0': - dependencies: - levn: 0.4.1 - '@ethersproject/abi@5.7.0': dependencies: '@ethersproject/address': 5.7.0 @@ -22798,8 +22270,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.0': {} - '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -22954,7 +22424,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.9 + '@types/node': 22.5.5 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -22963,17 +22433,17 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.9 + '@types/node': 22.5.5 '@types/yargs': 17.0.32 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.6.2) - vite: 5.4.5(@types/node@22.5.5)(terser@5.32.0) + vite: 5.4.5(@types/node@22.5.5)(terser@5.33.0) optionalDependencies: typescript: 5.6.2 @@ -22992,8 +22462,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': @@ -23062,11 +22530,11 @@ snapshots: jju: 1.4.0 read-yaml-file: 1.1.0 - '@mdx-js/loader@2.3.0(webpack@5.94.0)': + '@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)))': dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.94.0 + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)) transitivePeerDependencies: - supports-color @@ -23095,77 +22563,40 @@ snapshots: '@mdx-js/react@2.3.0(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.6 + '@types/react': 18.3.7 react: 18.3.1 - '@mdx-js/react@3.0.1(@types/react@18.3.6)(react@18.3.1)': + '@mdx-js/react@3.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.6 + '@types/react': 18.3.7 react: 18.3.1 '@metamask/safe-event-emitter@2.0.0': {} - '@microsoft/api-extractor-model@7.29.8(@types/node@20.14.9)': - dependencies: - '@microsoft/tsdoc': 0.15.0 - '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@20.14.9) - transitivePeerDependencies: - - '@types/node' - optional: true - - '@microsoft/api-extractor@7.47.9(@types/node@20.14.9)': - dependencies: - '@microsoft/api-extractor-model': 7.29.8(@types/node@20.14.9) - '@microsoft/tsdoc': 0.15.0 - '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.9.0(@types/node@20.14.9) - '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.2(@types/node@20.14.9) - '@rushstack/ts-command-line': 4.22.8(@types/node@20.14.9) - lodash: 4.17.21 - minimatch: 3.0.8 - resolve: 1.22.8 - semver: 7.5.4 - source-map: 0.6.1 - typescript: 5.4.2 - transitivePeerDependencies: - - '@types/node' - optional: true - - '@microsoft/tsdoc-config@0.17.0': - dependencies: - '@microsoft/tsdoc': 0.15.0 - ajv: 8.12.0 - jju: 1.4.0 - resolve: 1.22.8 - - '@microsoft/tsdoc@0.15.0': {} - - '@mobile-wallet-protocol/client@0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': + '@mobile-wallet-protocol/client@0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@noble/ciphers': 0.5.3 '@noble/curves': 1.6.0 '@noble/hashes': 1.4.0 - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) eventemitter3: 5.0.1 expo: 51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10) expo-web-browser: 13.0.3(expo@51.0.32(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)) react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - '@mobile-wallet-protocol/client@0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': + '@mobile-wallet-protocol/client@0.0.3(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-web-browser@13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@noble/ciphers': 0.5.3 '@noble/curves': 1.6.0 '@noble/hashes': 1.4.0 - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) eventemitter3: 5.0.1 expo: 51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10) expo-web-browser: 13.0.3(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)) react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) '@molt/command@0.9.0': dependencies: @@ -23185,49 +22616,49 @@ snapshots: dependencies: ts-toolbelt: 9.6.0 - '@motionone/animation@10.17.0': + '@motionone/animation@10.18.0': dependencies: - '@motionone/easing': 10.17.0 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 + '@motionone/easing': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 tslib: 2.7.0 - '@motionone/dom@10.17.0': + '@motionone/dom@10.18.0': dependencies: - '@motionone/animation': 10.17.0 - '@motionone/generators': 10.17.0 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 + '@motionone/animation': 10.18.0 + '@motionone/generators': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 hey-listen: 1.0.8 tslib: 2.7.0 - '@motionone/easing@10.17.0': + '@motionone/easing@10.18.0': dependencies: - '@motionone/utils': 10.17.0 + '@motionone/utils': 10.18.0 tslib: 2.7.0 - '@motionone/generators@10.17.0': + '@motionone/generators@10.18.0': dependencies: - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 tslib: 2.7.0 '@motionone/svelte@10.16.4': dependencies: - '@motionone/dom': 10.17.0 + '@motionone/dom': 10.18.0 tslib: 2.7.0 - '@motionone/types@10.17.0': {} + '@motionone/types@10.17.1': {} - '@motionone/utils@10.17.0': + '@motionone/utils@10.18.0': dependencies: - '@motionone/types': 10.17.0 + '@motionone/types': 10.17.1 hey-listen: 1.0.8 tslib: 2.7.0 '@motionone/vue@10.16.4': dependencies: - '@motionone/dom': 10.17.0 + '@motionone/dom': 10.18.0 tslib: 2.7.0 '@mswjs/interceptors@0.35.6': @@ -23239,12 +22670,12 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@n8tb1t/use-scroll-position@2.0.3(@types/react@18.3.6)(react@18.3.1)': + '@n8tb1t/use-scroll-position@2.0.3(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 react: 18.3.1 - '@next/bundle-analyzer@14.2.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@next/bundle-analyzer@14.2.12(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: webpack-bundle-analyzer: 4.10.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -23253,44 +22684,48 @@ snapshots: '@next/env@13.5.6': {} - '@next/env@14.2.11': {} + '@next/env@14.2.12': {} '@next/eslint-plugin-next@14.2.11': dependencies: glob: 10.3.10 - '@next/mdx@13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0))(@mdx-js/react@2.3.0(react@18.3.1))': + '@next/eslint-plugin-next@14.2.12': + dependencies: + glob: 10.3.10 + + '@next/mdx@13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))))(@mdx-js/react@2.3.0(react@18.3.1))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 2.3.0(webpack@5.94.0) + '@mdx-js/loader': 2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))) '@mdx-js/react': 2.3.0(react@18.3.1) - '@next/swc-darwin-arm64@14.2.11': + '@next/swc-darwin-arm64@14.2.12': optional: true - '@next/swc-darwin-x64@14.2.11': + '@next/swc-darwin-x64@14.2.12': optional: true - '@next/swc-linux-arm64-gnu@14.2.11': + '@next/swc-linux-arm64-gnu@14.2.12': optional: true - '@next/swc-linux-arm64-musl@14.2.11': + '@next/swc-linux-arm64-musl@14.2.12': optional: true - '@next/swc-linux-x64-gnu@14.2.11': + '@next/swc-linux-x64-gnu@14.2.12': optional: true - '@next/swc-linux-x64-musl@14.2.11': + '@next/swc-linux-x64-musl@14.2.12': optional: true - '@next/swc-win32-arm64-msvc@14.2.11': + '@next/swc-win32-arm64-msvc@14.2.12': optional: true - '@next/swc-win32-ia32-msvc@14.2.11': + '@next/swc-win32-ia32-msvc@14.2.12': optional: true - '@next/swc-win32-x64-msvc@14.2.11': + '@next/swc-win32-x64-msvc@14.2.12': optional: true '@noble/ciphers@0.5.3': {} @@ -23327,21 +22762,37 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@npmcli/config@6.4.1': + '@npmcli/config@8.3.4': dependencies: '@npmcli/map-workspaces': 3.0.6 + '@npmcli/package-json': 5.2.1 ci-info: 4.0.0 ini: 4.1.3 nopt: 7.2.1 - proc-log: 3.0.0 - read-package-json-fast: 3.0.2 + proc-log: 4.2.0 semver: 7.6.3 walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird '@npmcli/fs@3.1.1': dependencies: semver: 7.6.3 + '@npmcli/git@5.0.8': + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.4.3 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.3 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + '@npmcli/map-workspaces@3.0.6': dependencies: '@npmcli/name-from-folder': 2.0.0 @@ -23351,6 +22802,22 @@ snapshots: '@npmcli/name-from-folder@2.0.0': {} + '@npmcli/package-json@5.2.1': + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.4.5 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@7.0.2': + dependencies: + which: 4.0.0 + '@oclif/color@1.0.13': dependencies: ansi-styles: 4.3.0 @@ -23390,7 +22857,7 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - '@oclif/core@2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/core@2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)': dependencies: '@types/cli-progress': 3.11.5 ansi-escapes: 4.3.2 @@ -23416,7 +22883,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.7.26)(@types/node@20.14.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) tslib: 2.7.0 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -23453,10 +22920,10 @@ snapshots: dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-not-found@2.3.23(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/plugin-not-found@2.3.23(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)': dependencies: '@oclif/color': 1.0.13 - '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -23481,9 +22948,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)': dependencies: - '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) chalk: 4.1.2 debug: 4.3.6(supports-color@8.1.1) fs-extra: 9.1.0 @@ -23792,7 +23259,7 @@ snapshots: detect-libc: 1.0.3 is-glob: 4.0.3 micromatch: 4.0.8 - node-addon-api: 7.1.0 + node-addon-api: 7.1.1 optionalDependencies: '@parcel/watcher-android-arm64': 2.4.1 '@parcel/watcher-darwin-arm64': 2.4.1 @@ -23818,7 +23285,7 @@ snapshots: dependencies: playwright: 1.47.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.94.0(@swc/core@1.7.26)(esbuild@0.23.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.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.38.1 @@ -23828,7 +23295,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) optionalDependencies: type-fest: 4.26.1 webpack-hot-middleware: 2.26.1 @@ -23845,62 +23312,10 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@polka/url@1.0.0-next.25': {} + '@polka/url@1.0.0-next.27': {} '@popperjs/core@2.11.8': {} - '@preconstruct/cli@2.7.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/runtime': 7.25.6 - '@preconstruct/hook': 0.4.0 - '@rollup/plugin-alias': 3.1.9(rollup@2.79.1) - '@rollup/plugin-commonjs': 15.1.0(rollup@2.79.1) - '@rollup/plugin-json': 4.1.0(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - builtin-modules: 3.3.0 - chalk: 4.1.2 - dataloader: 2.2.2 - detect-indent: 6.1.0 - enquirer: 2.4.1 - estree-walker: 2.0.2 - fast-deep-equal: 2.0.1 - fast-glob: 3.3.2 - fs-extra: 9.1.0 - is-ci: 2.0.0 - is-reference: 1.2.1 - jest-worker: 26.6.2 - magic-string: 0.30.10 - meow: 7.1.1 - ms: 2.1.3 - normalize-path: 3.0.0 - npm-packlist: 2.2.2 - p-limit: 3.1.0 - parse-glob: 3.0.4 - parse-json: 5.2.0 - quick-lru: 5.1.1 - resolve: 1.22.8 - resolve-from: 5.0.0 - rollup: 2.79.1 - semver: 7.6.3 - terser: 5.31.6 - v8-compile-cache: 2.4.0 - zod: 3.23.8 - transitivePeerDependencies: - - supports-color - - '@preconstruct/hook@0.4.0': - dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) - pirates: 4.0.6 - source-map-support: 0.5.21 - transitivePeerDependencies: - - supports-color - '@prisma/instrumentation@5.19.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -23966,707 +23381,707 @@ snapshots: '@radix-ui/primitive@1.1.0': {} - '@radix-ui/react-accordion@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-accordion@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collapsible': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-collapsible': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-alert-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-alert-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-aspect-ratio@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-aspect-ratio@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-avatar@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-avatar@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-checkbox@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-checkbox@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-collapsible@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collapsible@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-context@1.0.1(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-context@1.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-context@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-context@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.7)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-direction@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-direction@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-hover-card@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-hover-card@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 '@radix-ui/react-icons@1.3.0(react@18.3.1)': dependencies: react: 18.3.1 - '@radix-ui/react-id@1.0.1(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-id@1.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-id@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-label@2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-label@2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-popover@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popover@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.7)(react@18.3.1) '@radix-ui/rect': 1.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-progress@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-progress@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-radio-group@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-radio-group@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-scroll-area@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-scroll-area@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-select@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-select@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-slot@1.0.2(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-slot@1.0.2(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-slot@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-slot@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-switch@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-switch@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-tabs@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tabs@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-toast@1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-toast@1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.6)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 - '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.7)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.6)(react@18.3.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.6)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 '@radix-ui/rect@1.1.0': {} @@ -24675,15 +24090,15 @@ snapshots: dependencies: react: 18.3.1 - '@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: merge-options: 3.0.4 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - '@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: merge-options: 3.0.4 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) '@react-native-community/cli-clean@14.1.0': dependencies: @@ -24865,9 +24280,9 @@ snapshots: - typescript - utf-8-validate - '@react-native-community/netinfo@11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': + '@react-native-community/netinfo@11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) '@react-native/assets-registry@0.75.3': {} @@ -25268,23 +24683,23 @@ snapshots: '@react-native/normalize-colors@0.75.3': {} - '@react-native/virtualized-lists@0.75.3(@types/react@18.3.6)(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': + '@react-native/virtualized-lists@0.75.3(@types/react@18.3.7)(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@react-native/virtualized-lists@0.75.3(@types/react@18.3.6)(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': + '@react-native/virtualized-lists@0.75.3(@types/react@18.3.7)(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@resvg/resvg-wasm@2.4.0': {} @@ -25299,22 +24714,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/plugin-alias@3.1.9(rollup@2.79.1)': - dependencies: - rollup: 2.79.1 - slash: 3.0.0 - - '@rollup/plugin-commonjs@15.1.0(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 7.2.3 - is-reference: 1.2.1 - magic-string: 0.25.9 - resolve: 1.22.8 - rollup: 2.79.1 - '@rollup/plugin-commonjs@26.0.1(rollup@3.29.4)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@3.29.4) @@ -25326,34 +24725,6 @@ snapshots: optionalDependencies: rollup: 3.29.4 - '@rollup/plugin-json@4.1.0(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 - - '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 - - '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - - '@rollup/pluginutils@3.1.0(rollup@2.79.1)': - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - '@rollup/pluginutils@5.1.0(rollup@3.29.4)': dependencies: '@types/estree': 1.0.5 @@ -25370,99 +24741,51 @@ snapshots: optionalDependencies: rollup: 4.21.3 - '@rollup/rollup-android-arm-eabi@4.21.2': - optional: true - '@rollup/rollup-android-arm-eabi@4.21.3': optional: true - '@rollup/rollup-android-arm64@4.21.2': - optional: true - '@rollup/rollup-android-arm64@4.21.3': optional: true - '@rollup/rollup-darwin-arm64@4.21.2': - optional: true - '@rollup/rollup-darwin-arm64@4.21.3': optional: true - '@rollup/rollup-darwin-x64@4.21.2': - optional: true - '@rollup/rollup-darwin-x64@4.21.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.2': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.2': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.2': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.2': - optional: true - '@rollup/rollup-linux-arm64-musl@4.21.3': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.2': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.2': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.21.2': - optional: true - '@rollup/rollup-linux-x64-gnu@4.21.3': optional: true - '@rollup/rollup-linux-x64-musl@4.21.2': - optional: true - '@rollup/rollup-linux-x64-musl@4.21.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.2': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.2': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.21.2': - optional: true - '@rollup/rollup-win32-x64-msvc@4.21.3': optional: true @@ -25470,56 +24793,18 @@ snapshots: '@rushstack/eslint-patch@1.10.4': {} - '@rushstack/node-core-library@5.9.0(@types/node@20.14.9)': - dependencies: - ajv: 8.13.0 - ajv-draft-04: 1.0.0(ajv@8.13.0) - ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 7.0.1 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.8 - semver: 7.5.4 - optionalDependencies: - '@types/node': 20.14.9 - optional: true - - '@rushstack/rig-package@0.5.3': - dependencies: - resolve: 1.22.8 - strip-json-comments: 3.1.1 - optional: true - - '@rushstack/terminal@0.14.2(@types/node@20.14.9)': - dependencies: - '@rushstack/node-core-library': 5.9.0(@types/node@20.14.9) - supports-color: 8.1.1 - optionalDependencies: - '@types/node': 20.14.9 - optional: true - - '@rushstack/ts-command-line@4.22.8(@types/node@20.14.9)': - dependencies: - '@rushstack/terminal': 0.14.2(@types/node@20.14.9) - '@types/argparse': 1.0.38 - argparse: 1.0.10 - string-argv: 0.3.2 - transitivePeerDependencies: - - '@types/node' - optional: true - - '@scure/base@1.1.8': {} + '@scure/base@1.1.9': {} '@scure/bip32@1.4.0': dependencies: '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 - '@scure/base': 1.1.8 + '@scure/base': 1.1.9 '@scure/bip39@1.4.0': dependencies: '@noble/hashes': 1.5.0 - '@scure/base': 1.1.8 + '@scure/base': 1.1.9 '@segment/loosely-validate-event@2.0.0': dependencies: @@ -25623,7 +24908,7 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -25635,14 +24920,14 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 '@sentry/vercel-edge': 8.30.0 - '@sentry/webpack-plugin': 2.22.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + '@sentry/webpack-plugin': 2.22.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) chalk: 3.0.0 - next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resolve: 1.22.8 rollup: 3.29.4 stacktrace-parser: 0.1.10 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -25721,12 +25006,12 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/webpack-plugin@2.22.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@sentry/webpack-plugin@2.22.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: '@sentry/bundler-plugin-core': 2.22.3 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - encoding - supports-color @@ -26251,12 +25536,12 @@ snapshots: '@storybook/addon-docs@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-sources@3.2.3)': dependencies: - '@mdx-js/react': 3.0.1(@types/react@18.3.6)(react@18.3.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.7)(react@18.3.1) '@storybook/blocks': 8.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@storybook/csf-plugin': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-sources@3.2.3) '@storybook/global': 5.0.0 '@storybook/react-dom-shim': 8.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@types/react': 18.3.6 + '@types/react': 18.3.7 fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -26355,7 +25640,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.3.0(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))(webpack-sources@3.2.3)': + '@storybook/builder-vite@8.3.0(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))(webpack-sources@3.2.3)': dependencies: '@storybook/csf-plugin': 8.3.0(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-sources@3.2.3) '@types/find-cache-dir': 3.2.1 @@ -26367,14 +25652,14 @@ snapshots: magic-string: 0.30.11 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 - vite: 5.4.5(@types/node@22.5.5)(terser@5.32.0) + vite: 5.4.5(@types/node@22.5.5)(terser@5.33.0) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: - supports-color - webpack-sources - '@storybook/builder-webpack5@8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': + '@storybook/builder-webpack5@8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': dependencies: '@storybook/core-webpack': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@types/node': 22.5.5 @@ -26383,25 +25668,25 @@ 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.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) es-module-lexer: 1.5.4 express: 4.21.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) fs-extra: 11.2.0 - html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) magic-string: 0.30.11 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) - webpack-dev-middleware: 6.1.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) + webpack-dev-middleware: 6.1.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -26484,7 +25769,7 @@ snapshots: dependencies: storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@storybook/nextjs@8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) @@ -26499,32 +25784,32 @@ snapshots: '@babel/preset-react': 7.24.7(@babel/core@7.25.2) '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) '@babel/runtime': 7.25.6 - '@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.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) - '@storybook/builder-webpack5': 8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) - '@storybook/preset-react-webpack': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.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.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) + '@storybook/builder-webpack5': 8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) + '@storybook/preset-react-webpack': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) '@storybook/react': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) '@storybook/test': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@types/node': 22.5.5 '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) - css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) + css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) find-up: 5.0.0 fs-extra: 11.2.0 image-size: 1.1.1 loader-utils: 3.3.1 - next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) pnp-webpack-plugin: 1.7.0(typescript@5.6.2) postcss: 8.4.47 - postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 13.3.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + sass-loader: 13.3.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) styled-jsx: 5.1.6(@babel/core@7.25.2)(react@18.3.1) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -26532,7 +25817,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -26552,11 +25837,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': + '@storybook/preset-react-webpack@8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': dependencies: '@storybook/core-webpack': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@storybook/react': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) '@types/node': 22.5.5 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -26569,7 +25854,7 @@ snapshots: semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -26584,7 +25869,7 @@ snapshots: dependencies: storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: debug: 4.3.7(supports-color@8.1.1) endent: 2.1.0 @@ -26594,7 +25879,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.6.2) tslib: 2.7.0 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - supports-color @@ -26610,11 +25895,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@storybook/react-vite@8.3.0(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.21.3)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))(webpack-sources@3.2.3)': + '@storybook/react-vite@8.3.0(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.21.3)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))(webpack-sources@3.2.3)': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0)) '@rollup/pluginutils': 5.1.0(rollup@4.21.3) - '@storybook/builder-vite': 8.3.0(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))(webpack-sources@3.2.3) + '@storybook/builder-vite': 8.3.0(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))(webpack-sources@3.2.3) '@storybook/react': 8.3.0(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) find-up: 5.0.0 magic-string: 0.30.11 @@ -26624,7 +25909,7 @@ snapshots: resolve: 1.22.8 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - vite: 5.4.5(@types/node@22.5.5)(terser@5.32.0) + vite: 5.4.5(@types/node@22.5.5)(terser@5.33.0) transitivePeerDependencies: - '@preact/preset-vite' - '@storybook/test' @@ -27080,7 +26365,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.7.26': optional: true - '@swc/core@1.7.26': + '@swc/core@1.7.26(@swc/helpers@0.5.5)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -27095,6 +26380,7 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.7.26 '@swc/core-win32-ia32-msvc': 1.7.26 '@swc/core-win32-x64-msvc': 1.7.26 + '@swc/helpers': 0.5.5 optional: true '@swc/counter@0.1.3': {} @@ -27149,14 +26435,14 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 '@testing-library/dom': 10.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-dom': 18.3.0 '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': @@ -27192,10 +26478,7 @@ snapshots: '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.5 - - '@types/argparse@1.0.38': - optional: true + '@types/estree': 1.0.6 '@types/aria-query@5.0.4': {} @@ -27229,9 +26512,9 @@ snapshots: '@types/connect': 3.4.38 '@types/node': 20.14.9 - '@types/bun@1.1.8': + '@types/bun@1.1.9': dependencies: - bun-types: 1.1.26 + bun-types: 1.1.27 '@types/cli-progress@3.11.5': dependencies: @@ -27305,22 +26588,16 @@ snapshots: '@types/escodegen@0.0.6': {} - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - optional: true - '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.5 - - '@types/estree@0.0.39': {} + '@types/estree': 1.0.6 '@types/estree@0.0.51': {} '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/express-serve-static-core@4.19.5': dependencies: '@types/node': 20.14.9 @@ -27342,7 +26619,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.9 + '@types/node': 22.5.5 '@types/hast@2.3.10': dependencies: @@ -27408,13 +26685,11 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/minimist@1.2.5': {} - '@types/ms@0.7.34': {} '@types/mute-stream@0.0.4': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.5.5 '@types/mysql@2.15.26': dependencies: @@ -27422,12 +26697,12 @@ snapshots: '@types/node-fetch@2.6.4': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.5.5 form-data: 3.0.1 '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.5.5 '@types/node@12.20.55': {} @@ -27449,8 +26724,6 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/normalize-package-data@2.4.4': {} - '@types/papaparse@5.3.14': dependencies: '@types/node': 20.14.9 @@ -27487,30 +26760,26 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-html-parser@2.0.6': dependencies: '@types/htmlparser2': 3.10.7 - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-table@7.7.20': dependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/react-transition-group@4.4.10': dependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - '@types/react@18.3.6': + '@types/react@18.3.7': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 - '@types/resolve@1.17.1': - dependencies: - '@types/node': 20.14.9 - '@types/resolve@1.20.6': {} '@types/semver@6.2.7': {} @@ -27540,7 +26809,7 @@ snapshots: '@types/swagger-ui-react@4.18.3': dependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 '@types/tough-cookie@4.0.5': {} @@ -27815,18 +27084,18 @@ snapshots: - debug - utf-8-validate - '@vitejs/plugin-react@4.3.1(vite@5.4.5(@types/node@22.5.5)(terser@5.32.0))': + '@vitejs/plugin-react@4.3.1(vite@5.4.5(@types/node@22.5.5)(terser@5.33.0))': dependencies: '@babel/core': 7.24.5 '@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.5) '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.5) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.5(@types/node@22.5.5)(terser@5.32.0) + vite: 5.4.5(@types/node@22.5.5)(terser@5.33.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.32.0))': + '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.33.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -27840,7 +27109,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.32.0) + vitest: 2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.33.0) transitivePeerDependencies: - supports-color @@ -27858,23 +27127,23 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(msw@2.4.7(typescript@5.6.2))(vite@5.4.6(@types/node@22.5.5)(terser@5.32.0))': + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(msw@2.4.7(typescript@5.6.2))(vite@5.4.6(@types/node@22.5.5)(terser@5.33.0))': dependencies: '@vitest/spy': 2.1.1 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: msw: 2.4.7(typescript@5.6.2) - vite: 5.4.6(@types/node@22.5.5)(terser@5.32.0) + vite: 5.4.6(@types/node@22.5.5)(terser@5.33.0) - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(msw@2.4.8(typescript@5.6.2))(vite@5.4.6(@types/node@20.14.9)(terser@5.32.0))': + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(msw@2.4.8(typescript@5.6.2))(vite@5.4.6(@types/node@20.14.9)(terser@5.33.0))': dependencies: '@vitest/spy': 2.1.1 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: msw: 2.4.8(typescript@5.6.2) - vite: 5.4.6(@types/node@20.14.9)(terser@5.32.0) + vite: 5.4.6(@types/node@20.14.9)(terser@5.33.0) '@vitest/pretty-format@2.0.5': dependencies: @@ -27912,7 +27181,7 @@ snapshots: sirv: 2.0.4 tinyglobby: 0.2.6 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.32.0) + vitest: 2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.33.0) '@vitest/utils@2.0.5': dependencies: @@ -27927,21 +27196,21 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 - '@walletconnect/core@2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10)': + '@walletconnect/core@2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/jsonrpc-ws-connection': 1.0.14(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) '@walletconnect/logger': 2.1.2 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.0.4 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) - '@walletconnect/utils': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/types': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/utils': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) events: 3.3.0 lodash.isequal: 4.5.0 uint8arrays: 3.1.0 @@ -27967,17 +27236,17 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(@types/react@18.3.6)(bufferutil@4.0.8)(ioredis@5.4.1)(react@18.3.1)(utf-8-validate@5.0.10)': + '@walletconnect/ethereum-provider@2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(@types/react@18.3.7)(bufferutil@4.0.8)(ioredis@5.4.1)(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/modal': 2.6.2(@types/react@18.3.6)(react@18.3.1) - '@walletconnect/sign-client': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) - '@walletconnect/universal-provider': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) - '@walletconnect/utils': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/modal': 2.6.2(@types/react@18.3.7)(react@18.3.1) + '@walletconnect/sign-client': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/universal-provider': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -28047,13 +27316,13 @@ snapshots: - bufferutil - utf-8-validate - '@walletconnect/keyvaluestorage@1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1)': + '@walletconnect/keyvaluestorage@1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1)': dependencies: '@walletconnect/safe-json': 1.0.2 idb-keyval: 6.2.1 - unstorage: 1.10.2(idb-keyval@6.2.1)(ioredis@5.4.1) + unstorage: 1.12.0(idb-keyval@6.2.1)(ioredis@5.4.1) optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -28074,16 +27343,16 @@ snapshots: '@walletconnect/safe-json': 1.0.2 pino: 7.11.0 - '@walletconnect/modal-core@2.6.2(@types/react@18.3.6)(react@18.3.1)': + '@walletconnect/modal-core@2.6.2(@types/react@18.3.7)(react@18.3.1)': dependencies: - valtio: 1.11.2(@types/react@18.3.6)(react@18.3.1) + valtio: 1.11.2(@types/react@18.3.7)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react - '@walletconnect/modal-ui@2.6.2(@types/react@18.3.6)(react@18.3.1)': + '@walletconnect/modal-ui@2.6.2(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@walletconnect/modal-core': 2.6.2(@types/react@18.3.6)(react@18.3.1) + '@walletconnect/modal-core': 2.6.2(@types/react@18.3.7)(react@18.3.1) lit: 2.8.0 motion: 10.16.2 qrcode: 1.5.3 @@ -28091,22 +27360,22 @@ snapshots: - '@types/react' - react - '@walletconnect/modal@2.6.2(@types/react@18.3.6)(react@18.3.1)': + '@walletconnect/modal@2.6.2(@types/react@18.3.7)(react@18.3.1)': dependencies: - '@walletconnect/modal-core': 2.6.2(@types/react@18.3.6)(react@18.3.1) - '@walletconnect/modal-ui': 2.6.2(@types/react@18.3.6)(react@18.3.1) + '@walletconnect/modal-core': 2.6.2(@types/react@18.3.7)(react@18.3.1) + '@walletconnect/modal-ui': 2.6.2(@types/react@18.3.7)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react - ? '@walletconnect/react-native-compat@2.13.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@react-native-community/netinfo@11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-application@5.9.1(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))' + ? '@walletconnect/react-native-compat@2.13.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@react-native-community/netinfo@11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(expo-application@5.9.1(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))' : dependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@react-native-community/netinfo': 11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@react-native-community/netinfo': 11.3.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) events: 3.3.0 fast-text-encoding: 1.0.6 - react-native-get-random-values: 1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - react-native-url-polyfill: 2.0.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + react-native-get-random-values: 1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + react-native-url-polyfill: 2.0.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) optionalDependencies: expo-application: 5.9.1(expo@51.0.32(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10)) transitivePeerDependencies: @@ -28123,22 +27392,22 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 tslib: 1.14.1 - uint8arrays: 3.1.1 + uint8arrays: 3.1.0 '@walletconnect/safe-json@1.0.2': dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10)': + '@walletconnect/sign-client@2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10)': dependencies: - '@walletconnect/core': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) + '@walletconnect/core': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) - '@walletconnect/utils': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/types': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/utils': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -28162,12 +27431,12 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/types@2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1)': + '@walletconnect/types@2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: @@ -28186,16 +27455,16 @@ snapshots: - ioredis - uWebSockets.js - '@walletconnect/universal-provider@2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10)': + '@walletconnect/universal-provider@2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) - '@walletconnect/utils': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/sign-client': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(ioredis@5.4.1)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/utils': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -28216,7 +27485,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@walletconnect/utils@2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1)': + '@walletconnect/utils@2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1)': dependencies: '@stablelib/chacha20poly1305': 1.0.1 '@stablelib/hkdf': 1.0.1 @@ -28227,7 +27496,7 @@ snapshots: '@walletconnect/relay-auth': 1.0.4 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.16.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) + '@walletconnect/types': 2.16.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)))(ioredis@5.4.1) '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 detect-browser: 5.3.0 @@ -28344,7 +27613,7 @@ snapshots: '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 '@xmtp/proto': 3.61.1 - viem: 2.21.7(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.9(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) transitivePeerDependencies: - bufferutil - typescript @@ -28402,7 +27671,9 @@ snapshots: acorn-walk@8.2.0: {} - acorn-walk@8.3.2: {} + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 acorn@7.4.1: {} @@ -28436,20 +27707,10 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ajv-draft-04@1.0.0(ajv@8.13.0): - optionalDependencies: - ajv: 8.13.0 - optional: true - ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 - ajv-formats@3.0.1(ajv@8.13.0): - optionalDependencies: - ajv: 8.13.0 - optional: true - ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -28466,21 +27727,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - ajv@8.13.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - optional: true - ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -28661,8 +27907,6 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - arrify@1.0.1: {} - asap@2.0.6: {} asn1.js@4.10.1: @@ -28744,20 +27988,20 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - aws-amplify@5.3.19(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)): - dependencies: - '@aws-amplify/analytics': 6.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/datastore': 4.7.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/geo': 2.3.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/interactions': 5.2.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/notifications': 1.6.13(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/predictions': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + aws-amplify@5.3.19(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)): + dependencies: + '@aws-amplify/analytics': 6.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/datastore': 4.7.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/geo': 2.3.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/interactions': 5.2.18(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/notifications': 1.6.13(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/predictions': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)) tslib: 2.7.0 transitivePeerDependencies: - aws-crt @@ -28765,20 +28009,20 @@ snapshots: - encoding - react-native - aws-amplify@5.3.19(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): - dependencies: - '@aws-amplify/analytics': 6.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/datastore': 4.7.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/geo': 2.3.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/interactions': 5.2.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/notifications': 1.6.13(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/predictions': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + aws-amplify@5.3.19(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): + dependencies: + '@aws-amplify/analytics': 6.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/api': 5.4.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/auth': 5.6.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/cache': 5.1.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/core': 5.8.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/datastore': 4.7.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/geo': 2.3.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/interactions': 5.2.18(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/notifications': 1.6.13(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/predictions': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/pubsub': 5.5.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@aws-amplify/storage': 5.9.12(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)) tslib: 2.7.0 transitivePeerDependencies: - aws-crt @@ -28814,12 +28058,12 @@ snapshots: dependencies: '@babel/core': 7.25.2 - babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) babel-plugin-macros@3.1.0: dependencies: @@ -28875,10 +28119,10 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517: + babel-plugin-react-compiler@0.0.0-experimental-ca8e0be-20240916: dependencies: '@babel/generator': 7.2.0 - '@babel/types': 7.24.5 + '@babel/types': 7.25.6 chalk: 4.1.2 invariant: 2.2.4 pretty-format: 24.9.0 @@ -28908,7 +28152,7 @@ snapshots: '@babel/preset-react': 7.24.7(@babel/core@7.24.5) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.5) '@react-native/babel-preset': 0.74.87(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5)) - babel-plugin-react-compiler: 0.0.0-experimental-592953e-20240517 + babel-plugin-react-compiler: 0.0.0-experimental-ca8e0be-20240916 babel-plugin-react-native-web: 0.19.12 react-refresh: 0.14.2 transitivePeerDependencies: @@ -28925,7 +28169,7 @@ snapshots: '@babel/preset-react': 7.24.7(@babel/core@7.25.2) '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) '@react-native/babel-preset': 0.74.87(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2)) - babel-plugin-react-compiler: 0.0.0-experimental-592953e-20240517 + babel-plugin-react-compiler: 0.0.0-experimental-ca8e0be-20240916 babel-plugin-react-native-web: 0.19.12 react-refresh: 0.14.2 transitivePeerDependencies: @@ -29140,22 +28384,15 @@ snapshots: node-gyp-build: 4.8.2 optional: true - builtin-modules@3.3.0: {} - builtin-status-codes@3.0.0: {} builtins@1.0.3: {} - bun-types@1.1.26: + bun-types@1.1.27: dependencies: '@types/node': 20.12.14 '@types/ws': 8.5.12 - bundle-require@5.0.0(esbuild@0.23.1): - dependencies: - esbuild: 0.23.1 - load-tsconfig: 0.2.5 - busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -29236,6 +28473,8 @@ snapshots: caniuse-lite@1.0.30001657: {} + caniuse-lite@1.0.30001660: {} + cardinal@2.1.1: dependencies: ansicolors: 0.3.2 @@ -29253,19 +28492,19 @@ snapshots: loupe: 3.1.1 pathval: 2.0.0 - chakra-react-select@4.9.2(kftkeeraumrjrdtzyuwmqpfho4): + chakra-react-select@4.9.2(ooyxqpmhhomg5ipsk5jt3smuua): dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.6)(react@18.3.1))(@types/react@18.3.6)(react@18.3.1))(react@18.3.1) - '@emotion/react': 11.13.3(@types/react@18.3.6)(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(framer-motion@11.5.4(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-select: 5.8.0(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-select: 5.8.0(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@types/react' - supports-color @@ -29308,13 +28547,13 @@ snapshots: check-error@2.1.1: {} - checkly@4.9.0(@swc/core@1.7.26)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10): + checkly@4.9.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: - '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) '@oclif/plugin-help': 5.1.20 - '@oclif/plugin-not-found': 2.3.23(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/plugin-not-found': 2.3.23(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) '@oclif/plugin-plugins': 5.4.4 - '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) acorn: 8.8.1 acorn-walk: 8.2.0 @@ -29369,7 +28608,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 20.14.9 + '@types/node': 22.5.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -29387,7 +28626,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 20.14.9 + '@types/node': 22.5.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -29514,10 +28753,10 @@ snapshots: cluster-key-slot@1.1.2: {} - cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -29659,7 +28898,7 @@ snapshots: convert-source-map@2.0.0: {} - cookie-es@1.1.0: {} + cookie-es@1.2.2: {} cookie-signature@1.0.6: {} @@ -29798,7 +29037,7 @@ snapshots: css-color-keywords@1.0.0: {} - css-loader@6.11.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + css-loader@6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -29809,7 +29048,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) css-select@4.3.0: dependencies: @@ -29910,8 +29149,6 @@ snapshots: dataloader@1.4.0: {} - dataloader@2.2.2: {} - date-fns@3.6.0: {} dayjs@1.11.13: {} @@ -29950,11 +29187,6 @@ snapshots: optionalDependencies: supports-color: 8.1.1 - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - decamelize@1.2.0: {} decimal.js-light@2.5.1: {} @@ -30249,6 +29481,8 @@ snapshots: emoji-regex@10.3.0: {} + emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -30295,6 +29529,8 @@ snapshots: eol@0.9.1: {} + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -30543,11 +29779,6 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@9.1.0(eslint@9.10.0(jiti@1.21.6)): - dependencies: - eslint: 9.10.0(jiti@1.21.6) - optional: true - eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -30575,24 +29806,25 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-mdx@2.3.4(eslint@8.57.0): + eslint-mdx@3.1.5(eslint@8.57.0): dependencies: acorn: 8.12.1 acorn-jsx: 5.3.2(acorn@8.12.1) eslint: 8.57.0 espree: 9.6.1 - estree-util-visit: 1.2.1 - remark-mdx: 2.3.0 - remark-parse: 10.0.2 - remark-stringify: 10.0.3 + estree-util-visit: 2.0.0 + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 synckit: 0.9.1 tslib: 2.7.0 - unified: 10.1.2 - unified-engine: 10.1.0 - unist-util-visit: 4.1.2 + unified: 11.0.5 + unified-engine: 11.2.1 + unist-util-visit: 5.0.0 uvu: 0.5.6 - vfile: 5.3.7 + vfile: 6.0.3 transitivePeerDependencies: + - bluebird - supports-color eslint-module-utils@2.11.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0): @@ -30606,16 +29838,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.9.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.6.2) - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - eslint-module-utils@2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 @@ -30627,48 +29849,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.9.0(eslint-import-resolver-node@0.3.9)(eslint@9.10.0(jiti@1.21.6)): - dependencies: - debug: 3.2.7 - optionalDependencies: - eslint: 9.10.0(jiti@1.21.6) - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-i18next@6.1.0: - dependencies: - lodash: 4.17.21 - requireindex: 1.1.0 - - eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 7.6.3 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.6.2) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): dependencies: '@rtsao/scc': 1.1.0 @@ -30697,36 +29877,6 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.30.0(eslint@9.10.0(jiti@1.21.6)): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.10.0(jiti@1.21.6) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.9.0(eslint-import-resolver-node@0.3.9)(eslint@9.10.0(jiti@1.21.6)) - hasown: 2.0.2 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 7.6.3 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-inclusive-language@2.2.1: - dependencies: - humps: 2.0.1 - eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0): dependencies: aria-query: 5.1.3 @@ -30754,35 +29904,22 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-mdx@2.3.4(eslint@8.57.0): + eslint-plugin-mdx@3.1.5(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-mdx: 2.3.4(eslint@8.57.0) + eslint-mdx: 3.1.5(eslint@8.57.0) eslint-plugin-markdown: 3.0.1(eslint@8.57.0) - remark-mdx: 2.3.0 - remark-parse: 10.0.2 - remark-stringify: 10.0.3 + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 tslib: 2.7.0 - unified: 10.1.2 - vfile: 5.3.7 + unified: 11.0.5 + vfile: 6.0.3 transitivePeerDependencies: + - bluebird - supports-color - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.10.0(jiti@1.21.6)))(eslint@9.10.0(jiti@1.21.6))(prettier@3.3.3): - dependencies: - eslint: 9.10.0(jiti@1.21.6) - prettier: 3.3.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.9.1 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.0(eslint@9.10.0(jiti@1.21.6)) - - eslint-plugin-promise@6.6.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - - eslint-plugin-react-compiler@0.0.0-experimental-9ed098e-20240725(eslint@8.57.0): + eslint-plugin-react-compiler@0.0.0-experimental-ca16900-20240916(eslint@8.57.0): dependencies: '@babel/core': 7.25.2 '@babel/parser': 7.25.6 @@ -30790,7 +29927,7 @@ snapshots: eslint: 8.57.0 hermes-parser: 0.20.1 zod: 3.23.8 - zod-validation-error: 3.3.0(zod@3.23.8) + zod-validation-error: 3.4.0(zod@3.23.8) transitivePeerDependencies: - supports-color @@ -30833,16 +29970,11 @@ snapshots: eslint-plugin-svg-jsx@1.2.4: {} - eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))): + eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))): dependencies: fast-glob: 3.3.2 postcss: 8.4.47 - tailwindcss: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) - - eslint-plugin-tsdoc@0.3.0: - dependencies: - '@microsoft/tsdoc': 0.15.0 - '@microsoft/tsdoc-config': 0.17.0 + tailwindcss: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) eslint-scope@5.1.1: dependencies: @@ -30854,15 +29986,8 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.0.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} - eslint@8.57.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) @@ -30906,53 +30031,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.10.0(jiti@1.21.6): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.6)) - '@eslint-community/regexpp': 4.11.1 - '@eslint/config-array': 0.18.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.10.0 - '@eslint/plugin-kit': 0.1.0 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@8.1.1) - escape-string-regexp: 4.0.0 - eslint-scope: 8.0.2 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - optionalDependencies: - jiti: 1.21.6 - transitivePeerDependencies: - - supports-color - - espree@10.1.0: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.0.0 - espree@9.6.1: dependencies: acorn: 8.12.1 @@ -30965,10 +30043,6 @@ snapshots: dependencies: estraverse: 5.3.0 - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -31014,7 +30088,10 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 2.0.11 - estree-walker@1.0.1: {} + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 estree-walker@2.0.2: {} @@ -31369,12 +30446,8 @@ snapshots: fast-base64-decode@1.0.0: {} - fast-deep-equal@2.0.1: {} - fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-equals@5.0.1: {} fast-fifo@1.3.2: {} @@ -31429,10 +30502,6 @@ snapshots: dependencies: format: 0.2.2 - fault@2.0.1: - dependencies: - format: 0.2.2 - fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -31477,10 +30546,6 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - file-selector@0.6.0: dependencies: tslib: 2.7.0 @@ -31577,11 +30642,6 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 - flat-cache@4.0.1: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - flat@6.0.1: {} flatted@3.3.1: {} @@ -31611,7 +30671,12 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -31626,7 +30691,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) form-data-encoder@2.1.4: {} @@ -31800,11 +30865,6 @@ snapshots: github-slugger@2.0.0: {} - glob-base@0.3.0: - dependencies: - glob-parent: 6.0.2 - is-glob: 2.0.1 - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -31830,7 +30890,7 @@ snapshots: glob@10.3.10: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 2.3.6 minimatch: 9.0.5 minipass: 7.1.2 @@ -31838,7 +30898,7 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 @@ -31872,14 +30932,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - glob@9.3.5: dependencies: fs.realpath: 1.0.0 @@ -31893,8 +30945,6 @@ snapshots: dependencies: type-fest: 0.20.2 - globals@14.0.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -31953,35 +31003,26 @@ snapshots: dependencies: duplexer: 0.1.2 - h3@1.11.1: + h3@1.12.0: dependencies: - cookie-es: 1.1.0 + cookie-es: 1.2.2 crossws: 0.2.4 defu: 6.1.4 destr: 2.0.3 iron-webcrypto: 1.2.1 - ohash: 1.1.3 + ohash: 1.1.4 radix3: 1.1.2 - ufo: 1.5.3 + ufo: 1.5.4 uncrypto: 0.1.3 - unenv: 1.9.0 + unenv: 1.10.0 transitivePeerDependencies: - uWebSockets.js - happy-dom@14.12.3: - dependencies: - entities: 4.5.0 - webidl-conversions: 7.0.0 - whatwg-mimetype: 3.0.0 - happy-dom@15.7.4: dependencies: entities: 4.5.0 webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 - optional: true - - hard-rejection@2.1.0: {} has-bigints@1.0.2: {} @@ -32152,8 +31193,6 @@ snapshots: dependencies: react-is: 16.13.1 - hosted-git-info@2.8.9: {} - hosted-git-info@3.0.8: dependencies: lru-cache: 6.0.0 @@ -32182,7 +31221,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -32190,7 +31229,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) htmlparser2@3.10.1: dependencies: @@ -32275,8 +31314,6 @@ snapshots: human-signals@5.0.0: {} - humps@2.0.1: {} - hyperlinker@1.0.0: {} iconv-lite@0.4.24: @@ -32326,10 +31363,7 @@ snapshots: cjs-module-lexer: 1.4.0 module-details-from-path: 1.0.3 - import-lazy@4.0.0: - optional: true - - import-meta-resolve@2.2.2: {} + import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: {} @@ -32460,10 +31494,6 @@ snapshots: is-callable@1.2.7: {} - is-ci@2.0.0: - dependencies: - ci-info: 2.0.0 - is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -32486,8 +31516,6 @@ snapshots: is-docker@3.0.0: {} - is-dotfile@1.0.3: {} - is-empty@1.2.0: {} is-extglob@1.0.0: {} @@ -32530,8 +31558,6 @@ snapshots: is-map@2.0.3: {} - is-module@1.0.0: {} - is-nan@1.3.2: dependencies: call-bind: 1.0.7 @@ -32553,8 +31579,6 @@ snapshots: is-path-inside@3.0.3: {} - is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} @@ -32763,21 +31787,15 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-worker@26.6.2: - dependencies: - '@types/node': 20.14.9 - merge-stream: 2.0.0 - supports-color: 7.2.0 - jest-worker@27.5.1: dependencies: - '@types/node': 20.14.9 + '@types/node': 22.5.5 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.14.9 + '@types/node': 22.5.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -32798,8 +31816,6 @@ snapshots: join-component@1.1.0: {} - joycon@3.1.1: {} - js-cookie@2.2.1: {} js-file-download@0.4.12: {} @@ -33060,14 +32076,14 @@ snapshots: crossws: 0.2.4 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.11.1 + h3: 1.12.0 http-shutdown: 1.2.2 jiti: 1.21.6 - mlly: 1.7.0 + mlly: 1.7.1 node-forge: 1.3.1 pathe: 1.1.2 std-env: 3.7.0 - ufo: 1.5.3 + ufo: 1.5.4 untun: 0.1.3 uqr: 0.1.2 transitivePeerDependencies: @@ -33089,12 +32105,12 @@ snapshots: lit-element: 3.3.3 lit-html: 2.8.0 - load-plugin@5.1.0: + load-plugin@6.0.3: dependencies: - '@npmcli/config': 6.4.1 - import-meta-resolve: 2.2.2 - - load-tsconfig@0.2.5: {} + '@npmcli/config': 8.3.4 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - bluebird loader-runner@4.3.0: {} @@ -33141,8 +32157,6 @@ snapshots: lodash.snakecase@4.1.1: {} - lodash.sortby@4.7.0: {} - lodash.startcase@4.4.0: {} lodash.throttle@4.1.1: {} @@ -33228,18 +32242,10 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - magic-string@0.27.0: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.10: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - magic-string@0.30.11: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -33273,8 +32279,6 @@ snapshots: dependencies: tmpl: 1.0.5 - map-obj@1.0.1: {} - map-obj@4.3.0: {} map-or-similar@1.5.0: {} @@ -33510,6 +32514,17 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-jsx@2.1.4: dependencies: '@types/estree-jsx': 1.0.5 @@ -33532,7 +32547,7 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 + '@types/unist': 3.0.2 ccount: 2.0.1 devlop: 1.1.0 mdast-util-from-markdown: 2.0.1 @@ -33545,6 +32560,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-jsx@3.1.3: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-to-markdown: 2.1.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx@2.0.1: dependencies: mdast-util-from-markdown: 1.3.1 @@ -33555,6 +32587,16 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.1 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdxjs-esm@1.3.1: dependencies: '@types/estree-jsx': 1.0.5 @@ -33663,20 +32705,6 @@ snapshots: memory-cache@0.2.0: {} - meow@7.1.1: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - merge-descriptors@1.0.3: {} merge-options@3.0.4: @@ -34023,7 +33051,7 @@ snapshots: micromark-extension-mdx-expression@1.0.8: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -34032,10 +33060,21 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-extension-mdx-expression@3.0.0: + dependencies: + '@types/estree': 1.0.6 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 @@ -34045,13 +33084,31 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-extension-mdx-jsx@3.0.1: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.6 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + micromark-extension-mdx-md@1.0.1: dependencies: micromark-util-types: 1.1.0 + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.0 + micromark-extension-mdxjs-esm@1.0.5: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-core-commonmark: 1.1.0 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 @@ -34061,6 +33118,18 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.6 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 + micromark-extension-mdxjs@1.0.1: dependencies: acorn: 8.12.1 @@ -34072,6 +33141,17 @@ snapshots: micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + micromark-extension-mdx-expression: 3.0.0 + micromark-extension-mdx-jsx: 3.0.1 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + micromark-factory-destination@1.1.0: dependencies: micromark-util-character: 1.2.0 @@ -34100,7 +33180,7 @@ snapshots: micromark-factory-mdx-expression@1.0.9: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.1.0 @@ -34109,6 +33189,18 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-factory-mdx-expression@2.0.2: + dependencies: + '@types/estree': 1.0.6 + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 + micromark-factory-space@1.1.0: dependencies: micromark-util-character: 1.2.0 @@ -34216,7 +33308,7 @@ snapshots: micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/unist': 2.0.11 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 @@ -34224,6 +33316,17 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 + micromark-util-events-to-acorn@2.0.2: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.6 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + micromark-util-html-tag-name@1.2.0: {} micromark-util-html-tag-name@2.0.0: {} @@ -34379,11 +33482,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@3.0.8: - dependencies: - brace-expansion: 1.1.11 - optional: true - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -34404,12 +33502,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - minimist@1.2.8: {} minipass-collect@2.0.1: @@ -34458,22 +33550,22 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.7.0: + mlly@1.7.1: dependencies: acorn: 8.12.1 pathe: 1.1.2 - pkg-types: 1.1.1 - ufo: 1.5.3 + pkg-types: 1.2.0 + ufo: 1.5.4 module-details-from-path@1.0.3: {} motion@10.16.2: dependencies: - '@motionone/animation': 10.17.0 - '@motionone/dom': 10.17.0 + '@motionone/animation': 10.18.0 + '@motionone/dom': 10.18.0 '@motionone/svelte': 10.16.4 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 '@motionone/vue': 10.16.4 mqtt-packet@6.10.0: @@ -34599,61 +33691,61 @@ snapshots: netmask@2.0.2: {} - next-plausible@3.12.2(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-plausible@3.12.2(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next-seo@6.6.0(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-seo@6.6.0(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next-sitemap@4.2.3(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-sitemap@4.2.3(next@14.2.12(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.6 fast-glob: 3.3.2 minimist: 1.2.8 - next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 14.2.11 + '@next/env': 14.2.12 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001657 + caniuse-lite: 1.0.30001660 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.1(@babel/core@7.25.2)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.11 - '@next/swc-darwin-x64': 14.2.11 - '@next/swc-linux-arm64-gnu': 14.2.11 - '@next/swc-linux-arm64-musl': 14.2.11 - '@next/swc-linux-x64-gnu': 14.2.11 - '@next/swc-linux-x64-musl': 14.2.11 - '@next/swc-win32-arm64-msvc': 14.2.11 - '@next/swc-win32-ia32-msvc': 14.2.11 - '@next/swc-win32-x64-msvc': 14.2.11 + '@next/swc-darwin-arm64': 14.2.12 + '@next/swc-darwin-x64': 14.2.12 + '@next/swc-linux-arm64-gnu': 14.2.12 + '@next/swc-linux-arm64-musl': 14.2.12 + '@next/swc-linux-x64-gnu': 14.2.12 + '@next/swc-linux-x64-musl': 14.2.12 + '@next/swc-win32-arm64-msvc': 14.2.12 + '@next/swc-win32-ia32-msvc': 14.2.12 + '@next/swc-win32-x64-msvc': 14.2.12 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.47.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - nextjs-toploader@1.6.12(next@14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nextjs-toploader@1.6.12(next@14.2.12(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.11(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nprogress: 0.2.0 prop-types: 15.8.1 react: 18.3.1 @@ -34677,7 +33769,7 @@ snapshots: node-addon-api@2.0.2: {} - node-addon-api@7.1.0: {} + node-addon-api@7.1.1: {} node-dir@0.1.17: dependencies: @@ -34733,7 +33825,7 @@ snapshots: util: 0.11.1 vm-browserify: 1.1.2 - node-polyfill-webpack-plugin@2.0.1(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -34760,7 +33852,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) node-releases@2.0.18: {} @@ -34770,10 +33862,9 @@ snapshots: dependencies: abbrev: 2.0.0 - normalize-package-data@2.5.0: + normalize-package-data@6.0.2: dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 + hosted-git-info: 7.0.2 semver: 7.6.3 validate-npm-package-license: 3.0.4 @@ -34787,6 +33878,10 @@ snapshots: dependencies: npm-normalize-package-bin: 1.0.1 + npm-install-checks@6.3.0: + dependencies: + semver: 7.6.3 + npm-normalize-package-bin@1.0.1: {} npm-normalize-package-bin@3.0.1: {} @@ -34812,6 +33907,13 @@ snapshots: npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 + npm-pick-manifest@9.1.0: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 11.0.3 + semver: 7.6.3 + npm-run-path@2.0.2: dependencies: path-key: 2.0.1 @@ -34900,9 +34002,9 @@ snapshots: dependencies: destr: 2.0.3 node-fetch-native: 1.6.4 - ufo: 1.5.3 + ufo: 1.5.4 - ohash@1.1.3: {} + ohash@1.1.4: {} on-exit-leak-free@0.2.0: {} @@ -35147,13 +34249,6 @@ snapshots: parse-github-url@1.0.2: {} - parse-glob@3.0.4: - dependencies: - glob-base: 0.3.0 - is-dotfile: 1.0.3 - is-extglob: 1.0.0 - is-glob: 2.0.1 - parse-json@4.0.0: dependencies: error-ex: 1.3.2 @@ -35166,12 +34261,13 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-json@6.0.2: + parse-json@7.1.1: dependencies: '@babel/code-frame': 7.24.7 error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 + json-parse-even-better-errors: 3.0.2 lines-and-columns: 2.0.4 + type-fest: 3.13.1 parse-ms@4.0.0: {} @@ -35290,7 +34386,7 @@ snapshots: process-warning: 1.0.0 quick-format-unescaped: 4.0.4 real-require: 0.1.0 - safe-stable-stringify: 2.4.3 + safe-stable-stringify: 2.5.0 sonic-boom: 2.8.0 thread-stream: 0.15.2 @@ -35308,10 +34404,10 @@ snapshots: dependencies: find-up: 6.3.0 - pkg-types@1.1.1: + pkg-types@1.2.0: dependencies: confbox: 0.1.7 - mlly: 1.7.0 + mlly: 1.7.1 pathe: 1.1.2 pkg-up@3.1.0: @@ -35362,31 +34458,22 @@ 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.2)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.5.1): - dependencies: - lilconfig: 3.1.2 - optionalDependencies: - jiti: 1.21.6 - postcss: 8.4.47 - tsx: 4.19.1 - yaml: 2.5.1 - - postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: cosmiconfig: 9.0.0(typescript@5.6.2) jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - typescript @@ -35432,7 +34519,7 @@ snapshots: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 - source-map-js: 1.2.0 + source-map-js: 1.2.1 postcss@8.4.47: dependencies: @@ -35450,7 +34537,7 @@ snapshots: dependencies: xtend: 4.0.2 - posthog-js@1.161.5: + posthog-js@1.161.6: dependencies: fflate: 0.4.8 preact: 10.24.0 @@ -35482,10 +34569,6 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - prettier@2.8.8: {} prettier@3.3.3: {} @@ -35537,8 +34620,6 @@ snapshots: prismjs@1.29.0: {} - proc-log@3.0.0: {} - proc-log@4.2.0: {} process-nextick-args@2.0.1: {} @@ -35549,6 +34630,13 @@ snapshots: progress@2.0.3: {} + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + promise@7.3.1: dependencies: asap: 2.0.6 @@ -35834,17 +34922,17 @@ snapshots: react-fast-compare@3.2.2: {} - react-focus-lock@2.12.1(@types/react@18.3.6)(react@18.3.1): + react-focus-lock@2.12.1(@types/react@18.3.7)(react@18.3.1): dependencies: '@babel/runtime': 7.25.6 focus-lock: 1.3.5 prop-types: 15.8.1 react: 18.3.1 react-clientside-effect: 1.2.6(react@18.3.1) - use-callback-ref: 1.3.2(@types/react@18.3.6)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.6)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.7)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 react-hook-form@7.52.0(react@18.3.1): dependencies: @@ -35888,10 +34976,10 @@ snapshots: react-is@18.3.1: {} - react-markdown@9.0.1(@types/react@18.3.6)(react@18.3.1): + react-markdown@9.0.1(@types/react@18.3.7)(react@18.3.1): dependencies: '@types/hast': 3.0.4 - '@types/react': 18.3.6 + '@types/react': 18.3.7 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 @@ -35905,105 +34993,105 @@ snapshots: transitivePeerDependencies: - supports-color - react-native-aes-gcm-crypto@0.2.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-aes-gcm-crypto@0.2.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - react-native-aes-gcm-crypto@0.2.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-aes-gcm-crypto@0.2.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) - react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)): + react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)): dependencies: fast-base64-decode: 1.0.0 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): + react-native-get-random-values@1.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): dependencies: fast-base64-decode: 1.0.0 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) - react-native-mmkv@2.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-mmkv@2.11.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - react-native-mmkv@2.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-mmkv@2.11.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) - react-native-passkey@3.0.0-beta2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-passkey@3.0.0-beta2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - react-native-quick-base64@2.1.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-quick-base64@2.1.2(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: base64-js: 1.5.1 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - react-native-quick-base64@2.1.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-quick-base64@2.1.2(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: base64-js: 1.5.1 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) - react-native-quick-crypto@0.7.4(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-quick-crypto@0.7.4(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - '@craftzdog/react-native-buffer': 6.0.5(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + '@craftzdog/react-native-buffer': 6.0.5(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) events: 3.3.0 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) readable-stream: 4.5.2 string_decoder: 1.3.0 util: 0.12.5 - react-native-quick-crypto@0.7.4(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-quick-crypto@0.7.4(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - '@craftzdog/react-native-buffer': 6.0.5(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + '@craftzdog/react-native-buffer': 6.0.5(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) events: 3.3.0 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) readable-stream: 4.5.2 string_decoder: 1.3.0 util: 0.12.5 - react-native-svg@15.6.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-svg@15.6.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: css-select: 5.1.0 css-tree: 1.1.3 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) warn-once: 0.1.1 - react-native-svg@15.6.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-svg@15.7.1(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: css-select: 5.1.0 css-tree: 1.1.3 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) warn-once: 0.1.1 - react-native-url-polyfill@1.3.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)): + react-native-url-polyfill@1.3.0(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)): dependencies: - react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) whatwg-url-without-unicode: 8.0.0-3 - react-native-url-polyfill@1.3.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): + react-native-url-polyfill@1.3.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): dependencies: - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) whatwg-url-without-unicode: 8.0.0-3 - react-native-url-polyfill@2.0.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): + react-native-url-polyfill@2.0.0(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)): dependencies: - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10) whatwg-url-without-unicode: 8.0.0-3 - react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10): + react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native-community/cli': 14.1.0(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) @@ -36015,7 +35103,7 @@ snapshots: '@react-native/gradle-plugin': 0.75.3 '@react-native/js-polyfills': 0.75.3 '@react-native/normalize-colors': 0.75.3 - '@react-native/virtualized-lists': 0.75.3(@types/react@18.3.6)(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + '@react-native/virtualized-lists': 0.75.3(@types/react@18.3.7)(react-native@0.75.3(@babel/core@7.24.5)(@babel/preset-env@7.25.4(@babel/core@7.24.5))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -36046,7 +35134,7 @@ snapshots: ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) yargs: 17.7.2 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -36056,7 +35144,7 @@ snapshots: - typescript - utf-8-validate - react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10): + react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native-community/cli': 14.1.0(bufferutil@4.0.8)(typescript@5.5.4)(utf-8-validate@5.0.10) @@ -36068,7 +35156,7 @@ snapshots: '@react-native/gradle-plugin': 0.75.3 '@react-native/js-polyfills': 0.75.3 '@react-native/normalize-colors': 0.75.3 - '@react-native/virtualized-lists': 0.75.3(@types/react@18.3.6)(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.6)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) + '@react-native/virtualized-lists': 0.75.3(@types/react@18.3.7)(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.7)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -36099,7 +35187,7 @@ snapshots: ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) yargs: 17.7.2 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -36114,57 +35202,57 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-redux@9.1.2(@types/react@18.3.6)(react@18.3.1)(redux@5.0.1): + react-redux@9.1.2(@types/react@18.3.7)(react@18.3.1)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.3 react: 18.3.1 use-sync-external-store: 1.2.2(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 redux: 5.0.1 react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.6(@types/react@18.3.6)(react@18.3.1): + react-remove-scroll-bar@2.3.6(@types/react@18.3.7)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.6)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.7)(react@18.3.1) tslib: 2.7.0 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - react-remove-scroll@2.5.10(@types/react@18.3.6)(react@18.3.1): + react-remove-scroll@2.5.10(@types/react@18.3.7)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.6)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.7)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.7)(react@18.3.1) tslib: 2.7.0 - use-callback-ref: 1.3.2(@types/react@18.3.6)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.6)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.7)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - react-remove-scroll@2.5.5(@types/react@18.3.6)(react@18.3.1): + react-remove-scroll@2.5.5(@types/react@18.3.7)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.6)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.7)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.7)(react@18.3.1) tslib: 2.7.0 - use-callback-ref: 1.3.2(@types/react@18.3.6)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.6)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.7)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - react-remove-scroll@2.5.7(@types/react@18.3.6)(react@18.3.1): + react-remove-scroll@2.5.7(@types/react@18.3.7)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.6)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.6)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.7)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.7)(react@18.3.1) tslib: 2.7.0 - use-callback-ref: 1.3.2(@types/react@18.3.6)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.6)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.7)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.7)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 react-responsive-carousel@3.2.23: dependencies: @@ -36172,11 +35260,11 @@ snapshots: prop-types: 15.8.1 react-easy-swipe: 0.0.21 - react-select@5.8.0(@types/react@18.3.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-select@5.8.0(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.6 '@emotion/cache': 11.13.1 - '@emotion/react': 11.13.3(@types/react@18.3.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) '@floating-ui/dom': 1.6.5 '@types/react-transition-group': 4.4.10 memoize-one: 6.0.0 @@ -36184,7 +35272,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.6)(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.7)(react@18.3.1) transitivePeerDependencies: - '@types/react' - supports-color @@ -36197,14 +35285,14 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-style-singleton@2.2.1(@types/react@18.3.6)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.7)(react@18.3.1): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.7.0 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 react-syntax-highlighter@15.5.0(react@18.3.1): dependencies: @@ -36241,19 +35329,6 @@ snapshots: json-parse-even-better-errors: 3.0.2 npm-normalize-package-bin: 3.0.1 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -36466,6 +35541,13 @@ snapshots: transitivePeerDependencies: - supports-color + remark-mdx@3.0.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + remark-parse@10.0.2: dependencies: '@types/mdast': 3.0.15 @@ -36498,12 +35580,6 @@ snapshots: unified: 11.0.4 vfile: 6.0.1 - remark-stringify@10.0.3: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-markdown: 1.5.0 - unified: 10.1.2 - remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.4 @@ -36549,8 +35625,6 @@ snapshots: rc: 1.2.8 resolve: 1.7.1 - requireindex@1.1.0: {} - requireindex@1.2.0: {} requires-port@1.0.0: {} @@ -36609,6 +35683,8 @@ snapshots: ret@0.2.2: {} + retry@0.12.0: {} + reusify@1.0.4: {} rfdc@1.3.1: {} @@ -36631,36 +35707,10 @@ snapshots: hash-base: 3.1.0 inherits: 2.0.4 - rollup@2.79.1: - optionalDependencies: - fsevents: 2.3.3 - rollup@3.29.4: optionalDependencies: fsevents: 2.3.3 - rollup@4.21.2: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.2 - '@rollup/rollup-android-arm64': 4.21.2 - '@rollup/rollup-darwin-arm64': 4.21.2 - '@rollup/rollup-darwin-x64': 4.21.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.2 - '@rollup/rollup-linux-arm-musleabihf': 4.21.2 - '@rollup/rollup-linux-arm64-gnu': 4.21.2 - '@rollup/rollup-linux-arm64-musl': 4.21.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2 - '@rollup/rollup-linux-riscv64-gnu': 4.21.2 - '@rollup/rollup-linux-s390x-gnu': 4.21.2 - '@rollup/rollup-linux-x64-gnu': 4.21.2 - '@rollup/rollup-linux-x64-musl': 4.21.2 - '@rollup/rollup-win32-arm64-msvc': 4.21.2 - '@rollup/rollup-win32-ia32-msvc': 4.21.2 - '@rollup/rollup-win32-x64-msvc': 4.21.2 - fsevents: 2.3.3 - rollup@4.21.3: dependencies: '@types/estree': 1.0.5 @@ -36712,14 +35762,14 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 - safe-stable-stringify@2.4.3: {} + safe-stable-stringify@2.5.0: {} safer-buffer@2.1.2: {} - sass-loader@13.3.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + sass-loader@13.3.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: neo-async: 2.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) satori@0.10.9: dependencies: @@ -36769,11 +35819,6 @@ snapshots: '@types/semver': 6.2.7 semver: 7.6.2 - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - optional: true - semver@7.6.0: dependencies: lru-cache: 6.0.0 @@ -36965,7 +36010,7 @@ snapshots: sirv@2.0.4: dependencies: - '@polka/url': 1.0.0-next.25 + '@polka/url': 1.0.0-next.27 mrmime: 2.0.0 totalist: 3.0.1 @@ -37017,8 +36062,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - source-map-js@1.2.0: {} - source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -37032,12 +36075,6 @@ snapshots: source-map@0.7.4: {} - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - - sourcemap-codec@1.4.8: {} - space-separated-tokens@1.1.5: {} space-separated-tokens@2.0.2: {} @@ -37156,9 +36193,6 @@ snapshots: strict-uri-encode@2.0.0: {} - string-argv@0.3.2: - optional: true - string-length@6.0.0: dependencies: strip-ansi: 7.1.0 @@ -37175,6 +36209,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@6.1.0: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.4.0 + strip-ansi: 7.1.0 + string.prototype.codepointat@0.2.1: {} string.prototype.includes@2.0.0: @@ -37272,9 +36312,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + style-loader@3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) style-to-object@0.4.4: dependencies: @@ -37372,7 +36412,7 @@ snapshots: - debug - ramda - swagger-ui-react@5.17.14(@types/react@18.3.6)(ramda@0.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + swagger-ui-react@5.17.14(@types/react@18.3.7)(ramda@0.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime-corejs3': 7.24.7 '@braintree/sanitize-url': 7.0.2 @@ -37396,7 +36436,7 @@ snapshots: react-immutable-proptypes: 2.2.0(immutable@3.8.2) react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-inspector: 6.0.2(react@18.3.1) - react-redux: 9.1.2(@types/react@18.3.6)(react@18.3.1)(redux@5.0.1) + react-redux: 9.1.2(@types/react@18.3.7)(react@18.3.1)(redux@5.0.1) react-syntax-highlighter: 15.5.0(react@18.3.1) redux: 5.0.1 redux-immutable: 4.0.0(immutable@3.8.2) @@ -37423,11 +36463,11 @@ snapshots: tailwind-merge@2.5.2: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))): dependencies: - tailwindcss: 3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + tailwindcss: 3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) - tailwindcss@3.4.11(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)): + tailwindcss@3.4.11(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -37446,7 +36486,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.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -37537,18 +36577,29 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(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.32.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) optionalDependencies: - '@swc/core': 1.7.26 + '@swc/core': 1.7.26(@swc/helpers@0.5.5) esbuild: 0.23.1 + terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.32.0 + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)) + optionalDependencies: + '@swc/core': 1.7.26(@swc/helpers@0.5.5) + terser-webpack-plugin@5.3.10(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -37572,6 +36623,14 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + terser@5.33.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + optional: true + test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 @@ -37644,11 +36703,6 @@ snapshots: dependencies: is-number: 7.0.0 - to-vfile@7.2.4: - dependencies: - is-buffer: 2.0.5 - vfile: 5.3.7 - toggle-selection@1.0.6: {} toidentifier@1.0.1: {} @@ -37664,10 +36718,6 @@ snapshots: tr46@0.0.3: {} - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - traverse@0.6.10: dependencies: gopd: 1.0.1 @@ -37676,8 +36726,6 @@ snapshots: traverse@0.6.8: {} - tree-kill@1.2.2: {} - tree-sitter-json@0.20.2: dependencies: nan: 2.20.0 @@ -37696,8 +36744,6 @@ snapshots: trim-lines@3.0.1: {} - trim-newlines@3.0.1: {} - trim-right@1.0.1: {} trough@2.2.0: {} @@ -37712,7 +36758,7 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -37720,8 +36766,8 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.14.9 - acorn: 8.12.1 - acorn-walk: 8.3.2 + acorn: 8.8.1 + acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -37730,7 +36776,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.26 + '@swc/core': 1.7.26(@swc/helpers@0.5.5) ts-pnp@1.2.0(typescript@5.6.2): optionalDependencies: @@ -37763,35 +36809,6 @@ snapshots: tslib@2.7.0: {} - tsup@8.2.4(@microsoft/api-extractor@7.47.9(@types/node@20.14.9))(@swc/core@1.7.26)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2)(yaml@2.5.1): - dependencies: - bundle-require: 5.0.0(esbuild@0.23.1) - cac: 6.7.14 - chokidar: 3.6.0 - consola: 3.2.3 - debug: 4.3.6(supports-color@8.1.1) - esbuild: 0.23.1 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - picocolors: 1.1.0 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.5.1) - resolve-from: 5.0.0 - rollup: 4.21.2 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tree-kill: 1.2.2 - optionalDependencies: - '@microsoft/api-extractor': 7.47.9(@types/node@20.14.9) - '@swc/core': 1.7.26 - postcss: 8.4.47 - typescript: 5.6.2 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsx@4.19.1: dependencies: esbuild: 0.23.1 @@ -37844,8 +36861,6 @@ snapshots: type-detect@4.0.8: {} - type-fest@0.13.1: {} - type-fest@0.16.0: {} type-fest@0.20.2: {} @@ -37854,14 +36869,12 @@ snapshots: type-fest@0.3.1: {} - type-fest@0.6.0: {} - type-fest@0.7.1: {} - type-fest@0.8.1: {} - type-fest@2.19.0: {} + type-fest@3.13.1: {} + type-fest@4.26.1: {} type-is@1.6.18: @@ -37942,9 +36955,6 @@ snapshots: dependencies: ts-toolbelt: 9.6.0 - typescript@5.4.2: - optional: true - typescript@5.5.4: {} typescript@5.6.2: {} @@ -37953,16 +36963,12 @@ snapshots: uc.micro@2.1.0: {} - ufo@1.5.3: {} + ufo@1.5.4: {} uint8arrays@3.1.0: dependencies: multiformats: 9.9.0 - uint8arrays@3.1.1: - dependencies: - multiformats: 9.9.0 - ulid@2.3.0: {} unbox-primitive@1.0.2: @@ -37987,7 +36993,7 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - unenv@1.9.0: + unenv@1.10.0: dependencies: consola: 3.2.3 defu: 6.1.4 @@ -38013,31 +37019,31 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 - unified-engine@10.1.0: + unified-engine@11.2.1: dependencies: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 - '@types/node': 18.19.50 - '@types/unist': 2.0.11 + '@types/node': 20.14.9 + '@types/unist': 3.0.3 concat-stream: 2.0.0 debug: 4.3.7(supports-color@8.1.1) - fault: 2.0.1 - glob: 8.1.0 + extend: 3.0.2 + glob: 10.4.5 ignore: 5.3.2 - is-buffer: 2.0.5 is-empty: 1.2.0 is-plain-obj: 4.1.0 - load-plugin: 5.1.0 - parse-json: 6.0.2 - to-vfile: 7.2.4 + load-plugin: 6.0.3 + parse-json: 7.1.1 trough: 2.2.0 - unist-util-inspect: 7.0.2 - vfile-message: 3.1.4 - vfile-reporter: 7.0.5 - vfile-statistics: 2.0.1 + unist-util-inspect: 8.1.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-reporter: 8.1.1 + vfile-statistics: 3.0.0 yaml: 2.5.1 transitivePeerDependencies: + - bluebird - supports-color unified@10.1.2: @@ -38088,9 +37094,9 @@ snapshots: unist-util-generated@2.0.1: {} - unist-util-inspect@7.0.2: + unist-util-inspect@8.1.0: dependencies: - '@types/unist': 2.0.11 + '@types/unist': 3.0.3 unist-util-is@5.2.1: dependencies: @@ -38098,19 +37104,23 @@ snapshots: unist-util-is@6.0.0: dependencies: - '@types/unist': 3.0.3 + '@types/unist': 3.0.2 unist-util-position-from-estree@1.1.2: dependencies: '@types/unist': 2.0.11 + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-position@4.0.4: dependencies: '@types/unist': 2.0.11 unist-util-position@5.0.0: dependencies: - '@types/unist': 3.0.3 + '@types/unist': 3.0.2 unist-util-remove-position@4.0.2: dependencies: @@ -38119,7 +37129,7 @@ snapshots: unist-util-remove-position@5.0.0: dependencies: - '@types/unist': 3.0.3 + '@types/unist': 3.0.2 unist-util-visit: 5.0.0 unist-util-stringify-position@2.0.3: @@ -38132,7 +37142,7 @@ snapshots: unist-util-stringify-position@4.0.0: dependencies: - '@types/unist': 3.0.3 + '@types/unist': 3.0.2 unist-util-visit-parents@5.1.3: dependencies: @@ -38141,7 +37151,7 @@ snapshots: unist-util-visit-parents@6.0.1: dependencies: - '@types/unist': 3.0.3 + '@types/unist': 3.0.2 unist-util-is: 6.0.0 unist-util-visit@4.1.2: @@ -38187,18 +37197,18 @@ snapshots: unraw@3.0.0: {} - unstorage@1.10.2(idb-keyval@6.2.1)(ioredis@5.4.1): + unstorage@1.12.0(idb-keyval@6.2.1)(ioredis@5.4.1): dependencies: anymatch: 3.1.3 chokidar: 3.6.0 destr: 2.0.3 - h3: 1.11.1 + h3: 1.12.0 listhen: 1.7.2 lru-cache: 10.4.3 mri: 1.2.0 node-fetch-native: 1.6.4 ofetch: 1.3.4 - ufo: 1.5.3 + ufo: 1.5.4 optionalDependencies: idb-keyval: 6.2.1 ioredis: 5.4.1 @@ -38247,30 +37257,30 @@ snapshots: urlpattern-polyfill@10.0.0: {} - use-callback-ref@1.3.2(@types/react@18.3.6)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.3.7)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.7.0 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 use-debounce@10.0.3(react@18.3.1): dependencies: react: 18.3.1 - use-isomorphic-layout-effect@1.1.2(@types/react@18.3.6)(react@18.3.1): + use-isomorphic-layout-effect@1.1.2(@types/react@18.3.7)(react@18.3.1): dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 - use-sidecar@1.1.2(@types/react@18.3.6)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.7)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.7.0 optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 use-sync-external-store@1.2.0(react@18.3.1): dependencies: @@ -38331,8 +37341,6 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - v8-compile-cache@2.4.0: {} - valid-url@1.0.9: {} validate-npm-package-license@3.0.4: @@ -38346,12 +37354,12 @@ snapshots: validate-npm-package-name@5.0.1: {} - valtio@1.11.2(@types/react@18.3.6)(react@18.3.1): + valtio@1.11.2(@types/react@18.3.7)(react@18.3.1): dependencies: proxy-compare: 2.5.1 use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.6 + '@types/react': 18.3.7 react: 18.3.1 vary@1.1.2: {} @@ -38366,26 +37374,26 @@ snapshots: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - vfile-reporter@7.0.5: + vfile-reporter@8.1.1: dependencies: '@types/supports-color': 8.1.3 - string-width: 5.1.2 + string-width: 6.1.0 supports-color: 9.4.0 - unist-util-stringify-position: 3.0.3 - vfile: 5.3.7 - vfile-message: 3.1.4 - vfile-sort: 3.0.1 - vfile-statistics: 2.0.1 + unist-util-stringify-position: 4.0.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-sort: 4.0.0 + vfile-statistics: 3.0.0 - vfile-sort@3.0.1: + vfile-sort@4.0.0: dependencies: - vfile: 5.3.7 - vfile-message: 3.1.4 + vfile: 6.0.3 + vfile-message: 4.0.2 - vfile-statistics@2.0.1: + vfile-statistics@3.0.0: dependencies: - vfile: 5.3.7 - vfile-message: 3.1.4 + vfile: 6.0.3 + vfile-message: 4.0.2 vfile@5.3.7: dependencies: @@ -38422,7 +37430,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - viem@2.21.7(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8): + viem@2.21.9(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.4.0 @@ -38440,12 +37448,12 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.1(@types/node@20.14.9)(terser@5.32.0): + vite-node@2.1.1(@types/node@20.14.9)(terser@5.33.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@8.1.1) pathe: 1.1.2 - vite: 5.4.5(@types/node@20.14.9)(terser@5.32.0) + vite: 5.4.5(@types/node@20.14.9)(terser@5.33.0) transitivePeerDependencies: - '@types/node' - less @@ -38457,12 +37465,12 @@ snapshots: - supports-color - terser - vite-node@2.1.1(@types/node@22.5.5)(terser@5.32.0): + vite-node@2.1.1(@types/node@22.5.5)(terser@5.33.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@8.1.1) pathe: 1.1.2 - vite: 5.4.5(@types/node@22.5.5)(terser@5.32.0) + vite: 5.4.5(@types/node@22.5.5)(terser@5.33.0) transitivePeerDependencies: - '@types/node' - less @@ -38474,7 +37482,7 @@ snapshots: - supports-color - terser - vite@5.4.5(@types/node@20.14.9)(terser@5.32.0): + vite@5.4.5(@types/node@20.14.9)(terser@5.33.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -38482,9 +37490,9 @@ snapshots: optionalDependencies: '@types/node': 20.14.9 fsevents: 2.3.3 - terser: 5.32.0 + terser: 5.33.0 - vite@5.4.5(@types/node@22.5.5)(terser@5.32.0): + vite@5.4.5(@types/node@22.5.5)(terser@5.33.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -38492,9 +37500,9 @@ snapshots: optionalDependencies: '@types/node': 22.5.5 fsevents: 2.3.3 - terser: 5.32.0 + terser: 5.33.0 - vite@5.4.6(@types/node@20.14.9)(terser@5.32.0): + vite@5.4.6(@types/node@20.14.9)(terser@5.33.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -38502,9 +37510,9 @@ snapshots: optionalDependencies: '@types/node': 20.14.9 fsevents: 2.3.3 - terser: 5.32.0 + terser: 5.33.0 - vite@5.4.6(@types/node@22.5.5)(terser@5.32.0): + vite@5.4.6(@types/node@22.5.5)(terser@5.33.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -38512,12 +37520,12 @@ snapshots: optionalDependencies: '@types/node': 22.5.5 fsevents: 2.3.3 - terser: 5.32.0 + terser: 5.33.0 - vitest@2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.32.0): + vitest@2.1.1(@types/node@20.14.9)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.8(typescript@5.6.2))(terser@5.33.0): dependencies: '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(msw@2.4.8(typescript@5.6.2))(vite@5.4.6(@types/node@20.14.9)(terser@5.32.0)) + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(msw@2.4.8(typescript@5.6.2))(vite@5.4.6(@types/node@20.14.9)(terser@5.33.0)) '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.1.1 '@vitest/snapshot': 2.1.1 @@ -38532,8 +37540,8 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.6(@types/node@20.14.9)(terser@5.32.0) - vite-node: 2.1.1(@types/node@20.14.9)(terser@5.32.0) + vite: 5.4.6(@types/node@20.14.9)(terser@5.33.0) + vite-node: 2.1.1(@types/node@20.14.9)(terser@5.33.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.14.9 @@ -38550,10 +37558,10 @@ snapshots: - supports-color - terser - vitest@2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@14.12.3)(msw@2.4.7(typescript@5.6.2))(terser@5.32.0): + vitest@2.1.1(@types/node@22.5.5)(@vitest/ui@2.1.1)(happy-dom@15.7.4)(msw@2.4.7(typescript@5.6.2))(terser@5.33.0): dependencies: '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(msw@2.4.7(typescript@5.6.2))(vite@5.4.6(@types/node@22.5.5)(terser@5.32.0)) + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(msw@2.4.7(typescript@5.6.2))(vite@5.4.6(@types/node@22.5.5)(terser@5.33.0)) '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.1.1 '@vitest/snapshot': 2.1.1 @@ -38568,13 +37576,13 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.6(@types/node@22.5.5)(terser@5.32.0) - vite-node: 2.1.1(@types/node@22.5.5)(terser@5.32.0) + vite: 5.4.6(@types/node@22.5.5)(terser@5.33.0) + vite-node: 2.1.1(@types/node@22.5.5)(terser@5.33.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.5.5 '@vitest/ui': 2.1.1(vitest@2.1.1) - happy-dom: 14.12.3 + happy-dom: 15.7.4 transitivePeerDependencies: - less - lightningcss @@ -38625,8 +37633,6 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@4.0.2: {} - webidl-conversions@5.0.0: {} webidl-conversions@7.0.0: {} @@ -38635,7 +37641,7 @@ snapshots: dependencies: '@discoveryjs/json-ext': 0.5.7 acorn: 8.12.1 - acorn-walk: 8.3.2 + acorn-walk: 8.3.4 commander: 7.2.0 debounce: 1.2.1 escape-string-regexp: 4.0.0 @@ -38650,7 +37656,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + webpack-dev-middleware@6.1.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -38658,7 +37664,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) webpack-hot-middleware@2.26.1: dependencies: @@ -38702,7 +37708,7 @@ snapshots: - esbuild - uglify-js - webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1): + webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)): dependencies: '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 @@ -38724,7 +37730,37 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1): + dependencies: + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.23.3 + 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.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -38747,12 +37783,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -38996,10 +38026,6 @@ snapshots: dependencies: zod: 3.23.8 - zod-validation-error@3.3.0(zod@3.23.8): - dependencies: - zod: 3.23.8 - zod-validation-error@3.4.0(zod@3.23.8): dependencies: zod: 3.23.8 diff --git a/turbo.json b/turbo.json index e884be45b22..cabc448c097 100644 --- a/turbo.json +++ b/turbo.json @@ -33,10 +33,6 @@ "outputs": [".next/**", "!.next/cache/**"], "dependsOn": ["^build"] }, - "@thirdweb-dev/service-utils#build": { - "outputs": ["dist/**", "cf-worker/**", "node/**"], - "dependsOn": ["^build"] - }, "thirdweb#update-version": { "inputs": ["package.json"], "outputs": ["src/version.ts"] From 53af73c9ae4d4e5f52e4031580c91c04a7fbd212 Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Wed, 18 Sep 2024 18:06:27 +0000 Subject: [PATCH 06/78] [Dashboard] ERC20 burn tab (#4661) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to update token transfer and burn components in the dashboard. ### Detailed summary - Updated UI components for token transfer and burn - Replaced `react-icons` with `lucide-react` and `sonner` - Improved error handling and notifications for token transactions > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../tabs/tokens/components/burn-button.tsx | 165 +++++++++++++++--- .../tabs/tokens/components/burn-form.tsx | 136 --------------- .../tokens/components/transfer-button.tsx | 24 ++- 3 files changed, 147 insertions(+), 178 deletions(-) delete mode 100644 apps/dashboard/src/contract-ui/tabs/tokens/components/burn-form.tsx diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/burn-button.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/burn-button.tsx index 98f3855a04c..372d23f2049 100644 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/burn-button.tsx +++ b/apps/dashboard/src/contract-ui/tabs/tokens/components/burn-button.tsx @@ -1,50 +1,157 @@ -import { Icon, useDisclosure } from "@chakra-ui/react"; -import { FaBurn } from "react-icons/fa"; -import type { ThirdwebContract } from "thirdweb"; -import { balanceOf } from "thirdweb/extensions/erc20"; -import { useActiveAccount, useReadContract } from "thirdweb/react"; -import { Button, Drawer } from "tw-components"; -import { TokenBurnForm } from "./burn-form"; +import { + Sheet, + SheetContent, + SheetFooter, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "@/components/ui/sheet"; +import { FormControl, Input, Stack } from "@chakra-ui/react"; +import { TransactionButton } from "components/buttons/TransactionButton"; +import { useTrack } from "hooks/analytics/useTrack"; +import { Flame } from "lucide-react"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { type ThirdwebContract, toUnits } from "thirdweb"; +import * as ERC20Ext from "thirdweb/extensions/erc20"; +import { + useActiveAccount, + useReadContract, + useSendAndConfirmTransaction, +} from "thirdweb/react"; +import { + Button, + FormErrorMessage, + FormHelperText, + FormLabel, + Text, +} from "tw-components"; interface TokenBurnButtonProps { contract: ThirdwebContract; } +const BURN_FORM_ID = "token-burn-form"; + export const TokenBurnButton: React.FC = ({ contract, ...restButtonProps }) => { - const { isOpen, onOpen, onClose } = useDisclosure(); const address = useActiveAccount()?.address; - const tokenBalanceQuery = useReadContract(balanceOf, { + const tokenBalanceQuery = useReadContract(ERC20Ext.balanceOf, { contract, address: address || "", queryOptions: { enabled: !!address }, }); const hasBalance = tokenBalanceQuery.data && tokenBalanceQuery.data > 0n; + const [open, setOpen] = useState(false); + const sendConfirmation = useSendAndConfirmTransaction(); + const trackEvent = useTrack(); + const form = useForm({ defaultValues: { amount: "0" } }); + const decimalsQuery = useReadContract(ERC20Ext.decimals, { contract }); return ( - <> - - - - - + + + + + + + Burn tokens + + + + + Amount + + How many would you like to burn? + + {form.formState.errors.amount?.message} + + + + + Burning these{" "} + {`${Number.parseInt(form.watch("amount")) > 1 ? form.watch("amount") : ""} `} + tokens will remove them from the total circulating supply. This + action is irreversible. + + + + { + if (address) { + trackEvent({ + category: "token", + action: "burn", + label: "attempt", + }); + + // TODO: burn should be updated to take amount / amountWei (v6?) + const tx = ERC20Ext.burn({ + contract, + asyncParams: async () => { + return { + amount: toUnits( + data.amount, + await ERC20Ext.decimals({ contract }), + ), + }; + }, + }); + + const promise = sendConfirmation.mutateAsync(tx, { + onSuccess: () => { + trackEvent({ + category: "token", + action: "burn", + label: "success", + }); + form.reset({ amount: "0" }); + setOpen(false); + }, + onError: (error) => { + trackEvent({ + category: "token", + action: "burn", + label: "error", + error, + }); + console.error(error); + }, + }); + toast.promise(promise, { + loading: `Burning ${data.amount} token(s)`, + success: "Tokens burned successfully", + error: "Failed to burn tokens", + }); + } + })} + > + Burn Tokens + + + + ); }; diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/burn-form.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/burn-form.tsx deleted file mode 100644 index 68b849ad1be..00000000000 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/burn-form.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import { - DrawerBody, - DrawerFooter, - DrawerHeader, - FormControl, - Input, - Stack, - useModalContext, -} from "@chakra-ui/react"; -import { TransactionButton } from "components/buttons/TransactionButton"; -import { useTrack } from "hooks/analytics/useTrack"; -import { useTxNotifications } from "hooks/useTxNotifications"; -import { useForm } from "react-hook-form"; -import { type ThirdwebContract, toUnits } from "thirdweb"; -import { burn, decimals } from "thirdweb/extensions/erc20"; -import { - useActiveAccount, - useReadContract, - useSendAndConfirmTransaction, -} from "thirdweb/react"; -import { - FormErrorMessage, - FormHelperText, - FormLabel, - Heading, - Text, -} from "tw-components"; - -const BURN_FORM_ID = "token-burn-form"; -interface TokenBurnFormProps { - contract: ThirdwebContract; -} - -export const TokenBurnForm: React.FC = ({ contract }) => { - const trackEvent = useTrack(); - const address = useActiveAccount()?.address; - - const { - register, - handleSubmit, - watch, - formState: { errors, isDirty }, - } = useForm({ defaultValues: { amount: "0" } }); - const modalContext = useModalContext(); - - const { onSuccess, onError } = useTxNotifications( - "Tokens burned successfully", - "Failed to burn tokens", - contract, - ); - - const decimalsQuery = useReadContract(decimals, { contract }); - const sendTransaction = useSendAndConfirmTransaction(); - - return ( - <> - - Burn tokens - - - - - - Amount - - How many would you like to burn? - {errors.amount?.message} - - - - Burning these{" "} - {`${Number.parseInt(watch("amount")) > 1 ? watch("amount") : ""} `} - tokens will remove them from the total circulating supply. This - action is irreversible. - - - - - { - if (address) { - trackEvent({ - category: "token", - action: "burn", - label: "attempt", - }); - - // TODO: burn should be updated to take amount / amountWei (v6?) - const tx = burn({ - contract, - asyncParams: async () => { - return { - amount: toUnits(data.amount, await decimals({ contract })), - }; - }, - }); - - sendTransaction.mutate(tx, { - onSuccess: () => { - trackEvent({ - category: "token", - action: "burn", - label: "success", - }); - onSuccess(); - modalContext.onClose(); - }, - onError: (error) => { - trackEvent({ - category: "token", - action: "burn", - label: "error", - error, - }); - onError(error); - }, - }); - } - })} - > - Burn Tokens - - - - ); -}; diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx index f0b5242e5a3..e7a01e6e554 100644 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx +++ b/apps/dashboard/src/contract-ui/tabs/tokens/components/transfer-button.tsx @@ -6,14 +6,14 @@ import { SheetTitle, SheetTrigger, } from "@/components/ui/sheet"; -import { FormControl, Icon, Input } from "@chakra-ui/react"; +import { FormControl, Input } from "@chakra-ui/react"; import { TransactionButton } from "components/buttons/TransactionButton"; import { SolidityInput } from "contract-ui/components/solidity-inputs"; import { useTrack } from "hooks/analytics/useTrack"; -import { useTxNotifications } from "hooks/useTxNotifications"; +import { Send } from "lucide-react"; import { useState } from "react"; import { useForm } from "react-hook-form"; -import { FiSend } from "react-icons/fi"; +import { toast } from "sonner"; import { type ThirdwebContract, ZERO_ADDRESS } from "thirdweb"; import * as ERC20Ext from "thirdweb/extensions/erc20"; import { @@ -47,12 +47,6 @@ export const TokenTransferButton: React.FC = ({ const trackEvent = useTrack(); const form = useForm({ defaultValues: { amount: "0", to: "" } }); const hasBalance = tokenBalanceQuery.data && tokenBalanceQuery.data > 0n; - const { onSuccess, onError } = useTxNotifications( - "Successfully transferred tokens", - "Failed to transfer tokens", - contract, - ); - const decimalsQuery = useReadContract(ERC20Ext.decimals, { contract }); const sendConfirmation = useSendAndConfirmTransaction(); const [open, setOpen] = useState(false); @@ -62,7 +56,7 @@ export const TokenTransferButton: React.FC = ({ + + + + + + + Mint additional tokens + + { + if (!address) { + return toast.error("No wallet connected"); + } + trackEvent({ + category: "token", + action: "mint", + label: "attempt", + }); + const transaction = ERC20Ext.mintTo({ + contract, + amount: d.amount, + to: address, + }); + const promise = sendAndConfirmTransaction.mutateAsync( + transaction, + { + onSuccess: () => { + trackEvent({ + category: "token", + action: "mint", + label: "success", + }); + form.reset({ amount: "0" }); + setOpen(false); + }, + onError: (error) => { + trackEvent({ + category: "token", + action: "mint", + label: "error", + error, + }); + console.error(error); + }, + }, + ); + toast.promise(promise, { + loading: "Minting tokens", + success: "Tokens minted successfully", + error: "Failed to mint tokens", + }); + })} + > + + Additional Supply + + + {form.formState.errors?.amount?.message} + + + + + + Mint Tokens + + + + ); }; diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/mint-form-erc20.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/mint-form-erc20.tsx deleted file mode 100644 index 61869de1f29..00000000000 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/mint-form-erc20.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { - DrawerBody, - DrawerFooter, - DrawerHeader, - FormControl, - Input, - Stack, - useModalContext, -} from "@chakra-ui/react"; -import { TransactionButton } from "components/buttons/TransactionButton"; -import { useTrack } from "hooks/analytics/useTrack"; -import { useTxNotifications } from "hooks/useTxNotifications"; -import { useForm } from "react-hook-form"; -import type { ThirdwebContract } from "thirdweb"; -import { decimals, mintTo } from "thirdweb/extensions/erc20"; -import { - useActiveAccount, - useReadContract, - useSendAndConfirmTransaction, -} from "thirdweb/react"; -import { Button, FormErrorMessage, FormLabel, Heading } from "tw-components"; - -const MINT_FORM_ID = "token-mint-form"; -interface TokenMintFormProps { - contract: ThirdwebContract; -} - -export const TokenERC20MintForm: React.FC = ({ - contract, -}) => { - const address = useActiveAccount()?.address; - const { data: tokenDecimals } = useReadContract(decimals, { contract }); - const { mutate, isPending } = useSendAndConfirmTransaction(); - const trackEvent = useTrack(); - const { - register, - handleSubmit, - formState: { errors, isDirty }, - } = useForm({ defaultValues: { amount: "0" } }); - const modalContext = useModalContext(); - const { onSuccess, onError } = useTxNotifications( - "Tokens minted successfully", - "Failed to mint tokens", - contract, - ); - return ( - <> - - Mint additional tokens - - - { - if (address) { - trackEvent({ - category: "token", - action: "mint", - label: "attempt", - }); - const transaction = mintTo({ - contract, - amount: d.amount, - to: address, - }); - mutate(transaction, { - onSuccess: () => { - trackEvent({ - category: "token", - action: "mint", - label: "success", - }); - onSuccess(); - modalContext.onClose(); - }, - onError: (error) => { - trackEvent({ - category: "token", - action: "mint", - label: "error", - error, - }); - onError(error); - }, - }); - } - })} - > - - Additional Supply - - {errors?.amount?.message} - - - - - - - Mint Tokens - - - - ); -}; From 25e1135dc78a42151a220c7431401aae3e5a471f Mon Sep 17 00:00:00 2001 From: MananTank Date: Wed, 18 Sep 2024 18:22:45 +0000 Subject: [PATCH 08/78] Move pay tabs to pages with routes, Add pay settings page in project layout (#4658) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR focuses on restructuring the Pay section in the dashboard, improving API key handling, and fixing endpoint issues. ### Detailed summary - Deleted `PayAnalytics.tsx` and `pay-ui.client.tsx` - Added components for `NoApiKeys`, `PayConfig`, `APIKeySelector` - Updated text in `ProjectGeneralSettingsPage.tsx` - Modified page layouts and settings - Improved API key retrieval and handling > The following files were skipped due to too many changes: `apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/page.tsx`, `apps/dashboard/src/components/pay/PayConfig.tsx` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/@/components/blocks/SettingsCard.tsx | 4 +- .../dashboard/connect/pay/[id]/layout.tsx | 61 +++++ .../dashboard/connect/pay/[id]/page.tsx | 17 ++ .../connect/pay/[id]/settings/page.tsx | 17 ++ .../connect/pay/[id]/webhooks/page.tsx | 17 ++ .../connect/pay/components/APIKeySelector.tsx | 41 ++++ .../connect/pay/components/pay-ui.client.tsx | 92 -------- .../pay/components/webhooks.client.tsx | 2 + .../dashboard/connect/pay/layout.tsx | 31 +++ .../dashboard/connect/pay/no-keys/page.tsx | 5 + .../dashboard/connect/pay/page.tsx | 87 +------ apps/dashboard/src/app/api/lib/getAPIKeys.ts | 58 +++-- .../settings/ProjectGeneralSettingsPage.tsx | 2 +- .../[project_slug]/settings/layout.tsx | 55 +++-- .../[project_slug]/settings/pay/page.tsx | 34 ++- .../pay/PayAnalytics/PayAnalytics.tsx | 2 + .../src/components/pay/PayConfig.tsx | 213 ++++++++---------- .../dashboard/settings/api-keys/[id].tsx | 2 +- 18 files changed, 406 insertions(+), 334 deletions(-) create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/layout.tsx create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/page.tsx create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/settings/page.tsx create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/APIKeySelector.tsx delete mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/pay-ui.client.tsx create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/layout.tsx create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/no-keys/page.tsx diff --git a/apps/dashboard/src/@/components/blocks/SettingsCard.tsx b/apps/dashboard/src/@/components/blocks/SettingsCard.tsx index fd6ad2c59f9..8dd97b4d2fb 100644 --- a/apps/dashboard/src/@/components/blocks/SettingsCard.tsx +++ b/apps/dashboard/src/@/components/blocks/SettingsCard.tsx @@ -13,9 +13,10 @@ export function SettingsCard(props: { errorText: string | undefined; noPermissionText: string | undefined; saveButton?: { - onClick: () => void; + onClick?: () => void; disabled: boolean; isLoading: boolean; + type?: "submit"; }; }) { return ( @@ -60,6 +61,7 @@ export function SettingsCard(props: { onClick={props.saveButton.onClick} disabled={props.saveButton.disabled || props.saveButton.isLoading} variant="outline" + type={props.saveButton.type} > {props.saveButton.isLoading && } {props.saveButton.isLoading ? "Saving" : "Save"} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/layout.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/layout.tsx new file mode 100644 index 00000000000..68f5bf05ac8 --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/layout.tsx @@ -0,0 +1,61 @@ +import { TabPathLinks } from "@/components/ui/tabs"; +import { redirect } from "next/navigation"; +import { getApiKeys } from "../../../../../api/lib/getAPIKeys"; +import { APIKeySelector } from "../components/APIKeySelector"; + +export default async function Layout(props: { + params: { + id: string; + }; + children: React.ReactNode; +}) { + const apiKeys = await getApiKeys(); + const firstKey = apiKeys[0]; + + if (!firstKey) { + redirect("/dashboard/connect/pay/no-keys"); + } + + const selectedKey = apiKeys.find((x) => x.id === props.params.id); + + if (!selectedKey) { + redirect("/dashboard/connect/pay"); + } + + const layoutPath = `/dashboard/connect/pay/${selectedKey.id}`; + + return ( +
+
+
+ +
+ + +
+ +
+ + {props.children} +
+ ); +} + +export const dynamic = "force-dynamic"; diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/page.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/page.tsx new file mode 100644 index 00000000000..765388960a1 --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/page.tsx @@ -0,0 +1,17 @@ +import { notFound } from "next/navigation"; +import { PayAnalytics } from "../../../../../../components/pay/PayAnalytics/PayAnalytics"; +import { getAPIKey } from "../../../../../api/lib/getAPIKeys"; + +export default async function Page(props: { + params: { + id: string; + }; +}) { + const apiKey = await getAPIKey(props.params.id); + + if (!apiKey) { + notFound(); + } + + return ; +} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/settings/page.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/settings/page.tsx new file mode 100644 index 00000000000..36b0e45c849 --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/settings/page.tsx @@ -0,0 +1,17 @@ +import { notFound } from "next/navigation"; +import { PayConfig } from "../../../../../../../components/pay/PayConfig"; +import { getAPIKey } from "../../../../../../api/lib/getAPIKeys"; + +export default async function Page(props: { + params: { + id: string; + }; +}) { + const apiKey = await getAPIKey(props.params.id); + + if (!apiKey) { + notFound(); + } + + return ; +} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx new file mode 100644 index 00000000000..d9b20445e0a --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx @@ -0,0 +1,17 @@ +import { notFound } from "next/navigation"; +import { getAPIKey } from "../../../../../../api/lib/getAPIKeys"; +import { WebhooksPage } from "../../components/webhooks.client"; + +export default async function Page(props: { + params: { + id: string; + }; +}) { + const apiKey = await getAPIKey(props.params.id); + + if (!apiKey) { + notFound(); + } + + return ; +} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/APIKeySelector.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/APIKeySelector.tsx new file mode 100644 index 00000000000..d041418dc1d --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/APIKeySelector.tsx @@ -0,0 +1,41 @@ +"use client"; + +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { useDashboardRouter } from "@/lib/DashboardRouter"; +import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; + +export function APIKeySelector(props: { + apiKeys: ApiKey[]; + selectedApiKey: ApiKey; +}) { + const router = useDashboardRouter(); + + return ( + + ); +} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/pay-ui.client.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/pay-ui.client.tsx deleted file mode 100644 index e1b829fb3f0..00000000000 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/pay-ui.client.tsx +++ /dev/null @@ -1,92 +0,0 @@ -"use client"; - -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { TabButtons } from "@/components/ui/tabs"; -import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; -import { PayAnalytics } from "components/pay/PayAnalytics/PayAnalytics"; -import { PayConfig } from "components/pay/PayConfig"; -import { useSearchParams } from "next/navigation"; -import { useState } from "react"; -import { WebhooksPage } from "./webhooks.client"; - -export function PayUI(props: { - apiKeys: ApiKey[]; -}) { - const searchParams = useSearchParams(); - const selectedKeyFromUrl = searchParams?.get("clientId"); - const defaultSelectedKey = - props.apiKeys.find((key) => key.key === selectedKeyFromUrl) || - props.apiKeys[0]; - - const [selectedKey, setSelectedKey] = useState(defaultSelectedKey); - - const [activeTab, setActiveTab] = useState< - "settings" | "analytics" | "webhooks" - >("analytics"); - - return ( - <> -
-
- -
- - setActiveTab("analytics"), - isEnabled: true, - }, - { - name: "Webhooks", - isActive: activeTab === "webhooks", - onClick: () => setActiveTab("webhooks"), - isEnabled: true, - }, - { - name: "Settings", - isActive: activeTab === "settings", - onClick: () => setActiveTab("settings"), - isEnabled: true, - }, - ]} - /> -
- - {/* TODO: split this into sub-pages */} - {activeTab === "analytics" && } - {activeTab === "settings" && } - {activeTab === "webhooks" && } - - ); -} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx index 1750fe5da5f..ffb1432f2fe 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx @@ -1,3 +1,5 @@ +"use client"; + import { CopyTextButton } from "@/components/ui/CopyTextButton"; import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button } from "@/components/ui/button"; diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/layout.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/layout.tsx new file mode 100644 index 00000000000..c26fca5cf96 --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/layout.tsx @@ -0,0 +1,31 @@ +import Link from "next/link"; + +export default async function Layout(props: { + children: React.ReactNode; +}) { + return ( +
+
+
+

+ Pay +

+

+ Pay allows your users to purchase cryptocurrencies and execute + transactions with their credit card or debit card, or with any token + via cross-chain routing.{" "} + + Learn more + +

+
+
+ + {props.children} +
+ ); +} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/no-keys/page.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/no-keys/page.tsx new file mode 100644 index 00000000000..212a4f0aea5 --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/no-keys/page.tsx @@ -0,0 +1,5 @@ +import { NoApiKeys } from "../../../../../../components/settings/ApiKeys/NoApiKeys"; + +export default function Page() { + return ; +} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/page.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/page.tsx index ff29e470127..3ae42517885 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/page.tsx @@ -1,86 +1,13 @@ -import { COOKIE_ACTIVE_ACCOUNT, COOKIE_PREFIX_TOKEN } from "@/constants/cookie"; -import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; -import { NoApiKeys } from "components/settings/ApiKeys/NoApiKeys"; -import { cookies } from "next/headers"; -import Link from "next/link"; import { redirect } from "next/navigation"; -import { PayUI } from "./components/pay-ui.client"; +import { getApiKeys } from "../../../../api/lib/getAPIKeys"; -async function getApiKeys(authToken: string) { - const res = await fetch( - `${process.env.NEXT_PUBLIC_THIRDWEB_API_HOST || "https://api.thirdweb.com"}/v1/keys`, - { - method: "GET", +export default async function Page() { + const apiKeys = await getApiKeys(); + const firstKey = apiKeys[0]; - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${authToken}`, - }, - }, - ); - const json = await res.json(); - - if (json.error) { - throw new Error(json.error.message); - } - return json.data as ApiKey[]; -} - -export default async function DashboardConnectPayPage() { - const cookiesManager = cookies(); - const activeAccount = cookiesManager.get(COOKIE_ACTIVE_ACCOUNT)?.value; - const authToken = activeAccount - ? cookiesManager.get(`${COOKIE_PREFIX_TOKEN}${activeAccount}`)?.value - : null; - - if (!authToken) { - // redirect to login page - redirect(`/login?next=${encodeURIComponent("/dashboard/connect/pay")}`); + if (firstKey) { + redirect(`/dashboard/connect/pay/${firstKey.id}`); } - const apiKeys = await getApiKeys(authToken).catch((err) => { - console.error("failed to load api keys", err); - return []; - }); - - return ( -
-
-
-

- Pay -

-

- Pay allows your users to purchase cryptocurrencies and execute - transactions with their credit card or debit card, or with any token - via cross-chain routing.{" "} - - Learn more - -

-
-
- - {apiKeys.length > 0 ? ( - - ) : ( - - )} -
- ); + redirect("/dashboard/connect/pay/no-keys"); } - -// because cookies() is used -export const dynamic = "force-dynamic"; diff --git a/apps/dashboard/src/app/api/lib/getAPIKeys.ts b/apps/dashboard/src/app/api/lib/getAPIKeys.ts index 862edc151a2..aca78a17ca2 100644 --- a/apps/dashboard/src/app/api/lib/getAPIKeys.ts +++ b/apps/dashboard/src/app/api/lib/getAPIKeys.ts @@ -1,27 +1,57 @@ import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; import { getAuthToken } from "./getAuthToken"; +// TODO - Fix the `/v1/keys/${apiKeyId}` endpoint in API server + export async function getAPIKey(apiKeyId: string) { - const authToken = getAuthToken(); - const apiServerURL = new URL( - process.env.NEXT_PUBLIC_THIRDWEB_API_HOST || "https://api.thirdweb.com", - ); + // The `/v1/keys/${apiKeyId}`; does not return the "FULL" ApiKey object for some reason + // Until this is fixed in API server - we just use the getApiKeys() and find the key by id - apiServerURL.pathname = `/v1/keys/${apiKeyId}`; + const apiKeys = await getApiKeys(); + return apiKeys.find((key) => key.id === apiKeyId); - const res = await fetch(apiServerURL, { - method: "GET", - headers: { - Authorization: `Bearer ${authToken}`, - }, - }); + // const authToken = getAuthToken(); + // const apiServerURL = new URL( + // process.env.NEXT_PUBLIC_THIRDWEB_API_HOST || "https://api.thirdweb.com", + // ); + + // apiServerURL.pathname = `/v1/keys/${apiKeyId}`; + + // const res = await fetch(apiServerURL, { + // method: "GET", + // headers: { + // Authorization: `Bearer ${authToken}`, + // }, + // }); + + // const json = await res.json(); + // if (json.error) { + // console.error(json.error); + // return undefined; + // } + + // return json.data as ApiKey; +} + +export async function getApiKeys() { + const authToken = getAuthToken(); + const res = await fetch( + `${process.env.NEXT_PUBLIC_THIRDWEB_API_HOST || "https://api.thirdweb.com"}/v1/keys`, + { + method: "GET", + + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${authToken}`, + }, + }, + ); const json = await res.json(); if (json.error) { - console.error(json.error); - return undefined; + return []; } - return json.data as ApiKey; + return json.data as ApiKey[]; } diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx index 96b29648544..8530c8e7511 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx @@ -726,7 +726,7 @@ function DeleteProject(props: { }; const description = - "The associated Client ID and Secret Key will no able to access thirdweb services after deletion. This action is irreversible"; + "The associated Client ID and Secret Key will not able to access thirdweb services after deletion. This action is irreversible"; return ( - {props.children} - +
+
+
+

+ Project Settings +

+
+
+ + {props.children} + +
); } diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/pay/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/pay/page.tsx index 19e55de339d..e723243b453 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/pay/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/pay/page.tsx @@ -1,9 +1,27 @@ -export default function Page() { - return ( -
-

- Pay Settings -

-
- ); +import { getProject } from "@/api/projects"; +import { notFound } from "next/navigation"; +import { PayConfig } from "../../../../../../components/pay/PayConfig"; +import { getAPIKey } from "../../../../../api/lib/getAPIKeys"; + +export default async function Page(props: { + params: { + team_slug: string; + project_slug: string; + }; +}) { + const { team_slug, project_slug } = props.params; + const project = await getProject(team_slug, project_slug); + + if (!project) { + notFound(); + } + + // THIS IS A WORKAROUND - project does not have `services` info - so we fetch APIKey object. + const apiKey = await getAPIKey(project.id); + + if (!apiKey) { + notFound(); + } + + return ; } diff --git a/apps/dashboard/src/components/pay/PayAnalytics/PayAnalytics.tsx b/apps/dashboard/src/components/pay/PayAnalytics/PayAnalytics.tsx index c7bcad91b6f..5ebe2df36dd 100644 --- a/apps/dashboard/src/components/pay/PayAnalytics/PayAnalytics.tsx +++ b/apps/dashboard/src/components/pay/PayAnalytics/PayAnalytics.tsx @@ -1,3 +1,5 @@ +"use client"; + import { DatePickerWithRange } from "@/components/ui/DatePickerWithRange"; import { Select, diff --git a/apps/dashboard/src/components/pay/PayConfig.tsx b/apps/dashboard/src/components/pay/PayConfig.tsx index c43679c6010..14478531703 100644 --- a/apps/dashboard/src/components/pay/PayConfig.tsx +++ b/apps/dashboard/src/components/pay/PayConfig.tsx @@ -1,16 +1,12 @@ "use client"; -import { Spinner } from "@/components/ui/Spinner/Spinner"; -import { Button } from "@/components/ui/button"; -import { Card } from "@/components/ui/card"; +import { SettingsCard } from "@/components/blocks/SettingsCard"; import { Form, FormControl, - FormDescription, FormField, FormItem, FormLabel, - FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { type ApiKey, useUpdateApiKey } from "@3rdweb-sdk/react/hooks/useApi"; @@ -21,7 +17,6 @@ import { } from "components/settings/ApiKeys/validations"; import { useTrack } from "hooks/analytics/useTrack"; import Link from "next/link"; -import { useMemo } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -43,123 +38,113 @@ const TRACKING_CATEGORY = "pay"; export const PayConfig: React.FC = ({ apiKey }) => { const payService = apiKey.services?.find((service) => service.name === "pay"); - const transformedQueryData = useMemo( - () => ({ payoutAddress: payService?.payoutAddress ?? "" }), - [payService], - ); const form = useForm({ resolver: zodResolver(apiKeyPayConfigValidationSchema), - defaultValues: transformedQueryData, - values: transformedQueryData, + values: { + payoutAddress: payService?.payoutAddress ?? "", + }, }); const trackEvent = useTrack(); const mutation = useUpdateApiKey(); - return ( - -
-

Fee Sharing

-

- thirdweb collects a 1% fee per end user transaction through{" "} - Buy With Crypto. We share 30% of this fee with you.{" "} - - Learn more. - -

-
- -
- { - const services = apiKey.services; - if (!services) { - throw new Error("Bad state: Missing services"); - } - - const newServices = services.map((service) => { - if (service.name !== "pay") { - return service; - } - - return { - ...service, - payoutAddress, - }; - }); - - const formattedValues = { - ...apiKey, - services: newServices, - }; - - const mutationPromise = mutation.mutateAsync(formattedValues, { - onSuccess: () => { - trackEvent({ - category: TRACKING_CATEGORY, - action: "configuration-update", - label: "success", - data: { - payoutAddress, - }, - }); - }, - onError: (err) => { - trackEvent({ - category: TRACKING_CATEGORY, - action: "configuration-update", - label: "error", - error: err, - }); - }, - }); + const handleSubmit = form.handleSubmit(({ payoutAddress }) => { + const services = apiKey.services; + if (!services) { + throw new Error("Bad state: Missing services"); + } + + const newServices = services.map((service) => { + if (service.name !== "pay") { + return service; + } + + return { + ...service, + payoutAddress, + }; + }); + + const formattedValues = { + ...apiKey, + services: newServices, + }; + + const mutationPromise = mutation.mutateAsync(formattedValues, { + onSuccess: () => { + trackEvent({ + category: TRACKING_CATEGORY, + action: "configuration-update", + label: "success", + data: { + payoutAddress, + }, + }); + }, + onError: (err) => { + trackEvent({ + category: TRACKING_CATEGORY, + action: "configuration-update", + label: "error", + error: err, + }); + }, + }); + + toast.promise(mutationPromise, { + success: "Changes saved", + error: (err) => { + return `Failed to save changes: ${err.message}`; + }, + }); + }); - toast.promise(mutationPromise, { - loading: "Saving changes...", - success: "Changes saved", - error: (err) => { - return `Failed to save changes: ${err.message}`; - }, - }); - })} - autoComplete="off" - className="flex flex-col gap-6" + return ( + + + - ( - - Recipient address - - - - - Shared fees will be sent to this address. - - - - )} - /> - -
- - - - - +
+

+ Fee Sharing +

+

+ thirdweb collects a 1% fee per end user transaction through{" "} + Buy With Crypto. We share 30% of this fee with + you.{" "} + + Learn more. + +

+ + ( + + Recipient address + + + + + )} + /> +
+ + + ); }; diff --git a/apps/dashboard/src/pages/dashboard/settings/api-keys/[id].tsx b/apps/dashboard/src/pages/dashboard/settings/api-keys/[id].tsx index b2d366e8909..9bee0f4eea9 100644 --- a/apps/dashboard/src/pages/dashboard/settings/api-keys/[id].tsx +++ b/apps/dashboard/src/pages/dashboard/settings/api-keys/[id].tsx @@ -58,7 +58,7 @@ const SettingsApiKeyPage: ThirdwebNextPage = () => { paths={{ inAppConfig: `/dashboard/wallets/embedded?tab=1&clientId=${apiKey.key}`, aaConfig: `/dashboard/wallets/smart-wallet?tab=1&clientId=${apiKey.key}`, - payConfig: `/dashboard/connect/pay?clientId=${apiKey.key}`, + payConfig: `/dashboard/connect/pay/${apiKey.id}/settings`, afterDeleteRedirectTo: "/dashboard/settings/api-keys", }} onKeyUpdated={undefined} From 406de39ecdd4e901cc1fe163cc833fe9fd656d3e Mon Sep 17 00:00:00 2001 From: jnsdls Date: Wed, 18 Sep 2024 18:36:17 +0000 Subject: [PATCH 09/78] handle JWT directly in thirdwebClient (#4659) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR updates dependencies, simplifies ERC721 and ERC1155 updateMetadata extension params, and allows using valid JWTs for authorization. ### Detailed summary - Updated `tailwindcss` to versions `3.4.12` - Added `JWTString` type for valid JWTs - Simplified updateMetadata extension params for ERC721 and ERC1155 - Updated dependencies in various packages - Removed unnecessary imports and components - Refactored code to use `getThirdwebClient()` consistently > The following files were skipped due to too many changes: `apps/dashboard/src/contract-ui/tabs/account/components/account-balance.tsx`, `packages/service-utils/package.json`, `apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx`, `apps/dashboard/src/app/(dashboard)/(chain)/components/server/chain-icon.tsx`, `apps/dashboard/src/components/wallets/PosthogIdentifier.tsx`, `apps/dashboard/src/@/constants/thirdweb.server.ts`, `apps/dashboard/src/contract-ui/tabs/listings/components/list-form.tsx`, `packages/thirdweb/package.json`, `apps/dashboard/src/pages/api/frame/base/get-tx-frame.ts`, `apps/dashboard/src/lib/rpc.ts`, `apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts`, `apps/dashboard/src/components/contract-components/publisher/masked-avatar.tsx`, `apps/dashboard/src/components/smart-wallets/AccountFactories/account-cell.tsx`, `apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/create/hooks/use-create-ecosystem.ts`, `apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/opengraph-image.tsx`, `apps/dashboard/src/components/contract-components/publisher/edit-profile.tsx`, `apps/dashboard/src/tw-components/nft-media.tsx`, `apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/ecosystem-header.client.tsx`, `apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/live-stats.tsx`, `packages/thirdweb/src/utils/fetch.test.ts`, `apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx`, `apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx`, `apps/dashboard/src/components/engine/contract-subscription/add-contract-subscription-button.tsx`, `apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/publishedContractOGImageTemplate.tsx`, `apps/dashboard/src/components/custom-contract/contract-header/metadata-header.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/getPublishedContractsWithPublisherMapping.ts`, `apps/dashboard/src/app/login/page.tsx`, `apps/dashboard/src/contract-ui/hooks/useContractSources.ts`, `apps/dashboard/src/app/(dashboard)/tools/transaction-simulator/components/TransactionSimulator.tsx`, `apps/dashboard/src/components/selects/NetworkSelectorButton.tsx`, `apps/dashboard/src/contract-ui/tabs/split/page.tsx`, `apps/dashboard/src/components/ipfs-upload/dropzone.tsx`, `apps/dashboard/src/utils/tx-frame.ts`, `apps/dashboard/src/contract-ui/tabs/claim-conditions/components/snapshot-upload.tsx`, `apps/dashboard/src/components/explore/contract-card/index.tsx`, `apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/PayModal.tsx`, `apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx`, `apps/dashboard/src/contract-ui/tabs/nfts/components/airdrop-upload.tsx`, `packages/thirdweb/src/client/client.test.ts`, `apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/tx/[txHash]/page.tsx`, `apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx`, `apps/dashboard/src/components/contract-components/tables/cells.tsx`, `packages/thirdweb/src/extensions/erc721/drops/write/updateMetadata.ts`, `packages/thirdweb/src/utils/fetch.ts`, `apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx`, `apps/dashboard/src/@/constants/thirdweb.client.ts`, `apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx`, `apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx`, `packages/thirdweb/src/client/client.ts`, `packages/thirdweb/src/extensions/erc1155/drops/write/updateMetadata.ts`, `apps/dashboard/src/contract-ui/tabs/proposals/components/proposal-button.tsx`, `apps/dashboard/src/lib/ens.ts`, `apps/dashboard/src/@/components/blocks/wallet-address.tsx`, `apps/dashboard/src/@3rdweb-sdk/react/cache-keys.ts`, `apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx`, `apps/dashboard/src/components/buttons/MismatchButton.tsx`, `apps/dashboard/src/contract-ui/tabs/manage/components/ModuleForm.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/components/publish-based-deploy.tsx`, `apps/dashboard/src/contract-ui/tabs/proposals/page.tsx`, `apps/dashboard/src/contract-ui/tabs/proposals/components/proposal-form.tsx`, `apps/dashboard/src/components/contract-components/fetch-contracts-with-versions.ts`, `apps/dashboard/src/contract-ui/tabs/proposals/components/delegate-button.tsx`, `apps/dashboard/src/components/contract-components/hooks.ts`, `apps/dashboard/src/contract-ui/tabs/manage/page.tsx`, `apps/dashboard/src/pages/[chain_id]/[...paths].tsx`, `apps/dashboard/src/contract-ui/tabs/sources/page.tsx`, `apps/dashboard/src/@3rdweb-sdk/react/hooks/useSplit.ts`, `apps/dashboard/src/components/contract-components/published-contract/index.tsx`, `apps/dashboard/src/contract-ui/tabs/proposals/components/proposal.tsx`, `apps/dashboard/src/@3rdweb-sdk/react/hooks/useVote.ts`, `pnpm-lock.yaml` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/rare-colts-compare.md | 7 + apps/dashboard/package.json | 2 +- .../@/components/blocks/wallet-address.tsx | 14 +- apps/dashboard/src/@/constants/client.ts | 30 -- apps/dashboard/src/@/constants/cookie.ts | 10 + .../src/@/constants/thirdweb.client.ts | 41 ++ .../src/@/constants/thirdweb.server.ts | 23 + .../src/@3rdweb-sdk/react/cache-keys.ts | 40 -- .../react/components/connect-wallet/index.tsx | 6 +- .../react/hooks/useDashboardStorageUpload.tsx | 3 +- .../react/hooks/useLoggedInUser.ts | 9 +- .../src/@3rdweb-sdk/react/hooks/useSplit.ts | 104 ++-- .../src/@3rdweb-sdk/react/hooks/useVote.ts | 337 +++--------- .../components/client/FaucetButton.tsx | 5 +- .../components/client/PayModal.tsx | 5 +- .../components/client/live-stats.tsx | 5 +- .../(chainPage)/opengraph-image.tsx | 6 +- .../(chain)/[chain_id]/tx/[txHash]/page.tsx | 8 +- .../(chain)/components/server/chain-icon.tsx | 5 +- .../contracts/deploy/[compiler_uri]/page.tsx | 4 +- .../contracts/publish/[publish_uri]/page.tsx | 19 +- .../client/ecosystem-header.client.tsx | 5 +- .../create/hooks/use-create-ecosystem.ts | 6 +- .../[contract_id]/[version]/page.tsx | 12 +- ...tPublishedContractsWithPublisherMapping.ts | 6 +- .../publishedContractOGImageTemplate.tsx | 8 +- .../components/contract-info.tsx | 4 +- .../components/publish-based-deploy.tsx | 17 +- .../(dashboard)/published-contract/page.tsx | 4 +- .../components/TransactionSimulator.tsx | 5 +- .../app/components/SetAuthHeaderForSDK.tsx | 38 -- .../src/app/components/autoconnect.tsx | 5 +- apps/dashboard/src/app/login/page.tsx | 5 +- apps/dashboard/src/app/providers.tsx | 2 - .../[project_slug]/connect/pay/PayPageUI.tsx | 1 - .../src/components/app-layouts/providers.tsx | 8 +- .../src/components/buttons/MismatchButton.tsx | 14 +- .../contract-deploy-form/custom-contract.tsx | 10 +- .../contract-publish-form/index.tsx | 7 +- .../fetch-contracts-with-versions.ts | 32 +- .../components/contract-components/hooks.ts | 17 +- .../published-contract/index.tsx | 101 +--- .../publisher/edit-profile.tsx | 9 +- .../publisher/masked-avatar.tsx | 7 +- .../contract-components/tables/cells.tsx | 10 +- .../contract-header/metadata-header.tsx | 7 +- .../add-contract-subscription-button.tsx | 24 +- .../contract-subscriptions-table.tsx | 9 +- .../explore/contract-card/index.tsx | 5 +- .../src/components/ipfs-upload/dropzone.tsx | 12 +- .../selects/NetworkSelectorButton.tsx | 7 +- .../AccountFactories/account-cell.tsx | 7 +- .../smart-wallets/AccountFactories/index.tsx | 11 +- .../MiniPlayground.tsx | 9 +- .../components/wallets/PosthogIdentifier.tsx | 7 +- apps/dashboard/src/constants/contracts.ts | 4 +- .../contract-ui/hooks/useContractSources.ts | 5 +- .../src/contract-ui/hooks/useRouteConfig.tsx | 2 +- .../account/components/account-balance.tsx | 3 +- .../account/components/deposit-native.tsx | 7 +- .../components/snapshot-upload.tsx | 7 +- .../tabs/claim-conditions/page.tsx | 1 - .../tabs/listings/components/list-form.tsx | 3 +- .../tabs/manage/components/ModuleForm.tsx | 13 +- .../components/getModuleInstalledParams.ts | 4 +- .../src/contract-ui/tabs/manage/page.tsx | 48 +- .../tabs/nfts/components/airdrop-upload.tsx | 7 +- .../nfts/components/update-metadata-form.tsx | 3 - .../proposals/components/delegate-button.tsx | 71 +-- .../proposals/components/proposal-button.tsx | 14 +- .../proposals/components/proposal-form.tsx | 73 +-- .../tabs/proposals/components/proposal.tsx | 141 ++--- .../src/contract-ui/tabs/proposals/page.tsx | 33 +- .../src/contract-ui/tabs/sources/page.tsx | 65 +-- .../src/contract-ui/tabs/split/page.tsx | 11 +- apps/dashboard/src/core-ui/sidebar/tunnel.tsx | 1 - apps/dashboard/src/lib/ens.ts | 58 +- apps/dashboard/src/lib/rpc.ts | 4 +- apps/dashboard/src/lib/sdk.ts | 4 +- apps/dashboard/src/lib/wallet/nfts/alchemy.ts | 4 +- apps/dashboard/src/lib/wallet/nfts/moralis.ts | 4 +- .../src/pages/[chain_id]/[...paths].tsx | 23 +- .../src/pages/api/frame/base/get-tx-frame.ts | 9 +- .../src/pages/api/moralis/balances.ts | 4 +- .../dashboard/connect/account-abstraction.tsx | 1 - .../pages/dashboard/settings/gas-credits.tsx | 1 - .../dashboard/src/tw-components/nft-media.tsx | 7 +- apps/dashboard/src/utils/tx-frame.ts | 18 +- apps/playground-web/package.json | 4 +- apps/portal/package.json | 4 +- apps/wallet-ui/package.json | 4 +- packages/service-utils/package.json | 12 +- packages/thirdweb/package.json | 6 +- packages/thirdweb/src/client/client.test.ts | 19 +- packages/thirdweb/src/client/client.ts | 40 +- .../drops/write/updateMetadata.test.ts | 1 - .../erc1155/drops/write/updateMetadata.ts | 11 +- .../erc721/drops/write/updateMetadata.test.ts | 2 - .../erc721/drops/write/updateMetadata.ts | 6 +- packages/thirdweb/src/utils/fetch.test.ts | 20 + packages/thirdweb/src/utils/fetch.ts | 20 +- packages/thirdweb/src/utils/jwt/is-jwt.ts | 5 + packages/thirdweb/src/utils/jwt/types.ts | 2 + pnpm-lock.yaml | 509 ++++-------------- 104 files changed, 922 insertions(+), 1510 deletions(-) create mode 100644 .changeset/rare-colts-compare.md delete mode 100644 apps/dashboard/src/@/constants/client.ts create mode 100644 apps/dashboard/src/@/constants/thirdweb.client.ts create mode 100644 apps/dashboard/src/@/constants/thirdweb.server.ts delete mode 100644 apps/dashboard/src/app/components/SetAuthHeaderForSDK.tsx create mode 100644 packages/thirdweb/src/utils/jwt/is-jwt.ts diff --git a/.changeset/rare-colts-compare.md b/.changeset/rare-colts-compare.md new file mode 100644 index 00000000000..0a1de94e077 --- /dev/null +++ b/.changeset/rare-colts-compare.md @@ -0,0 +1,7 @@ +--- +"thirdweb": patch +--- + +- Allow using valid JWTs for authorization +- update dependencies +- simplify updateMetadata extension params for ERC721 and ERC1155 \ No newline at end of file diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index e0225de63c8..046ba664766 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -141,7 +141,7 @@ "next-sitemap": "^4.2.3", "postcss": "8.4.47", "storybook": "8.3.1", - "tailwindcss": "3.4.11", + "tailwindcss": "3.4.12", "typescript": "5.6.2" } } diff --git a/apps/dashboard/src/@/components/blocks/wallet-address.tsx b/apps/dashboard/src/@/components/blocks/wallet-address.tsx index 5ab34b08e84..b06e2bac766 100644 --- a/apps/dashboard/src/@/components/blocks/wallet-address.tsx +++ b/apps/dashboard/src/@/components/blocks/wallet-address.tsx @@ -6,9 +6,10 @@ import { HoverCardContent, HoverCardTrigger, } from "@/components/ui/hover-card"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { Check, Copy, ExternalLinkIcon } from "lucide-react"; import { useMemo, useState } from "react"; -import { isAddress } from "thirdweb"; +import { type ThirdwebClient, isAddress } from "thirdweb"; import { ZERO_ADDRESS } from "thirdweb"; import { Blobbie, @@ -17,7 +18,6 @@ import { useSocialProfiles, } from "thirdweb/react"; import { resolveScheme } from "thirdweb/storage"; -import { thirdwebClient } from "../../constants/client"; import { cn } from "../../lib/utils"; import { Badge } from "../ui/badge"; import { Button } from "../ui/button"; @@ -27,6 +27,7 @@ export function WalletAddress(props: { shortenAddress?: boolean; className?: string; }) { + const thirdwebClient = useThirdwebClient(); // default back to zero address if no address provided const address = useMemo(() => props.address || ZERO_ADDRESS, [props.address]); @@ -77,7 +78,11 @@ export function WalletAddress(props: { )} > {address && ( - + )} {profiles.data?.[0]?.name || shortenedAddress} @@ -178,6 +183,7 @@ export function WalletAddress(props: { function WalletAvatar(props: { address: string; profiles: SocialProfile[]; + thirdwebClient: ThirdwebClient; }) { const avatar = useMemo(() => { return props.profiles.find( @@ -191,7 +197,7 @@ function WalletAvatar(props: {
{avatar ? ( diff --git a/apps/dashboard/src/@/constants/client.ts b/apps/dashboard/src/@/constants/client.ts deleted file mode 100644 index 919cbefd2d5..00000000000 --- a/apps/dashboard/src/@/constants/client.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { - DASHBOARD_THIRDWEB_CLIENT_ID, - DASHBOARD_THIRDWEB_SECRET_KEY, - IPFS_GATEWAY_URL, -} from "@/constants/env"; -import { createThirdwebClient } from "thirdweb"; - -export const thirdwebClient = createThirdwebClient( - DASHBOARD_THIRDWEB_SECRET_KEY - ? { - secretKey: DASHBOARD_THIRDWEB_SECRET_KEY, - config: { - storage: { - gatewayUrl: IPFS_GATEWAY_URL, - }, - }, - } - : { - clientId: DASHBOARD_THIRDWEB_CLIENT_ID, - config: { - storage: { - gatewayUrl: IPFS_GATEWAY_URL, - }, - }, - }, -); - -/** - * DO NOT ADD ANYTHING TO THIS FILE IF YOU ARE NOT ABSOLUTELY SURE IT IS OK - */ diff --git a/apps/dashboard/src/@/constants/cookie.ts b/apps/dashboard/src/@/constants/cookie.ts index 868b192c3e1..669cc606f7f 100644 --- a/apps/dashboard/src/@/constants/cookie.ts +++ b/apps/dashboard/src/@/constants/cookie.ts @@ -1,2 +1,12 @@ +import { cookies } from "next/headers"; + export const COOKIE_ACTIVE_ACCOUNT = "tw_active_account"; export const COOKIE_PREFIX_TOKEN = "tw_token_"; + +export function getActiveAccountCookie() { + return cookies().get(COOKIE_ACTIVE_ACCOUNT)?.value; +} + +export function getJWTCookie(address: string) { + return cookies().get(COOKIE_PREFIX_TOKEN + address)?.value; +} diff --git a/apps/dashboard/src/@/constants/thirdweb.client.ts b/apps/dashboard/src/@/constants/thirdweb.client.ts new file mode 100644 index 00000000000..e34de3571d2 --- /dev/null +++ b/apps/dashboard/src/@/constants/thirdweb.client.ts @@ -0,0 +1,41 @@ +import {} from "@/constants/env"; +import { useQuery } from "@tanstack/react-query"; +import { useMemo } from "react"; +import { useActiveAccount } from "thirdweb/react"; +import type { GetAuthTokenResponse } from "../../app/api/auth/get-auth-token/route"; +import { getThirdwebClient } from "./thirdweb.server"; + +// returns a thirdweb client with optional JWT passed i + +export function useThirdwebClient(jwt?: string) { + const account = useActiveAccount(); + const query = useQuery({ + queryKey: ["jwt", account?.address], + // only enable the query if there is an account and no JWT is passed in directly + enabled: !!account && !jwt, + retry: false, + queryFn: async () => { + if (!account) { + throw new Error("No account"); + } + const res = await fetch( + `/api/auth/get-auth-token?address=${account.address}`, + ); + if (!res.ok) { + throw new Error("Failed to get auth token"); + } + const json = (await res.json()) as GetAuthTokenResponse; + return json.jwt || undefined; + }, + }); + + return useMemo( + // prfer jwt from props over the one from the token query if it exists + () => getThirdwebClient(jwt || query.data), + [jwt, query.data], + ); +} + +/** + * DO NOT ADD ANYTHING TO THIS FILE IF YOU ARE NOT ABSOLUTELY SURE IT IS OK + */ diff --git a/apps/dashboard/src/@/constants/thirdweb.server.ts b/apps/dashboard/src/@/constants/thirdweb.server.ts new file mode 100644 index 00000000000..d7cb062aba6 --- /dev/null +++ b/apps/dashboard/src/@/constants/thirdweb.server.ts @@ -0,0 +1,23 @@ +import { + DASHBOARD_THIRDWEB_CLIENT_ID, + DASHBOARD_THIRDWEB_SECRET_KEY, + IPFS_GATEWAY_URL, +} from "@/constants/env"; +import { createThirdwebClient } from "thirdweb"; + +// returns a thirdweb client with optional JWT passed in +export function getThirdwebClient(jwt?: string) { + return createThirdwebClient({ + secretKey: jwt ? jwt : DASHBOARD_THIRDWEB_SECRET_KEY, + clientId: DASHBOARD_THIRDWEB_CLIENT_ID, + config: { + storage: { + gatewayUrl: IPFS_GATEWAY_URL, + }, + }, + }); +} + +/** + * DO NOT ADD ANYTHING TO THIS FILE IF YOU ARE NOT ABSOLUTELY SURE IT IS OK + */ diff --git a/apps/dashboard/src/@3rdweb-sdk/react/cache-keys.ts b/apps/dashboard/src/@3rdweb-sdk/react/cache-keys.ts index 0295b56b936..b0455eb7f3a 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/cache-keys.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/cache-keys.ts @@ -1,5 +1,3 @@ -import { ZERO_ADDRESS } from "thirdweb"; - export const networkKeys = { all: ["network"] as const, chain: (chainId?: number) => [...networkKeys.all, chainId] as const, @@ -107,41 +105,3 @@ export const engineKeys = { queueMetrics: (engineId: string) => [...engineKeys.all, engineId, "queueMetrics"] as const, }; - -export const splitsKeys = { - all: ["splits"] as const, - lists: () => [...splitsKeys.all, "list"] as const, - list: (address = ZERO_ADDRESS) => [...splitsKeys.lists(), address] as const, - detail: (address = ZERO_ADDRESS) => [...splitsKeys.all, address] as const, - currencies: (address = ZERO_ADDRESS) => - [...splitsKeys.detail(address), "currencies"] as const, - balances: (address = ZERO_ADDRESS) => - [...splitsKeys.detail(address), "balances"] as const, -}; - -export const voteKeys = { - all: ["vote"] as const, - detail: (address = ZERO_ADDRESS) => [...voteKeys.all, address] as const, - proposals: (address = ZERO_ADDRESS) => - [...voteKeys.detail(address), "proposals"] as const, - proposal: (proposalId = "-1", address = ZERO_ADDRESS) => - [...voteKeys.proposals(address), proposalId] as const, - balances: (address = ZERO_ADDRESS, addresses = [] as string[]) => - [...voteKeys.detail(address), "balances", { addresses }] as const, - delegations: (address = ZERO_ADDRESS) => - [...voteKeys.detail(address), "delegations"] as const, - delegation: (address = ZERO_ADDRESS, userAddress = ZERO_ADDRESS) => - [...voteKeys.delegations(address), userAddress] as const, - userHasVotedOnProposal: ( - proposalId = "-1", - address = ZERO_ADDRESS, - userAddress = ZERO_ADDRESS, - ) => - [ - ...voteKeys.proposal(proposalId, address), - "hasVotedOnProposal", - userAddress, - ] as const, - canExecuteProposal: (proposalId = "-1", address = ZERO_ADDRESS) => - [...voteKeys.proposal(proposalId, address), "canExecute"] as const, -}; diff --git a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx index 374db843890..f7594a330e6 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx @@ -2,7 +2,7 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button } from "@/components/ui/button"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { getSDKTheme } from "app/components/sdk-component-theme"; import { CustomChainRenderer } from "components/selects/CustomChainRenderer"; import { mapV4ChainToV5Chain } from "contexts/map-chains"; @@ -32,6 +32,7 @@ export const CustomConnectWallet = (props: { connectButtonClassName?: string; detailsButtonClassName?: string; }) => { + const thirdwebClient = useThirdwebClient(); const loginRequired = props.loginRequired === undefined ? true : props.loginRequired; const { theme } = useTheme(); @@ -222,6 +223,7 @@ function ConnectWalletWelcomeScreen(props: { export function useCustomConnectModal() { const { connect } = useConnectModal(); const { theme } = useTheme(); + const thirdwebClient = useThirdwebClient(); return useCallback( (options?: { chain?: Chain }) => { @@ -244,7 +246,7 @@ export function useCustomConnectModal() { theme: getSDKTheme(theme === "light" ? "light" : "dark"), }); }, - [connect, theme], + [connect, theme, thirdwebClient], ); } diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useDashboardStorageUpload.tsx b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useDashboardStorageUpload.tsx index b4e769dc51f..e94668020a5 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useDashboardStorageUpload.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useDashboardStorageUpload.tsx @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { useMutation } from "@tanstack/react-query"; import { upload } from "thirdweb/storage"; @@ -8,6 +8,7 @@ type DashboardUploadOptions = { }; export function useDashboardStorageUpload(options?: DashboardUploadOptions) { + const thirdwebClient = useThirdwebClient(); return useMutation({ mutationFn: async (files: Array): Promise => { const uris = await upload({ diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts index d38e224dc3d..c7b4ee0ca4b 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts @@ -77,14 +77,7 @@ export function useLoggedInUser(): { if (query.data?.redirectTo) { router.replace(query.data.redirectTo); } - if (query.data?.jwt) { - // necessary for legacy things for now (SDK picks it up from there) - // eslint-disable-next-line react-compiler/react-compiler - window.TW_AUTH_TOKEN = query.data.jwt; - } else { - window.TW_AUTH_TOKEN = undefined; - } - }, [query.data?.redirectTo, query.data?.jwt, router]); + }, [query.data?.redirectTo, router]); // if we are "disconnected" we are not logged in if (connectionStatus === "disconnected") { diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useSplit.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useSplit.ts index 41aa12a838a..c1d71c20463 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useSplit.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useSplit.ts @@ -1,55 +1,62 @@ +import { + queryOptions, + useMutation, + useQuery, + useQueryClient, +} from "@tanstack/react-query"; import type { BalanceQueryRequest, BalanceQueryResponse, } from "pages/api/moralis/balances"; import { toast } from "sonner"; -import type { ThirdwebContract } from "thirdweb"; +import { type ThirdwebContract, sendAndConfirmTransaction } from "thirdweb"; import { distribute, distributeByToken } from "thirdweb/extensions/split"; -import { useSendAndConfirmTransaction } from "thirdweb/react"; +import { useActiveAccount } from "thirdweb/react"; import invariant from "tiny-invariant"; -import { splitsKeys } from ".."; -import { - useMutationWithInvalidate, - useQueryWithNetwork, -} from "./query/useQueryWithNetwork"; - -export function useSplitBalances(contract: ThirdwebContract) { - const chainId = contract.chain.id; - const contractAddress = contract.address; - const currencies = useQueryWithNetwork( - splitsKeys.currencies(contractAddress), - async () => { - const query = await fetch("/api/moralis/balances", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - chainId, - address: contractAddress, - } as BalanceQueryRequest), - }); - if (query.status >= 400) { - throw new Error(await query.json().then((r) => r.error)); - } - return query.json() as Promise; +async function getSplitBalances(contract: ThirdwebContract) { + const query = await fetch("/api/moralis/balances", { + method: "POST", + headers: { + "Content-Type": "application/json", }, - { enabled: !!chainId && !!contractAddress, retry: false }, - ); - return currencies; + body: JSON.stringify({ + chainId: contract.chain.id, + address: contract.address, + } as BalanceQueryRequest), + }); + + if (query.status >= 400) { + throw new Error(await query.json().then((r) => r.error)); + } + return query.json() as Promise; +} + +function getQuery(contract: ThirdwebContract) { + return queryOptions({ + queryKey: ["split-balances", contract.chain.id, contract.address], + queryFn: () => getSplitBalances(contract), + retry: false, + }); +} + +export function useSplitBalances(contract: ThirdwebContract) { + return useQuery(getQuery(contract)); } export function useSplitDistributeFunds(contract: ThirdwebContract) { - const contractAddress = contract.address; - const balances = useSplitBalances(contract); - const { mutateAsync } = useSendAndConfirmTransaction(); + const account = useActiveAccount(); + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async () => { + invariant(account, "No active account"); + const balances = + // get the cached data if it exists, otherwise fetch it + queryClient.getQueryData(getQuery(contract).queryKey) || + (await queryClient.fetchQuery(getQuery(contract))); - return useMutationWithInvalidate( - async () => { - invariant(contract, "split contract is not ready"); - invariant(balances.data, "No balances to distribute"); - const distributions = (balances.data || []) + const distributions = balances .filter((token) => token.display_balance !== "0.0") .map(async (currency) => { const transaction = @@ -59,24 +66,21 @@ export function useSplitDistributeFunds(contract: ThirdwebContract) { contract, tokenAddress: currency.token_address, }); - const promise = mutateAsync(transaction); + const promise = sendAndConfirmTransaction({ + transaction, + account, + }); toast.promise(promise, { success: `Successfully distributed ${currency.name}`, error: `Error distributing ${currency.name}`, - loading: "Distributing funds", + loading: `Distributing ${currency.name}`, }); }); return await Promise.all(distributions); }, - { - onSuccess: (_data, _variables, _options, invalidate) => { - return invalidate([ - splitsKeys.currencies(contractAddress), - splitsKeys.balances(contractAddress), - splitsKeys.list(contractAddress), - ]); - }, + onSettled: () => { + queryClient.invalidateQueries(getQuery(contract)); }, - ); + }); } diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useVote.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useVote.ts index 2c96ac2b0ac..88213b4dc92 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useVote.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useVote.ts @@ -1,288 +1,103 @@ -import { thirdwebClient } from "@/constants/client"; -import { type ThirdwebContract, getContract, toTokens } from "thirdweb"; +import { useMutation } from "@tanstack/react-query"; import { - balanceOf, - decimals, - delegate, - delegates, -} from "thirdweb/extensions/erc20"; -import { - type VoteType, - canExecute, - castVoteWithReason, - executeProposal, - getAll, - hasVoted, - propose, - token, -} from "thirdweb/extensions/vote"; -import { useActiveAccount, useSendAndConfirmTransaction } from "thirdweb/react"; + type BaseTransactionOptions, + type ThirdwebContract, + getAddress, + getContract, + toTokens, +} from "thirdweb"; +import * as ERC20Ext from "thirdweb/extensions/erc20"; +import * as VoteExt from "thirdweb/extensions/vote"; +import { useSendAndConfirmTransaction } from "thirdweb/react"; +import type { Account } from "thirdweb/wallets"; import invariant from "tiny-invariant"; -import { voteKeys } from "../cache-keys"; -import { - useMutationWithInvalidate, - useQueryWithNetwork, -} from "./query/useQueryWithNetwork"; - -export function useVoteProposalList(contract?: ThirdwebContract) { - return useQueryWithNetwork( - voteKeys.proposals(contract?.address || ""), - async () => { - invariant(contract, "contract is required"); - return await getAll({ contract }); - }, - { - enabled: !!contract, - }, - ); -} -export function useHasVotedOnProposal( - contract: ThirdwebContract, - proposalId: bigint, +export async function tokensDelegated( + options: BaseTransactionOptions<{ account: Account | undefined }>, ) { - const userAddress = useActiveAccount()?.address; - return useQueryWithNetwork( - voteKeys.userHasVotedOnProposal( - proposalId.toString(), - contract.address, - userAddress, - ), - async () => { - invariant(userAddress, "address is required"); - return await hasVoted({ contract, proposalId, account: userAddress }); - }, - { - enabled: !!contract, - }, - ); -} - -export function useCanExecuteProposal( - contract: ThirdwebContract, - proposalId: bigint, -) { - return useQueryWithNetwork( - voteKeys.canExecuteProposal(proposalId.toString(), contract.address), - async () => await canExecute({ contract, proposalId }), - { - enabled: !!contract, - }, - ); -} - -export function useTokensDelegated(contract: ThirdwebContract) { - const userAddress = useActiveAccount()?.address; - - return useQueryWithNetwork( - voteKeys.delegation(contract.address, userAddress), - async () => { - invariant(userAddress, "wallet address is required"); - const tokenAddress = await token({ contract }); - if (!tokenAddress) { - throw new Error("Expected a delegated token address"); - } - const tokenContract = getContract({ - address: tokenAddress, - chain: contract.chain, - client: thirdwebClient, - }); - const delegatedAddress = await delegates({ - contract: tokenContract, - account: userAddress, - }); - return delegatedAddress?.toLowerCase() === userAddress.toLowerCase(); - }, - { - enabled: !!contract && !!userAddress, - }, - ); + if (!options.account) { + throw new Error("Expected an account to be passed in options"); + } + const tokenAddress = await VoteExt.token(options); + if (!tokenAddress) { + throw new Error("Expected a delegated token address"); + } + const tokenContract = getContract({ + ...options.contract, + address: tokenAddress, + }); + const delegatedAddress = await ERC20Ext.delegates({ + contract: tokenContract, + account: options.account.address, + }); + return getAddress(delegatedAddress) === getAddress(options.account.address); } -export function useVoteTokenBalances( - contract: ThirdwebContract, - addresses: string[], +export async function voteTokenBalances( + options: BaseTransactionOptions<{ addresses: string[] }>, ) { - return useQueryWithNetwork( - voteKeys.balances(contract.address, addresses), - async (): Promise< - Array<{ address: string; balance: string; decimals: number }> - > => { - invariant(addresses.length, "addresses are required"); - const tokenAddress = await token({ contract }); - if (!tokenAddress) { - throw new Error("Expected a delegated token address"); - } - const tokenContract = getContract({ - address: tokenAddress, - chain: contract.chain, - client: thirdwebClient, - }); - const _decimals = await decimals({ contract: tokenContract }); - const balanceData = await Promise.all( - addresses.map((address) => - balanceOf({ contract: tokenContract, address }), - ), - ); - const balances = addresses.map((address, index) => { - const balance = balanceData[index] || 0n; - return { - address, - balance: toTokens(balance, _decimals), - decimals: _decimals, - }; - }); - return await Promise.all(balances); - }, - { - enabled: addresses.length > 0, - }, - ); -} - -export interface IProposalInput { - description: string; + invariant(options.addresses.length, "addresses are required"); + const tokenAddress = await VoteExt.token({ contract: options.contract }); + if (!tokenAddress) { + throw new Error("Expected a delegated token address"); + } + const tokenContract = getContract({ + ...options.contract, + address: tokenAddress, + }); + const [decimals, balanceData] = await Promise.all([ + ERC20Ext.decimals({ contract: tokenContract }), + Promise.all( + options.addresses.map((address) => + ERC20Ext.balanceOf({ contract: tokenContract, address }), + ), + ), + ]); + return options.addresses.map((address, index) => { + const balance = balanceData[index] || 0n; + return { + address, + balance: toTokens(balance, decimals), + decimals: decimals, + }; + }); } /** - * This hook is a simplified version meant to use on the Dashboard - * since _currently_ the dashboard only supports creating proposals with descriptions + * Get the decimals of the voting erc20 token * - * todo: make an extension in the SDK that is more robust and user-friendly ? + * TODO: move this into SDK extensions? */ -export function useProposalCreateMutation(contract: ThirdwebContract) { - const { mutateAsync } = useSendAndConfirmTransaction(); - return useMutationWithInvalidate( - async (proposal: IProposalInput) => { - const { description } = proposal; - const transaction = propose({ - contract, - description, - targets: [contract.address], - values: [0n], - calldatas: ["0x"], - }); - return await mutateAsync(transaction); - }, - { - onSuccess: (_data, _options, _variables, invalidate) => { - return invalidate([voteKeys.proposals(contract.address)]); - }, - }, - ); +export async function votingTokenDecimals(options: BaseTransactionOptions) { + const tokenAddress = await VoteExt.token(options); + if (!tokenAddress) { + throw new Error("Expected a delegated token address"); + } + const tokenContract = getContract({ + ...options.contract, + address: tokenAddress, + }); + return await ERC20Ext.decimals({ contract: tokenContract }); } -export function useDelegateMutation(contract: ThirdwebContract) { - const userAddress = useActiveAccount()?.address; +export function useDelegateMutation() { const { mutateAsync } = useSendAndConfirmTransaction(); - return useMutationWithInvalidate( - async () => { - invariant(userAddress, "address is required"); - const tokenAddress = await token({ contract }); + + return useMutation({ + mutationFn: async (contract: ThirdwebContract) => { + const tokenAddress = await VoteExt.token({ contract }); if (!tokenAddress) { throw new Error("Expected a delegated token address"); } const tokenContract = getContract({ + ...contract, address: tokenAddress, - chain: contract.chain, - client: thirdwebClient, }); - const transaction = delegate({ + const transaction = ERC20Ext.delegate({ contract: tokenContract, - delegatee: userAddress, + delegatee: contract.address, }); return await mutateAsync(transaction); }, - { - onSuccess: (_data, _options, _variables, invalidate) => { - return invalidate([voteKeys.delegation(contract.address, userAddress)]); - }, - }, - ); -} - -/** - * Get the decimals of the voting erc20 token - */ -export function useVotingTokenDecimals(contract: ThirdwebContract) { - return useMutationWithInvalidate(async () => { - const tokenAddress = await token({ contract }); - if (!tokenAddress) { - throw new Error("Expected a delegated token address"); - } - const tokenContract = getContract({ - address: tokenAddress, - chain: contract.chain, - client: thirdwebClient, - }); - const _decimals = await decimals({ contract: tokenContract }); - return _decimals; }); } - -interface IVoteCast { - voteType: VoteType; - reason?: string; -} - -export function useCastVoteMutation( - contract: ThirdwebContract, - proposalId: bigint, -) { - const address = useActiveAccount()?.address; - const contractAddress = contract.address; - const { mutateAsync } = useSendAndConfirmTransaction(); - return useMutationWithInvalidate( - async (voteItem: IVoteCast) => { - invariant(contract, "contract is required"); - invariant(address, "address is required"); - const { voteType, reason } = voteItem; - const transaction = castVoteWithReason({ - contract, - proposalId, - support: voteType, - reason: reason ?? "", - }); - return await mutateAsync(transaction); - }, - { - onSuccess: (_data, _options, _variables, invalidate) => { - return invalidate([ - voteKeys.proposals(contractAddress), - voteKeys.userHasVotedOnProposal( - proposalId.toString(), - contractAddress, - address, - ), - voteKeys.canExecuteProposal(proposalId.toString(), contractAddress), - ]); - }, - }, - ); -} - -/** - * This hook is a simplified version for the Dashboard - * It doesn't pass any extra info to the execute function - */ -export function useExecuteProposalMutation( - contract: ThirdwebContract, - proposalId: bigint, -) { - const contractAddress = contract.address; - const mutation = useSendAndConfirmTransaction(); - return useMutationWithInvalidate( - async () => { - const transaction = executeProposal({ contract, proposalId }); - return await mutation.mutateAsync(transaction); - }, - { - onSuccess: (_data, _options, _variables, invalidate) => { - return invalidate([ - voteKeys.proposals(contractAddress), - voteKeys.canExecuteProposal(proposalId.toString(), contractAddress), - ]); - }, - }, - ); -} diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx index 811233f0d8e..927cdc51e04 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx @@ -2,8 +2,8 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button } from "@/components/ui/button"; -import { thirdwebClient } from "@/constants/client"; import { THIRDWEB_ENGINE_FAUCET_WALLET } from "@/constants/env"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { CustomConnectWallet } from "@3rdweb-sdk/react/components/connect-wallet"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { CanClaimResponseType } from "app/api/testnet-faucet/can-claim/CanClaimResponseType"; @@ -36,6 +36,7 @@ export function FaucetButton({ chain: ChainMetadata; amount: string; }) { + const client = useThirdwebClient(); const address = useActiveAccount()?.address; const chainId = chain.chainId; // do not include local overrides for chain pages @@ -44,7 +45,7 @@ export function FaucetButton({ const faucetWalletBalanceQuery = useWalletBalance({ address: THIRDWEB_ENGINE_FAUCET_WALLET, chain: definedChain, - client: thirdwebClient, + client, }); const trackEvent = useTrack(); diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/PayModal.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/PayModal.tsx index 4c47aab2c7e..d77f762c794 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/PayModal.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/PayModal.tsx @@ -1,7 +1,7 @@ "use client"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogTrigger } from "@/components/ui/dialog"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { useTrack } from "hooks/analytics/useTrack"; import { defineDashboardChain } from "lib/defineDashboardChain"; import { useTheme } from "next-themes"; @@ -10,6 +10,7 @@ import { getSDKTheme } from "../../../../../../components/sdk-component-theme"; export function PayModalButton(props: { chainId: number; label: string }) { const { theme } = useTheme(); + const client = useThirdwebClient(); const trackEvent = useTrack(); return ( @@ -34,7 +35,7 @@ export function PayModalButton(props: { chainId: number; label: string }) { dialogCloseClassName="focus:ring-0" > - res.arrayBuffer(), + ? download({ uri: chain.icon.url, client: getThirdwebClient() }).then( + (res) => res.arrayBuffer(), ) : undefined, // download the background image (based on chain) diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/tx/[txHash]/page.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/tx/[txHash]/page.tsx index 95ab1d03f36..de8ee5e18c7 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/tx/[txHash]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/tx/[txHash]/page.tsx @@ -1,6 +1,7 @@ import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; +import { mapV4ChainToV5Chain } from "contexts/map-chains"; import { ZERO_ADDRESS, toTokens } from "thirdweb"; import { eth_getBlockByHash, @@ -9,16 +10,17 @@ import { getRpcClient, } from "thirdweb/rpc"; import { hexToNumber, shortenAddress, toEther } from "thirdweb/utils"; -import { mapV4ChainToV5Chain } from "../../../../../../contexts/map-chains"; import { getChain } from "../../../utils"; export default async function Page(props: { params: { chain_id: string; txHash: `0x${string}` }; }) { + // consider if we want to pass the JWT here, likely no need to do it but we could? + const client = getThirdwebClient(); const chain = await getChain(props.params.chain_id); const rpcRequest = getRpcClient({ - client: thirdwebClient, + client, // Do not include chain overrides for chain pages // eslint-disable-next-line no-restricted-syntax chain: mapV4ChainToV5Chain(chain), diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/components/server/chain-icon.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/components/server/chain-icon.tsx index d9fede13d55..f8fc5738ca1 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/components/server/chain-icon.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/components/server/chain-icon.tsx @@ -1,8 +1,7 @@ /* eslint-disable @next/next/no-img-element */ import "server-only"; - -import { thirdwebClient } from "@/constants/client"; import { DASHBOARD_THIRDWEB_SECRET_KEY } from "@/constants/env"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { cn } from "@/lib/utils"; import { resolveScheme } from "thirdweb/storage"; @@ -15,7 +14,7 @@ export async function ChainIcon(props: { }) { if (props.iconUrl) { const resolved = resolveScheme({ - client: thirdwebClient, + client: getThirdwebClient(), uri: props.iconUrl, }); const res = await fetch(resolved, { diff --git a/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx b/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx index 8c222fa4ca7..1abb92dc44a 100644 --- a/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx @@ -1,6 +1,6 @@ +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { setOverrides } from "lib/vercel-utils"; import { fetchDeployMetadata } from "thirdweb/contract"; -import { thirdwebClient } from "../../../../../@/constants/client"; import { DeployContractInfo } from "../../../published-contract/components/contract-info"; import { DeployFormForUri } from "../../../published-contract/components/uri-based-deploy"; @@ -15,7 +15,7 @@ type DirectDeployPageProps = { export default async function DirectDeployPage(props: DirectDeployPageProps) { const parsedUri = decodeURIComponent(props.params.compiler_uri); const metadata = await fetchDeployMetadata({ - client: thirdwebClient, + client: getThirdwebClient(), // force `ipfs://` prefix uri: parsedUri.startsWith("ipfs://") ? parsedUri : `ipfs://${parsedUri}`, }); diff --git a/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx b/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx index 4c72c84531a..ff14ad8dcf5 100644 --- a/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx @@ -1,8 +1,10 @@ import { ChakraProviderSetup } from "@/components/ChakraProviderSetup"; -import { thirdwebClient } from "@/constants/client"; +import { getActiveAccountCookie, getJWTCookie } from "@/constants/cookie"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { ContractPublishForm } from "components/contract-components/contract-publish-form"; import { setOverrides } from "lib/vercel-utils"; import { revalidatePath } from "next/cache"; +import { redirect } from "next/navigation"; import { fetchDeployMetadata } from "thirdweb/contract"; setOverrides(); @@ -23,13 +25,26 @@ export default async function PublishContractPage( const publishMetadata = await fetchDeployMetadata({ uri: publishUri, - client: thirdwebClient, + client: getThirdwebClient(), }); + const pathname = `/contracts/publish/${props.params.publish_uri}`; + + const address = getActiveAccountCookie(); + if (!address) { + redirect(`/login?next=${encodeURIComponent(pathname)}`); + } + + const token = getJWTCookie(address); + if (!token) { + redirect(`/login?next=${encodeURIComponent(pathname)}`); + } + return (
{ "use server"; diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/ecosystem-header.client.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/ecosystem-header.client.tsx index b6a9bca6133..fc8b9717f4e 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/ecosystem-header.client.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/ecosystem-header.client.tsx @@ -13,7 +13,7 @@ import { } from "@/components/ui/dropdown-menu"; import { Skeleton } from "@/components/ui/skeleton"; import { TabLinks } from "@/components/ui/tabs"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { AlertTriangleIcon, CheckIcon, @@ -123,6 +123,7 @@ export function EcosystemHeader(props: { refetchOnWindowFocus: false, initialData: props.ecosystem, }); + const client = useThirdwebClient(); const ecosystem = fetchedEcosystem ?? props.ecosystem; @@ -140,7 +141,7 @@ export function EcosystemHeader(props: { {ecosystem.name} => { @@ -32,7 +34,7 @@ export function useCreateEcosystem( } const imageUri = await upload({ - client: thirdwebClient, + client, files: [params.logo], }); diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx index 3887c793863..064c03a65aa 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx @@ -1,12 +1,12 @@ +import { ChakraProviderSetup } from "@/components/ChakraProviderSetup"; import { Separator } from "@/components/ui/separator"; -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { SimpleGrid } from "@chakra-ui/react"; +import { fetchPublishedContractVersions } from "components/contract-components/fetch-contracts-with-versions"; +import { PublishedContract } from "components/contract-components/published-contract"; +import { setOverrides } from "lib/vercel-utils"; import { isAddress } from "thirdweb"; import { resolveAddress } from "thirdweb/extensions/ens"; -import { ChakraProviderSetup } from "../../../../../../@/components/ChakraProviderSetup"; -import { fetchPublishedContractVersions } from "../../../../../../components/contract-components/fetch-contracts-with-versions"; -import { PublishedContract } from "../../../../../../components/contract-components/published-contract"; -import { setOverrides } from "../../../../../../lib/vercel-utils"; import { PublishedActions } from "../../../components/contract-actions-published.client"; import { DeployContractHeader } from "../../../components/contract-header"; @@ -34,7 +34,7 @@ export default async function PublishedContractPage( const publisherAddress = isAddress(props.params.publisher) ? props.params.publisher : await resolveAddress({ - client: thirdwebClient, + client: getThirdwebClient(), name: mapThirdwebPublisher(props.params.publisher), }); diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/getPublishedContractsWithPublisherMapping.ts b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/getPublishedContractsWithPublisherMapping.ts index ce13d228366..31fc18ebcde 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/getPublishedContractsWithPublisherMapping.ts +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/getPublishedContractsWithPublisherMapping.ts @@ -1,7 +1,7 @@ -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; +import { fetchPublishedContractVersions } from "components/contract-components/fetch-contracts-with-versions"; import { isAddress } from "thirdweb"; import { resolveAddress } from "thirdweb/extensions/ens"; -import { fetchPublishedContractVersions } from "../../../../../../components/contract-components/fetch-contracts-with-versions"; function mapThirdwebPublisher(publisher: string) { if (publisher === "thirdweb.eth") { @@ -20,7 +20,7 @@ export async function getPublishedContractsWithPublisherMapping(options: { const publisherAddress = isAddress(publisher) ? publisher : await resolveAddress({ - client: thirdwebClient, + client: getThirdwebClient(), name: mapThirdwebPublisher(publisher), }); diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/publishedContractOGImageTemplate.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/publishedContractOGImageTemplate.tsx index c0755e3668c..2b5ddbe6352 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/publishedContractOGImageTemplate.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/publishedContractOGImageTemplate.tsx @@ -1,5 +1,5 @@ /* eslint-disable @next/next/no-img-element */ -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { ImageResponse } from "next/og"; import { download } from "thirdweb/storage"; @@ -174,6 +174,8 @@ export async function publishedContractOGImageTemplate(params: { ), ).then((res) => res.arrayBuffer()); + const client = getThirdwebClient(); + const [ inter400, inter500, @@ -195,13 +197,13 @@ export async function publishedContractOGImageTemplate(params: { params.logo ? download({ uri: params.logo, - client: thirdwebClient, + client, }).then((res) => res.arrayBuffer()) : undefined, params.publisherAvatar ? download({ uri: params.publisherAvatar, - client: thirdwebClient, + client, }).then((res) => res.arrayBuffer()) : undefined, ]); diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/components/contract-info.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/components/contract-info.tsx index 314dbb97b6a..7182d016d61 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/components/contract-info.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/components/contract-info.tsx @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { resolveScheme } from "thirdweb/storage"; export function DeployContractInfo(props: { @@ -19,7 +19,7 @@ export function DeployContractInfo(props: { className="size-12" alt={props.name} src={resolveScheme({ - client: thirdwebClient, + client: getThirdwebClient(), uri: props.logo, })} /> diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/components/publish-based-deploy.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/components/publish-based-deploy.tsx index 4d479392a35..d37e1dd3ccc 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/components/publish-based-deploy.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/components/publish-based-deploy.tsx @@ -1,12 +1,12 @@ import { Separator } from "@/components/ui/separator"; -import { thirdwebClient } from "@/constants/client"; -import { isAddress } from "thirdweb"; -import { fetchDeployMetadata } from "thirdweb/contract"; -import { resolveAddress } from "thirdweb/extensions/ens"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { fetchPublishedContractVersion, fetchPublishedContractVersions, -} from "../../../../components/contract-components/fetch-contracts-with-versions"; +} from "components/contract-components/fetch-contracts-with-versions"; +import { isAddress } from "thirdweb"; +import { fetchDeployMetadata } from "thirdweb/contract"; +import { resolveAddress } from "thirdweb/extensions/ens"; import { DeployActions } from "./contract-actions-deploy.client"; import { DeployContractHeader } from "./contract-header"; import { DeployFormForUri } from "./uri-based-deploy"; @@ -26,11 +26,12 @@ function mapThirdwebPublisher(publisher: string) { } export async function DeployFormForPublishInfo(props: PublishBasedDeployProps) { + const client = getThirdwebClient(); // resolve ENS if required const publisherAddress = isAddress(props.publisher) ? props.publisher : await resolveAddress({ - client: thirdwebClient, + client, name: mapThirdwebPublisher(props.publisher), }); @@ -52,7 +53,7 @@ export async function DeployFormForPublishInfo(props: PublishBasedDeployProps) { .map((m) => m.publishMetadataUri); const [contractMetadata, ...fetchedModules] = await Promise.all([ fetchDeployMetadata({ - client: thirdwebClient, + client, // force `ipfs://` prefix uri: publishedContract.publishMetadataUri.startsWith("ipfs://") ? publishedContract.publishMetadataUri @@ -60,7 +61,7 @@ export async function DeployFormForPublishInfo(props: PublishBasedDeployProps) { }).catch(() => null), ...(moduleUris || []).map((uri) => fetchDeployMetadata({ - client: thirdwebClient, + client, // force `ipfs://` prefix uri: uri.startsWith("ipfs://") ? uri : `ipfs://${uri}`, }).catch(() => null), diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/page.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/page.tsx index ae2afa2d9ea..3acd1e96dda 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/page.tsx @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { redirect } from "next/navigation"; import { fetchDeployMetadata } from "thirdweb/contract"; @@ -13,7 +13,7 @@ export default async function Page(props: { } const contractMetadata = await fetchDeployMetadata({ - client: thirdwebClient, + client: getThirdwebClient(), // force `ipfs://` prefix uri: props.searchParams.uri.startsWith("ipfs://") ? props.searchParams.uri diff --git a/apps/dashboard/src/app/(dashboard)/tools/transaction-simulator/components/TransactionSimulator.tsx b/apps/dashboard/src/app/(dashboard)/tools/transaction-simulator/components/TransactionSimulator.tsx index 773833f7412..496f0c80f8f 100644 --- a/apps/dashboard/src/app/(dashboard)/tools/transaction-simulator/components/TransactionSimulator.tsx +++ b/apps/dashboard/src/app/(dashboard)/tools/transaction-simulator/components/TransactionSimulator.tsx @@ -9,7 +9,7 @@ import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { ToolTipLabel } from "@/components/ui/tooltip"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import type { Abi, AbiFunction } from "abitype"; import { useV5DashboardChain } from "lib/v5-adapter"; import { ArrowDown } from "lucide-react"; @@ -62,6 +62,7 @@ export const TransactionSimulator = (props: { const chain = useV5DashboardChain( Number.isInteger(Number(chainId)) ? chainId : undefined, ); + const client = useThirdwebClient(); async function handleSimulation(data: SimulateTransactionForm) { try { @@ -71,7 +72,7 @@ export const TransactionSimulator = (props: { throw new Error("Invalid chainId"); } const contract = getContract({ - client: thirdwebClient, + client, chain, address: to, }); diff --git a/apps/dashboard/src/app/components/SetAuthHeaderForSDK.tsx b/apps/dashboard/src/app/components/SetAuthHeaderForSDK.tsx deleted file mode 100644 index e9057013c92..00000000000 --- a/apps/dashboard/src/app/components/SetAuthHeaderForSDK.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { useEffect } from "react"; -import { useActiveAccount } from "thirdweb/react"; -import type { GetAuthTokenResponse } from "../api/auth/get-auth-token/route"; - -function useAuthHeader() { - const account = useActiveAccount(); - return useQuery({ - queryKey: ["authHeader", account?.address], - queryFn: async () => { - if (!account) { - throw new Error("No account"); - } - const res = await fetch( - `/api/auth/get-auth-token?address=${account.address}`, - ); - if (!res.ok) { - throw new Error("Failed to get auth token"); - } - const json = (await res.json()) as GetAuthTokenResponse; - return json.jwt; - }, - enabled: !!account, - retry: false, - }); -} - -export function SetAuthHeaderForSDK() { - const authHeaderQuery = useAuthHeader(); - // eslint-disable-next-line no-restricted-syntax - useEffect(() => { - if (authHeaderQuery.data) { - window.TW_AUTH_TOKEN = authHeaderQuery.data; - } - }, [authHeaderQuery.data]); - - return null; -} diff --git a/apps/dashboard/src/app/components/autoconnect.tsx b/apps/dashboard/src/app/components/autoconnect.tsx index 2eb373ab29c..24f3754d69f 100644 --- a/apps/dashboard/src/app/components/autoconnect.tsx +++ b/apps/dashboard/src/app/components/autoconnect.tsx @@ -3,9 +3,10 @@ // don't know why - but getting compilation error without adding "use client" even though it's already added // where we import AutoConnect from in thirdweb/react -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { AutoConnect } from "thirdweb/react"; export function TWAutoConnect() { - return ; + const client = useThirdwebClient(); + return ; } diff --git a/apps/dashboard/src/app/login/page.tsx b/apps/dashboard/src/app/login/page.tsx index 5b69bcdcdac..3fcf5972372 100644 --- a/apps/dashboard/src/app/login/page.tsx +++ b/apps/dashboard/src/app/login/page.tsx @@ -1,7 +1,7 @@ "use client"; import { ColorModeToggle } from "@/components/color-mode-toggle"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { useDashboardRouter } from "@/lib/DashboardRouter"; import { useTheme } from "next-themes"; import { useSearchParams } from "next/navigation"; @@ -42,6 +42,7 @@ function CustomConnectEmmbed() { const router = useDashboardRouter(); const { theme } = useTheme(); const nextSearchParam = searchParams?.get("next"); + const client = useThirdwebClient(); function onLoginSuccessful() { if (nextSearchParam && isValidRedirectPath(nextSearchParam)) { @@ -73,7 +74,7 @@ function CustomConnectEmmbed() { return isLoggedInResult; }, }} - client={thirdwebClient} + client={client} modalSize={isLG ? "wide" : "compact"} theme={getSDKTheme(theme === "light" ? "light" : "dark")} /> diff --git a/apps/dashboard/src/app/providers.tsx b/apps/dashboard/src/app/providers.tsx index 65dc96a3b41..8fb6d6b09d6 100644 --- a/apps/dashboard/src/app/providers.tsx +++ b/apps/dashboard/src/app/providers.tsx @@ -7,7 +7,6 @@ import { ThemeProvider } from "next-themes"; import { useEffect } from "react"; import { ThirdwebProvider } from "thirdweb/react"; import { setOverrides } from "../lib/vercel-utils"; -import { SetAuthHeaderForSDK } from "./components/SetAuthHeaderForSDK"; const queryClient = new QueryClient(); @@ -22,7 +21,6 @@ export function AppRouterProviders(props: { children: React.ReactNode }) { - {props.children} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx index 0727efde5c0..cd7ee1e0840 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx @@ -1,6 +1,5 @@ "use client"; -import {} from "@/components/ui/select"; import { TabButtons } from "@/components/ui/tabs"; import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; import { PayAnalytics } from "components/pay/PayAnalytics/PayAnalytics"; diff --git a/apps/dashboard/src/components/app-layouts/providers.tsx b/apps/dashboard/src/components/app-layouts/providers.tsx index a352585f519..8affb29d766 100644 --- a/apps/dashboard/src/components/app-layouts/providers.tsx +++ b/apps/dashboard/src/components/app-layouts/providers.tsx @@ -2,17 +2,11 @@ import { useNativeColorMode } from "hooks/useNativeColorMode"; import { ThirdwebProvider } from "thirdweb/react"; import type { ComponentWithChildren } from "types/component-with-children"; -import { SetAuthHeaderForSDK } from "../../app/components/SetAuthHeaderForSDK"; export const DashboardThirdwebProvider: ComponentWithChildren = ({ children, }) => { useNativeColorMode(); - return ( - - - {children} - - ); + return {children}; }; diff --git a/apps/dashboard/src/components/buttons/MismatchButton.tsx b/apps/dashboard/src/components/buttons/MismatchButton.tsx index cedb37f7b0d..5995df9be64 100644 --- a/apps/dashboard/src/components/buttons/MismatchButton.tsx +++ b/apps/dashboard/src/components/buttons/MismatchButton.tsx @@ -1,3 +1,5 @@ +"use client"; + import { DynamicHeight } from "@/components/ui/DynamicHeight"; import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button as ButtonShadcn } from "@/components/ui/button"; @@ -8,7 +10,7 @@ import { DialogHeader, DialogTitle, } from "@/components/ui/dialog"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { cn } from "@/lib/utils"; import { useDashboardEVMChainId } from "@3rdweb-sdk/react"; import { CustomConnectWallet } from "@3rdweb-sdk/react/components/connect-wallet"; @@ -81,10 +83,11 @@ export const MismatchButton = forwardRef( const activeWalletChain = useActiveWalletChain(); const [dialog, setDialog] = useState(); const { theme } = useTheme(); + const client = useThirdwebClient(); const evmBalance = useWalletBalance({ address: account?.address, chain: activeWalletChain, - client: thirdwebClient, + client, }); const initialFocusRef = useRef(null); @@ -216,7 +219,7 @@ export const MismatchButton = forwardRef( {dialog === "pay" && ( { const address = useActiveAccount()?.address; + const client = useThirdwebClient(); const requestFunds = async () => { if (!address) { return toast.error("No active account detected"); } const faucet = privateKeyToAccount({ privateKey: LOCAL_NODE_PKEY, - client: thirdwebClient, + client, }); const transaction = prepareTransaction({ to: address, chain: localhost, - client: thirdwebClient, + client, value: toWei("10"), }); const promise = sendTransaction({ diff --git a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx index 38775063f6c..5a0e0546b9b 100644 --- a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx +++ b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx @@ -5,6 +5,8 @@ import { Button } from "@/components/ui/button"; import { Checkbox, CheckboxWithLabel } from "@/components/ui/checkbox"; import { ToolTipLabel } from "@/components/ui/tooltip"; import { TrackedLinkTW } from "@/components/ui/tracked-link"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; +import { useLoggedInUser } from "@3rdweb-sdk/react/hooks/useLoggedInUser"; import { Accordion, AccordionButton, @@ -17,6 +19,7 @@ import { import { useMutation, useQuery } from "@tanstack/react-query"; import { NetworkSelectorButton } from "components/selects/NetworkSelectorButton"; import { SolidityInput } from "contract-ui/components/solidity-inputs"; +import { useTxNotifications } from "hooks/useTxNotifications"; import { replaceTemplateValues } from "lib/deployment/template-values"; import { ExternalLinkIcon } from "lucide-react"; import Link from "next/link"; @@ -33,9 +36,6 @@ import { import { useActiveAccount, useActiveWalletChain } from "thirdweb/react"; import { upload } from "thirdweb/storage"; import { FormHelperText, FormLabel, Heading, Text } from "tw-components"; -import { thirdwebClient } from "../../../@/constants/client"; -import { useLoggedInUser } from "../../../@3rdweb-sdk/react/hooks/useLoggedInUser"; -import { useTxNotifications } from "../../../hooks/useTxNotifications"; import { useCustomFactoryAbi, useFunctionParamsFromABI } from "../hooks"; import { addContractToMultiChainRegistry } from "../utils"; import { Fieldset } from "./common"; @@ -115,6 +115,8 @@ export const CustomContractForm: React.FC = ({ modules, jwt, }) => { + const thirdwebClient = useThirdwebClient(jwt); + const activeAccount = useActiveAccount(); const walletChain = useActiveWalletChain(); useLoggedInUser(); @@ -472,8 +474,6 @@ export const CustomContractForm: React.FC = ({ return; } - window.TW_AUTH_TOKEN = jwt; - // open the status modal let steps: DeployModalStep[] = [ { diff --git a/apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx b/apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx index f2ab6fb079d..9282c43b43c 100644 --- a/apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx +++ b/apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx @@ -1,6 +1,5 @@ "use client"; - -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { useDashboardRouter } from "@/lib/DashboardRouter"; import { useIsomorphicLayoutEffect } from "@/lib/useIsomorphicLayoutEffect"; import { CustomConnectWallet } from "@3rdweb-sdk/react/components/connect-wallet"; @@ -32,7 +31,9 @@ import { NetworksFieldset } from "./networks-fieldset"; export function ContractPublishForm(props: { publishMetadata: FetchDeployMetadataResult; onPublishSuccess: () => Promise; + jwt: string; }) { + const client = getThirdwebClient(props.jwt); useLoggedInUser(); const [customFactoryAbi, setCustomFactoryAbi] = useState([]); const [fieldsetToShow, setFieldsetToShow] = useState< @@ -254,7 +255,7 @@ export function ContractPublishForm(props: { const tx = publishContract({ account, - contract: getContractPublisher(thirdwebClient), + contract: getContractPublisher(client), metadata, previousMetadata: props.publishMetadata, }); diff --git a/apps/dashboard/src/components/contract-components/fetch-contracts-with-versions.ts b/apps/dashboard/src/components/contract-components/fetch-contracts-with-versions.ts index 099eb043444..8822f88eeee 100644 --- a/apps/dashboard/src/components/contract-components/fetch-contracts-with-versions.ts +++ b/apps/dashboard/src/components/contract-components/fetch-contracts-with-versions.ts @@ -1,10 +1,10 @@ -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import type { ProfileMetadata } from "constants/schemas"; -import { type ThirdwebContract, getContract, isAddress } from "thirdweb"; -import { polygon } from "thirdweb/chains"; +import { isAddress } from "thirdweb"; import { fetchDeployMetadata } from "thirdweb/contract"; import { resolveAddress } from "thirdweb/extensions/ens"; import { + getContractPublisher, getPublishedContractVersions, getPublisherProfileUri, } from "thirdweb/extensions/thirdweb"; @@ -17,25 +17,14 @@ function mapThirdwebPublisher(publisher: string) { return publisher; } -let publisherContract: ThirdwebContract; -function getPublisherContract() { - if (!publisherContract) { - publisherContract = getContract({ - client: thirdwebClient, - address: "0xf5b896Ddb5146D5dA77efF4efBb3Eae36E300808", - chain: polygon, - }); - } - return publisherContract; -} - export async function fetchPublisherProfile(publisherAddress: string) { + const client = getThirdwebClient(); const profileUri = await getPublisherProfileUri({ - contract: getPublisherContract(), + contract: getContractPublisher(client), publisher: isAddress(publisherAddress) ? publisherAddress : await resolveAddress({ - client: thirdwebClient, + client, name: mapThirdwebPublisher(publisherAddress), }), }); @@ -44,7 +33,7 @@ export async function fetchPublisherProfile(publisherAddress: string) { } try { const res = await download({ - client: thirdwebClient, + client, uri: profileUri, }); return res.json() as Promise; @@ -57,12 +46,13 @@ export async function fetchPublishedContractVersions( publisherAddress: string, contractId: string, ) { + const client = getThirdwebClient(); const allVersions = await getPublishedContractVersions({ - contract: getPublisherContract(), + contract: getContractPublisher(client), publisher: isAddress(publisherAddress) ? publisherAddress : await resolveAddress({ - client: thirdwebClient, + client, name: mapThirdwebPublisher(publisherAddress), }), contractId: contractId, @@ -78,7 +68,7 @@ export async function fetchPublishedContractVersions( const responses = await Promise.allSettled( sortedVersions.map((v) => fetchDeployMetadata({ - client: thirdwebClient, + client, uri: v.publishMetadataUri, }).then((m) => ({ ...m, ...v })), ), diff --git a/apps/dashboard/src/components/contract-components/hooks.ts b/apps/dashboard/src/components/contract-components/hooks.ts index 0fc5e2d824c..b8f150e9238 100644 --- a/apps/dashboard/src/components/contract-components/hooks.ts +++ b/apps/dashboard/src/components/contract-components/hooks.ts @@ -1,7 +1,9 @@ -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { queryOptions, useQuery } from "@tanstack/react-query"; import type { Abi } from "abitype"; import { isEnsName, resolveEns } from "lib/ens"; +import { useV5DashboardChain } from "lib/v5-adapter"; import { useMemo } from "react"; import { type ThirdwebContract, getContract } from "thirdweb"; import { @@ -16,7 +18,6 @@ import { } from "thirdweb/extensions/thirdweb"; import { extractIPFSUri, isAddress } from "thirdweb/utils"; import invariant from "tiny-invariant"; -import { useV5DashboardChain } from "../../lib/v5-adapter"; import { type PublishedContractWithVersion, fetchPublishedContractVersions, @@ -48,7 +49,7 @@ async function fetchDeployMetadata(contractId: string) { return removeUndefinedFromObjectDeep( await sdkFetchDeployMetadata({ - client: thirdwebClient, + client: getThirdwebClient(), uri: contractIdIpfsHash, }), ); @@ -102,6 +103,7 @@ export function useAllVersions( } export function usePublishedContractsFromDeploy(contract: ThirdwebContract) { + const client = useThirdwebClient(); return useQuery({ queryKey: [ "published-contracts-from-deploy", @@ -116,7 +118,7 @@ export function usePublishedContractsFromDeploy(contract: ThirdwebContract) { } const publishURIs = await getPublishedUriFromCompilerUri({ - contract: getContractPublisher(thirdwebClient), + contract: getContractPublisher(client), compilerMetadataUri: contractUri, }); @@ -188,7 +190,7 @@ async function fetchPublishedContracts(address?: string | null) { invariant(address, "address is not defined"); const tempResult = ( (await getAllPublishedContracts({ - contract: getContractPublisher(thirdwebClient), + contract: getContractPublisher(getThirdwebClient()), publisher: address, })) || [] ).filter((c) => c.contractId); @@ -286,13 +288,14 @@ export function useContractEvents(abi: Abi) { export function useCustomFactoryAbi(contractAddress: string, chainId: number) { const chain = useV5DashboardChain(chainId); + const client = useThirdwebClient(); const contract = useMemo(() => { return getContract({ - client: thirdwebClient, + client, address: contractAddress, chain, }); - }, [contractAddress, chain]); + }, [contractAddress, chain, client]); return useQuery({ queryKey: ["custom-factory-abi", contract], queryFn: () => resolveContractAbi(contract), diff --git a/apps/dashboard/src/components/contract-components/published-contract/index.tsx b/apps/dashboard/src/components/contract-components/published-contract/index.tsx index 63a093329bb..107ca68dbea 100644 --- a/apps/dashboard/src/components/contract-components/published-contract/index.tsx +++ b/apps/dashboard/src/components/contract-components/published-contract/index.tsx @@ -1,5 +1,6 @@ "use client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { Divider, Flex, @@ -17,11 +18,11 @@ import { useMemo } from "react"; import { BiPencil } from "react-icons/bi"; import { BsShieldCheck } from "react-icons/bs"; import { VscBook, VscCalendar, VscServer } from "react-icons/vsc"; +import type { ThirdwebClient } from "thirdweb"; import { useActiveAccount } from "thirdweb/react"; import { download } from "thirdweb/storage"; import invariant from "tiny-invariant"; import { Card, Heading, Link, LinkButton, Text } from "tw-components"; -import { thirdwebClient } from "../../../@/constants/client"; import type { PublishedContractWithVersion } from "../fetch-contracts-with-versions"; import { usePublishedContractEvents, @@ -52,6 +53,7 @@ export const PublishedContract: React.FC = ({ walletOrEns, }) => { const address = useActiveAccount()?.address; + const client = useThirdwebClient(); const contractFunctions = usePublishedContractFunctions(publishedContract); const contractEvents = usePublishedContractEvents(publishedContract); @@ -66,51 +68,6 @@ export const PublishedContract: React.FC = ({ const licenses = correctAndUniqueLicenses(publishedContract?.licenses || []); - // const publishedContractName = - // publishedContract?.displayName || publishedContract?.name; - - // const extensionNames = useMemo(() => { - // return enabledExtensions.map((ext) => ext.name); - // }, [enabledExtensions]); - - // const ogImageUrl = useMemo( - // () => - // PublishedContractOG.toUrl({ - // name: publishedContractName, - // description: contract.description, - // version: contract.version || "latest", - // publisher: publisherEnsOrAddress, - // extension: extensionNames, - // license: licenses, - // publishDate, - // publisherAvatar: publisherProfile.data?.avatar || undefined, - // logo: contract.logo, - // }), - // [ - // extensionNames, - // licenses, - // contract.description, - // contract.logo, - // publishedContractName, - // contract.version, - // publishDate, - // publisherEnsOrAddress, - // publisherProfile.data?.avatar, - // ], - // ); - - // const twitterIntentUrl = useMemo(() => { - // const url = new URL("https://twitter.com/intent/tweet"); - // url.searchParams.append( - // "text", - // `Check out this ${publishedContractName} contract on @thirdweb - - // Deploy it in one click`, - // ); - // url.searchParams.append("url", currentRoute); - // return url.href; - // }, [publishedContractName, currentRoute]); - const sources = useQuery({ queryKey: ["sources", publishedContract.publishMetadataUri], queryFn: async () => { @@ -118,7 +75,7 @@ export const PublishedContract: React.FC = ({ publishedContract.metadata.sources, "no compilerMetadata sources available", ); - return (await fetchSourceFilesFromMetadata(publishedContract)) + return (await fetchSourceFilesFromMetadata(publishedContract, client)) .map((source) => { return { ...source, @@ -131,22 +88,6 @@ export const PublishedContract: React.FC = ({ enabled: !!publishedContract.metadata.sources, }); - // const title = useMemo(() => { - // let clearType = ""; - // if (extensionNames.includes("ERC721")) { - // clearType = "ERC721"; - // } else if (extensionNames.includes("ERC20")) { - // clearType = "ERC20"; - // } else if (extensionNames.includes("ERC1155")) { - // clearType = "ERC1155"; - // } - // if (clearType) { - // return `${publishedContractName} - ${clearType} | Published Smart Contract`; - // } - - // return `${publishedContractName} | Published Smart Contract`; - // }, [extensionNames, publishedContractName]); - const implementationAddresses = publishedContract.factoryDeploymentData?.implementationAddresses; @@ -165,37 +106,6 @@ export const PublishedContract: React.FC = ({ return ( <> - {/* */} - - {/* Farcaster frames headers */} - {/* - - - - - - */} - {address === publishedContract.publisher && ( @@ -376,6 +286,7 @@ type ContractSource = { }; async function fetchSourceFilesFromMetadata( publishedMetadata: ExtendedPublishedContract, + client: ThirdwebClient, ): Promise { return await Promise.all( Object.entries(publishedMetadata.metadata.sources).map( @@ -394,7 +305,7 @@ async function fetchSourceFilesFromMetadata( ( await download({ uri: `ipfs://${ipfsHash}`, - client: thirdwebClient, + client, }) ).text(), timeout, diff --git a/apps/dashboard/src/components/contract-components/publisher/edit-profile.tsx b/apps/dashboard/src/components/contract-components/publisher/edit-profile.tsx index e43754bda1d..cac634a4997 100644 --- a/apps/dashboard/src/components/contract-components/publisher/edit-profile.tsx +++ b/apps/dashboard/src/components/contract-components/publisher/edit-profile.tsx @@ -1,4 +1,6 @@ -import { thirdwebClient } from "@/constants/client"; +"use client"; + +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { Box, Flex, @@ -50,6 +52,7 @@ export const EditProfile: React.FC = ({ }) => { const FORM_ID = useId(); const { isOpen, onOpen, onClose } = useDisclosure(); + const client = useThirdwebClient(); const { register, @@ -105,13 +108,13 @@ export const EditProfile: React.FC = ({ label: "attempt", }); const tx = setPublisherProfileUri({ - contract: getContractPublisher(thirdwebClient), + contract: getContractPublisher(client), asyncParams: async () => { return { publisher: address, uri: await upload({ files: [d], - client: thirdwebClient, + client, }), }; }, diff --git a/apps/dashboard/src/components/contract-components/publisher/masked-avatar.tsx b/apps/dashboard/src/components/contract-components/publisher/masked-avatar.tsx index 87211df1384..d62080d6079 100644 --- a/apps/dashboard/src/components/contract-components/publisher/masked-avatar.tsx +++ b/apps/dashboard/src/components/contract-components/publisher/masked-avatar.tsx @@ -1,4 +1,6 @@ -import { thirdwebClient } from "@/constants/client"; +"use client"; + +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { resolveScheme } from "thirdweb/storage"; import { MaskedAvatar, @@ -15,6 +17,7 @@ export const PublisherAvatar: React.FC = ({ isLoading, ...restProps }) => { + const client = useThirdwebClient(); const ensQuery = useEns(address); const publisherProfile = usePublisherProfile( ensQuery.data?.address || undefined, @@ -26,7 +29,7 @@ export const PublisherAvatar: React.FC = ({ publisherProfile.data?.avatar ? resolveScheme({ uri: publisherProfile.data.avatar, - client: thirdwebClient, + client, }) : "" } diff --git a/apps/dashboard/src/components/contract-components/tables/cells.tsx b/apps/dashboard/src/components/contract-components/tables/cells.tsx index 934f6bb0b98..c6718d055cf 100644 --- a/apps/dashboard/src/components/contract-components/tables/cells.tsx +++ b/apps/dashboard/src/components/contract-components/tables/cells.tsx @@ -1,6 +1,8 @@ +"use client"; + import { Badge } from "@/components/ui/badge"; import { SkeletonContainer } from "@/components/ui/skeleton"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { useDashboardContractMetadata } from "@3rdweb-sdk/react/hooks/useDashboardContractMetadata"; import type { BasicContract } from "contract-ui/types/types"; import { useChainSlug } from "hooks/chains/chainSlug"; @@ -22,9 +24,10 @@ export const AsyncContractNameCell = memo( ({ cell }: AsyncContractNameCellProps) => { const chainSlug = useChainSlug(cell.chainId); const chain = useV5DashboardChain(cell.chainId); + const client = useThirdwebClient(); const contract = getContract({ - client: thirdwebClient, + client, address: cell.address, chain, }); @@ -61,9 +64,10 @@ interface AsyncContractTypeCellProps { export const AsyncContractTypeCell = memo( ({ cell }: AsyncContractTypeCellProps) => { + const client = useThirdwebClient(); const chain = useV5DashboardChain(cell.chainId); const contract = getContract({ - client: thirdwebClient, + client, address: cell.address, chain, }); diff --git a/apps/dashboard/src/components/custom-contract/contract-header/metadata-header.tsx b/apps/dashboard/src/components/custom-contract/contract-header/metadata-header.tsx index 7d986e0f6fe..02fd44d1d37 100644 --- a/apps/dashboard/src/components/custom-contract/contract-header/metadata-header.tsx +++ b/apps/dashboard/src/components/custom-contract/contract-header/metadata-header.tsx @@ -1,4 +1,6 @@ -import { thirdwebClient } from "@/constants/client"; +"use client"; + +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { Center, Flex, Skeleton, useBreakpointValue } from "@chakra-ui/react"; import { ChainIcon } from "components/icons/ChainIcon"; import Link from "next/link"; @@ -33,6 +35,7 @@ export const MetadataHeader: React.FC = ({ chain, externalLinks, }) => { + const client = useThirdwebClient(); const isMobile = useBreakpointValue({ base: true, md: false }); const cleanedChainName = chain?.name?.replace("Mainnet", "").trim(); const validBlockExplorers = chain?.explorers @@ -68,7 +71,7 @@ export const MetadataHeader: React.FC = ({ {data?.image ? ( void; }) => { + const client = useThirdwebClient(); const chain = useV5DashboardChain(form.getValues("chainId")); - const contract = chain - ? getContract({ - address: form.getValues("contractAddress"), - chain, - client: thirdwebClient, - }) - : undefined; + const address = form.getValues("contractAddress"); + const contract = useMemo( + () => + chain + ? getContract({ + address, + chain, + client, + }) + : undefined, + [chain, client, address], + ); const abiQuery = useResolveContractAbi(contract); diff --git a/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx b/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx index 7200e9bab93..6e71544b3f7 100644 --- a/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx +++ b/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx @@ -1,4 +1,6 @@ -import { thirdwebClient } from "@/constants/client"; +"use client"; + +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { type EngineContractSubscription, useEngineRemoveContractSubscription, @@ -249,6 +251,7 @@ const ChainLastBlockTimestamp = ({ chainId: number; blockNumber: bigint; }) => { + const client = useThirdwebClient(); const chain = useV5DashboardChain(chainId); // Get the block timestamp to display how delayed the last processed block is. const ethBlockQuery = useQuery({ @@ -257,8 +260,8 @@ const ChainLastBlockTimestamp = ({ placeholderData: keepPreviousData, queryFn: async () => { const rpcRequest = getRpcClient({ - client: thirdwebClient, - chain: chain, + client, + chain, }); const block = await eth_getBlockByNumber(rpcRequest, { blockNumber, diff --git a/apps/dashboard/src/components/explore/contract-card/index.tsx b/apps/dashboard/src/components/explore/contract-card/index.tsx index c705aef94f4..b512c34cfea 100644 --- a/apps/dashboard/src/components/explore/contract-card/index.tsx +++ b/apps/dashboard/src/components/explore/contract-card/index.tsx @@ -4,7 +4,7 @@ import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Skeleton, SkeletonContainer } from "@/components/ui/skeleton"; import { TrackedLinkTW } from "@/components/ui/tracked-link"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { cn } from "@/lib/utils"; import { useQuery } from "@tanstack/react-query"; import { moduleToBase64 } from "app/(dashboard)/published-contract/utils/module-base-64"; @@ -89,6 +89,7 @@ export const ContractCard: React.FC = ({ modules = [], isBeta, }) => { + const client = useThirdwebClient(); const publishedContractResult = usePublishedContract( `${publisher}/${contractId}/${version}`, ); @@ -132,7 +133,7 @@ export const ContractCard: React.FC = ({ className="text-success-text flex items-center gap-1 text-sm z-1 hover:underline font-medium relative" href={resolveScheme({ uri: publishedContractResult.data.audit, - client: thirdwebClient, + client, })} > diff --git a/apps/dashboard/src/components/ipfs-upload/dropzone.tsx b/apps/dashboard/src/components/ipfs-upload/dropzone.tsx index 38c45e955cb..3d1eb3f66c4 100644 --- a/apps/dashboard/src/components/ipfs-upload/dropzone.tsx +++ b/apps/dashboard/src/components/ipfs-upload/dropzone.tsx @@ -1,5 +1,7 @@ +"use client"; + import { Label } from "@/components/ui/label"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { useDashboardStorageUpload } from "@3rdweb-sdk/react/hooks/useDashboardStorageUpload"; import { AspectRatio, @@ -162,10 +164,8 @@ const filesPerPage = 20; const FileUpload: React.FC = ({ files, updateFiles }) => { const trackEvent = useTrack(); const address = useActiveAccount()?.address; - // const [progress, setProgress] = useState({ - // progress: 0, - // total: 100, - // }); + const client = useThirdwebClient(); + const [uploadWithoutDirectory, setUploadWithoutDirectory] = useState( files.length === 1, ); @@ -247,7 +247,7 @@ const FileUpload: React.FC = ({ files, updateFiles }) => { src={URL.createObjectURL(file)} mimeType={file.type} requireInteraction - client={thirdwebClient} + client={client} /> diff --git a/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx b/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx index 9ba1aa55b9f..f230ea66c2f 100644 --- a/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx +++ b/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx @@ -1,5 +1,7 @@ +"use client"; + import { Button } from "@/components/ui/button"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { popularChains } from "@3rdweb-sdk/react/components/popularChains"; import { useFavoriteChains } from "@3rdweb-sdk/react/hooks/useFavoriteChains"; import { ChainIcon } from "components/icons/ChainIcon"; @@ -36,6 +38,7 @@ export const NetworkSelectorButton: React.FC = ({ isDisabled, onSwitchChain, }) => { + const client = useThirdwebClient(); const recentlyUsedChains = useRecentlyUsedChains(); const addRecentlyUsedChains = useAddRecentlyUsedChainId(); const setIsNetworkConfigModalOpen = useSetIsNetworkConfigModalOpen(); @@ -148,7 +151,7 @@ export const NetworkSelectorButton: React.FC = ({ } } }, - client: thirdwebClient, + client, }); }} > diff --git a/apps/dashboard/src/components/smart-wallets/AccountFactories/account-cell.tsx b/apps/dashboard/src/components/smart-wallets/AccountFactories/account-cell.tsx index b0b7df8be69..6ae897e4c2e 100644 --- a/apps/dashboard/src/components/smart-wallets/AccountFactories/account-cell.tsx +++ b/apps/dashboard/src/components/smart-wallets/AccountFactories/account-cell.tsx @@ -1,5 +1,7 @@ +"use client"; + import { SkeletonContainer } from "@/components/ui/skeleton"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import type { BasicContract } from "contract-ui/types/types"; import { memo } from "react"; import { getContract } from "thirdweb"; @@ -13,10 +15,11 @@ interface AsyncFactoryAccountCellProps { function useAccountCount(address: string, chainId: number) { const chain = useV5DashboardChain(chainId); + const client = useThirdwebClient(); const contract = getContract({ address, chain, - client: thirdwebClient, + client, }); return useReadContract(getAllAccounts, { diff --git a/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx b/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx index c23bd1b1493..bb73004799b 100644 --- a/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx +++ b/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx @@ -1,16 +1,19 @@ +"use client"; + import { Button } from "@/components/ui/button"; import { TrackedLinkTW } from "@/components/ui/tracked-link"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { useLoggedInUser } from "@3rdweb-sdk/react/hooks/useLoggedInUser"; import { useMultiChainRegContractList } from "@3rdweb-sdk/react/hooks/useRegistry"; import { useQuery } from "@tanstack/react-query"; import { PlusIcon } from "lucide-react"; import { defineChain, getContract } from "thirdweb"; import { getCompilerMetadata } from "thirdweb/contract"; -import { thirdwebClient } from "../../../@/constants/client"; import { FactoryContracts } from "./factory-contracts"; -const useFactories = () => { +function useFactories() { const { user, isLoggedIn } = useLoggedInUser(); + const client = useThirdwebClient(); const contractListQuery = useMultiChainRegContractList(user?.address); @@ -28,7 +31,7 @@ const useFactories = () => { // eslint-disable-next-line no-restricted-syntax chain: defineChain(c.chainId), address: c.address, - client: thirdwebClient, + client, }); const m = await getCompilerMetadata(contract); return m.name.indexOf("AccountFactory") > -1 ? c : null; @@ -39,7 +42,7 @@ const useFactories = () => { }, enabled: !!user?.address && isLoggedIn && !!contractListQuery.data?.length, }); -}; +} interface AccountFactoriesProps { trackingCategory: string; diff --git a/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx b/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx index 3d5f33efaec..7c0b270c913 100644 --- a/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx +++ b/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx @@ -1,6 +1,9 @@ -import { Checkbox } from "@/components/ui/checkbox"; -import { thirdwebClient } from "@/constants/client"; +"use client"; + /* eslint-disable @next/next/no-img-element */ + +import { Checkbox } from "@/components/ui/checkbox"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { Box, Flex, @@ -408,7 +411,7 @@ export const MiniPlayground: React.FC<{ = { }; export const PosthogIdentifier: React.FC = () => { + const client = useThirdwebClient(); const account = useActiveAccount(); const chain = useActiveWalletChain(); const balance = useWalletBalance({ address: account?.address, chain, - client: thirdwebClient, + client, }); const wallet = useActiveWallet(); diff --git a/apps/dashboard/src/constants/contracts.ts b/apps/dashboard/src/constants/contracts.ts index e0607cbe908..a16a5b39da9 100644 --- a/apps/dashboard/src/constants/contracts.ts +++ b/apps/dashboard/src/constants/contracts.ts @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { getContract } from "thirdweb"; import { polygon } from "thirdweb/chains"; @@ -23,6 +23,6 @@ export type ContractType = export const MULTICHAIN_REGISTRY_CONTRACT = getContract({ chain: polygon, - client: thirdwebClient, + client: getThirdwebClient(), address: "0xcdAD8FA86e18538aC207872E8ff3536501431B73", }); diff --git a/apps/dashboard/src/contract-ui/hooks/useContractSources.ts b/apps/dashboard/src/contract-ui/hooks/useContractSources.ts index 212f1f185f5..5c0fca28920 100644 --- a/apps/dashboard/src/contract-ui/hooks/useContractSources.ts +++ b/apps/dashboard/src/contract-ui/hooks/useContractSources.ts @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { useQuery } from "@tanstack/react-query"; import type { ThirdwebContract } from "thirdweb"; import { getCompilerMetadata } from "thirdweb/contract"; @@ -8,6 +8,7 @@ import invariant from "tiny-invariant"; // An example for a contract that has IPFS URIs in its metadata: abstract-testnet/0x8A24a7Df38fA5fCCcFD1259e90Fb6996fDdfcADa export function useContractSources(contract?: ThirdwebContract) { + const client = useThirdwebClient(); return useQuery({ queryKey: [ "contract-sources", @@ -36,7 +37,7 @@ export function useContractSources(contract?: ThirdwebContract) { const ipfsHash = ipfsLink.split("ipfs/")[1]; const source = await download({ uri: `ipfs://${ipfsHash}`, - client: thirdwebClient, + client, }) .then((r) => r.text()) .catch(() => "Failed to fetch source from IPFS"); diff --git a/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx b/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx index fce89362d18..3d947922b95 100644 --- a/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx +++ b/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx @@ -299,7 +299,7 @@ export function useContractRouteConfig( ? "loading" : "disabled", isDefault: true, - component: LazyContractEditModulesPage, + component: () => , }, { title: "Code Snippets", diff --git a/apps/dashboard/src/contract-ui/tabs/account/components/account-balance.tsx b/apps/dashboard/src/contract-ui/tabs/account/components/account-balance.tsx index 809ba0096a2..b5c38f733e5 100644 --- a/apps/dashboard/src/contract-ui/tabs/account/components/account-balance.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account/components/account-balance.tsx @@ -1,4 +1,3 @@ -import { thirdwebClient } from "@/constants/client"; import { useSplitBalances } from "@3rdweb-sdk/react/hooks/useSplit"; import { SimpleGrid, Stat, StatLabel, StatNumber } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; @@ -14,7 +13,7 @@ export const AccountBalance: React.FC = ({ contract }) => { const { data: balance } = useWalletBalance({ address: contract.address, chain: activeChain, - client: thirdwebClient, + client: contract.client, }); const balanceQuery = useSplitBalances(contract); diff --git a/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx b/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx index eb16e4cd175..4c1a55bc56d 100644 --- a/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx @@ -1,4 +1,6 @@ -import { thirdwebClient } from "@/constants/client"; +"use client"; + +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { Input } from "@chakra-ui/react"; import { TransactionButton } from "components/buttons/TransactionButton"; import { type ChangeEvent, useState } from "react"; @@ -19,6 +21,7 @@ export const DepositNative: React.FC = ({ symbol, chain, }) => { + const client = useThirdwebClient(); const { mutate: transfer, isPending } = useSendAndConfirmTransaction(); const [amount, setAmount] = useState(""); const handleChange = (e: ChangeEvent) => { @@ -57,7 +60,7 @@ export const DepositNative: React.FC = ({ const transaction = prepareTransaction({ to: address, chain: v5Chain, - client: thirdwebClient, + client, value: toWei(amount), }); transfer(transaction, { diff --git a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/snapshot-upload.tsx b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/snapshot-upload.tsx index 296cf74280e..5a53afe204a 100644 --- a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/snapshot-upload.tsx +++ b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/snapshot-upload.tsx @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { AspectRatio, Box, @@ -75,6 +75,7 @@ export const SnapshotUpload: React.FC = ({ dropType, isDisabled, }) => { + const client = useThirdwebClient(); const [validSnapshot, setValidSnapshot] = useState( value || [], ); @@ -148,7 +149,7 @@ export const SnapshotUpload: React.FC = ({ try { resolvedAddress = isAddress(address) ? address - : await resolveAddress({ client: thirdwebClient, name: address }); + : await resolveAddress({ client, name: address }); isValid = !!resolvedAddress; } catch { isValid = false; @@ -180,7 +181,7 @@ export const SnapshotUpload: React.FC = ({ setSnapshotData(ordered); }; normalizeAddresses(validSnapshot); - }, [validSnapshot]); + }, [validSnapshot, client]); const removeInvalid = useCallback(() => { const filteredData = snapshotData.filter(({ isValid }) => isValid); diff --git a/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx b/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx index bc8b23400a3..1d9045ee552 100644 --- a/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx @@ -1,6 +1,5 @@ import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; -import {} from "tw-components"; import { ClaimConditions } from "./components/claim-conditions"; interface ContractClaimConditionsPageProps { diff --git a/apps/dashboard/src/contract-ui/tabs/listings/components/list-form.tsx b/apps/dashboard/src/contract-ui/tabs/listings/components/list-form.tsx index bf472834b8d..6de8f9ea0fa 100644 --- a/apps/dashboard/src/contract-ui/tabs/listings/components/list-form.tsx +++ b/apps/dashboard/src/contract-ui/tabs/listings/components/list-form.tsx @@ -1,5 +1,4 @@ import { Alert, AlertTitle } from "@/components/ui/alert"; -import { thirdwebClient } from "@/constants/client"; import { useDashboardEVMChainId, useEVMContractInfo } from "@3rdweb-sdk/react"; import { useDashboardOwnedNFTs } from "@3rdweb-sdk/react/hooks/useDashboardOwnedNFTs"; import { useWalletNFTs } from "@3rdweb-sdk/react/hooks/useWalletNFTs"; @@ -151,7 +150,7 @@ export const CreateListingsForm: React.FC = ({ ? getContract({ address: form.watch("selected.contractAddress"), chain: contract.chain, - client: thirdwebClient, + client: contract.client, }) : undefined; diff --git a/apps/dashboard/src/contract-ui/tabs/manage/components/ModuleForm.tsx b/apps/dashboard/src/contract-ui/tabs/manage/components/ModuleForm.tsx index 9c9c515b29f..5e6068cc945 100644 --- a/apps/dashboard/src/contract-ui/tabs/manage/components/ModuleForm.tsx +++ b/apps/dashboard/src/contract-ui/tabs/manage/components/ModuleForm.tsx @@ -1,8 +1,7 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { FormControl, Input, Select, Skeleton, Spacer } from "@chakra-ui/react"; import { useMutation, useQuery } from "@tanstack/react-query"; - import { TransactionButton } from "components/buttons/TransactionButton"; import { useAllVersions, @@ -14,6 +13,7 @@ import { toast } from "sonner"; import { type Chain, type ContractOptions, + type ThirdwebClient, sendTransaction, waitForReceipt, } from "thirdweb"; @@ -56,6 +56,7 @@ type InstallModuleFormProps = { export type InstallModuleForm = UseFormReturn; export const InstallModuleForm = (props: InstallModuleFormProps) => { + const client = useThirdwebClient(); const form = useForm({ defaultValues: { version: "latest", @@ -175,7 +176,7 @@ export const InstallModuleForm = (props: InstallModuleFormProps) => { return Promise.all( moduleAddress.map(async (address) => { const result = await resolveImplementation({ - client: thirdwebClient, + client, address, chain: contract.chain, }); @@ -222,6 +223,7 @@ export const InstallModuleForm = (props: InstallModuleFormProps) => { moduleInfo: { bytecodeUri: selectedModule.metadata.bytecodeUri, }, + client, }); }, retry: false, @@ -405,10 +407,11 @@ async function isModuleCompatible(options: { moduleInfo: { bytecodeUri: string; }; + client: ThirdwebClient; }) { // 1. get module's bytecode const res = await download({ - client: thirdwebClient, + client: options.client, uri: options.moduleInfo.bytecodeUri, }); @@ -419,7 +422,7 @@ async function isModuleCompatible(options: { const isCompatible = await checkModulesCompatibility({ chain: options.contractInfo.chain, coreBytecode: options.contractInfo.bytecode, - client: thirdwebClient, + client: options.client, moduleBytecodes: [ moduleBytecode, ...options.contractInfo.installedModuleBytecodes, diff --git a/apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts b/apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts index 4d77c1ad152..59b70a55d69 100644 --- a/apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts +++ b/apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { getThirdwebClient } from "@/constants/thirdweb.server"; import { fetchPublishedContractVersions } from "components/contract-components/fetch-contracts-with-versions"; import { isAddress } from "thirdweb"; import { resolveAddress } from "thirdweb/extensions/ens"; @@ -11,7 +11,7 @@ export async function getModuleInstalledParams(ext: ModuleMeta) { const publisherAddress = isAddress(ext.publisherAddress) ? ext.publisherAddress : await resolveAddress({ - client: thirdwebClient, + client: getThirdwebClient(), name: ext.publisherAddress, }); const allPublishedModules = await fetchPublishedContractVersions( diff --git a/apps/dashboard/src/contract-ui/tabs/manage/page.tsx b/apps/dashboard/src/contract-ui/tabs/manage/page.tsx index 4c693348949..98388af727a 100644 --- a/apps/dashboard/src/contract-ui/tabs/manage/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/manage/page.tsx @@ -1,52 +1,20 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; -import { thirdwebClient } from "@/constants/client"; -import { useEVMContractInfo } from "@3rdweb-sdk/react"; import { UserXIcon } from "lucide-react"; -import { useMemo } from "react"; -import { getContract } from "thirdweb"; +import type { ThirdwebContract } from "thirdweb"; import { getInstalledModules, owner } from "thirdweb/modules"; import { useActiveAccount, useReadContract } from "thirdweb/react"; -import { useV5DashboardChain } from "../../../lib/v5-adapter"; import { InstalledModulesTable } from "./components/InstalledModulesTable"; import { InstallModuleForm } from "./components/ModuleForm"; interface ContractEditModulesPageProps { - contractAddress?: string; + contract: ThirdwebContract; } export const ContractEditModulesPage: React.FC< ContractEditModulesPageProps -> = ({ contractAddress }) => { - const contractInfo = useEVMContractInfo(); - - const chainId = contractInfo?.chain?.chainId; - - if (!contractAddress || !chainId) { - return ( -
- -
- ); - } - - return ; -}; - -function Content(props: { contractAddress: string; chainId: number }) { - const { contractAddress, chainId } = props; +> = ({ contract }) => { const account = useActiveAccount(); - const chain = useV5DashboardChain(chainId); - - const contract = useMemo( - () => - getContract({ - client: thirdwebClient, - address: contractAddress, - chain: chain, - }), - [contractAddress, chain], - ); const installedModulesQuery = useReadContract(getInstalledModules, { contract, @@ -56,10 +24,6 @@ function Content(props: { contractAddress: string; chainId: number }) { contract, }); - function refetchModules() { - installedModulesQuery.refetch(); - } - if (ownerQuery.isLoading) { return (
@@ -101,7 +65,7 @@ function Content(props: { contractAddress: string; chainId: number }) {
installedModulesQuery.refetch()} account={account} installedModules={installedModules} /> @@ -128,10 +92,10 @@ function Content(props: { contractAddress: string; chainId: number }) { installedModulesQuery.refetch()} contract={contract} ownerAccount={isOwner ? account : undefined} />
); -} +}; diff --git a/apps/dashboard/src/contract-ui/tabs/nfts/components/airdrop-upload.tsx b/apps/dashboard/src/contract-ui/tabs/nfts/components/airdrop-upload.tsx index dc9e7552a7c..54e35d67e7f 100644 --- a/apps/dashboard/src/contract-ui/tabs/nfts/components/airdrop-upload.tsx +++ b/apps/dashboard/src/contract-ui/tabs/nfts/components/airdrop-upload.tsx @@ -1,4 +1,4 @@ -import { thirdwebClient } from "@/constants/client"; +import { useThirdwebClient } from "@/constants/thirdweb.client"; import { AspectRatio, Box, @@ -58,6 +58,7 @@ export const AirdropUpload: React.FC = ({ isOpen, onClose, }) => { + const client = useThirdwebClient(); const [validAirdrop, setValidAirdrop] = useState([]); const [airdropData, setAirdropData] = useState([]); const [noCsv, setNoCsv] = useState(false); @@ -127,7 +128,7 @@ export const AirdropUpload: React.FC = ({ try { resolvedAddress = isAddress(address) ? address - : await resolveAddress({ name: address, client: thirdwebClient }); + : await resolveAddress({ name: address, client }); isValid = !!resolvedAddress; } catch { isValid = false; @@ -159,7 +160,7 @@ export const AirdropUpload: React.FC = ({ setAirdropData(ordered); }; normalizeAddresses(validAirdrop); - }, [validAirdrop]); + }, [validAirdrop, client]); const removeInvalid = useCallback(() => { const filteredData = airdropData.filter(({ isValid }) => isValid); diff --git a/apps/dashboard/src/contract-ui/tabs/nfts/components/update-metadata-form.tsx b/apps/dashboard/src/contract-ui/tabs/nfts/components/update-metadata-form.tsx index 57e4ba4c453..f8c818ede5e 100644 --- a/apps/dashboard/src/contract-ui/tabs/nfts/components/update-metadata-form.tsx +++ b/apps/dashboard/src/contract-ui/tabs/nfts/components/update-metadata-form.tsx @@ -1,4 +1,3 @@ -import { thirdwebClient } from "@/constants/client"; import { Accordion, AccordionButton, @@ -214,13 +213,11 @@ export const UpdateNftMetadata: React.FC = ({ contract, targetTokenId: BigInt(nft.id), newMetadata, - client: thirdwebClient, }) : updateMetadata1155({ contract, targetTokenId: BigInt(nft.id), newMetadata, - client: thirdwebClient, }) : // For Collection contracts, we need to call the `setTokenURI` method nft.type === "ERC721" diff --git a/apps/dashboard/src/contract-ui/tabs/proposals/components/delegate-button.tsx b/apps/dashboard/src/contract-ui/tabs/proposals/components/delegate-button.tsx index 1be24d6cf2b..419c3499c74 100644 --- a/apps/dashboard/src/contract-ui/tabs/proposals/components/delegate-button.tsx +++ b/apps/dashboard/src/contract-ui/tabs/proposals/components/delegate-button.tsx @@ -1,12 +1,13 @@ import { ToolTipLabel } from "@/components/ui/tooltip"; import { + tokensDelegated, useDelegateMutation, - useTokensDelegated, } from "@3rdweb-sdk/react/hooks/useVote"; import { TransactionButton } from "components/buttons/TransactionButton"; import { useTrack } from "hooks/analytics/useTrack"; -import { useTxNotifications } from "hooks/useTxNotifications"; +import { toast } from "sonner"; import type { ThirdwebContract } from "thirdweb"; +import { useActiveAccount, useReadContract } from "thirdweb/react"; interface VoteButtonProps { contract: ThirdwebContract; @@ -14,16 +15,17 @@ interface VoteButtonProps { export const DelegateButton: React.FC = ({ contract }) => { const trackEvent = useTrack(); - const { data: delegated, isLoading } = useTokensDelegated(contract); - const { mutate: delegate, isPending: isDelegating } = - useDelegateMutation(contract); + const account = useActiveAccount(); + const tokensDelegatedQuery = useReadContract(tokensDelegated, { + contract, + account, + queryOptions: { + enabled: !!account, + }, + }); + const delgateMutation = useDelegateMutation(); - const { onSuccess, onError } = useTxNotifications( - "Tokens successfully delegated", - "Error delegating tokens", - ); - - if (delegated || isLoading) { + if (tokensDelegatedQuery.data || tokensDelegatedQuery.isLoading) { return null; } @@ -31,28 +33,33 @@ export const DelegateButton: React.FC = ({ contract }) => { - delegate(undefined, { - onSuccess: () => { - onSuccess(); - trackEvent({ - category: "vote", - action: "delegate", - label: "success", - }); - }, - onError: (error) => { - trackEvent({ - category: "vote", - action: "delegate", - label: "error", - error, - }); - onError(error); + onClick={() => { + toast.promise( + delgateMutation.mutateAsync(contract, { + onSuccess: () => { + trackEvent({ + category: "vote", + action: "delegate", + label: "success", + }); + }, + onError: (error) => { + trackEvent({ + category: "vote", + action: "delegate", + label: "error", + error, + }); + }, + }), + { + loading: "Delegating tokens...", + success: "Tokens delegated", + error: "Error delegating tokens", }, - }) - } - isLoading={isDelegating} + ); + }} + isLoading={delgateMutation.isPending} > Delegate Tokens diff --git a/apps/dashboard/src/contract-ui/tabs/proposals/components/proposal-button.tsx b/apps/dashboard/src/contract-ui/tabs/proposals/components/proposal-button.tsx index c149a26d717..56dcf93ca6b 100644 --- a/apps/dashboard/src/contract-ui/tabs/proposals/components/proposal-button.tsx +++ b/apps/dashboard/src/contract-ui/tabs/proposals/components/proposal-button.tsx @@ -1,8 +1,8 @@ -import { useProposalCreateMutation } from "@3rdweb-sdk/react/hooks/useVote"; import { Icon, useDisclosure } from "@chakra-ui/react"; import { TransactionButton } from "components/buttons/TransactionButton"; import { FiPlus } from "react-icons/fi"; import type { ThirdwebContract } from "thirdweb"; +import { useSendAndConfirmTransaction } from "thirdweb/react"; import { Button, Drawer } from "tw-components"; import { CreateProposalForm } from "./proposal-form"; @@ -15,7 +15,7 @@ const PROPOSAL_FORM_ID = "proposal-form-id"; export const ProposalButton: React.FC = ({ contract }) => { const { isOpen, onOpen, onClose } = useDisclosure(); - const propose = useProposalCreateMutation(contract); + const sendTx = useSendAndConfirmTransaction(); return ( <> @@ -28,7 +28,7 @@ export const ProposalButton: React.FC = ({ contract }) => { children: ( <> = ({ contract }) => { ), }} > - + ); -}; +} diff --git a/apps/dashboard/src/components/smart-wallets/index.tsx b/apps/dashboard/src/components/smart-wallets/index.tsx index 922c405b26e..cddbe0579d6 100644 --- a/apps/dashboard/src/components/smart-wallets/index.tsx +++ b/apps/dashboard/src/components/smart-wallets/index.tsx @@ -5,7 +5,7 @@ import type { ApiKeyService } from "@3rdweb-sdk/react/hooks/useApi"; import { useSearchParams } from "next/navigation"; import { useState } from "react"; import { AccountFactories } from "./AccountFactories"; -import { SponsorshipPolicies } from "./SponsorshipPolicies"; +import { AccountAbstractionSettingsPage } from "./SponsorshipPolicies"; interface SmartWalletsProps { apiKeyServices: ApiKeyService[]; @@ -48,7 +48,7 @@ export const SmartWallets: React.FC = ({ )} {selectedTab === "config" && ( - From 009edeb5f5f4d41429d2795477cc4eb8ec2f840b Mon Sep 17 00:00:00 2001 From: MananTank Date: Wed, 18 Sep 2024 22:02:10 +0000 Subject: [PATCH 14/78] Remove In-app wallet settings from project/connect (#4674) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to rename the `Users` component to `InAppWalletUsersPageContent` for clarity and consistency in the embedded wallets feature. ### Detailed summary - Renamed `Users` component to `InAppWalletUsersPageContent` for clarity - Updated references to the renamed component in multiple files > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../[project_slug]/connect/in-app-wallets/page.tsx | 9 +++------ .../src/components/embedded-wallets/Users/index.tsx | 2 +- apps/dashboard/src/components/embedded-wallets/index.tsx | 7 +++++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/in-app-wallets/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/in-app-wallets/page.tsx index ff171db1136..e65e8e1b19e 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/in-app-wallets/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/in-app-wallets/page.tsx @@ -1,7 +1,7 @@ import { getProject } from "@/api/projects"; import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { notFound } from "next/navigation"; -import { EmbeddedWallets } from "../../../../../../components/embedded-wallets"; +import { InAppWalletUsersPageContent } from "../../../../../../components/embedded-wallets/Users"; import { AnalyticsCallout } from "./_components/AnalyticsCallout"; import { InAppWaletFooterSection } from "./_components/footer"; @@ -43,11 +43,8 @@ export default async function Page(props: {

- diff --git a/apps/dashboard/src/components/embedded-wallets/Users/index.tsx b/apps/dashboard/src/components/embedded-wallets/Users/index.tsx index b5f620b7b2a..d2ae25a4008 100644 --- a/apps/dashboard/src/components/embedded-wallets/Users/index.tsx +++ b/apps/dashboard/src/components/embedded-wallets/Users/index.tsx @@ -66,7 +66,7 @@ const columns = [ }), ]; -export const Users = (props: { +export const InAppWalletUsersPageContent = (props: { clientId: string; trackingCategory: string; }) => { diff --git a/apps/dashboard/src/components/embedded-wallets/index.tsx b/apps/dashboard/src/components/embedded-wallets/index.tsx index 68c1715f5c3..8f292be8898 100644 --- a/apps/dashboard/src/components/embedded-wallets/index.tsx +++ b/apps/dashboard/src/components/embedded-wallets/index.tsx @@ -5,7 +5,7 @@ import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; import { useSearchParams } from "next/navigation"; import { useState } from "react"; import { InAppWalletSettingsPage } from "./Configure"; -import { Users } from "./Users"; +import { InAppWalletUsersPageContent } from "./Users"; interface EmbeddedWalletsProps { apiKey: Pick< @@ -65,7 +65,10 @@ export const EmbeddedWallets: React.FC = ({
{selectedTab === "users" && ( - + )} {selectedTab === "config" && ( From a587ebf1250d3c3aed9fbb43870a73b318458e57 Mon Sep 17 00:00:00 2001 From: MananTank Date: Wed, 18 Sep 2024 22:02:11 +0000 Subject: [PATCH 15/78] Remove AA settings from project/connect (#4675) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to replace the `SmartWallets` component with `AccountFactories` in the `AccountAbstractionPage.tsx`. ### Detailed summary - Replaced `SmartWallets` component with `AccountFactories`. - Updated component import paths. - Added a comment for future improvement. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../account-abstraction/AccountAbstractionPage.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/account-abstraction/AccountAbstractionPage.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/account-abstraction/AccountAbstractionPage.tsx index e9737ddffe8..6968ac99a8f 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/account-abstraction/AccountAbstractionPage.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/account-abstraction/AccountAbstractionPage.tsx @@ -13,12 +13,14 @@ import { SmartWalletsBillingAlert } from "components/settings/ApiKeys/Alerts"; import { CircleAlertIcon } from "lucide-react"; import { useMemo } from "react"; import { useActiveWalletChain } from "thirdweb/react"; -import { SmartWallets } from "../../../../../../components/smart-wallets"; +import { AccountFactories } from "../../../../../../components/smart-wallets/AccountFactories"; import { AAFooterSection } from "./AAFooterSection"; import { isOpChainId } from "./isOpChain"; const TRACKING_CATEGORY = "smart-wallet"; +// TODO - the factories shown on this page is not project specific, need to revamp this page + export function AccountAbstractionPage(props: { apiKeyServices: ApiKeyService[]; }) { @@ -87,10 +89,7 @@ export function AccountAbstractionPage(props: { ) )} - +
)} From 80893aa085b340e4268605048068a5f2d7cbc04f Mon Sep 17 00:00:00 2001 From: MananTank Date: Wed, 18 Sep 2024 22:02:11 +0000 Subject: [PATCH 16/78] Remove Pay settings tab in project/connect (#4676) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to update the `PayPageUI` component to use `clientId` instead of `apiKey` for simplicity and clarity. ### Detailed summary - Updated `PayPageUI` component to accept `clientId` as a string instead of `apiKey` - Removed unnecessary fields from `apiKey` object - Updated references to `props.apiKey.key` to `props.clientId` in `PayPageUI` component > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../[project_slug]/connect/pay/PayPageUI.tsx | 27 +++---------------- .../[project_slug]/connect/pay/page.tsx | 7 +---- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx index cd7ee1e0840..99a634a092a 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx @@ -1,24 +1,12 @@ "use client"; import { TabButtons } from "@/components/ui/tabs"; -import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; import { PayAnalytics } from "components/pay/PayAnalytics/PayAnalytics"; -import { PayConfig } from "components/pay/PayConfig"; import { useState } from "react"; import { WebhooksPage } from "../../../../../(dashboard)/dashboard/connect/pay/components/webhooks.client"; export function PayPageUI(props: { - apiKey: Pick< - ApiKey, - | "key" - | "services" - | "id" - | "name" - | "domains" - | "bundleIds" - | "services" - | "redirectUrls" - >; + clientId: string; }) { const [activeTab, setActiveTab] = useState< "settings" | "analytics" | "webhooks" @@ -42,22 +30,13 @@ export function PayPageUI(props: { onClick: () => setActiveTab("webhooks"), isEnabled: true, }, - { - name: "Settings", - isActive: activeTab === "settings", - onClick: () => setActiveTab("settings"), - isEnabled: true, - }, ]} />
{/* TODO: split this into sub-pages */} - {activeTab === "analytics" && ( - - )} - {activeTab === "settings" && } - {activeTab === "webhooks" && } + {activeTab === "analytics" && } + {activeTab === "webhooks" && } ); } diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx index 8c9e89a7cae..bde4f0e610f 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx @@ -40,12 +40,7 @@ export default async function Page(props: {
- +
); } From 90662e8e495a8965282de0630a96c54d5e309d18 Mon Sep 17 00:00:00 2001 From: MananTank Date: Wed, 18 Sep 2024 22:02:12 +0000 Subject: [PATCH 17/78] Move pay webhooks tab to page with route in project/connect (#4677) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to refactor and improve the Pay feature in the dashboard by renaming components and updating page structures. ### Detailed summary - Renamed `WebhooksPage` component to `PayWebhooksPage`. - Updated page structures and components related to Pay feature. - Refactored and improved code readability in the Pay feature section. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../connect/pay/[id]/webhooks/page.tsx | 4 +- .../pay/components/webhooks.client.tsx | 8 +-- .../[project_slug]/connect/pay/PayPageUI.tsx | 42 ------------ .../[project_slug]/connect/pay/layout.tsx | 64 +++++++++++++++++++ .../[project_slug]/connect/pay/page.tsx | 29 +-------- .../connect/pay/webhooks/page.tsx | 21 ++++++ 6 files changed, 93 insertions(+), 75 deletions(-) delete mode 100644 apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx create mode 100644 apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/layout.tsx create mode 100644 apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/webhooks/page.tsx diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx index d9b20445e0a..7266157db25 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/[id]/webhooks/page.tsx @@ -1,6 +1,6 @@ import { notFound } from "next/navigation"; import { getAPIKey } from "../../../../../../api/lib/getAPIKeys"; -import { WebhooksPage } from "../../components/webhooks.client"; +import { PayWebhooksPage } from "../../components/webhooks.client"; export default async function Page(props: { params: { @@ -13,5 +13,5 @@ export default async function Page(props: { notFound(); } - return ; + return ; } diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx index ffb1432f2fe..fac35432260 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/pay/components/webhooks.client.tsx @@ -57,11 +57,11 @@ type Webhook = { secret: string; }; -type WebhooksPageProps = { +type PayWebhooksPageProps = { clientId: string; }; -export function WebhooksPage(props: WebhooksPageProps) { +export function PayWebhooksPage(props: PayWebhooksPageProps) { const webhooksQuery = useQuery({ queryKey: ["webhooks", props.clientId], queryFn: async () => { @@ -156,7 +156,7 @@ const formSchema = z.object({ label: z.string().min(1, "Please enter a label."), }); -function CreateWebhookButton(props: PropsWithChildren) { +function CreateWebhookButton(props: PropsWithChildren) { const [open, setOpen] = useState(false); const form = useForm>({ resolver: zodResolver(formSchema), @@ -280,7 +280,7 @@ function CreateWebhookButton(props: PropsWithChildren) { } function DeleteWebhookButton( - props: PropsWithChildren, + props: PropsWithChildren, ) { const [open, setOpen] = useState(false); const queryClient = useQueryClient(); diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx deleted file mode 100644 index 99a634a092a..00000000000 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/PayPageUI.tsx +++ /dev/null @@ -1,42 +0,0 @@ -"use client"; - -import { TabButtons } from "@/components/ui/tabs"; -import { PayAnalytics } from "components/pay/PayAnalytics/PayAnalytics"; -import { useState } from "react"; -import { WebhooksPage } from "../../../../../(dashboard)/dashboard/connect/pay/components/webhooks.client"; - -export function PayPageUI(props: { - clientId: string; -}) { - const [activeTab, setActiveTab] = useState< - "settings" | "analytics" | "webhooks" - >("analytics"); - - return ( - <> -
- setActiveTab("analytics"), - isEnabled: true, - }, - { - name: "Webhooks", - isActive: activeTab === "webhooks", - onClick: () => setActiveTab("webhooks"), - isEnabled: true, - }, - ]} - /> -
- - {/* TODO: split this into sub-pages */} - {activeTab === "analytics" && } - {activeTab === "webhooks" && } - - ); -} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/layout.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/layout.tsx new file mode 100644 index 00000000000..365fa79c34d --- /dev/null +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/layout.tsx @@ -0,0 +1,64 @@ +import { getProject } from "@/api/projects"; +import { TabPathLinks } from "@/components/ui/tabs"; +import Link from "next/link"; +import { notFound } from "next/navigation"; + +export default async function Layout(props: { + params: { + team_slug: string; + project_slug: string; + }; + children: React.ReactNode; +}) { + const project = await getProject( + props.params.team_slug, + props.params.project_slug, + ); + + if (!project) { + notFound(); + } + + const payLayoutPath = `/team/${props.params.team_slug}/${props.params.project_slug}/connect/pay`; + + return ( +
+
+
+

+ Pay +

+

+ Pay allows your users to purchase cryptocurrencies and execute + transactions with their credit card or debit card, or with any token + via cross-chain routing.{" "} + + Learn more + +

+
+
+ + + + {props.children} +
+ ); +} diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx index bde4f0e610f..30097449e2d 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/page.tsx @@ -1,7 +1,6 @@ import { getProject } from "@/api/projects"; -import Link from "next/link"; import { notFound } from "next/navigation"; -import { PayPageUI } from "./PayPageUI"; +import { PayAnalytics } from "../../../../../../components/pay/PayAnalytics/PayAnalytics"; export default async function Page(props: { params: { @@ -18,29 +17,5 @@ export default async function Page(props: { notFound(); } - return ( -
-
-
-

- Pay -

-

- Pay allows your users to purchase cryptocurrencies and execute - transactions with their credit card or debit card, or with any token - via cross-chain routing.{" "} - - Learn more - -

-
-
- - -
- ); + return ; } diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/webhooks/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/webhooks/page.tsx new file mode 100644 index 00000000000..6e0f6979fd3 --- /dev/null +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/pay/webhooks/page.tsx @@ -0,0 +1,21 @@ +import { getProject } from "@/api/projects"; +import { notFound } from "next/navigation"; +import { PayWebhooksPage } from "../../../../../../(dashboard)/dashboard/connect/pay/components/webhooks.client"; + +export default async function Page(props: { + params: { + team_slug: string; + project_slug: string; + }; +}) { + const project = await getProject( + props.params.team_slug, + props.params.project_slug, + ); + + if (!project) { + notFound(); + } + + return ; +} From 3c72aeb8f3642b006829a311571f88d387f05fa0 Mon Sep 17 00:00:00 2001 From: MananTank Date: Wed, 18 Sep 2024 22:02:12 +0000 Subject: [PATCH 18/78] Team layout UI adjustments (#4680) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR adds upgrade team links to various components and improves search functionality by making it case-insensitive. ### Detailed summary - Added `upgradeTeamLink` prop to `TeamHeaderUI`, `TeamAndProjectSelectorPopoverButton`, `TeamSelectorMobileMenuButton`, and `TeamSelectionUI` - Modified search functionality to be case-insensitive for projects and teams - Updated `TeamSelectorMobileMenuButton` prop name to `TeamSelectorMobileMenuButtonProps` - Adjusted `TeamSelectionUI` to use the `upgradeTeamLink` prop for displaying an upgrade button > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/app/account/components/AccountHeaderUI.tsx | 1 + .../[team_slug]/[project_slug]/contracts/page.tsx | 2 +- .../team/components/TeamHeader/ProjectSelectorUI.tsx | 4 +++- .../TeamAndProjectSelectorPopoverButton.tsx | 5 +++++ .../app/team/components/TeamHeader/TeamHeaderUI.tsx | 1 + .../team/components/TeamHeader/TeamSelectionUI.tsx | 12 ++++++++---- .../TeamHeader/TeamSelectorMobileMenuButton.tsx | 8 ++++++-- 7 files changed, 25 insertions(+), 8 deletions(-) diff --git a/apps/dashboard/src/app/account/components/AccountHeaderUI.tsx b/apps/dashboard/src/app/account/components/AccountHeaderUI.tsx index a8d5dbce24f..b558bb5c96d 100644 --- a/apps/dashboard/src/app/account/components/AccountHeaderUI.tsx +++ b/apps/dashboard/src/app/account/components/AccountHeaderUI.tsx @@ -85,6 +85,7 @@ export function AccountHeaderMobileUI(props: AccountHeaderCompProps) {
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx index 6ddc3588425..89070b0dc61 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx @@ -20,7 +20,7 @@ export default function Page() { } return ( -
+
{!hasContracts ? ( ) : ( diff --git a/apps/dashboard/src/app/team/components/TeamHeader/ProjectSelectorUI.tsx b/apps/dashboard/src/app/team/components/TeamHeader/ProjectSelectorUI.tsx index 9756ceac6d3..67c4bf0d6ce 100644 --- a/apps/dashboard/src/app/team/components/TeamHeader/ProjectSelectorUI.tsx +++ b/apps/dashboard/src/app/team/components/TeamHeader/ProjectSelectorUI.tsx @@ -20,7 +20,9 @@ export function ProjectSelectorUI(props: { const { projects, currentProject, team } = props; const [searchProjectTerm, setSearchProjectTerm] = useState(""); const filteredProjects = searchProjectTerm - ? projects.filter((project) => project.name.includes(searchProjectTerm)) + ? projects.filter((project) => + project.name.toLowerCase().includes(searchProjectTerm.toLowerCase()), + ) : projects; return ( diff --git a/apps/dashboard/src/app/team/components/TeamHeader/TeamAndProjectSelectorPopoverButton.tsx b/apps/dashboard/src/app/team/components/TeamHeader/TeamAndProjectSelectorPopoverButton.tsx index 24b44657cfa..8ea6a7e4eec 100644 --- a/apps/dashboard/src/app/team/components/TeamHeader/TeamAndProjectSelectorPopoverButton.tsx +++ b/apps/dashboard/src/app/team/components/TeamHeader/TeamAndProjectSelectorPopoverButton.tsx @@ -78,6 +78,11 @@ export function TeamAndProjectSelectorPopoverButton(props: TeamSwitcherProps) { currentTeam={currentTeam} setHoveredTeam={setHoveredTeam} teamsAndProjects={teamsAndProjects} + upgradeTeamLink={ + currentTeam + ? `/team/${currentTeam.slug}/~/settings/billing` + : undefined + } /> {/* Right */} diff --git a/apps/dashboard/src/app/team/components/TeamHeader/TeamHeaderUI.tsx b/apps/dashboard/src/app/team/components/TeamHeader/TeamHeaderUI.tsx index 09e441d1153..cbd8f0ab11d 100644 --- a/apps/dashboard/src/app/team/components/TeamHeader/TeamHeaderUI.tsx +++ b/apps/dashboard/src/app/team/components/TeamHeader/TeamHeaderUI.tsx @@ -129,6 +129,7 @@ export function TeamHeaderMobileUI(props: TeamHeaderCompProps) {
diff --git a/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectionUI.tsx b/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectionUI.tsx index fb762cffdd7..ab364a69612 100644 --- a/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectionUI.tsx +++ b/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectionUI.tsx @@ -15,13 +15,16 @@ export function TeamSelectionUI(props: { setHoveredTeam: (team: Team | undefined) => void; currentTeam: Team | undefined; teamsAndProjects: Array<{ team: Team; projects: Project[] }>; + upgradeTeamLink: string | undefined; }) { const { setHoveredTeam, currentTeam, teamsAndProjects } = props; const teamPlan = currentTeam ? getValidTeamPlan(currentTeam) : undefined; const teams = teamsAndProjects.map((x) => x.team); const [searchTeamTerm, setSearchTeamTerm] = useState(""); const filteredTeams = searchTeamTerm - ? teams.filter((team) => team.name.includes(searchTeamTerm)) + ? teams.filter((team) => + team.name.toLowerCase().includes(searchTeamTerm.toLowerCase()), + ) : teams; return ( @@ -106,16 +109,17 @@ export function TeamSelectionUI(props: {
- {/* TODO - what do we do on this button click? */} + {/* Bottom */} - {teamPlan && teamPlan !== "pro" && ( + {teamPlan && teamPlan !== "pro" && props.upgradeTeamLink && (
)} diff --git a/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectorMobileMenuButton.tsx b/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectorMobileMenuButton.tsx index e94946d1458..db06a660a01 100644 --- a/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectorMobileMenuButton.tsx +++ b/apps/dashboard/src/app/team/components/TeamHeader/TeamSelectorMobileMenuButton.tsx @@ -8,12 +8,15 @@ import { Dialog, DialogContent, DialogTrigger } from "@/components/ui/dialog"; import { ChevronsUpDownIcon } from "lucide-react"; import { TeamSelectionUI } from "./TeamSelectionUI"; -type TeamSwitcherProps = { +type TeamSelectorMobileMenuButtonProps = { currentTeam: Team | undefined; teamsAndProjects: Array<{ team: Team; projects: Project[] }>; + upgradeTeamLink: string | undefined; }; -export function TeamSelectorMobileMenuButton(props: TeamSwitcherProps) { +export function TeamSelectorMobileMenuButton( + props: TeamSelectorMobileMenuButtonProps, +) { const { currentTeam, teamsAndProjects } = props; return ( @@ -39,6 +42,7 @@ export function TeamSelectorMobileMenuButton(props: TeamSwitcherProps) { currentTeam={currentTeam} setHoveredTeam={() => {}} // don't care on mobile teamsAndProjects={teamsAndProjects} + upgradeTeamLink={props.upgradeTeamLink} /> From a78e50413e912da25511f90ee81da71e2320f265 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Wed, 18 Sep 2024 22:19:14 +0000 Subject: [PATCH 19/78] cleanup posthog (#4678) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview This PR updates PostHog dependencies across multiple files, replacing `posthog-js-opensource` with `posthog-js` for consistency and version upgrades. ### Detailed summary - Replaced `posthog-js-opensource` imports with `posthog-js` in multiple files - Updated `posthog-js` version to "1.67.1" in various package.json files > 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}` --- apps/dashboard/package.json | 2 +- .../src/app/components/posthog-pageview.tsx | 2 +- .../src/app/components/root-providers.tsx | 4 +- .../components/wallets/PosthogIdentifier.tsx | 2 +- .../dashboard/src/hooks/analytics/useTrack.ts | 2 +- apps/dashboard/src/hooks/useBuildId.ts | 2 +- apps/dashboard/src/pages/_app.tsx | 12 +- apps/dashboard/src/utils/errorParser.tsx | 2 +- apps/portal/package.json | 2 +- pnpm-lock.yaml | 257 ++++++++++-------- 10 files changed, 155 insertions(+), 132 deletions(-) diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index c4b7e40b28b..0831d64ae46 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -75,7 +75,7 @@ "nextjs-toploader": "^1.6.12", "papaparse": "^5.4.1", "pluralize": "^8.0.0", - "posthog-js-opensource": "npm:posthog-js@1.67.1", + "posthog-js": "1.67.1", "prism-react-renderer": "^2.3.1", "prismjs": "^1.29.0", "qrcode": "^1.5.3", diff --git a/apps/dashboard/src/app/components/posthog-pageview.tsx b/apps/dashboard/src/app/components/posthog-pageview.tsx index d94cc52603d..e9877aa8c35 100644 --- a/apps/dashboard/src/app/components/posthog-pageview.tsx +++ b/apps/dashboard/src/app/components/posthog-pageview.tsx @@ -2,7 +2,7 @@ "use client"; import { usePathname, useSearchParams } from "next/navigation"; -import { usePostHog } from "posthog-js-opensource/react"; +import { usePostHog } from "posthog-js/react"; import { useEffect } from "react"; export default function PostHogPageView(): null { diff --git a/apps/dashboard/src/app/components/root-providers.tsx b/apps/dashboard/src/app/components/root-providers.tsx index 9e93a1a3c15..6dec732716a 100644 --- a/apps/dashboard/src/app/components/root-providers.tsx +++ b/apps/dashboard/src/app/components/root-providers.tsx @@ -1,7 +1,7 @@ // app/providers.tsx "use client"; -import posthog from "posthog-js-opensource"; -import { PostHogProvider as PHProvider } from "posthog-js-opensource/react"; +import posthog from "posthog-js"; +import { PostHogProvider as PHProvider } from "posthog-js/react"; if (typeof window !== "undefined") { posthog.init( diff --git a/apps/dashboard/src/components/wallets/PosthogIdentifier.tsx b/apps/dashboard/src/components/wallets/PosthogIdentifier.tsx index 43436ec79d2..dc0492abe44 100644 --- a/apps/dashboard/src/components/wallets/PosthogIdentifier.tsx +++ b/apps/dashboard/src/components/wallets/PosthogIdentifier.tsx @@ -1,7 +1,7 @@ "use client"; import { useThirdwebClient } from "@/constants/thirdweb.client"; -import posthog from "posthog-js-opensource"; +import posthog from "posthog-js"; import { useEffect } from "react"; import { useActiveAccount, diff --git a/apps/dashboard/src/hooks/analytics/useTrack.ts b/apps/dashboard/src/hooks/analytics/useTrack.ts index cb5c930ebc3..b5461ec8269 100644 --- a/apps/dashboard/src/hooks/analytics/useTrack.ts +++ b/apps/dashboard/src/hooks/analytics/useTrack.ts @@ -1,5 +1,5 @@ import { flatten } from "flat"; -import posthog from "posthog-js-opensource"; +import posthog from "posthog-js"; import { useCallback } from "react"; type TExtendedTrackParams = { diff --git a/apps/dashboard/src/hooks/useBuildId.ts b/apps/dashboard/src/hooks/useBuildId.ts index 26d94378b1a..c9edb85b0e5 100644 --- a/apps/dashboard/src/hooks/useBuildId.ts +++ b/apps/dashboard/src/hooks/useBuildId.ts @@ -1,4 +1,4 @@ -import posthog from "posthog-js-opensource"; +import posthog from "posthog-js"; import { useCallback } from "react"; export const useBuildId = () => { diff --git a/apps/dashboard/src/pages/_app.tsx b/apps/dashboard/src/pages/_app.tsx index 4caa4a6f75c..7b3f29869e1 100644 --- a/apps/dashboard/src/pages/_app.tsx +++ b/apps/dashboard/src/pages/_app.tsx @@ -15,7 +15,7 @@ import { } from "next/font/google"; import { useRouter } from "next/router"; import { PageId } from "page-id"; -import posthogOpenSource from "posthog-js-opensource"; +import posthog from "posthog-js"; import { memo, useEffect, useMemo, useRef } from "react"; import { generateBreakpointTypographyCssVars } from "tw-components/utils/typography"; import type { ThirdwebNextPage } from "utils/types"; @@ -107,7 +107,7 @@ const ConsoleAppWrapper: React.FC = ({ // eslint-disable-next-line no-restricted-syntax useEffect(() => { // Init PostHog - posthogOpenSource.init( + posthog.init( process.env.NEXT_PUBLIC_POSTHOG_API_KEY || "phc_hKK4bo8cHZrKuAVXfXGpfNSLSJuucUnguAgt2j6dgSV", { @@ -119,12 +119,12 @@ const ConsoleAppWrapper: React.FC = ({ }, ); // register the git commit sha on all subsequent events - posthogOpenSource.register({ + posthog.register({ tw_dashboard_version: process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA, }); // defer session recording start by 2 seconds because it synchronously loads JS const t = setTimeout(() => { - posthogOpenSource.startSessionRecording(); + posthog.startSessionRecording(); }, 2_000); return () => { clearTimeout(t); @@ -145,11 +145,11 @@ const ConsoleAppWrapper: React.FC = ({ if (pageId === prevPageId.current) { return; } - posthogOpenSource.register({ + posthog.register({ page_id: pageId, previous_page_id: prevPageId.current, }); - posthogOpenSource.capture("$pageview"); + posthog.capture("$pageview"); return () => { prevPageId.current = pageId; }; diff --git a/apps/dashboard/src/utils/errorParser.tsx b/apps/dashboard/src/utils/errorParser.tsx index 04c08000b4b..96ead60bec3 100644 --- a/apps/dashboard/src/utils/errorParser.tsx +++ b/apps/dashboard/src/utils/errorParser.tsx @@ -1,5 +1,5 @@ import { Flex, Link } from "@chakra-ui/react"; -import posthog from "posthog-js-opensource"; +import posthog from "posthog-js"; import { Text } from "tw-components"; const PLEASE_REACH_OUT_MESSAGE = ( diff --git a/apps/portal/package.json b/apps/portal/package.json index 43dff28b71f..3f23a8c5ce5 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -36,7 +36,7 @@ "next": "14.2.12", "nextjs-toploader": "^1.6.12", "node-html-parser": "^6.1.13", - "posthog-js": "1.161.6", + "posthog-js": "1.67.1", "prettier": "^3.3.2", "react": "18.3.1", "react-dom": "18.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b65cb3b4f3a..e40908afab9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -184,7 +184,7 @@ importers: version: 4.1.0(react@18.3.1) '@sentry/nextjs': specifier: 8.30.0 - version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + version: 8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) '@shazow/whatsabi': specifier: ^0.14.1 version: 0.14.1(@noble/hashes@1.5.0)(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -269,9 +269,9 @@ importers: pluralize: specifier: ^8.0.0 version: 8.0.0 - posthog-js-opensource: - specifier: npm:posthog-js@1.67.1 - version: posthog-js@1.67.1 + posthog-js: + specifier: 1.67.1 + version: 1.67.1 prism-react-renderer: specifier: ^2.3.1 version: 2.4.0(react@18.3.1) @@ -340,7 +340,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -389,7 +389,7 @@ importers: version: 8.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.3.1 - version: 8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + version: 8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) '@storybook/react': specifier: 8.3.1 version: 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) @@ -437,7 +437,7 @@ importers: version: 10.4.20(postcss@8.4.47) checkly: specifier: ^4.8.1 - version: 4.9.0(@swc/core@1.7.26)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + version: 4.9.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) eslint: specifier: 8.57.0 version: 8.57.0 @@ -461,7 +461,7 @@ importers: version: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) tailwindcss: specifier: 3.4.12 - version: 3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) typescript: specifier: 5.6.2 version: 5.6.2 @@ -573,10 +573,10 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.12 - version: 3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) typescript: specifier: 5.6.2 version: 5.6.2 @@ -588,13 +588,13 @@ importers: version: 1.0.0(react@18.3.1) '@mdx-js/loader': specifier: ^2.3.0 - version: 2.3.0(webpack@5.94.0) + version: 2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))) '@mdx-js/react': specifier: ^2.3.0 version: 2.3.0(react@18.3.1) '@next/mdx': specifier: ^13.5.6 - version: 13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0))(@mdx-js/react@2.3.0(react@18.3.1)) + version: 13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))))(@mdx-js/react@2.3.0(react@18.3.1)) '@radix-ui/react-dialog': specifier: 1.1.1 version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -644,8 +644,8 @@ importers: specifier: ^6.1.13 version: 6.1.13 posthog-js: - specifier: 1.161.6 - version: 1.161.6 + specifier: 1.67.1 + version: 1.67.1 prettier: specifier: ^3.3.2 version: 3.3.3 @@ -678,7 +678,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -733,7 +733,7 @@ importers: version: 1.2.4 eslint-plugin-tailwindcss: specifier: ^3.15.1 - version: 3.17.4(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 3.17.4(tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@14.2.12(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -742,7 +742,7 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.12 - version: 3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) tsx: specifier: ^4.19.1 version: 4.19.1 @@ -811,7 +811,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -842,7 +842,7 @@ importers: version: 8.4.47 tailwindcss: specifier: 3.4.12 - version: 3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + version: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) typescript: specifier: 5.6.2 version: 5.6.2 @@ -12943,9 +12943,6 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - posthog-js@1.161.6: - resolution: {integrity: sha512-UO0z/YTuan55Kl5Yg9Xs5x1PKUkm2zGKUNPioznb4GLRcxFnLBkWoeKQXNro2YZsYJvK+MY8jlF3cdGa8BZ8/Q==} - posthog-js@1.67.1: resolution: {integrity: sha512-gvdCVrrxoRYbtNTCUt2/YdZ+tfSfzcl72ym/dtRVCYJpwlCUIKnNJ3E2g7Bbw1+Ki6CvGxdu9r7jHIWnvJAMuw==} deprecated: This version of posthog-js is deprecated, please update posthog-js, and do not use this version! Check out our JS docs at https://posthog.com/docs/libraries/js @@ -12953,9 +12950,6 @@ packages: preact@10.23.2: resolution: {integrity: sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==} - preact@10.24.0: - resolution: {integrity: sha512-aK8Cf+jkfyuZ0ZZRG9FbYqwmEiGQ4y/PUO4SuTWoyWL244nZZh7bd5h2APd4rSNDYTBNghg1L+5iJN3Skxtbsw==} - prebuild-install@7.1.2: resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} @@ -15394,9 +15388,6 @@ packages: web-tree-sitter@0.20.3: resolution: {integrity: sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw==} - web-vitals@4.2.3: - resolution: {integrity: sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q==} - webauthn-p256@0.0.5: resolution: {integrity: sha512-drMGNWKdaixZNobeORVIqq7k5DsRC9FnG201K2QjeOoQLmtSDaSsVZdkg6n5jUALJKcAG++zBPJXmv6hy0nWFg==} @@ -22376,11 +22367,11 @@ snapshots: jju: 1.4.0 read-yaml-file: 1.1.0 - '@mdx-js/loader@2.3.0(webpack@5.94.0)': + '@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)))': dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.94.0 + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)) transitivePeerDependencies: - supports-color @@ -22536,11 +22527,11 @@ snapshots: dependencies: glob: 10.3.10 - '@next/mdx@13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0))(@mdx-js/react@2.3.0(react@18.3.1))': + '@next/mdx@13.5.6(@mdx-js/loader@2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))))(@mdx-js/react@2.3.0(react@18.3.1))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 2.3.0(webpack@5.94.0) + '@mdx-js/loader': 2.3.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))) '@mdx-js/react': 2.3.0(react@18.3.1) '@next/swc-darwin-arm64@14.2.12': @@ -22699,7 +22690,7 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - '@oclif/core@2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/core@2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)': dependencies: '@types/cli-progress': 3.11.5 ansi-escapes: 4.3.2 @@ -22725,7 +22716,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.7.26)(@types/node@20.14.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) tslib: 2.7.0 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -22762,10 +22753,10 @@ snapshots: dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-not-found@2.3.23(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/plugin-not-found@2.3.23(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)': dependencies: '@oclif/color': 1.0.13 - '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -22790,9 +22781,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2)': + '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)': dependencies: - '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) chalk: 4.1.2 debug: 4.3.6(supports-color@8.1.1) fs-extra: 9.1.0 @@ -23127,7 +23118,7 @@ snapshots: dependencies: playwright: 1.47.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.94.0(@swc/core@1.7.26)(esbuild@0.23.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.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.38.1 @@ -23137,7 +23128,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) optionalDependencies: type-fest: 4.26.1 webpack-hot-middleware: 2.26.1 @@ -24750,7 +24741,7 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@sentry/nextjs@8.30.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -24762,14 +24753,14 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 '@sentry/vercel-edge': 8.30.0 - '@sentry/webpack-plugin': 2.22.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + '@sentry/webpack-plugin': 2.22.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) chalk: 3.0.0 next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resolve: 1.22.8 rollup: 3.29.4 stacktrace-parser: 0.1.10 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -24848,12 +24839,12 @@ snapshots: '@sentry/types': 8.30.0 '@sentry/utils': 8.30.0 - '@sentry/webpack-plugin@2.22.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@sentry/webpack-plugin@2.22.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: '@sentry/bundler-plugin-core': 2.22.3 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - encoding - supports-color @@ -25501,7 +25492,7 @@ snapshots: - supports-color - webpack-sources - '@storybook/builder-webpack5@8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': + '@storybook/builder-webpack5@8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': dependencies: '@storybook/core-webpack': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@types/node': 22.5.5 @@ -25510,25 +25501,25 @@ 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.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) es-module-lexer: 1.5.4 express: 4.21.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) fs-extra: 11.2.0 - html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) magic-string: 0.30.11 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) - webpack-dev-middleware: 6.1.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) + webpack-dev-middleware: 6.1.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -25604,7 +25595,7 @@ snapshots: dependencies: storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@storybook/nextjs@8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(next@14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(type-fest@4.26.1)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) @@ -25619,32 +25610,32 @@ snapshots: '@babel/preset-react': 7.24.7(@babel/core@7.25.2) '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) '@babel/runtime': 7.25.6 - '@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.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) - '@storybook/builder-webpack5': 8.3.1(@swc/core@1.7.26)(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) - '@storybook/preset-react-webpack': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.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.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) + '@storybook/builder-webpack5': 8.3.1(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) + '@storybook/preset-react-webpack': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) '@storybook/react': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) '@storybook/test': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@types/node': 22.5.5 '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) - css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) + css-loader: 6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) find-up: 5.0.0 fs-extra: 11.2.0 image-size: 1.1.1 loader-utils: 3.3.1 next: 14.2.12(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.47.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) pnp-webpack-plugin: 1.7.0(typescript@5.6.2) postcss: 8.4.47 - postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 13.3.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + sass-loader: 13.3.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + style-loader: 3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) styled-jsx: 5.1.6(@babel/core@7.25.2)(react@18.3.1) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -25652,7 +25643,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -25672,11 +25663,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': + '@storybook/preset-react-webpack@8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2)': dependencies: '@storybook/core-webpack': 8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@storybook/react': 8.3.1(@storybook/test@8.3.1(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.6.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) '@types/node': 22.5.5 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -25689,7 +25680,7 @@ snapshots: semver: 7.6.3 storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -25704,7 +25695,7 @@ snapshots: dependencies: storybook: 8.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1))': dependencies: debug: 4.3.7(supports-color@8.1.1) endent: 2.1.0 @@ -25714,7 +25705,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.6.2) tslib: 2.7.0 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - supports-color @@ -26165,7 +26156,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.7.26': optional: true - '@swc/core@1.7.26': + '@swc/core@1.7.26(@swc/helpers@0.5.5)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -26180,6 +26171,7 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.7.26 '@swc/core-win32-ia32-msvc': 1.7.26 '@swc/core-win32-x64-msvc': 1.7.26 + '@swc/helpers': 0.5.5 optional: true '@swc/counter@0.1.3': {} @@ -27786,12 +27778,12 @@ snapshots: dependencies: '@babel/core': 7.25.2 - babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) babel-plugin-macros@3.1.0: dependencies: @@ -28275,13 +28267,13 @@ snapshots: check-error@2.1.1: {} - checkly@4.9.0(@swc/core@1.7.26)(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10): + checkly@4.9.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: - '@oclif/core': 2.8.11(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/core': 2.8.11(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) '@oclif/plugin-help': 5.1.20 - '@oclif/plugin-not-found': 2.3.23(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/plugin-not-found': 2.3.23(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) '@oclif/plugin-plugins': 5.4.4 - '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) acorn: 8.8.1 acorn-walk: 8.2.0 @@ -28765,7 +28757,7 @@ snapshots: css-color-keywords@1.0.0: {} - css-loader@6.11.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + css-loader@6.11.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -28776,7 +28768,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) css-select@4.3.0: dependencies: @@ -29687,11 +29679,11 @@ snapshots: eslint-plugin-svg-jsx@1.2.4: {} - eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))): + eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))): dependencies: fast-glob: 3.3.2 postcss: 8.4.47 - tailwindcss: 3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + tailwindcss: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) eslint-scope@5.1.1: dependencies: @@ -30393,7 +30385,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -30408,7 +30400,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) form-data-encoder@2.1.4: {} @@ -30938,7 +30930,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -30946,7 +30938,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) htmlparser2@3.10.1: dependencies: @@ -33519,7 +33511,7 @@ snapshots: util: 0.11.1 vm-browserify: 1.1.2 - node-polyfill-webpack-plugin@2.0.1(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -33546,7 +33538,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) node-releases@2.0.18: {} @@ -34152,22 +34144,22 @@ 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.2)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2) - postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: cosmiconfig: 9.0.0(typescript@5.6.2) jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) transitivePeerDependencies: - typescript @@ -34226,20 +34218,12 @@ snapshots: dependencies: xtend: 4.0.2 - posthog-js@1.161.6: - dependencies: - fflate: 0.4.8 - preact: 10.24.0 - web-vitals: 4.2.3 - posthog-js@1.67.1: dependencies: fflate: 0.4.8 preact@10.23.2: {} - preact@10.24.0: {} - prebuild-install@7.1.2: dependencies: detect-libc: 2.0.3 @@ -35455,10 +35439,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@13.3.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + sass-loader@13.3.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: neo-async: 2.6.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) satori@0.10.9: dependencies: @@ -36001,9 +35985,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + style-loader@3.3.4(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) style-to-object@0.4.4: dependencies: @@ -36152,11 +36136,11 @@ snapshots: tailwind-merge@2.5.2: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2))): dependencies: - tailwindcss: 3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)) + tailwindcss: 3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) - tailwindcss@3.4.12(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.6.2)): + tailwindcss@3.4.12(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -36175,7 +36159,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.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -36266,18 +36250,29 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(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.32.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) optionalDependencies: - '@swc/core': 1.7.26 + '@swc/core': 1.7.26(@swc/helpers@0.5.5) esbuild: 0.23.1 + terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.32.0 + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)) + optionalDependencies: + '@swc/core': 1.7.26(@swc/helpers@0.5.5) + terser-webpack-plugin@5.3.10(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -36436,7 +36431,7 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@swc/core@1.7.26)(@types/node@20.14.9)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.5))(@types/node@20.14.9)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -36454,7 +36449,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.26 + '@swc/core': 1.7.26(@swc/helpers@0.5.5) ts-pnp@1.2.0(typescript@5.6.2): optionalDependencies: @@ -37282,8 +37277,6 @@ snapshots: web-tree-sitter@0.20.3: optional: true - web-vitals@4.2.3: {} - webauthn-p256@0.0.5: dependencies: '@noble/curves': 1.4.0 @@ -37314,7 +37307,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)): + webpack-dev-middleware@6.1.3(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -37322,7 +37315,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.23.1) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1) webpack-hot-middleware@2.26.1: dependencies: @@ -37366,7 +37359,37 @@ snapshots: - esbuild - uglify-js - webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1): + webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5)): + dependencies: + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.23.3 + 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.7.26(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1): dependencies: '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 @@ -37388,7 +37411,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.7.26)(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26)(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.5))(esbuild@0.23.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: From c13058a711f8b00f36acbeecd1e45773d0b03fc6 Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Wed, 18 Sep 2024 22:32:21 +0000 Subject: [PATCH 20/78] [Dashboard] ERC20 Claim form (#4669) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR refactors the token claim functionality by replacing a Drawer with a Sheet component and updating UI elements for a better user experience. ### Detailed summary - Replaced `Drawer` with `Sheet` component for better UI - Updated UI elements like buttons, form controls, and labels - Added transaction handling logic for claiming tokens > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../tabs/tokens/components/claim-button.tsx | 194 +++++++++++++++--- .../tabs/tokens/components/claim-form.tsx | 153 -------------- 2 files changed, 169 insertions(+), 178 deletions(-) delete mode 100644 apps/dashboard/src/contract-ui/tabs/tokens/components/claim-form.tsx diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/claim-button.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/claim-button.tsx index 5d74f4af6e7..97998fff2b8 100644 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/claim-button.tsx +++ b/apps/dashboard/src/contract-ui/tabs/tokens/components/claim-button.tsx @@ -1,37 +1,181 @@ -import { Icon, useDisclosure } from "@chakra-ui/react"; -import { GiDiamondHard } from "react-icons/gi"; -import type { ThirdwebContract } from "thirdweb"; -import { Button, Drawer } from "tw-components"; -import { TokenClaimForm } from "./claim-form"; +import { + Sheet, + SheetContent, + SheetFooter, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "@/components/ui/sheet"; +import { FormControl, Input } from "@chakra-ui/react"; +import { TransactionButton } from "components/buttons/TransactionButton"; +import { useTrack } from "hooks/analytics/useTrack"; +import { Gem } from "lucide-react"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { type ThirdwebContract, ZERO_ADDRESS } from "thirdweb"; +import * as ERC20Ext from "thirdweb/extensions/erc20"; +import { + useActiveAccount, + useReadContract, + useSendAndConfirmTransaction, +} from "thirdweb/react"; +import { + Button, + FormErrorMessage, + FormHelperText, + FormLabel, +} from "tw-components"; interface TokenClaimButtonProps { contract: ThirdwebContract; } +const CLAIM_FORM_ID = "token-claim-form"; + export const TokenClaimButton: React.FC = ({ contract, ...restButtonProps }) => { - const { isOpen, onOpen, onClose } = useDisclosure(); + const [open, setOpen] = useState(false); + const sendAndConfirmTransaction = useSendAndConfirmTransaction(); + const trackEvent = useTrack(); + const account = useActiveAccount(); + const form = useForm({ + defaultValues: { amount: "0", to: account?.address }, + }); + const { data: _decimals, isLoading } = useReadContract(ERC20Ext.decimals, { + contract, + }); return ( - <> - - - - - + + + + + + + Claim tokens + +
+
+ + To Address + + Enter the address to claim to. + + {form.formState.errors.to?.message} + + + + Amount + + How many would you like to claim? + + {form.formState.errors.amount?.message} + + +
+
+ + { + if (!d.to) { + return toast.error( + "Need to speficy an address to receive tokens", + ); + } + trackEvent({ + category: "token", + action: "claim", + label: "attempt", + }); + if (!account) { + return toast.error("No account detected"); + } + const transaction = ERC20Ext.claimTo({ + contract, + to: d.to, + quantity: d.amount, + from: account.address, + }); + + const approveTx = await ERC20Ext.getApprovalForTransaction({ + transaction, + account, + }); + + if (approveTx) { + const promise = sendAndConfirmTransaction.mutateAsync( + approveTx, + { + onError: (error) => { + console.error(error); + }, + }, + ); + toast.promise(promise, { + loading: "Approving ERC20 tokens for this claim", + success: "Tokens approved successfully", + error: "Failed to approve token", + }); + + await promise; + } + + const promise = sendAndConfirmTransaction.mutateAsync( + transaction, + { + onSuccess: () => { + trackEvent({ + category: "token", + action: "claim", + label: "success", + }); + form.reset({ amount: "0", to: account?.address }); + setOpen(false); + }, + onError: (error) => { + trackEvent({ + category: "token", + action: "claim", + label: "error", + error, + }); + console.error(error); + }, + }, + ); + + toast.promise(promise, { + loading: "Claiming tokens", + success: "Token claimed successfully", + error: "Failed to claim tokens", + }); + })} + > + Claim Tokens + + +
+
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/tokens/components/claim-form.tsx b/apps/dashboard/src/contract-ui/tabs/tokens/components/claim-form.tsx deleted file mode 100644 index 470cb92990a..00000000000 --- a/apps/dashboard/src/contract-ui/tabs/tokens/components/claim-form.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { - DrawerBody, - DrawerFooter, - DrawerHeader, - FormControl, - Input, - Stack, - useModalContext, -} from "@chakra-ui/react"; -import { TransactionButton } from "components/buttons/TransactionButton"; -import { useTrack } from "hooks/analytics/useTrack"; -import { useTxNotifications } from "hooks/useTxNotifications"; -import { useForm } from "react-hook-form"; -import { toast } from "sonner"; -import { type ThirdwebContract, ZERO_ADDRESS } from "thirdweb"; -import { - claimTo, - decimals, - getApprovalForTransaction, -} from "thirdweb/extensions/erc20"; -import { - useActiveAccount, - useReadContract, - useSendAndConfirmTransaction, -} from "thirdweb/react"; -import { - FormErrorMessage, - FormHelperText, - FormLabel, - Heading, -} from "tw-components"; - -const CLAIM_FORM_ID = "token-claim-form"; -interface TokenClaimFormProps { - contract: ThirdwebContract; -} - -export const TokenClaimForm: React.FC = ({ contract }) => { - const trackEvent = useTrack(); - const address = useActiveAccount()?.address; - const { register, handleSubmit, formState } = useForm({ - defaultValues: { amount: "0", to: address }, - }); - const modalContext = useModalContext(); - const { errors, isDirty } = formState; - const txNotifications = useTxNotifications( - "Tokens claimed successfully", - "Failed to claim tokens", - contract, - ); - - const { data: _decimals, isLoading } = useReadContract(decimals, { - contract, - }); - const sendAndConfirmTx = useSendAndConfirmTransaction(); - const account = useActiveAccount(); - - return ( - <> - - Claim tokens - - - - - - To Address - - Enter the address to claim to. - {errors.to?.message} - - - Amount - - How many would you like to claim? - {errors.amount?.message} - - - - - - { - if (d.to) { - trackEvent({ - category: "token", - action: "claim", - label: "attempt", - }); - if (!account) { - return toast.error("No account detected"); - } - try { - const transaction = claimTo({ - contract, - to: d.to, - quantity: d.amount, - from: account.address, - }); - - const approveTx = await getApprovalForTransaction({ - transaction, - account, - }); - - if (approveTx) { - try { - await sendAndConfirmTx.mutateAsync(approveTx); - } catch { - return toast.error("Error approving ERC20 token"); - } - } - - await sendAndConfirmTx.mutateAsync(transaction); - - trackEvent({ - category: "token", - action: "claim", - label: "success", - }); - txNotifications.onSuccess(); - modalContext.onClose(); - } catch (error) { - trackEvent({ - category: "token", - action: "claim", - label: "error", - error, - }); - txNotifications.onError(error); - } - } - })} - > - Claim Tokens - - - - ); -}; From b76d2982451b259ea232189dc7be716314828943 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Wed, 18 Sep 2024 16:01:37 -0700 Subject: [PATCH 21/78] Version Packages (#4666) Co-authored-by: github-actions[bot] --- .changeset/few-suns-boil.md | 6 -- .changeset/rare-colts-compare.md | 7 -- packages/react-native-adapter/CHANGELOG.md | 6 ++ packages/react-native-adapter/package.json | 7 +- packages/thirdweb/CHANGELOG.md | 10 +++ packages/thirdweb/package.json | 74 ++++++++++++++++------ 6 files changed, 76 insertions(+), 34 deletions(-) delete mode 100644 .changeset/few-suns-boil.md delete mode 100644 .changeset/rare-colts-compare.md diff --git a/.changeset/few-suns-boil.md b/.changeset/few-suns-boil.md deleted file mode 100644 index 85d3aced611..00000000000 --- a/.changeset/few-suns-boil.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@thirdweb-dev/react-native-adapter": patch -"thirdweb": patch ---- - -Update @mobile-wallet-protocol/client to 0.0.3 diff --git a/.changeset/rare-colts-compare.md b/.changeset/rare-colts-compare.md deleted file mode 100644 index 0a1de94e077..00000000000 --- a/.changeset/rare-colts-compare.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"thirdweb": patch ---- - -- Allow using valid JWTs for authorization -- update dependencies -- simplify updateMetadata extension params for ERC721 and ERC1155 \ No newline at end of file diff --git a/packages/react-native-adapter/CHANGELOG.md b/packages/react-native-adapter/CHANGELOG.md index b5b763dad0a..173c3f1a9a7 100644 --- a/packages/react-native-adapter/CHANGELOG.md +++ b/packages/react-native-adapter/CHANGELOG.md @@ -1,5 +1,11 @@ # @thirdweb-dev/react-native-adapter +## 1.4.2 + +### Patch Changes + +- [#4665](https://github.com/thirdweb-dev/js/pull/4665) [`6ce7c83`](https://github.com/thirdweb-dev/js/commit/6ce7c83a3b9eb2374ad2f8163d9c6a68bba4bc42) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update @mobile-wallet-protocol/client to 0.0.3 + ## 1.4.1 ### Patch Changes diff --git a/packages/react-native-adapter/package.json b/packages/react-native-adapter/package.json index 9cec8f19543..1e4580b5fd2 100644 --- a/packages/react-native-adapter/package.json +++ b/packages/react-native-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@thirdweb-dev/react-native-adapter", - "version": "1.4.1", + "version": "1.4.2", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" @@ -23,7 +23,10 @@ }, "./package.json": "./package.json" }, - "files": ["dist/*", "src/*"], + "files": [ + "dist/*", + "src/*" + ], "dependencies": { "@aws-sdk/client-lambda": "3.651.1", "@aws-sdk/credential-providers": "3.651.1", diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index 47c3e62cf06..0eb457007df 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,15 @@ # thirdweb +## 5.57.1 + +### Patch Changes + +- [#4665](https://github.com/thirdweb-dev/js/pull/4665) [`6ce7c83`](https://github.com/thirdweb-dev/js/commit/6ce7c83a3b9eb2374ad2f8163d9c6a68bba4bc42) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update @mobile-wallet-protocol/client to 0.0.3 + +- [#4659](https://github.com/thirdweb-dev/js/pull/4659) [`406de39`](https://github.com/thirdweb-dev/js/commit/406de39ecdd4e901cc1fe163cc833fe9fd656d3e) Thanks [@jnsdls](https://github.com/jnsdls)! - - Allow using valid JWTs for authorization + - update dependencies + - simplify updateMetadata extension params for ERC721 and ERC1155 + ## 5.57.0 ### Minor Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 81e67386f9a..b1dc86e34ea 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.57.0", + "version": "5.57.1", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" @@ -127,24 +127,60 @@ }, "typesVersions": { "*": { - "adapters/*": ["./dist/types/exports/adapters/*.d.ts"], - "auth": ["./dist/types/exports/auth.d.ts"], - "chains": ["./dist/types/exports/chains.d.ts"], - "contract": ["./dist/types/exports/contract.d.ts"], - "deploys": ["./dist/types/exports/deploys.d.ts"], - "event": ["./dist/types/exports/event.d.ts"], - "extensions/*": ["./dist/types/exports/extensions/*.d.ts"], - "pay": ["./dist/types/exports/pay.d.ts"], - "react": ["./dist/types/exports/react.d.ts"], - "react-native": ["./dist/types/exports/react-native.d.ts"], - "rpc": ["./dist/types/exports/rpc.d.ts"], - "storage": ["./dist/types/exports/storage.d.ts"], - "transaction": ["./dist/types/exports/transaction.d.ts"], - "utils": ["./dist/types/exports/utils.d.ts"], - "wallets": ["./dist/types/exports/wallets.d.ts"], - "wallets/*": ["./dist/types/exports/wallets/*.d.ts"], - "modules": ["./dist/types/exports/modules.d.ts"], - "social": ["./dist/types/exports/social.d.ts"] + "adapters/*": [ + "./dist/types/exports/adapters/*.d.ts" + ], + "auth": [ + "./dist/types/exports/auth.d.ts" + ], + "chains": [ + "./dist/types/exports/chains.d.ts" + ], + "contract": [ + "./dist/types/exports/contract.d.ts" + ], + "deploys": [ + "./dist/types/exports/deploys.d.ts" + ], + "event": [ + "./dist/types/exports/event.d.ts" + ], + "extensions/*": [ + "./dist/types/exports/extensions/*.d.ts" + ], + "pay": [ + "./dist/types/exports/pay.d.ts" + ], + "react": [ + "./dist/types/exports/react.d.ts" + ], + "react-native": [ + "./dist/types/exports/react-native.d.ts" + ], + "rpc": [ + "./dist/types/exports/rpc.d.ts" + ], + "storage": [ + "./dist/types/exports/storage.d.ts" + ], + "transaction": [ + "./dist/types/exports/transaction.d.ts" + ], + "utils": [ + "./dist/types/exports/utils.d.ts" + ], + "wallets": [ + "./dist/types/exports/wallets.d.ts" + ], + "wallets/*": [ + "./dist/types/exports/wallets/*.d.ts" + ], + "modules": [ + "./dist/types/exports/modules.d.ts" + ], + "social": [ + "./dist/types/exports/social.d.ts" + ] } }, "browser": { From 0dfba3094cfebd33e42c2b7b812be8abb003515e Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Wed, 18 Sep 2024 23:59:39 +0000 Subject: [PATCH 22/78] [Playground] Chore: Allow overriding default domains with env vars (#4679) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to set Thirdweb domains dynamically based on environment variables. ### Detailed summary - Added import for `setThirdwebDomains` from "thirdweb/utils" - Set Thirdweb domains using environment variables for inAppWallet, rpc, social, storage, bundler, and pay - Configured Thirdweb client with `THIRDWEB_SECRET_KEY` from environment variables > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/playground-web/src/lib/client.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apps/playground-web/src/lib/client.ts b/apps/playground-web/src/lib/client.ts index 97cff83c1d8..b5886581c71 100644 --- a/apps/playground-web/src/lib/client.ts +++ b/apps/playground-web/src/lib/client.ts @@ -1,4 +1,14 @@ import { createThirdwebClient } from "thirdweb"; +import { setThirdwebDomains } from "thirdweb/utils"; + +setThirdwebDomains({ + inAppWallet: process.env.NEXT_PUBLIC_IN_APP_WALLET_URL, + rpc: process.env.NEXT_PUBLIC_RPC_URL, + social: process.env.NEXT_PUBLIC_SOCIAL_URL, + storage: process.env.NEXT_PUBLIC_STORAGE_URL, + bundler: process.env.NEXT_PUBLIC_BUNDLER_URL, + pay: process.env.NEXT_PUBLIC_PAY_URL, +}); export const THIRDWEB_CLIENT = createThirdwebClient( process.env.THIRDWEB_SECRET_KEY From 00f2d6e9386e7eff1ee3e779d80f90aebdbe65b1 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Thu, 19 Sep 2024 02:59:41 +0000 Subject: [PATCH 23/78] [Playground] Fix: do not disconnect non in app wallets (#4685) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR removes unused code related to wallet management in the `SponsoredInAppTxPreview` component. ### Detailed summary - Removed unused `useActiveWallet` and `useDisconnect` imports - Removed `wallet` and `disconnect` state and effect - Updated usage of `useActiveAccount` for `smartAccount` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/components/in-app-wallet/sponsored-tx.tsx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx b/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx index 0be0f7721ea..1d53b968264 100644 --- a/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx +++ b/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx @@ -1,26 +1,16 @@ "use client"; -import { useEffect } from "react"; import { claimTo, getNFT, getOwnedNFTs } from "thirdweb/extensions/erc1155"; import { MediaRenderer, TransactionButton, useActiveAccount, - useActiveWallet, - useDisconnect, useReadContract, } from "thirdweb/react"; import { THIRDWEB_CLIENT } from "../../lib/client"; import { editionDropContract, editionDropTokenId } from "./constants"; export function SponsoredInAppTxPreview() { - const wallet = useActiveWallet(); - const { disconnect } = useDisconnect(); - useEffect(() => { - if (wallet && wallet.id !== "inApp") { - disconnect(wallet); - } - }, [wallet, disconnect]); const smartAccount = useActiveAccount(); const { data: nft, isLoading: isNftLoading } = useReadContract(getNFT, { contract: editionDropContract, From 37927d63586a5e51da64f3e836adc406719f4687 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Thu, 19 Sep 2024 03:21:15 +0000 Subject: [PATCH 24/78] massively simplify overriding thirdweb domains in dev / preview (#4682) --- .../src/@/constants/thirdweb.server.ts | 19 +++++++++++ .../contracts/deploy/[compiler_uri]/page.tsx | 3 -- .../contracts/publish/[publish_uri]/page.tsx | 3 -- .../[contract_id]/[version]/deploy/page.tsx | 3 -- .../[version]/opengraph-image.tsx | 2 -- .../[contract_id]/[version]/page.tsx | 3 -- .../[publisher]/[contract_id]/deploy/page.tsx | 3 -- .../[contract_id]/opengraph-image.tsx | 2 -- .../[publisher]/[contract_id]/page.tsx | 3 -- apps/dashboard/src/app/layout.tsx | 4 --- apps/dashboard/src/app/providers.tsx | 7 ---- apps/dashboard/src/lib/vercel-utils.ts | 32 +------------------ apps/dashboard/src/pages/_app.tsx | 8 +---- 13 files changed, 21 insertions(+), 71 deletions(-) diff --git a/apps/dashboard/src/@/constants/thirdweb.server.ts b/apps/dashboard/src/@/constants/thirdweb.server.ts index d7cb062aba6..a94f6c461e2 100644 --- a/apps/dashboard/src/@/constants/thirdweb.server.ts +++ b/apps/dashboard/src/@/constants/thirdweb.server.ts @@ -3,10 +3,29 @@ import { DASHBOARD_THIRDWEB_SECRET_KEY, IPFS_GATEWAY_URL, } from "@/constants/env"; +import { + THIRDWEB_INAPP_WALLET_DOMAIN, + THIRDWEB_PAY_DOMAIN, + THIRDWEB_RPC_DOMAIN, + THIRDWEB_SOCIAL_API_DOMAIN, + THIRDWEB_STORAGE_DOMAIN, +} from "constants/urls"; import { createThirdwebClient } from "thirdweb"; +import { setThirdwebDomains } from "thirdweb/utils"; +import { getVercelEnv } from "../../lib/vercel-utils"; // returns a thirdweb client with optional JWT passed in export function getThirdwebClient(jwt?: string) { + if (getVercelEnv() !== "production") { + // if not on production: run this when creating a client to set the domains + setThirdwebDomains({ + rpc: THIRDWEB_RPC_DOMAIN, + inAppWallet: THIRDWEB_INAPP_WALLET_DOMAIN, + pay: THIRDWEB_PAY_DOMAIN, + storage: THIRDWEB_STORAGE_DOMAIN, + social: THIRDWEB_SOCIAL_API_DOMAIN, + }); + } return createThirdwebClient({ secretKey: jwt ? jwt : DASHBOARD_THIRDWEB_SECRET_KEY, clientId: DASHBOARD_THIRDWEB_CLIENT_ID, diff --git a/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx b/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx index 1abb92dc44a..98db6a1aef5 100644 --- a/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx @@ -1,11 +1,8 @@ import { getThirdwebClient } from "@/constants/thirdweb.server"; -import { setOverrides } from "lib/vercel-utils"; import { fetchDeployMetadata } from "thirdweb/contract"; import { DeployContractInfo } from "../../../published-contract/components/contract-info"; import { DeployFormForUri } from "../../../published-contract/components/uri-based-deploy"; -setOverrides(); - type DirectDeployPageProps = { params: { compiler_uri: string; diff --git a/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx b/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx index ff14ad8dcf5..f098822db0c 100644 --- a/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/contracts/publish/[publish_uri]/page.tsx @@ -2,13 +2,10 @@ import { ChakraProviderSetup } from "@/components/ChakraProviderSetup"; import { getActiveAccountCookie, getJWTCookie } from "@/constants/cookie"; import { getThirdwebClient } from "@/constants/thirdweb.server"; import { ContractPublishForm } from "components/contract-components/contract-publish-form"; -import { setOverrides } from "lib/vercel-utils"; import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { fetchDeployMetadata } from "thirdweb/contract"; -setOverrides(); - type DirectDeployPageProps = { params: { publish_uri: string; diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/deploy/page.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/deploy/page.tsx index 33f73a6dbba..cf2df3be2f7 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/deploy/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/deploy/page.tsx @@ -1,9 +1,6 @@ -import { setOverrides } from "lib/vercel-utils"; import { DeployFormForPublishInfo } from "../../../../components/publish-based-deploy"; import { moduleFromBase64 } from "../../../../utils/module-base-64"; -setOverrides(); - export default function PublishedContractVersionDeployPage({ params, searchParams, diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/opengraph-image.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/opengraph-image.tsx index b00c1569b43..80471e8f6a7 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/opengraph-image.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/opengraph-image.tsx @@ -1,7 +1,6 @@ import { fetchPublisherProfile } from "components/contract-components/fetch-contracts-with-versions"; import { format } from "date-fns/format"; import { correctAndUniqueLicenses } from "lib/licenses"; -import { setOverrides } from "lib/vercel-utils"; import { getPublishedContractsWithPublisherMapping } from "../utils/getPublishedContractsWithPublisherMapping"; import { publishedContractOGImageTemplate } from "../utils/publishedContractOGImageTemplate"; @@ -19,7 +18,6 @@ export default async function Image(props: { version: string; }; }) { - setOverrides(); const { publisher, contract_id } = props.params; const [publishedContracts, publisherProfile] = await Promise.all([ diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx index 064c03a65aa..5de41f26c54 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx @@ -4,14 +4,11 @@ import { getThirdwebClient } from "@/constants/thirdweb.server"; import { SimpleGrid } from "@chakra-ui/react"; import { fetchPublishedContractVersions } from "components/contract-components/fetch-contracts-with-versions"; import { PublishedContract } from "components/contract-components/published-contract"; -import { setOverrides } from "lib/vercel-utils"; import { isAddress } from "thirdweb"; import { resolveAddress } from "thirdweb/extensions/ens"; import { PublishedActions } from "../../../components/contract-actions-published.client"; import { DeployContractHeader } from "../../../components/contract-header"; -setOverrides(); - function mapThirdwebPublisher(publisher: string) { if (publisher === "thirdweb.eth") { return "deployer.thirdweb.eth"; diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/deploy/page.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/deploy/page.tsx index bdb8cd3aee1..9704ca3ea27 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/deploy/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/deploy/page.tsx @@ -1,9 +1,6 @@ -import { setOverrides } from "lib/vercel-utils"; import { DeployFormForPublishInfo } from "../../../components/publish-based-deploy"; import { moduleFromBase64 } from "../../../utils/module-base-64"; -setOverrides(); - type Props = { params: { publisher: string; diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/opengraph-image.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/opengraph-image.tsx index b0c85f35626..1f1cfa0788d 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/opengraph-image.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/opengraph-image.tsx @@ -1,7 +1,6 @@ import { fetchPublisherProfile } from "components/contract-components/fetch-contracts-with-versions"; import { format } from "date-fns/format"; import { correctAndUniqueLicenses } from "lib/licenses"; -import { setOverrides } from "lib/vercel-utils"; import { getPublishedContractsWithPublisherMapping } from "./utils/getPublishedContractsWithPublisherMapping"; import { publishedContractOGImageTemplate } from "./utils/publishedContractOGImageTemplate"; @@ -18,7 +17,6 @@ export default async function Image(props: { contract_id: string; }; }) { - setOverrides(); const { publisher, contract_id } = props.params; const [publishedContracts, publisherProfile] = await Promise.all([ diff --git a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/page.tsx b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/page.tsx index 13838308fbf..58d7dc2fada 100644 --- a/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/page.tsx @@ -1,13 +1,10 @@ import { Separator } from "@/components/ui/separator"; import { ChakraProviderSetup } from "../../../../../@/components/ChakraProviderSetup"; import { PublishedContract } from "../../../../../components/contract-components/published-contract"; -import { setOverrides } from "../../../../../lib/vercel-utils"; import { PublishedActions } from "../../components/contract-actions-published.client"; import { DeployContractHeader } from "../../components/contract-header"; import { getPublishedContractsWithPublisherMapping } from "./utils/getPublishedContractsWithPublisherMapping"; -setOverrides(); - type PublishedContractDeployPageProps = { params: { publisher: string; diff --git a/apps/dashboard/src/app/layout.tsx b/apps/dashboard/src/app/layout.tsx index ac9f18a8f73..4cfabfb1488 100644 --- a/apps/dashboard/src/app/layout.tsx +++ b/apps/dashboard/src/app/layout.tsx @@ -7,13 +7,9 @@ import PlausibleProvider from "next-plausible"; import dynamic from "next/dynamic"; import { Inter } from "next/font/google"; import NextTopLoader from "nextjs-toploader"; -import { setOverrides } from "../lib/vercel-utils"; import { PostHogProvider } from "./components/root-providers"; import { AppRouterProviders } from "./providers"; -// run this on app load -setOverrides(); - const fontSans = Inter({ subsets: ["latin"], variable: "--font-sans", diff --git a/apps/dashboard/src/app/providers.tsx b/apps/dashboard/src/app/providers.tsx index 8fb6d6b09d6..823f6806a1f 100644 --- a/apps/dashboard/src/app/providers.tsx +++ b/apps/dashboard/src/app/providers.tsx @@ -4,18 +4,11 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { AllChainsProvider } from "contexts/all-chains"; import { ChainsProvider } from "contexts/configured-chains"; import { ThemeProvider } from "next-themes"; -import { useEffect } from "react"; import { ThirdwebProvider } from "thirdweb/react"; -import { setOverrides } from "../lib/vercel-utils"; const queryClient = new QueryClient(); export function AppRouterProviders(props: { children: React.ReactNode }) { - // run this ONCE on app load - // eslint-disable-next-line no-restricted-syntax - useEffect(() => { - setOverrides(); - }, []); return ( diff --git a/apps/dashboard/src/lib/vercel-utils.ts b/apps/dashboard/src/lib/vercel-utils.ts index 604422323a2..6ba05221f8a 100644 --- a/apps/dashboard/src/lib/vercel-utils.ts +++ b/apps/dashboard/src/lib/vercel-utils.ts @@ -1,14 +1,6 @@ -import { - THIRDWEB_INAPP_WALLET_DOMAIN, - THIRDWEB_PAY_DOMAIN, - THIRDWEB_RPC_DOMAIN, - THIRDWEB_SOCIAL_API_DOMAIN, - THIRDWEB_STORAGE_DOMAIN, -} from "constants/urls"; -import { setThirdwebDomains } from "thirdweb/utils"; import { isBrowser } from "utils/isBrowser"; -function getVercelEnv() { +export function getVercelEnv() { const onVercel = process.env.vercel || process.env.NEXT_PUBLIC_VERCEL_ENV; if (!onVercel) { return "development"; @@ -45,25 +37,3 @@ export function getAbsoluteUrl(): string { return "https://thirdweb.com"; } - -export function setOverrides() { - if (getVercelEnv() === "production") { - // no overrides - return; - } - /* DEFAULTS - - const DEFAULT_RPC_URL = "rpc.thirdweb.com"; - const DEFAULT_IN_APP_WALLET_URL = "embedded-wallet.thirdweb.com"; - const DEFAULT_PAY_URL = "pay.thirdweb.com"; - const DEFAULT_STORAGE_URL = "storage.thirdweb.com"; - */ - - setThirdwebDomains({ - rpc: THIRDWEB_RPC_DOMAIN, - inAppWallet: THIRDWEB_INAPP_WALLET_DOMAIN, - pay: THIRDWEB_PAY_DOMAIN, - storage: THIRDWEB_STORAGE_DOMAIN, - social: THIRDWEB_SOCIAL_API_DOMAIN, - }); -} diff --git a/apps/dashboard/src/pages/_app.tsx b/apps/dashboard/src/pages/_app.tsx index 7b3f29869e1..41c7561b897 100644 --- a/apps/dashboard/src/pages/_app.tsx +++ b/apps/dashboard/src/pages/_app.tsx @@ -23,7 +23,6 @@ import chakraTheme from "../theme"; import "@/styles/globals.css"; import { DashboardRouterTopProgressBar } from "@/lib/DashboardRouter"; import { AnnouncementBanner } from "../components/notices/AnnouncementBanner"; -import { setOverrides } from "../lib/vercel-utils"; const inter = interConstructor({ subsets: ["latin"], @@ -51,9 +50,6 @@ const chakraThemeWithFonts = { const fontSizeCssVars = generateBreakpointTypographyCssVars(); -// run this on app load -setOverrides(); - type AppPropsWithLayout = AppProps<{ dehydratedState?: DehydratedState }> & { Component: ThirdwebNextPage; }; @@ -64,9 +60,7 @@ const ConsoleAppWrapper: React.FC = ({ }) => { // run this ONCE on app load // eslint-disable-next-line no-restricted-syntax - useEffect(() => { - setOverrides(); - }, []); + const router = useRouter(); const { shouldReload } = useBuildId(); From 1b8946408cb903171acd9d5233dcddfa45e235fc Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Thu, 19 Sep 2024 03:35:08 +0000 Subject: [PATCH 25/78] [SDK] Fix: Use legacy transactions for Polygon zkEVM Cardona Testnet (#4686) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR enforces legacy transactions on the Polygon zkEVM Cardona Testnet for `thirdweb`. ### Detailed summary - Updated gas fee data to include legacy transactions for Polygon zkEVM Cardona Testnet. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/pretty-hounds-cry.md | 5 +++++ packages/thirdweb/src/gas/fee-data.ts | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/pretty-hounds-cry.md diff --git a/.changeset/pretty-hounds-cry.md b/.changeset/pretty-hounds-cry.md new file mode 100644 index 00000000000..02db4b058ba --- /dev/null +++ b/.changeset/pretty-hounds-cry.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Force legacy transactions on polygon zkevm cardona testnet diff --git a/packages/thirdweb/src/gas/fee-data.ts b/packages/thirdweb/src/gas/fee-data.ts index bffb5b36561..e27b2c1f326 100644 --- a/packages/thirdweb/src/gas/fee-data.ts +++ b/packages/thirdweb/src/gas/fee-data.ts @@ -36,6 +36,7 @@ const FORCE_GAS_PRICE_CHAIN_IDS = [ 842, // Taraxa Testnet 2016, // MainnetZ Mainnet 9768, // MainnetZ Testnet + 2442, // Polygon zkEVM Cardona Testnet ]; /** From 25f0975a3fbc49d3638c0ad83a6e01f6c7d27be2 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Thu, 19 Sep 2024 03:46:13 +0000 Subject: [PATCH 26/78] Remove portal.usecontext.io from CSP script-src (#4681) --- apps/dashboard/next.config.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dashboard/next.config.js b/apps/dashboard/next.config.js index c9cf7c4a4bf..055281a3c32 100644 --- a/apps/dashboard/next.config.js +++ b/apps/dashboard/next.config.js @@ -8,7 +8,7 @@ const ContentSecurityPolicy = ` style-src 'self' 'unsafe-inline' https://vercel.live; font-src 'self' https://vercel.live https://assets.vercel.com; frame-src * data:; - script-src 'self' 'unsafe-eval' 'unsafe-inline' 'wasm-unsafe-eval' 'inline-speculation-rules' *.thirdweb.com *.thirdweb-dev.com vercel.live js.stripe.com portal.usecontext.io; + script-src 'self' 'unsafe-eval' 'unsafe-inline' 'wasm-unsafe-eval' 'inline-speculation-rules' *.thirdweb.com *.thirdweb-dev.com vercel.live js.stripe.com; connect-src * data: blob:; worker-src 'self' blob:; block-all-mixed-content; @@ -213,7 +213,7 @@ module.exports = withBundleAnalyzer( * See: https://github.com/getsentry/sentry-javascript/issues/10468#issuecomment-2004710692 */ disableServerWebpackPlugin: true, - } - ) - ) + }, + ), + ), ); From 89d517d3758996b91d3b9adb48e798c574c7651e Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Thu, 19 Sep 2024 03:59:16 +0000 Subject: [PATCH 27/78] [Dashboard] Feature: Adds SDK card to AA page (#4683) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ![Screenshot 2024-09-18 at 4 28 05 PM](https://github.com/user-attachments/assets/3d634e42-0cc5-40ea-9443-d96408dbc803) --- ## PR-Codex overview The focus of this PR is to update the Connect SDK card component across multiple files for improved consistency and customization. ### Detailed summary - Updated the `ConnectSDKCard` component to accept `title` and `description` props for customization. - Modified the usage of `ConnectSDKCard` in various files to include custom titles and descriptions. - Adjusted tab names and functionality in the `SmartWallets` component for clarity and consistency. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../[project_slug]/connect/analytics/page.tsx | 4 ++-- .../shared}/ConnectSDKCard.tsx | 9 ++++++--- .../smart-wallets/SponsorshipPolicies/index.tsx | 4 ---- .../src/components/smart-wallets/index.tsx | 14 +++++++------- .../dashboard/connect/account-abstraction.tsx | 7 +++++-- .../src/pages/dashboard/connect/analytics.tsx | 4 ++-- 6 files changed, 22 insertions(+), 20 deletions(-) rename apps/dashboard/src/{app/team/[team_slug]/[project_slug]/connect/analytics/_components => components/shared}/ConnectSDKCard.tsx (92%) diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/page.tsx index d9de6eb0e2f..03d3774699e 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/page.tsx @@ -1,7 +1,7 @@ import { getProject } from "@/api/projects"; +import { ConnectSDKCard } from "components/shared/ConnectSDKCard"; import { notFound } from "next/navigation"; import { ConnectAnalyticsDashboard } from "./ConnectAnalyticsDashboard"; -import { ConnectSDKCard } from "./_components/ConnectSDKCard"; export default async function Page(props: { params: { @@ -32,7 +32,7 @@ export default async function Page(props: {
- +
); } diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/ConnectSDKCard.tsx b/apps/dashboard/src/components/shared/ConnectSDKCard.tsx similarity index 92% rename from apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/ConnectSDKCard.tsx rename to apps/dashboard/src/components/shared/ConnectSDKCard.tsx index 4b44c4b34a3..c05e1bf5119 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/ConnectSDKCard.tsx +++ b/apps/dashboard/src/components/shared/ConnectSDKCard.tsx @@ -5,14 +5,17 @@ import Link from "next/link"; import { SiUnrealengine } from "react-icons/si"; import { SiDotnet } from "react-icons/si"; -export function ConnectSDKCard() { +export function ConnectSDKCard({ + title, + description, +}: { title?: string; description?: string }) { return (

- Connect SDK + {title || "Connect SDK"}

- Add the Connect SDK to your app to start collecting analytics. + {description || "Add the Connect SDK to your app."}

diff --git a/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx b/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx index 01f319cabc7..963fa891485 100644 --- a/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx +++ b/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx @@ -36,7 +36,6 @@ import { Button, FormErrorMessage, FormLabel, - Heading, Text, TrackedLink, } from "tw-components"; @@ -181,9 +180,6 @@ export function AccountAbstractionSettingsPage( alignItems={"left"} > - - Sponsorship rules - Configure the rules and rules for your sponsored transactions.{" "} = ({ trackingCategory, }) => { const searchParams = useSearchParams(); - const defaultTabIndex = Number.parseInt(searchParams?.get("tab") || "0"); + const defaultTabIndex = Number.parseInt(searchParams?.get("tab") || "1"); const [selectedTab, setSelectedTab] = useState<"factories" | "config">( defaultTabIndex === 1 ? "config" : "factories", ); @@ -27,15 +27,15 @@ export const SmartWallets: React.FC = ({ setSelectedTab("factories"), - isActive: selectedTab === "factories", + name: "Sponsorship Policies", + onClick: () => setSelectedTab("config"), + isActive: selectedTab === "config", isEnabled: true, }, { - name: "Configuration", - onClick: () => setSelectedTab("config"), - isActive: selectedTab === "config", + name: "Account Factories", + onClick: () => setSelectedTab("factories"), + isActive: selectedTab === "factories", isEnabled: true, }, ]} diff --git a/apps/dashboard/src/pages/dashboard/connect/account-abstraction.tsx b/apps/dashboard/src/pages/dashboard/connect/account-abstraction.tsx index f5511680590..f1d0f9199e5 100644 --- a/apps/dashboard/src/pages/dashboard/connect/account-abstraction.tsx +++ b/apps/dashboard/src/pages/dashboard/connect/account-abstraction.tsx @@ -12,6 +12,7 @@ import { AppLayout } from "components/app-layouts/app"; import { SmartWalletsBillingAlert } from "components/settings/ApiKeys/Alerts"; import { ApiKeysMenu } from "components/settings/ApiKeys/Menu"; import { NoApiKeys } from "components/settings/ApiKeys/NoApiKeys"; +import { ConnectSDKCard } from "components/shared/ConnectSDKCard"; import { SmartWallets } from "components/smart-wallets"; import { getAbsoluteUrl } from "lib/vercel-utils"; import { CircleAlertIcon } from "lucide-react"; @@ -22,7 +23,6 @@ import { useMemo, useState } from "react"; import { useActiveWalletChain } from "thirdweb/react"; import type { ThirdwebNextPage } from "utils/types"; import { ConnectSidebarLayout } from "../../../app/(dashboard)/dashboard/connect/DashboardConnectLayout"; -import { AAFooterSection } from "../../../app/team/[team_slug]/[project_slug]/connect/account-abstraction/AAFooterSection"; import { isOpChainId } from "../../../app/team/[team_slug]/[project_slug]/connect/account-abstraction/isOpChain"; const TRACKING_CATEGORY = "smart-wallet"; @@ -174,7 +174,10 @@ const DashboardConnectAccountAbstraction: ThirdwebNextPage = () => { )} - +
); }; diff --git a/apps/dashboard/src/pages/dashboard/connect/analytics.tsx b/apps/dashboard/src/pages/dashboard/connect/analytics.tsx index e8e6bd55fa6..4557807a097 100644 --- a/apps/dashboard/src/pages/dashboard/connect/analytics.tsx +++ b/apps/dashboard/src/pages/dashboard/connect/analytics.tsx @@ -11,7 +11,7 @@ import { useMemo, useState } from "react"; import type { ThirdwebNextPage } from "utils/types"; import { ConnectSidebarLayout } from "../../../app/(dashboard)/dashboard/connect/DashboardConnectLayout"; import { ConnectAnalyticsDashboard } from "../../../app/team/[team_slug]/[project_slug]/connect/analytics/ConnectAnalyticsDashboard"; -import { ConnectSDKCard } from "../../../app/team/[team_slug]/[project_slug]/connect/analytics/_components/ConnectSDKCard"; +import { ConnectSDKCard } from "../../../components/shared/ConnectSDKCard"; const DashboardConnectAnalytics: ThirdwebNextPage = () => { const router = useRouter(); @@ -81,7 +81,7 @@ const DashboardConnectAnalytics: ThirdwebNextPage = () => { )}
- +
); }; From 51510a1358f521768fb22a084047ea37a695ec11 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Wed, 18 Sep 2024 21:39:09 -0700 Subject: [PATCH 28/78] Version Packages (#4688) Co-authored-by: github-actions[bot] --- .changeset/pretty-hounds-cry.md | 5 ----- packages/thirdweb/CHANGELOG.md | 6 ++++++ packages/thirdweb/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/pretty-hounds-cry.md diff --git a/.changeset/pretty-hounds-cry.md b/.changeset/pretty-hounds-cry.md deleted file mode 100644 index 02db4b058ba..00000000000 --- a/.changeset/pretty-hounds-cry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Force legacy transactions on polygon zkevm cardona testnet diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index 0eb457007df..059528c801c 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,11 @@ # thirdweb +## 5.57.2 + +### Patch Changes + +- [#4686](https://github.com/thirdweb-dev/js/pull/4686) [`1b89464`](https://github.com/thirdweb-dev/js/commit/1b8946408cb903171acd9d5233dcddfa45e235fc) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Force legacy transactions on polygon zkevm cardona testnet + ## 5.57.1 ### Patch Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index b1dc86e34ea..2a863c8529f 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.57.1", + "version": "5.57.2", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" From 06cd6a62d979b20bedcc64e1dc96770a0afba543 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Thu, 19 Sep 2024 05:29:13 +0000 Subject: [PATCH 29/78] fix split deployments (#4690) FIXES: DASH-253 --- .../contract-deploy-form/custom-contract.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx index 7e62098a5e8..f35614b687a 100644 --- a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx +++ b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx @@ -394,6 +394,16 @@ export const CustomContractForm: React.FC = ({ }); } + // handle split things + const payees: string[] = []; + const shares: string[] = []; + if (isSplit && params.recipients?.length) { + for (const recipient of params.recipients) { + payees.push(recipient.address); + shares.push(recipient.sharesBps.toString()); + } + } + if (metadata.name === "MarketplaceV3") { // special case for marketplace return await deployMarketplaceContract({ @@ -416,6 +426,8 @@ export const CustomContractForm: React.FC = ({ const initializeParams = { ...params.contractMetadata, ...params.deployParams, + payees, + shares, _contractURI, }; From dddf95daca1791af92dde63d9a32f7a3bf31d0d6 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Thu, 19 Sep 2024 05:55:18 +0000 Subject: [PATCH 30/78] v2 auth endpoints (#4689) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview The focus of this PR is to add a new API server secret variable and update authentication actions to use it securely. ### Detailed summary - Added `API_SERVER_SECRET` variable in `.env.example` - Updated authentication actions to use `API_SERVER_SECRET` securely - Replaced `json.token` with `jwt` for better security > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/dashboard/.env.example | 5 ++- apps/dashboard/src/app/login/auth-actions.ts | 36 ++++++++++++++------ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/apps/dashboard/.env.example b/apps/dashboard/.env.example index 3359de5655c..62a063051bb 100644 --- a/apps/dashboard/.env.example +++ b/apps/dashboard/.env.example @@ -93,4 +93,7 @@ UNTHREAD_GROWTH_TIER_ID="" UNTHREAD_PRO_TIER_ID="" # Demo Engine -NEXT_PUBLIC_DEMO_ENGINE_URL="" \ No newline at end of file +NEXT_PUBLIC_DEMO_ENGINE_URL="" + +# API server secret (required for thirdweb.com SIWE login) +API_SERVER_SECRET="" \ No newline at end of file diff --git a/apps/dashboard/src/app/login/auth-actions.ts b/apps/dashboard/src/app/login/auth-actions.ts index d2fc1b0b594..9bf3f3e8768 100644 --- a/apps/dashboard/src/app/login/auth-actions.ts +++ b/apps/dashboard/src/app/login/auth-actions.ts @@ -13,34 +13,46 @@ import type { const THIRDWEB_API_HOST = process.env.NEXT_PUBLIC_THIRDWEB_API_HOST || "https://api.thirdweb.com"; +const THIRDWEB_API_SECRET = process.env.API_SERVER_SECRET || ""; + export async function getLoginPayload( params: GenerateLoginPayloadParams, ): Promise { - const res = await fetch(`${THIRDWEB_API_HOST}/v1/auth/payload`, { + if (!THIRDWEB_API_SECRET) { + throw new Error("API_SERVER_SECRET is not set"); + } + const res = await fetch(`${THIRDWEB_API_HOST}/v2/siwe/payload`, { method: "POST", + headers: { + "Content-Type": "application/json", + "x-service-api-key": THIRDWEB_API_SECRET, + }, body: JSON.stringify({ address: params.address, chainId: params.chainId?.toString(), }), - headers: { - "Content-Type": "application/json", - }, }); + if (!res.ok) { console.error("Failed to fetch login payload", res.status, res.statusText); throw new Error("Failed to fetch login payload"); } - return (await res.json()).payload; + return (await res.json()).data.payload; } export async function doLogin(payload: VerifyLoginPayloadParams) { + if (!THIRDWEB_API_SECRET) { + throw new Error("API_SERVER_SECRET is not set"); + } + // forward the request to the API server - const res = await fetch(`${THIRDWEB_API_HOST}/v1/auth/login`, { + const res = await fetch(`${THIRDWEB_API_HOST}/v2/siwe/login`, { method: "POST", headers: { "Content-Type": "application/json", + "x-service-api-key": THIRDWEB_API_SECRET, }, - body: JSON.stringify({ payload }), + body: JSON.stringify(payload), }); if (!res.ok) { @@ -67,7 +79,9 @@ export async function doLogin(payload: VerifyLoginPayloadParams) { const json = await res.json(); - if (!json.token) { + const jwt = json.data.jwt; + + if (!jwt) { console.error("Failed to login - invalid json", json); throw new Error("Failed to login - invalid json"); } @@ -77,7 +91,7 @@ export async function doLogin(payload: VerifyLoginPayloadParams) { method: "GET", headers: { "Content-Type": "application/json", - Authorization: `Bearer ${json.token}`, + Authorization: `Bearer ${jwt}`, }, }); // if we do not have a user, create one @@ -85,7 +99,7 @@ export async function doLogin(payload: VerifyLoginPayloadParams) { const newUserRes = await fetch(`${THIRDWEB_API_HOST}/v1/account/create`, { method: "POST", headers: { - Authorization: `Bearer ${json.token}`, + Authorization: `Bearer ${jwt}`, }, }); @@ -104,7 +118,7 @@ export async function doLogin(payload: VerifyLoginPayloadParams) { // set the token cookie cookieStore.set( COOKIE_PREFIX_TOKEN + getAddress(payload.payload.address), - json.token, + jwt, { httpOnly: true, secure: true, From 4a87109289e6ece5f6f08c55160e5d4e11e034e4 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Thu, 19 Sep 2024 06:35:12 +0000 Subject: [PATCH 31/78] Fix getClaimConditions for ERC20, ERC721, and ERC1155 (#4693) FIXES: DASH-249 --- .changeset/stale-lamps-deliver.md | 5 +++++ .../src/extensions/erc1155/drops/read/getClaimConditions.ts | 2 +- .../src/extensions/erc20/drops/read/getClaimConditions.ts | 2 +- .../src/extensions/erc721/drops/read/getClaimConditions.ts | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/stale-lamps-deliver.md diff --git a/.changeset/stale-lamps-deliver.md b/.changeset/stale-lamps-deliver.md new file mode 100644 index 00000000000..e7428e74bff --- /dev/null +++ b/.changeset/stale-lamps-deliver.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +fix `getClaimConditions` extension for erc20, erc721 and erc1155 diff --git a/packages/thirdweb/src/extensions/erc1155/drops/read/getClaimConditions.ts b/packages/thirdweb/src/extensions/erc1155/drops/read/getClaimConditions.ts index b33ce0c0b1b..304781121a3 100644 --- a/packages/thirdweb/src/extensions/erc1155/drops/read/getClaimConditions.ts +++ b/packages/thirdweb/src/extensions/erc1155/drops/read/getClaimConditions.ts @@ -27,7 +27,7 @@ export async function getClaimConditions( const conditionPromises: Array< ReturnType > = []; - for (let i = startId; i < count; i++) { + for (let i = startId; i < startId + count; i++) { conditionPromises.push( MultiById.getClaimConditionById({ ...options, diff --git a/packages/thirdweb/src/extensions/erc20/drops/read/getClaimConditions.ts b/packages/thirdweb/src/extensions/erc20/drops/read/getClaimConditions.ts index 863c448c266..bd2d10ab04c 100644 --- a/packages/thirdweb/src/extensions/erc20/drops/read/getClaimConditions.ts +++ b/packages/thirdweb/src/extensions/erc20/drops/read/getClaimConditions.ts @@ -24,7 +24,7 @@ export async function getClaimConditions( const conditionPromises: Array< ReturnType > = []; - for (let i = startId; i < count; i++) { + for (let i = startId; i < startId + count; i++) { conditionPromises.push( MultiById.getClaimConditionById({ ...options, diff --git a/packages/thirdweb/src/extensions/erc721/drops/read/getClaimConditions.ts b/packages/thirdweb/src/extensions/erc721/drops/read/getClaimConditions.ts index 25d5322d5e3..1a98e2122b1 100644 --- a/packages/thirdweb/src/extensions/erc721/drops/read/getClaimConditions.ts +++ b/packages/thirdweb/src/extensions/erc721/drops/read/getClaimConditions.ts @@ -24,7 +24,7 @@ export async function getClaimConditions( const conditionPromises: Array< ReturnType > = []; - for (let i = startId; i < count; i++) { + for (let i = startId; i < startId + count; i++) { conditionPromises.push( MultiById.getClaimConditionById({ ...options, From 0c97d7965e3f681cd1fe2e1c79ecc6897ad52b9c Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Thu, 19 Sep 2024 22:00:25 +1200 Subject: [PATCH 32/78] Handle default chain when connecting via redirect URL (#4696) --- .changeset/kind-dingos-wait.md | 5 ++ .../src/app/connect/in-app-wallet/page.tsx | 81 +++++++++---------- .../src/components/styled-connect-button.tsx | 14 ++++ .../src/components/styled-connect-embed.tsx | 14 ++++ apps/playground-web/src/lib/constants.ts | 10 +++ .../src/react/core/hooks/connection/types.ts | 6 ++ .../core/hooks/wallets/useAutoConnect.ts | 5 +- .../web/ui/ConnectWallet/ConnectButton.tsx | 6 +- .../react/web/ui/ConnectWallet/Details.tsx | 2 +- .../ui/ConnectWallet/Modal/ConnectEmbed.tsx | 6 +- .../wallets/in-app/core/wallet/in-app-core.ts | 1 + 11 files changed, 105 insertions(+), 45 deletions(-) create mode 100644 .changeset/kind-dingos-wait.md diff --git a/.changeset/kind-dingos-wait.md b/.changeset/kind-dingos-wait.md new file mode 100644 index 00000000000..5fb256baaca --- /dev/null +++ b/.changeset/kind-dingos-wait.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Fix default chain when using redirect mode + default to first passed chains if available diff --git a/apps/playground-web/src/app/connect/in-app-wallet/page.tsx b/apps/playground-web/src/app/connect/in-app-wallet/page.tsx index d22f96fe5a6..be281997b51 100644 --- a/apps/playground-web/src/app/connect/in-app-wallet/page.tsx +++ b/apps/playground-web/src/app/connect/in-app-wallet/page.tsx @@ -3,7 +3,6 @@ import ThirdwebProvider from "@/components/thirdweb-provider"; import { metadataBase } from "@/lib/constants"; import type { Metadata } from "next"; import { APIHeader } from "../../../components/blocks/APIHeader"; -import { SponsoredInAppTxPreview } from "../../../components/in-app-wallet/sponsored-tx"; import { StyledConnectEmbed } from "../../../components/styled-connect-embed"; export const metadata: Metadata = { @@ -35,9 +34,10 @@ export default function Page() {
-
+ {/* TODO: put this in its own section with inapp smart wallet enabled +
-
+
*/} ); @@ -85,44 +85,43 @@ function AnyAuth() { ); } -function SponsoredInAppTx() { - return ( - <> -
-

- Signless Sponsored Transactions -

-

- With in-app wallets, users don't need to confirm every - transaction. -
- Combine it with smart account flag to cover gas costs for the best UX. -

-
- } - code={`import { inAppWallet } from "thirdweb/wallets"; - import { claimTo } from "thirdweb/extensions/erc1155"; - import { ConnectButton, TransactionButton } from "thirdweb/react"; - +// function SponsoredInAppTx() { +// return ( +// <> +//
+//

+// Signless Sponsored Transactions +//

+//

+// With in-app wallets, users don't need to confirm every +// transaction. +//
+// Combine it with smart account flag to cover gas costs for the best UX. +//

+//
+// } +// code={`import { inAppWallet } from "thirdweb/wallets"; +// import { claimTo } from "thirdweb/extensions/erc1155"; +// import { ConnectButton, TransactionButton } from "thirdweb/react"; - const wallets = [ - inAppWallet( - // turn on gas sponsorship for in-app wallets - { smartAccount: { chain, sponsorGas: true }} - ) - ]; +// const wallets = [ +// inAppWallet( +// // turn on gas sponsorship for in-app wallets +// { smartAccount: { chain, sponsorGas: true }} +// ) +// ]; - function App(){ - return (<> - +// function App(){ +// return (<> +// -{/* signless, sponsored transactions */} - claimTo({ contract, to: "0x123...", tokenId: 0n, quantity: 1n })}>Mint -); -};`} - lang="tsx" - /> - - ); -} +// {/* signless, sponsored transactions */} +// claimTo({ contract, to: "0x123...", tokenId: 0n, quantity: 1n })}>Mint +// ); +// };`} +// lang="tsx" +// /> +// +// ); +// } diff --git a/apps/playground-web/src/components/styled-connect-button.tsx b/apps/playground-web/src/components/styled-connect-button.tsx index e71bcf3dfb5..7aa2ae3159f 100644 --- a/apps/playground-web/src/components/styled-connect-button.tsx +++ b/apps/playground-web/src/components/styled-connect-button.tsx @@ -2,6 +2,13 @@ import { THIRDWEB_CLIENT } from "@/lib/client"; import { useTheme } from "next-themes"; +import { + arbitrumSepolia, + baseSepolia, + optimismSepolia, + polygonAmoy, + sepolia, +} from "thirdweb/chains"; import { ConnectButton } from "thirdweb/react"; import type { ConnectButtonProps } from "thirdweb/react"; import { WALLETS } from "../lib/constants"; @@ -13,6 +20,13 @@ export function StyledConnectButton( return ( ) : ( { return undefined; }; +// const getEcosystem = () => { +// if (process.env.NEXT_PUBLIC_IN_APP_WALLET_URL?.endsWith(".thirdweb.com")) { +// // prod ecosystem +// return "ecosystem.new-age"; +// } +// // dev ecosystem +// return "ecosystem.bonfire-development"; +// }; + export const WALLETS = [ createWallet("inApp", { auth: { @@ -31,6 +40,7 @@ export const WALLETS = [ passkeyDomain: getDomain(), }, }), + // ecosystemWallet(getEcosystem()), TODO put this in its own section createWallet("io.metamask"), createWallet("com.coinbase.wallet"), createWallet("io.rabby"), diff --git a/packages/thirdweb/src/react/core/hooks/connection/types.ts b/packages/thirdweb/src/react/core/hooks/connection/types.ts index 8c2175cb635..426211f212a 100644 --- a/packages/thirdweb/src/react/core/hooks/connection/types.ts +++ b/packages/thirdweb/src/react/core/hooks/connection/types.ts @@ -1,3 +1,4 @@ +import type { Chain } from "../../../../chains/types.js"; import type { ThirdwebClient } from "../../../../client/client.js"; import type { Wallet } from "../../../../wallets/interfaces/wallet.js"; import type { SmartWalletOptions } from "../../../../wallets/smart/types.js"; @@ -107,4 +108,9 @@ export type AutoConnectProps = { * ``` */ onConnect?: (wallet: Wallet) => void; + + /** + * Optional chain to autoconnect to + */ + chain?: Chain; }; diff --git a/packages/thirdweb/src/react/core/hooks/wallets/useAutoConnect.ts b/packages/thirdweb/src/react/core/hooks/wallets/useAutoConnect.ts index 4273ddf0bc2..64211ff30ea 100644 --- a/packages/thirdweb/src/react/core/hooks/wallets/useAutoConnect.ts +++ b/packages/thirdweb/src/react/core/hooks/wallets/useAutoConnect.ts @@ -56,7 +56,10 @@ export function useAutoConnectCore( return autoConnected; } - const lastConnectedChain = await getLastConnectedChain(storage); + // this flow can actually be used for a first connection in the case of a redirect + // in that case, we default to the passed chain to connect to + const lastConnectedChain = + (await getLastConnectedChain(storage)) || props.chain; async function handleWalletConnection(wallet: Wallet) { return wallet.autoConnect({ diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx index 310c13d7e81..fa26e88e499 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx @@ -293,8 +293,12 @@ export function ConnectButton(props: ConnectButtonProps) { : props.connectModal?.size || "compact"; }, [wallets.length, props.connectModal?.size]); + const preferredChain = + props.accountAbstraction?.chain || props.chain || props.chains?.[0]; + const autoConnectComp = props.autoConnect !== false && ( Date: Thu, 19 Sep 2024 03:08:29 -0700 Subject: [PATCH 33/78] Version Packages (#4694) Co-authored-by: github-actions[bot] --- .changeset/kind-dingos-wait.md | 5 ----- .changeset/stale-lamps-deliver.md | 5 ----- packages/thirdweb/CHANGELOG.md | 8 ++++++++ packages/thirdweb/package.json | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) delete mode 100644 .changeset/kind-dingos-wait.md delete mode 100644 .changeset/stale-lamps-deliver.md diff --git a/.changeset/kind-dingos-wait.md b/.changeset/kind-dingos-wait.md deleted file mode 100644 index 5fb256baaca..00000000000 --- a/.changeset/kind-dingos-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Fix default chain when using redirect mode + default to first passed chains if available diff --git a/.changeset/stale-lamps-deliver.md b/.changeset/stale-lamps-deliver.md deleted file mode 100644 index e7428e74bff..00000000000 --- a/.changeset/stale-lamps-deliver.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -fix `getClaimConditions` extension for erc20, erc721 and erc1155 diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index 059528c801c..ba67e64a2f9 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,13 @@ # thirdweb +## 5.57.3 + +### Patch Changes + +- [#4696](https://github.com/thirdweb-dev/js/pull/4696) [`0c97d79`](https://github.com/thirdweb-dev/js/commit/0c97d7965e3f681cd1fe2e1c79ecc6897ad52b9c) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix default chain when using redirect mode + default to first passed chains if available + +- [#4693](https://github.com/thirdweb-dev/js/pull/4693) [`4a87109`](https://github.com/thirdweb-dev/js/commit/4a87109289e6ece5f6f08c55160e5d4e11e034e4) Thanks [@jnsdls](https://github.com/jnsdls)! - fix `getClaimConditions` extension for erc20, erc721 and erc1155 + ## 5.57.2 ### Patch Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 2a863c8529f..09adb93483c 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.57.2", + "version": "5.57.3", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" From a16293a10c428e3fce173e54e3116053e8bb1c4a Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Thu, 19 Sep 2024 14:50:34 +0000 Subject: [PATCH 34/78] [Dashboard] Remove chakra (1) (#4697) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR updates various components to replace `` with `
` for styling consistency. ### Detailed summary - Replaces `` with `
` in multiple components for styling consistency. > The following files were skipped due to too many changes: `apps/dashboard/src/app/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx`, `apps/dashboard/src/pages/dashboard/settings/devices.tsx`, `apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/UsagePage.tsx`, `apps/dashboard/src/components/dashboard/Changelog.tsx`, `apps/dashboard/src/pages/dashboard/settings/api-keys/index.tsx` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../~/settings/credits/SettingsCreditsPage.tsx | 9 ++++----- .../[team_slug]/(team)/~/usage/UsagePage.tsx | 10 +++++----- .../src/components/app-layouts/app.tsx | 6 +++--- .../components/community/PartnersSection.tsx | 11 ++--------- .../contract-publish-form/NetworkDropdown.tsx | 5 ++--- .../contract-publish-form/abi-selector.tsx | 5 ++--- .../shared/sources-panel.tsx | 9 ++++----- .../src/components/dashboard/Changelog.tsx | 18 ++++++------------ .../components/account-signers.tsx | 5 ++--- .../tabs/account-permissions/page.tsx | 9 ++++----- .../components/price-preview.tsx | 5 ++--- .../contract-ui/tabs/claim-conditions/page.tsx | 5 ++--- .../src/contract-ui/tabs/code/page.tsx | 5 ++--- .../contract-ui/tabs/direct-listings/page.tsx | 13 ++++++------- .../src/contract-ui/tabs/embed/page.tsx | 5 ++--- .../contract-ui/tabs/english-auctions/page.tsx | 13 ++++++------- .../tabs/overview/components/TokenDetails.tsx | 9 ++++----- apps/dashboard/src/pages/chain/validate.tsx | 9 ++++----- .../dashboard/settings/api-keys/index.tsx | 17 ++++++----------- .../src/pages/dashboard/settings/devices.tsx | 18 ++++++------------ apps/dashboard/src/utils/errorParser.tsx | 8 ++++---- 21 files changed, 78 insertions(+), 116 deletions(-) diff --git a/apps/dashboard/src/app/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx b/apps/dashboard/src/app/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx index df8d34eb08c..89fc8c5f3f5 100644 --- a/apps/dashboard/src/app/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx @@ -2,7 +2,6 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { useLoggedInUser } from "@3rdweb-sdk/react/hooks/useLoggedInUser"; -import { Flex } from "@chakra-ui/react"; import { ApplyForOpCreditsModal } from "components/onboarding/ApplyForOpCreditsModal"; import { Heading, LinkButton } from "tw-components"; @@ -18,8 +17,8 @@ export const SettingsGasCreditsPage = () => { } return ( - - +
+
Apply to the Optimism Superchain App Accelerator @@ -32,9 +31,9 @@ export const SettingsGasCreditsPage = () => { > Learn More - +
- +
); }; diff --git a/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/UsagePage.tsx b/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/UsagePage.tsx index 5f5d6982965..15cb1863f94 100644 --- a/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/UsagePage.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/(team)/~/usage/UsagePage.tsx @@ -2,7 +2,7 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { useAccount, useAccountUsage } from "@3rdweb-sdk/react/hooks/useApi"; -import { Flex, HStack } from "@chakra-ui/react"; +import { HStack } from "@chakra-ui/react"; import { BillingPeriod } from "components/settings/Account/Billing/Period"; import { BillingPlan } from "components/settings/Account/Billing/Plan"; import { Usage } from "components/settings/Account/Usage"; @@ -21,8 +21,8 @@ export const SettingsUsagePage = () => { } return ( - - +
+

Usage

{ - +
- +
); }; diff --git a/apps/dashboard/src/components/app-layouts/app.tsx b/apps/dashboard/src/components/app-layouts/app.tsx index 3238db6b9f0..6588caa5f57 100644 --- a/apps/dashboard/src/components/app-layouts/app.tsx +++ b/apps/dashboard/src/components/app-layouts/app.tsx @@ -4,7 +4,7 @@ import { EVMContractInfoProvider, } from "@3rdweb-sdk/react"; import { CustomConnectWallet } from "@3rdweb-sdk/react/components/connect-wallet"; -import { Flex, SimpleGrid } from "@chakra-ui/react"; +import { SimpleGrid } from "@chakra-ui/react"; import { type DehydratedState, HydrationBoundary, @@ -96,10 +96,10 @@ const SanctionedAddressesChecker: ComponentWithChildren = ({ children }) => { bg="black" zIndex="banner" > - +
Address is blocked - +
); } diff --git a/apps/dashboard/src/components/community/PartnersSection.tsx b/apps/dashboard/src/components/community/PartnersSection.tsx index 64223c8007a..fda588e1a4b 100644 --- a/apps/dashboard/src/components/community/PartnersSection.tsx +++ b/apps/dashboard/src/components/community/PartnersSection.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import { ChakraNextImage } from "components/Image"; const partnersCompanies = [ @@ -46,13 +45,7 @@ const partnersCompanies = [ const PartnersSection = () => { return ( - +
{partnersCompanies.slice(0, 10).map((partner, idx) => ( @@ -62,7 +55,7 @@ const PartnersSection = () => { alt="partner" /> ))} - +
); }; diff --git a/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx b/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx index dd07fcde744..7475fc283ad 100644 --- a/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx +++ b/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import { Select } from "chakra-react-select"; import type { SizeProp } from "chakra-react-select"; import { useSupportedChains } from "hooks/chains/configureChains"; @@ -54,7 +53,7 @@ export const NetworkDropdown: React.FC = ({ }, [form, options]); return ( - +
= ({ } }} /> - +
); }; diff --git a/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx b/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx index a68036ef2d5..b2c1a3ffb54 100644 --- a/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx +++ b/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import type { Abi } from "abitype"; import { Link, Text } from "tw-components"; import type { SourceFile } from "../types"; @@ -11,8 +10,8 @@ interface SourcesPanelProps { export const SourcesPanel: React.FC = ({ sources, abi }) => { return ( - - +
+
{sources && sources?.length > 0 ? ( ) : ( @@ -27,7 +26,7 @@ export const SourcesPanel: React.FC = ({ sources, abi }) => { )} - - +
+
); }; diff --git a/apps/dashboard/src/components/dashboard/Changelog.tsx b/apps/dashboard/src/components/dashboard/Changelog.tsx index 42ab2dc832f..296a9a3c5b4 100644 --- a/apps/dashboard/src/components/dashboard/Changelog.tsx +++ b/apps/dashboard/src/components/dashboard/Changelog.tsx @@ -1,5 +1,4 @@ import { Skeleton } from "@/components/ui/skeleton"; -import { Flex } from "@chakra-ui/react"; import { formatDistance } from "date-fns/formatDistance"; import { ArrowRightIcon } from "lucide-react"; import { Link } from "tw-components"; @@ -17,17 +16,12 @@ interface ChangelogProps { export const Changelog: React.FC = ({ changelog }) => { return ( - +
{changelog.map((item) => ( - +
- +
= ({ changelog }) => { })}
-
- +
+
))} = ({ changelog }) => { > View More -
+
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signers.tsx b/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signers.tsx index b4b677dbe52..311b19e5c30 100644 --- a/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signers.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signers.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; import { getAllActiveSigners, getAllAdmins } from "thirdweb/extensions/erc4337"; import { useReadContract } from "thirdweb/react"; @@ -30,10 +29,10 @@ export const AccountSigners: React.FC = ({ contract }) => { ); const data = transformedAdmins.concat(transformedSigners || []); return ( - +
{data.map((item) => ( ))} - +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/account-permissions/page.tsx b/apps/dashboard/src/contract-ui/tabs/account-permissions/page.tsx index 39c853d7b29..bdcdfa74372 100644 --- a/apps/dashboard/src/contract-ui/tabs/account-permissions/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account-permissions/page.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; import { Heading } from "tw-components"; import { AccountSigners } from "./components/account-signers"; @@ -11,11 +10,11 @@ export const AccountPermissionsPage: React.FC = ({ contract, }) => { return ( - - +
+
Account Signers - +
- +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx index 384e65e8f19..cd17b5ca567 100644 --- a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx +++ b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx @@ -1,5 +1,4 @@ import { useDashboardEVMChainId } from "@3rdweb-sdk/react"; -import { Flex } from "@chakra-ui/react"; import { CURRENCIES } from "constants/currencies"; import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { Text } from "tw-components"; @@ -27,7 +26,7 @@ export const PricePreview: React.FC = ({ ); return ( - +
Default price {Number(price) === 0 ? ( Free @@ -41,6 +40,6 @@ export const PricePreview: React.FC = ({ : `(${shortenIfAddress(currencyAddress)})`} )} - +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx b/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx index 1d9045ee552..61f2ee0b10d 100644 --- a/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/claim-conditions/page.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; import { ClaimConditions } from "./components/claim-conditions"; @@ -11,8 +10,8 @@ export const ContractClaimConditionsPage: React.FC< ContractClaimConditionsPageProps > = ({ contract, isERC20 }) => { return ( - +
- +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/code/page.tsx b/apps/dashboard/src/contract-ui/tabs/code/page.tsx index bbc4f2bfa02..cd32b34e145 100644 --- a/apps/dashboard/src/contract-ui/tabs/code/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/code/page.tsx @@ -2,7 +2,6 @@ import { useIsomorphicLayoutEffect } from "@/lib/useIsomorphicLayoutEffect"; import { useResolveContractAbi } from "@3rdweb-sdk/react/hooks/useResolveContractAbi"; -import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; import { CodeOverview } from "./components/code-overview"; @@ -25,8 +24,8 @@ export const ContractCodePage: React.FC = ({ } return ( - +
- +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/direct-listings/page.tsx b/apps/dashboard/src/contract-ui/tabs/direct-listings/page.tsx index e0738282801..f3b7bd09362 100644 --- a/apps/dashboard/src/contract-ui/tabs/direct-listings/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/direct-listings/page.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; import { Heading } from "tw-components"; import { CreateListingButton } from "../shared-components/list-button"; @@ -12,19 +11,19 @@ export const ContractDirectListingsPage: React.FC< ContractDirectListingsPageProps > = ({ contract }) => { return ( - - +
+
Contract Listings - +
- - +
+
- +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/embed/page.tsx b/apps/dashboard/src/contract-ui/tabs/embed/page.tsx index bd771e51d98..4ef4efb82e8 100644 --- a/apps/dashboard/src/contract-ui/tabs/embed/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/embed/page.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; import { EmbedSetup } from "./components/embed-setup"; @@ -18,10 +17,10 @@ export const ContractEmbedPage: React.FC = ({ ercOrMarketplace, }) => { return ( - +
{ercOrMarketplace && ( )} - +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/english-auctions/page.tsx b/apps/dashboard/src/contract-ui/tabs/english-auctions/page.tsx index 593355b47a6..ae607257d5d 100644 --- a/apps/dashboard/src/contract-ui/tabs/english-auctions/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/english-auctions/page.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; import { Heading } from "tw-components"; import { CreateListingButton } from "../shared-components/list-button"; @@ -12,19 +11,19 @@ export const ContractEnglishAuctionsPage: React.FC< ContractEnglishAuctionsProps > = ({ contract }) => { return ( - - +
+
Contract Auctions - +
- - +
+
- +
); }; diff --git a/apps/dashboard/src/contract-ui/tabs/overview/components/TokenDetails.tsx b/apps/dashboard/src/contract-ui/tabs/overview/components/TokenDetails.tsx index 114de642ede..f163b59cddc 100644 --- a/apps/dashboard/src/contract-ui/tabs/overview/components/TokenDetails.tsx +++ b/apps/dashboard/src/contract-ui/tabs/overview/components/TokenDetails.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import { TokenSupply } from "contract-ui/tabs/tokens/components/supply"; import type { ThirdwebContract } from "thirdweb"; import { Heading } from "tw-components"; @@ -9,11 +8,11 @@ interface TokenDetailsProps { export const TokenDetails: React.FC = ({ contract }) => { return ( - - +
+
Token Details - +
- +
); }; diff --git a/apps/dashboard/src/pages/chain/validate.tsx b/apps/dashboard/src/pages/chain/validate.tsx index d756d70cd41..4bb654a86a7 100644 --- a/apps/dashboard/src/pages/chain/validate.tsx +++ b/apps/dashboard/src/pages/chain/validate.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import { AppLayout } from "components/app-layouts/app"; import ChainValidation from "components/chain-validation"; import { NextSeo } from "next-seo"; @@ -15,8 +14,8 @@ const ValidateChainPage: ThirdwebNextPage = () => { noindex nofollow /> - - +
+
Validate Chain Validate a given chain is compatible with{" "} @@ -25,10 +24,10 @@ const ValidateChainPage: ThirdwebNextPage = () => { . - +
- +
); }; diff --git a/apps/dashboard/src/pages/dashboard/settings/api-keys/index.tsx b/apps/dashboard/src/pages/dashboard/settings/api-keys/index.tsx index 00fe50c97ee..662a8192a37 100644 --- a/apps/dashboard/src/pages/dashboard/settings/api-keys/index.tsx +++ b/apps/dashboard/src/pages/dashboard/settings/api-keys/index.tsx @@ -4,7 +4,6 @@ import { useAccount, useApiKeys, } from "@3rdweb-sdk/react/hooks/useApi"; -import { Flex } from "@chakra-ui/react"; import { AppLayout } from "components/app-layouts/app"; import { ApiKeys } from "components/settings/ApiKeys"; import { SmartWalletsBillingAlert } from "components/settings/ApiKeys/Alerts"; @@ -38,25 +37,21 @@ const SettingsApiKeysPage: ThirdwebNextPage = () => { }, [apiKeys, account]); return ( - +
- - +
+

API Keys

- +

An API key is required to use thirdweb's services through the SDK @@ -70,7 +65,7 @@ const SettingsApiKeysPage: ThirdwebNextPage = () => { Learn more

- +
{hasSmartWalletsWithoutBilling && ( @@ -81,7 +76,7 @@ const SettingsApiKeysPage: ThirdwebNextPage = () => { isLoading={keysQuery.isLoading} isFetched={keysQuery.isFetched} /> -
+
); }; diff --git a/apps/dashboard/src/pages/dashboard/settings/devices.tsx b/apps/dashboard/src/pages/dashboard/settings/devices.tsx index 949a6f89e32..5f8c01b02a5 100644 --- a/apps/dashboard/src/pages/dashboard/settings/devices.tsx +++ b/apps/dashboard/src/pages/dashboard/settings/devices.tsx @@ -1,5 +1,4 @@ import { useAuthorizedWallets } from "@3rdweb-sdk/react/hooks/useApi"; -import { Flex } from "@chakra-ui/react"; import { AppLayout } from "components/app-layouts/app"; import { AuthorizedWalletsTable } from "components/settings/AuthorizedWallets/AuthorizedWalletsTable"; import { SettingsSidebarLayout } from "core-ui/sidebar/settings"; @@ -11,14 +10,9 @@ const SettingsDevicesPage: ThirdwebNextPage = () => { const authorizedWalletsQuery = useAuthorizedWallets(); return ( - - - +
+
+
Authorized Devices @@ -31,9 +25,9 @@ const SettingsDevicesPage: ThirdwebNextPage = () => { isLoading={authorizedWalletsQuery.isLoading} isFetched={authorizedWalletsQuery.isFetched} /> - - - +
+
+
); }; diff --git a/apps/dashboard/src/utils/errorParser.tsx b/apps/dashboard/src/utils/errorParser.tsx index 96ead60bec3..8b98d2adbc4 100644 --- a/apps/dashboard/src/utils/errorParser.tsx +++ b/apps/dashboard/src/utils/errorParser.tsx @@ -1,11 +1,11 @@ -import { Flex, Link } from "@chakra-ui/react"; +import Link from "next/link"; import posthog from "posthog-js"; import { Text } from "tw-components"; const PLEASE_REACH_OUT_MESSAGE = ( If you believe this is incorrect or the error persists, please visit our{" "} - + support site . @@ -18,14 +18,14 @@ export function parseErrorToMessage(error: unknown): string | JSX.Element { const message = parseError(error); return ( - +
{message} {PLEASE_REACH_OUT_MESSAGE} - +
); } From 5c23e5237f66452aa9912390972f8024e61e9375 Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Thu, 19 Sep 2024 14:50:39 +0000 Subject: [PATCH 35/78] [Dashboard] Remove chakra-ui Flex (2) (#4699) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR updates various components to replace `` with `
` for styling consistency. ### Detailed summary - Replaced `` with `
` in multiple components for styling consistency. > The following files were skipped due to too many changes: `apps/dashboard/src/components/mission/MajorSection.tsx` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../configuration/engine-configuration.tsx | 5 ++-- .../engine/configuration/engine-webhooks.tsx | 9 +++--- .../engine/permissions/engine-admins.tsx | 9 +++--- .../src/components/hackathon/Timer.tsx | 9 +++--- .../src/components/mission/DesireSection.tsx | 14 +++------ .../src/components/mission/HeroSection.tsx | 5 ++-- .../src/components/mission/MajorSection.tsx | 30 ++++++++----------- .../src/components/onboarding/LinkWallet.tsx | 9 +++--- .../src/components/partners/partner-logo.tsx | 5 ++-- .../common/SolutionsTextImage.tsx | 14 +++------ .../src/components/settings/ApiKeys/index.tsx | 9 ++---- .../src/contract-ui/tabs/account/page.tsx | 17 +++++------ 12 files changed, 52 insertions(+), 83 deletions(-) diff --git a/apps/dashboard/src/components/engine/configuration/engine-configuration.tsx b/apps/dashboard/src/components/engine/configuration/engine-configuration.tsx index 636a233b9f0..e461719359a 100644 --- a/apps/dashboard/src/components/engine/configuration/engine-configuration.tsx +++ b/apps/dashboard/src/components/engine/configuration/engine-configuration.tsx @@ -1,7 +1,6 @@ "use client"; import type { EngineInstance } from "@3rdweb-sdk/react/hooks/useEngine"; -import { Flex } from "@chakra-ui/react"; import { EngineCorsConfig } from "./cors"; import { EngineWalletConfig } from "./engine-wallet-config"; import { EngineIpAllowlistConfig } from "./ip-allowlist"; @@ -15,11 +14,11 @@ export const EngineConfiguration: React.FC = ({ instance, }) => { return ( - +
- +
); }; diff --git a/apps/dashboard/src/components/engine/configuration/engine-webhooks.tsx b/apps/dashboard/src/components/engine/configuration/engine-webhooks.tsx index f66f7e2779f..aef73239cf0 100644 --- a/apps/dashboard/src/components/engine/configuration/engine-webhooks.tsx +++ b/apps/dashboard/src/components/engine/configuration/engine-webhooks.tsx @@ -1,7 +1,6 @@ "use client"; import { useEngineWebhooks } from "@3rdweb-sdk/react/hooks/useEngine"; -import { Flex } from "@chakra-ui/react"; import { Heading, Link, Text } from "tw-components"; import { AddWebhookButton } from "./add-webhook-button"; import { WebhooksTable } from "./webhooks-table"; @@ -16,8 +15,8 @@ export const EngineWebhooks: React.FC = ({ const webhooks = useEngineWebhooks(instanceUrl); return ( - - +
+
Webhooks Notify your app backend when transaction and backend wallet events @@ -31,7 +30,7 @@ export const EngineWebhooks: React.FC = ({ . - +
= ({ isFetched={webhooks.isFetched} /> - +
); }; diff --git a/apps/dashboard/src/components/engine/permissions/engine-admins.tsx b/apps/dashboard/src/components/engine/permissions/engine-admins.tsx index 9cd3920656c..2e73093397b 100644 --- a/apps/dashboard/src/components/engine/permissions/engine-admins.tsx +++ b/apps/dashboard/src/components/engine/permissions/engine-admins.tsx @@ -1,7 +1,6 @@ "use client"; import { useEnginePermissions } from "@3rdweb-sdk/react/hooks/useEngine"; -import { Flex } from "@chakra-ui/react"; import { Heading, Link, Text } from "tw-components"; import { AddAdminButton } from "./add-admin-button"; import { AdminsTable } from "./admins-table"; @@ -14,8 +13,8 @@ export const EngineAdmins: React.FC = ({ instanceUrl }) => { const admins = useEnginePermissions(instanceUrl); return ( - - +
+
Admins Admins are allowed to manage your Engine instance from the dashboard.{" "} @@ -29,7 +28,7 @@ export const EngineAdmins: React.FC = ({ instanceUrl }) => { . - +
= ({ instanceUrl }) => { isFetched={admins.isFetched} /> - +
); }; diff --git a/apps/dashboard/src/components/hackathon/Timer.tsx b/apps/dashboard/src/components/hackathon/Timer.tsx index c4593b6e30d..75500eecff2 100644 --- a/apps/dashboard/src/components/hackathon/Timer.tsx +++ b/apps/dashboard/src/components/hackathon/Timer.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import { useEffect, useState } from "react"; import { Text } from "tw-components"; @@ -58,9 +57,9 @@ const Timer = ({ dateStr }: TimerProps) => { ]; return ( - +
{items.map(({ label, value }) => ( - +
{ {value < 10 ? `0${value}` : value} {value === 1 ? label : `${label}s`} - +
))} -
+
); }; diff --git a/apps/dashboard/src/components/mission/DesireSection.tsx b/apps/dashboard/src/components/mission/DesireSection.tsx index 6f6de4da172..131e0464562 100644 --- a/apps/dashboard/src/components/mission/DesireSection.tsx +++ b/apps/dashboard/src/components/mission/DesireSection.tsx @@ -1,16 +1,10 @@ -import { Flex } from "@chakra-ui/react"; import { LandingGridSection } from "components/landing-pages/grid-section"; import { LandingIconSectionItem } from "components/landing-pages/icon-section-item"; import { Heading } from "tw-components"; const DesireSection = () => { return ( - +
{ > thirdweb will... - +
{ description="There is infinite upside to building in open. Open-sourcing all of our tools increases transparency and security for the whole industry. Anybody can contribute to thirdweb by proposing new features, identifying bugs and optimising gas." /> - - +
+
); }; diff --git a/apps/dashboard/src/components/mission/HeroSection.tsx b/apps/dashboard/src/components/mission/HeroSection.tsx index 08eae05a710..9274a212ea3 100644 --- a/apps/dashboard/src/components/mission/HeroSection.tsx +++ b/apps/dashboard/src/components/mission/HeroSection.tsx @@ -1,10 +1,9 @@ -import { Flex } from "@chakra-ui/react"; import { LandingDesktopMobileImage } from "components/landing-pages/desktop-mobile-image"; import { Heading } from "tw-components"; const HeroSection = ({ text }: { text: string }) => { return ( - +
{ > {text} - +
); }; diff --git a/apps/dashboard/src/components/mission/MajorSection.tsx b/apps/dashboard/src/components/mission/MajorSection.tsx index 034a79501d3..acad8629908 100644 --- a/apps/dashboard/src/components/mission/MajorSection.tsx +++ b/apps/dashboard/src/components/mission/MajorSection.tsx @@ -1,16 +1,10 @@ -import { Flex } from "@chakra-ui/react"; import { ChakraNextImage } from "components/Image"; import { LandingGridSection } from "components/landing-pages/grid-section"; import { Heading, Text } from "tw-components"; const MajorSection = () => { return ( - +
{ > However, there are two major obstacles to mass adoption. - +
- +
- +
Developer complexity To build a web3 app, developers need to piece together 10+ different tools that don't natively talk to each other — creating a messy, fragmented DX that stifles innovation. - - +
+
- +
- +
User experience @@ -49,11 +43,11 @@ const MajorSection = () => { their private keys, purchase & transfer crypto, pay gas, and sign a transaction for every action — creating a daunting onboarding process that stifles adoption. - - +
+
- - +
+
); }; diff --git a/apps/dashboard/src/components/onboarding/LinkWallet.tsx b/apps/dashboard/src/components/onboarding/LinkWallet.tsx index cc8506ca4c5..86fd98bfff9 100644 --- a/apps/dashboard/src/components/onboarding/LinkWallet.tsx +++ b/apps/dashboard/src/components/onboarding/LinkWallet.tsx @@ -1,6 +1,5 @@ import { useUpdateAccount } from "@3rdweb-sdk/react/hooks/useApi"; import { useLoggedInUser } from "@3rdweb-sdk/react/hooks/useLoggedInUser"; -import { Flex } from "@chakra-ui/react"; import { useTrack } from "hooks/analytics/useTrack"; import { Button, TrackedLink } from "tw-components"; import { shortenString } from "utils/usedapp-external"; @@ -87,8 +86,8 @@ const OnboardingLinkWallet: React.FC = ({ } />
- - +
+
- - +
+
); diff --git a/apps/dashboard/src/components/partners/partner-logo.tsx b/apps/dashboard/src/components/partners/partner-logo.tsx index b7823928999..a29b51c2a4c 100644 --- a/apps/dashboard/src/components/partners/partner-logo.tsx +++ b/apps/dashboard/src/components/partners/partner-logo.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import { ChakraNextImage } from "components/Image"; const PARTNER_LOGO_MAP = { @@ -103,7 +102,7 @@ interface PartnerLogoProps { } export const PartnerLogo: React.FC = ({ partner }) => { return ( - +
= ({ partner }) => { sizes="(max-width: 768px) 25vw, 10vw" /> - +
); }; diff --git a/apps/dashboard/src/components/product-pages/common/SolutionsTextImage.tsx b/apps/dashboard/src/components/product-pages/common/SolutionsTextImage.tsx index 920e9e47306..ad22a928ed1 100644 --- a/apps/dashboard/src/components/product-pages/common/SolutionsTextImage.tsx +++ b/apps/dashboard/src/components/product-pages/common/SolutionsTextImage.tsx @@ -1,4 +1,3 @@ -import { Flex } from "@chakra-ui/react"; import { ChakraNextImage } from "components/Image"; import { Heading } from "tw-components"; import type { ComponentWithChildren } from "types/component-with-children"; @@ -14,12 +13,7 @@ export const SolutionsTextImage: ComponentWithChildren< > = ({ image, title, children }) => { return ( - +
- +
{title} {children} - - +
+
); }; diff --git a/apps/dashboard/src/components/settings/ApiKeys/index.tsx b/apps/dashboard/src/components/settings/ApiKeys/index.tsx index 9aef9361197..15e7d0bae09 100644 --- a/apps/dashboard/src/components/settings/ApiKeys/index.tsx +++ b/apps/dashboard/src/components/settings/ApiKeys/index.tsx @@ -1,7 +1,6 @@ import { CopyTextButton } from "@/components/ui/CopyTextButton"; import { Badge } from "@/components/ui/badge"; import type { ApiKey } from "@3rdweb-sdk/react/hooks/useApi"; -import { Flex } from "@chakra-ui/react"; import { createColumnHelper } from "@tanstack/react-table"; import { type ServiceName, @@ -95,11 +94,7 @@ export const ApiKeys: ComponentWithChildren = ({ } return ( - +
{value.map((srv) => { const service = getServiceByName(srv.name as ServiceName); return !HIDDEN_SERVICES.includes(service?.name) ? ( @@ -108,7 +103,7 @@ export const ApiKeys: ComponentWithChildren = ({ ) : null; })} - +
); }, }), diff --git a/apps/dashboard/src/contract-ui/tabs/account/page.tsx b/apps/dashboard/src/contract-ui/tabs/account/page.tsx index 70e1f6eac8a..8766ef9e453 100644 --- a/apps/dashboard/src/contract-ui/tabs/account/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account/page.tsx @@ -1,5 +1,4 @@ import { useDashboardEVMChainId } from "@3rdweb-sdk/react"; -import { Flex } from "@chakra-ui/react"; import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import type { ThirdwebContract } from "thirdweb"; import { Heading } from "tw-components"; @@ -18,14 +17,14 @@ export const AccountPage: React.FC = ({ contract }) => { const symbol = chain?.nativeCurrency.symbol || "Native Token"; return ( - - +
+
Balances - +
- +
Deposit {symbol} - +
{chain && ( = ({ contract }) => { /> )} - +
NFTs owned - +
-
+
); }; From 9e11c15c2d13c6d95983186206e2bd5c8982ada0 Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Thu, 19 Sep 2024 16:18:43 +0000 Subject: [PATCH 36/78] [Dashboard] Clean up some clipboard code (#4702) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR introduces a `useClipboard` custom hook to manage clipboard functionality in multiple components, replacing direct clipboard interactions with a reusable hook. ### Detailed summary - Introduced `useClipboard` custom hook for clipboard functionality - Replaced direct clipboard interactions with `useClipboard` in `CopyButton.tsx`, `CopyTextButton.tsx`, and `WalletAddress.tsx` - Removed `useState` for managing copied state in favor of `useClipboard` in all affected components > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../@/components/blocks/wallet-address.tsx | 21 ++++++------------- .../src/@/components/ui/CopyButton.tsx | 12 ++++------- .../src/@/components/ui/CopyTextButton.tsx | 10 ++++----- 3 files changed, 14 insertions(+), 29 deletions(-) diff --git a/apps/dashboard/src/@/components/blocks/wallet-address.tsx b/apps/dashboard/src/@/components/blocks/wallet-address.tsx index b06e2bac766..de1a3f846e3 100644 --- a/apps/dashboard/src/@/components/blocks/wallet-address.tsx +++ b/apps/dashboard/src/@/components/blocks/wallet-address.tsx @@ -7,8 +7,9 @@ import { HoverCardTrigger, } from "@/components/ui/hover-card"; import { useThirdwebClient } from "@/constants/thirdweb.client"; +import { useClipboard } from "hooks/useClipboard"; import { Check, Copy, ExternalLinkIcon } from "lucide-react"; -import { useMemo, useState } from "react"; +import { useMemo } from "react"; import { type ThirdwebClient, isAddress } from "thirdweb"; import { ZERO_ADDRESS } from "thirdweb"; import { @@ -45,7 +46,7 @@ export function WalletAddress(props: { client: thirdwebClient, }); - const [isCopied, setIsCopied] = useState(false); + const { onCopy, hasCopied } = useClipboard(address, 2000); if (!isAddress(address)) { return Invalid Address ({address}); @@ -56,16 +57,6 @@ export function WalletAddress(props: { return {shortenedAddress}; } - const copyToClipboard = async () => { - try { - await navigator.clipboard.writeText(address); - setIsCopied(true); - setTimeout(() => setIsCopied(false), 2000); // Reset after 2 seconds - } catch (err) { - console.error("Failed to copy: ", err); - } - }; - return ( @@ -102,15 +93,15 @@ export function WalletAddress(props: {

diff --git a/apps/dashboard/src/@/components/ui/CopyButton.tsx b/apps/dashboard/src/@/components/ui/CopyButton.tsx index 5b9cb5e42e0..ffa411fa5c8 100644 --- a/apps/dashboard/src/@/components/ui/CopyButton.tsx +++ b/apps/dashboard/src/@/components/ui/CopyButton.tsx @@ -1,8 +1,8 @@ "use client"; import { cn } from "@/lib/utils"; +import { useClipboard } from "hooks/useClipboard"; import { CheckIcon, CopyIcon } from "lucide-react"; -import { useState } from "react"; import { Button } from "./button"; import { ToolTipLabel } from "./tooltip"; @@ -12,20 +12,16 @@ export function CopyButton(props: { iconClassName?: string; variant?: "ghost" | "primary" | "secondary"; }) { - const [isCopied, setIsCopied] = useState(false); + const { hasCopied, onCopy } = useClipboard(props.text, 1000); return ( + + setIsPopoverOpen(false)} + style={{ + width: "var(--radix-popover-trigger-width)", + maxHeight: "var(--radix-popover-content-available-height)", + }} + > +

+ {/* Search */} +
+ setSearchValue(e.target.value)} + className="pl-10 py-4 !h-auto focus-visible:ring-0 focus-visible:ring-offset-0 border-0 border-b border-border rounded-b-none" + onKeyDown={handleInputKeyDown} + /> + +
+ + + {/* List */} +
+ {optionsToShow.length === 0 && ( +
+ No results found +
+ )} + + {optionsToShow.map((option, i) => { + const isSelected = selectedValues.includes(option.value); + return ( + + ); + })} +
+
+
+ + + ); + }, +); + +function ClosableBadge(props: { + label: string; + onClose: () => void; +}) { + return ( + + {props.label} + { + e.stopPropagation(); + props.onClose(); + }} + /> + + ); +} + +MultiSelect.displayName = "MultiSelect"; diff --git a/apps/dashboard/src/@/components/ui/ScrollShadow/ScrollShadow.tsx b/apps/dashboard/src/@/components/ui/ScrollShadow/ScrollShadow.tsx index 72d0be7810f..99191441a92 100644 --- a/apps/dashboard/src/@/components/ui/ScrollShadow/ScrollShadow.tsx +++ b/apps/dashboard/src/@/components/ui/ScrollShadow/ScrollShadow.tsx @@ -71,8 +71,15 @@ export function ScrollShadow(props: { }); }); content.addEventListener("scroll", handleScroll); + + const resizeObserver = new ResizeObserver(() => { + handleScroll(); + }); + + resizeObserver.observe(content); return () => { content.removeEventListener("scroll", handleScroll); + resizeObserver.disconnect(); }; }, []); diff --git a/apps/dashboard/src/@/lib/useShowMore.ts b/apps/dashboard/src/@/lib/useShowMore.ts new file mode 100644 index 00000000000..052037fb172 --- /dev/null +++ b/apps/dashboard/src/@/lib/useShowMore.ts @@ -0,0 +1,37 @@ +"use client"; + +import { useCallback, useState } from "react"; + +/** + * + * @internal + */ +export function useShowMore( + initialItemsToShow: number, + itemsToAdd: number, +) { + // start with showing first `initialItemsToShow` items, when the last item is in view, show `itemsToAdd` more + const [itemsToShow, setItemsToShow] = useState(initialItemsToShow); + const lastItemRef = useCallback( + (node: T) => { + if (!node) { + return; + } + + const observer = new IntersectionObserver( + (entries) => { + if (entries[0]?.isIntersecting) { + setItemsToShow((prev) => prev + itemsToAdd); // show 10 more items + } + }, + { threshold: 1 }, + ); + + observer.observe(node); + // when the node is removed from the DOM, observer will be disconnected automatically by the browser + }, + [itemsToAdd], + ); + + return { itemsToShow, lastItemRef }; +} From f51dd8f1acf276db277da43df080a5181a8c6eea Mon Sep 17 00:00:00 2001 From: jnsdls Date: Thu, 19 Sep 2024 21:02:18 +0000 Subject: [PATCH 43/78] ban createContext usage from dashboard (#4707) ![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/VXaCVgbx1DROqoQd8UuD/786700f4-1588-4238-a7eb-884c2df54584.png) --- apps/dashboard/.eslintrc.js | 5 ++++ .../react/hooks/useActiveChainId.tsx | 4 +++ apps/dashboard/src/contexts/all-chains.tsx | 2 ++ .../src/contexts/configured-chains.tsx | 29 +++++++++++++++++++ apps/dashboard/src/contexts/error-handler.tsx | 2 ++ .../claim-conditions-form/index.tsx | 2 ++ 6 files changed, 44 insertions(+) diff --git a/apps/dashboard/.eslintrc.js b/apps/dashboard/.eslintrc.js index bb5a8d77c31..abe735655bf 100644 --- a/apps/dashboard/.eslintrc.js +++ b/apps/dashboard/.eslintrc.js @@ -14,6 +14,11 @@ module.exports = { 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.', + }, { selector: "CallExpression[callee.name='defineChain']", message: diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useActiveChainId.tsx b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useActiveChainId.tsx index 9eecb4d015a..9954401a48c 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useActiveChainId.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useActiveChainId.tsx @@ -17,10 +17,14 @@ export type EVMContractInfo = { type SetEVMContractInfo = (info: EVMContractInfo) => void; +// Legacy: will be removed with contract page -> app router refactor +// eslint-disable-next-line no-restricted-syntax const EVMContractInfoContext = createContext( undefined, ); +// Legacy: will be removed with contract page -> app router refactor +// eslint-disable-next-line no-restricted-syntax const SetEVMContractInfoContext = createContext( undefined, ); diff --git a/apps/dashboard/src/contexts/all-chains.tsx b/apps/dashboard/src/contexts/all-chains.tsx index ead29d2b33d..6b971655613 100644 --- a/apps/dashboard/src/contexts/all-chains.tsx +++ b/apps/dashboard/src/contexts/all-chains.tsx @@ -9,6 +9,8 @@ type AllChainsData = { slugToChainRecord: Record; }; +// Legacy: we need to find a way to remove this +// eslint-disable-next-line no-restricted-syntax export const AllChainsContext = createContext( undefined, ); diff --git a/apps/dashboard/src/contexts/configured-chains.tsx b/apps/dashboard/src/contexts/configured-chains.tsx index 6d7a4443cdc..259be20dbc4 100644 --- a/apps/dashboard/src/contexts/configured-chains.tsx +++ b/apps/dashboard/src/contexts/configured-chains.tsx @@ -15,71 +15,100 @@ const MODIFIED_CHAINS_KEY = "tw-modified-chains"; const RECENTLY_USED_CHAIN_IDS_KEY = "tw-recently-used-chains"; /** + * LEGACY + * * holds the "supported chains" array * initially it is set to the defaultChains, then it is updated to the "allChains" with "modified chains" overrides */ +// eslint-disable-next-line no-restricted-syntax export const SupportedChainsContext = createContext( undefined, ); /** + * LEGACY + * * holds the "modified chains" array */ +// eslint-disable-next-line no-restricted-syntax const ModifiedChainsContext = createContext( undefined, ); /** + * LEGACY + * * holds the "modified chains" array */ +// eslint-disable-next-line no-restricted-syntax export const RemoveChainModification = createContext< ((chainId: number) => void) | undefined >(undefined); /** + * LEGACY + * * holds the "recently used chain ids" array */ +// eslint-disable-next-line no-restricted-syntax export const RecentlyUsedChainIdsContext = createContext( undefined, ); /** + * LEGACY + * * holds the function that takes a chainId and adds it to the "recently used chains" and handles its storage */ +// eslint-disable-next-line no-restricted-syntax export const AddRecentlyUsedChainIdsContext = createContext< ((chainId: number) => void) | undefined >(undefined); /** + * LEGACY + * * holds the function that takes the "modified chain" object * and handles the logic of updating the "supported chains" and "modified chains" and "recently used chains" */ +// eslint-disable-next-line no-restricted-syntax export const ModifyChainContext = createContext< ((chain: ChainMetadata, remove?: boolean) => void) | undefined >(undefined); /** + * LEGACY + * * flag indicating if the supported chains is having the final value or not * app starts with the defaultChains as supported chains * then allChains is dynamically imported or fetched from indexedDB, user modified chains are fetched from localStorage * and then the final supported chains is calculated by overriding the modifiedChains on allChains */ +// eslint-disable-next-line no-restricted-syntax export const SupportedChainsReadyContext = createContext(false); /** + * LEGACY + * * Flag indicating if the "Network Config" Modal is open or not */ +// eslint-disable-next-line no-restricted-syntax export const isNetworkConfigModalOpenCtx = createContext(false); +// eslint-disable-next-line no-restricted-syntax export const SetIsNetworkConfigModalOpenCtx = createContext< ((value: boolean) => void) | undefined >(undefined); /** + * LEGACY + * * Chain object to be edited in the "Network Config" Modal */ +// eslint-disable-next-line no-restricted-syntax export const EditChainContext = createContext( undefined, ); +// eslint-disable-next-line no-restricted-syntax export const SetEditChainContext = createContext< ((chain: ChainMetadata | undefined) => void) | undefined >(undefined); diff --git a/apps/dashboard/src/contexts/error-handler.tsx b/apps/dashboard/src/contexts/error-handler.tsx index bdfd4665d79..f031dd4a579 100644 --- a/apps/dashboard/src/contexts/error-handler.tsx +++ b/apps/dashboard/src/contexts/error-handler.tsx @@ -21,6 +21,8 @@ interface ErrorContext { dismissError: () => void; } +// TODO: figure out a way to remove this context +// eslint-disable-next-line no-restricted-syntax const ErrorContext = createContext({ onError: () => undefined, dismissError: () => undefined, diff --git a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx index 9fa93bf66e9..6e2dbd26a11 100644 --- a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx +++ b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx @@ -162,6 +162,8 @@ interface ClaimsConditionFormContextData { claimConditionType: ClaimConditionType; } +// legacy, but we SHOULD remove this and instead pass down props! +// eslint-disable-next-line no-restricted-syntax const ClaimsConditionFormContext = createContext< ClaimsConditionFormContextData | undefined >(undefined); From 0a7448cb2b739b3882824fc98ef075a0416d6434 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Thu, 19 Sep 2024 21:29:08 +0000 Subject: [PATCH 44/78] [SDK] Feature: Coinbase login (#4692) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DO NOT MERGE, needs IAW PR to merge first --- ## PR-Codex overview This PR introduces Coinbase as a new authentication option across various wallet-related components. ### Detailed summary - Added `coinbase` as an authentication option in wallets - Updated icons and authentication types to include Coinbase - Updated in-app wallet authentication types to include Coinbase - Updated login and connection options to support Coinbase > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/breezy-guests-count.md | 17 +++++++++++++++++ .../MiniPlayground.tsx | 1 + .../sign-in/components/InAppWalletFormGroup.tsx | 1 + .../thirdweb/src/react/core/utils/walletIcon.ts | 5 +++++ .../react/native/ui/connect/InAppWalletUI.tsx | 2 ++ .../thirdweb/src/react/native/ui/icons/svgs.ts | 12 ++++++++++++ .../shared/ConnectWalletSocialOptions.tsx | 1 + .../src/react/web/wallets/shared/oauthSignIn.ts | 3 ++- .../wallets/in-app/core/authentication/types.ts | 1 + .../wallets/in-app/native/native-connector.ts | 1 + .../thirdweb/src/wallets/in-app/web/in-app.ts | 1 + .../src/wallets/in-app/web/lib/web-connector.ts | 2 ++ packages/thirdweb/src/wallets/types.ts | 1 + 13 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 .changeset/breezy-guests-count.md diff --git a/.changeset/breezy-guests-count.md b/.changeset/breezy-guests-count.md new file mode 100644 index 00000000000..02363f47f12 --- /dev/null +++ b/.changeset/breezy-guests-count.md @@ -0,0 +1,17 @@ +--- +"thirdweb": minor +--- + +Login to an in-app wallet with your Coinbase account + +```ts +import { inAppWallet } from "thirdweb/react" + +const wallet = inAppWallet(); + +const account = await wallet.connect({ + strategy: "coinbase", + chain: mainnet, + client: thirdwebClient, +}); +``` diff --git a/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx b/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx index 7c0b270c913..39786ecdb76 100644 --- a/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx +++ b/apps/dashboard/src/components/wallets/ConnectWalletMiniPlayground/MiniPlayground.tsx @@ -76,6 +76,7 @@ function usePlaygroundWallets() { email: true, passkey: true, phone: true, + coinbase: false, guest: false, }); diff --git a/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx b/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx index 08c4a82aadf..b95f415b3aa 100644 --- a/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx +++ b/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx @@ -18,6 +18,7 @@ const allInAppWalletLoginMethods: InAppWalletAuth[] = [ "x", "facebook", "apple", + "coinbase", "guest", ]; diff --git a/packages/thirdweb/src/react/core/utils/walletIcon.ts b/packages/thirdweb/src/react/core/utils/walletIcon.ts index e6fd919a1ed..a1337fd4158 100644 --- a/packages/thirdweb/src/react/core/utils/walletIcon.ts +++ b/packages/thirdweb/src/react/core/utils/walletIcon.ts @@ -19,6 +19,8 @@ export const twitchIconUri = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDExMS43ODY2NyAxMjcuMzg2NjciCiAgIGhlaWdodD0iMTI3LjM4NjY3IgogICB3aWR0aD0iMTExLjc4NjY3IgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczMzU1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJUd2l0Y2hfbG9nby5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMS4xICgzYmY1YWUwZDI1LCAyMDIxLTA5LTIwKSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcwogICBpZD0iZGVmczI5Ij4KICAgIAogICAgCiAgPC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgaWQ9Im5hbWVkdmlldzI3IgogICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iNC4xOTkyMjg0IgogICBpbmtzY2FwZTpjeD0iLTUwLjYwNDUzNSIKICAgaW5rc2NhcGU6Y3k9IjE0MC4zODI5MyIKICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIyNTYwIgogICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMzg3IgogICBpbmtzY2FwZTp3aW5kb3cteD0iMTkxMiIKICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmczMzU1IiAvPgogIDxnCiAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzMzMzMzMywwLDAsLTEuMzMzMzMzMywxMDEuMzkzMzMsNjcuNTg5MzMyKSIKICAgaWQ9ImczMzY1Ij4KICAgICAgPHBhdGgKICAgaWQ9InBhdGgzMzY3IgogICBzdHlsZT0iZmlsbDojNjQ0MWE1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICBkPSJtIDAsMCAtMTMuNjUyLC0xMy42NTEgaCAtMjEuNDQ1IGwgLTExLjY5OSwtMTEuNjk3IHYgMTEuNjk3IEggLTY0LjM0NCBWIDQyLjg5MyBIIDAgWiBtIC03Mi4xNDYsNTAuNjkyIC0zLjg5OSwtMTUuNTk5IHYgLTcwLjE5IGggMTcuNTUgdiAtOS43NTEgaCA5Ljc0NiBsIDkuNzUyLDkuNzUxIGggMTUuNTk2IEwgNy43OTUsLTMuOTA1IHYgNTQuNTk3IHoiIC8+CiAgICA8L2c+PHBhdGgKICAgaWQ9InBhdGgzMzY5IgogICBzdHlsZT0iZmlsbDojNjQ0MWE1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjMzMzMzIgogICBkPSJtIDQ0LjE5NzMzMSw2Mi4zOTQyNjYgaCAxMC4zOTg2NyBWIDMxLjE5MjkzMyBoIC0xMC4zOTg2NyB6IG0gMjguNTk0NjcsMCBoIDEwLjM5ODY2IFYgMzEuMTkyOTMzIGggLTEwLjM5ODY2IHoiIC8+Cjwvc3ZnPgo="; export const discordIconUri = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMCAxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBpZD0iZGlzY29yZCI+PHBhdGggZmlsbD0iIzY2NjVkMiIgZD0iTTg1LjIyLDI0Ljk1OGMtMTEuNDU5LTguNTc1LTIyLjQzOC04LjMzNC0yMi40MzgtOC4zMzRsLTEuMTIyLDEuMjgyCgkJCQljMTMuNjIzLDQuMDg3LDE5Ljk1NCwxMC4wOTcsMTkuOTU0LDEwLjA5N2MtMTkuNDkxLTEwLjczMS00NC4zMTctMTAuNjU0LTY0LjU5LDBjMCwwLDYuNTcxLTYuMzMxLDIwLjk5Ni0xMC40MThsLTAuODAxLTAuOTYyCgkJCQljMCwwLTEwLjg5OS0wLjI0LTIyLjQzOCw4LjMzNGMwLDAtMTEuNTQsMjAuNzU1LTExLjU0LDQ2LjMxOWMwLDAsNi43MzIsMTEuNTQsMjQuNDQyLDEyLjEwMWMwLDAsMi45NjUtMy41MjYsNS4zNjktNi41NzEKCQkJCWMtMTAuMTc3LTMuMDQ1LTE0LjAyNC05LjM3Ni0xNC4wMjQtOS4zNzZjNi4zOTQsNC4wMDEsMTIuODU5LDYuNTA1LDIwLjkxNiw4LjA5NGMxMy4xMDgsMi42OTgsMjkuNDEzLTAuMDc2LDQxLjU5MS04LjA5NAoJCQkJYzAsMC00LjAwNyw2LjQ5MS0xNC41MDUsOS40NTZjMi40MDQsMi45NjUsNS4yODksNi40MTEsNS4yODksNi40MTFjMTcuNzEtMC41NjEsMjQuNDQxLTEyLjEwMSwyNC40NDEtMTIuMDIKCQkJCUM5Ni43NTksNDUuNzEzLDg1LjIyLDI0Ljk1OCw4NS4yMiwyNC45NTh6IE0zNS4wNTUsNjMuODI0Yy00LjQ4OCwwLTguMTc0LTMuOTI3LTguMTc0LTguODE1CgkJCQljMC4zMjgtMTEuNzA3LDE2LjEwMi0xMS42NzEsMTYuMzQ4LDBDNDMuMjI5LDU5Ljg5NywzOS42MjIsNjMuODI0LDM1LjA1NSw2My44MjR6IE02NC4zMDQsNjMuODI0CgkJCQljLTQuNDg4LDAtOC4xNzQtMy45MjctOC4xNzQtOC44MTVjMC4zNi0xMS42ODQsMTUuOTM3LTExLjY4OSwxNi4zNDgsMEM3Mi40NzgsNTkuODk3LDY4Ljg3Miw2My44MjQsNjQuMzA0LDYzLjgyNHoiPjwvcGF0aD48L3N2Zz4="; +export const coinbaseIconUri = + "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTU2IiBoZWlnaHQ9IjU1NiIgdmlld0JveD0iMCAwIDU1NiA1NTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xNDhfNSkiPgo8cGF0aCBkPSJNMjc4IDBDNDMxLjUzMyAwIDU1NiAxMjQuNDY3IDU1NiAyNzhDNTU2IDQzMS41MzMgNDMxLjUzMyA1NTYgMjc4IDU1NkMxMjQuNDY3IDU1NiAwIDQzMS41MzMgMCAyNzhDMCAxMjQuNDY3IDEyNC40NjcgMCAyNzggMFoiIGZpbGw9IiMwMDUyRkYiLz4KPHBhdGggZD0iTTI3OC40ODIgMzc1LjE5QzIyNC40OSAzNzUuMTkgMTgwLjg2MiAzMzEuNDEgMTgwLjg2MiAyNzcuNUMxODAuODYyIDIyMy41OSAyMjQuNjEgMTc5LjgxIDI3OC40ODIgMTc5LjgxQzMyNi44MSAxNzkuODEgMzY2Ljk0MyAyMTUuMDI3IDM3NC42NTYgMjYxLjIxOEg0NzNDNDY0LjY4NCAxNjAuODc1IDM4MC44MDMgODIgMjc4LjM2MiA4MkMxNzAuNDk3IDgyIDgzIDE2OS41NTkgODMgMjc3LjVDODMgMzg1LjQ0MSAxNzAuNDk3IDQ3MyAyNzguMzYyIDQ3M0MzODAuODAzIDQ3MyA0NjQuNjg0IDM5NC4xMjUgNDczIDI5My43ODJIMzc0LjUzNkMzNjYuODIzIDMzOS45NzMgMzI2LjgxIDM3NS4xOSAyNzguNDgyIDM3NS4xOVoiIGZpbGw9IndoaXRlIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTQ4XzUiPgo8cmVjdCB3aWR0aD0iNTU2IiBoZWlnaHQ9IjU1NiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K"; export const lineIconUri = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiB2aWV3Qm94PSIwIDAgMzIwIDMyMCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiMwNmM3NTU7fS5jbHMtMntmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPjxnIGlkPSJMSU5FX0xPR08iIGRhdGEtbmFtZT0iTElORSBMT0dPIj48cmVjdCBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iNzIuMTQiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yNjYuNjYsMTQ0LjkyYzAtNDcuNzQtNDcuODYtODYuNTgtMTA2LjY5LTg2LjU4UzUzLjI4LDk3LjE4LDUzLjI4LDE0NC45MmMwLDQyLjgsMzgsNzguNjUsODkuMjIsODUuNDIsMy40OC43NSw4LjIxLDIuMjksOS40LDUuMjYsMS4wOCwyLjcuNzEsNi45My4zNSw5LjY1LDAsMC0xLjI1LDcuNTMtMS41Miw5LjEzLS40NywyLjctMi4xNSwxMC41NSw5LjI0LDUuNzZzNjEuNDQtMzYuMTgsODMuODItNjEuOTVoMEMyNTkuMjUsMTgxLjI0LDI2Ni42NiwxNjQsMjY2LjY2LDE0NC45MloiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yMzEuMTYsMTcyLjQ5aC0zMGEyLDIsMCwwLDEtMi0ydjBoMFYxMjMuOTRoMHYwYTIsMiwwLDAsMSwyLTJoMzBhMiwyLDAsMCwxLDIsMnY3LjU3YTIsMiwwLDAsMS0yLDJIMjEwLjc5djcuODVoMjAuMzdhMiwyLDAsMCwxLDIsMlYxNTFhMiwyLDAsMCwxLTIsMkgyMTAuNzl2Ny44NmgyMC4zN2EyLDIsMCwwLDEsMiwydjcuNTZBMiwyLDAsMCwxLDIzMS4xNiwxNzIuNDlaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTIwLjI5LDE3Mi40OWEyLDIsMCwwLDAsMi0ydi03LjU2YTIsMiwwLDAsMC0yLTJIOTkuOTJ2LTM3YTIsMiwwLDAsMC0yLTJIOTAuMzJhMiwyLDAsMCwwLTIsMnY0Ni41M2gwdjBhMiwyLDAsMCwwLDIsMmgzMFoiLz48cmVjdCBjbGFzcz0iY2xzLTEiIHg9IjEyOC43MyIgeT0iMTIxLjg1IiB3aWR0aD0iMTEuNjQiIGhlaWdodD0iNTAuNjQiIHJ4PSIyLjA0Ii8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTg5Ljg0LDEyMS44NWgtNy41NmEyLDIsMCwwLDAtMiwydjI3LjY2bC0yMS4zLTI4Ljc3YTEuMiwxLjIsMCwwLDAtLjE3LS4yMXYwbC0uMTItLjEyLDAsMC0uMTEtLjA5LS4wNiwwLS4xMS0uMDgtLjA2LDAtLjExLS4wNi0uMDcsMC0uMTEsMC0uMDcsMC0uMTIsMC0uMDgsMC0uMTIsMGgtLjA4bC0uMTEsMGgtNy43MWEyLDIsMCwwLDAtMiwydjQ2LjU2YTIsMiwwLDAsMCwyLDJoNy41N2EyLDIsMCwwLDAsMi0yVjE0Mi44MWwyMS4zMywyOC44YTIsMiwwLDAsMCwuNTIuNTJoMGwuMTIuMDguMDYsMCwuMS4wNS4xLDAsLjA3LDAsLjE0LDBoMGEyLjQyLDIuNDIsMCwwLDAsLjU0LjA3aDcuNTJhMiwyLDAsMCwwLDItMlYxMjMuODlBMiwyLDAsMCwwLDE4OS44NCwxMjEuODVaIi8+PC9nPjwvZz48L3N2Zz4="; export const farcasterIconUri = @@ -52,6 +54,7 @@ export const passkeyIcon = export const socialIcons = { google: googleIconUri, apple: appleIconUri, + coinbase: coinbaseIconUri, facebook: facebookIconUri, discord: discordIconUri, line: lineIconUri, @@ -65,6 +68,8 @@ export function getWalletIcon(provider: string) { switch (provider) { case "google": return googleIconUri; + case "coinbase": + return coinbaseIconUri; case "apple": return appleIconUri; case "facebook": diff --git a/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx b/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx index 1a459d14750..b9172bce9be 100644 --- a/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx +++ b/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx @@ -30,6 +30,7 @@ import { Spacer } from "../components/spacer.js"; import { ThemedText } from "../components/text.js"; import { APPLE_ICON, + COINBASE_ICON, DISCORD_ICON, FACEBOOK_ICON, FARCASTER_ICON, @@ -53,6 +54,7 @@ const defaultAuthOptions: InAppWalletAuth[] = [ const socialIcons = { google: GOOGLE_ICON, facebook: FACEBOOK_ICON, + coinbase: COINBASE_ICON, apple: APPLE_ICON, discord: DISCORD_ICON, line: LINE_ICON, diff --git a/packages/thirdweb/src/react/native/ui/icons/svgs.ts b/packages/thirdweb/src/react/native/ui/icons/svgs.ts index dc5d9147751..392be0d70e6 100644 --- a/packages/thirdweb/src/react/native/ui/icons/svgs.ts +++ b/packages/thirdweb/src/react/native/ui/icons/svgs.ts @@ -37,6 +37,18 @@ export const DISCORD_ICON = ` `; +export const COINBASE_ICON = ` + + + + + + + + + +`; + export const LINE_ICON = ``; export const FARCASTER_ICON = ` diff --git a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx index 963ed491e6a..796e9eda1e8 100644 --- a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +++ b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx @@ -111,6 +111,7 @@ export const ConnectWalletSocialOptions = ( discord: locale.signInWithDiscord, line: "LINE", x: "X", + coinbase: "Coinbase", farcaster: "Farcaster", telegram: "Telegram", }; diff --git a/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts b/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts index 7d4ef64f121..9afd94160f1 100644 --- a/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts +++ b/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts @@ -41,10 +41,11 @@ function getOauthLoginPath( case "line": case "x": case "guest": + case "coinbase": case "discord": return getLoginUrl({ authOption, client, ecosystem }); default: - return ""; + throw new Error(`Unsupported auth option: ${authOption}`); } } diff --git a/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts b/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts index 6f121241e8f..061e717126d 100644 --- a/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts +++ b/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts @@ -82,6 +82,7 @@ export enum AuthProvider { APPLE = "Apple", PASSKEY = "Passkey", DISCORD = "Discord", + COINBASE = "Coinbase", X = "X", LINE = "Line", FARCASTER = "Farcaster", diff --git a/packages/thirdweb/src/wallets/in-app/native/native-connector.ts b/packages/thirdweb/src/wallets/in-app/native/native-connector.ts index a6b11b4daef..f4d34357fe8 100644 --- a/packages/thirdweb/src/wallets/in-app/native/native-connector.ts +++ b/packages/thirdweb/src/wallets/in-app/native/native-connector.ts @@ -158,6 +158,7 @@ export class InAppNativeConnector implements InAppConnector { case "x": case "farcaster": case "telegram": + case "coinbase": case "apple": { const ExpoLinking = require("expo-linking"); const redirectUrl = diff --git a/packages/thirdweb/src/wallets/in-app/web/in-app.ts b/packages/thirdweb/src/wallets/in-app/web/in-app.ts index 656dc9001d8..2f947c3fe67 100644 --- a/packages/thirdweb/src/wallets/in-app/web/in-app.ts +++ b/packages/thirdweb/src/wallets/in-app/web/in-app.ts @@ -15,6 +15,7 @@ import { createInAppWallet } from "../core/wallet/in-app-core.js"; * - Apple * - Facebook * - Discord + * - Coinbase * - Telegram * - LINE * - X diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts index f2d53fe3f80..6b0b08ac432 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts @@ -284,6 +284,7 @@ export class InAppWebConnector implements InAppConnector { case "farcaster": case "line": case "x": + case "coinbase": case "discord": { return loginWithOauth({ authOption: strategy, @@ -353,6 +354,7 @@ export class InAppWebConnector implements InAppConnector { case "line": case "x": case "guest": + case "coinbase": case "discord": { const authToken = await this.authenticate(args); return await this.auth.loginWithAuthToken(authToken); diff --git a/packages/thirdweb/src/wallets/types.ts b/packages/thirdweb/src/wallets/types.ts index 6820968c5dd..36ef5bee664 100644 --- a/packages/thirdweb/src/wallets/types.ts +++ b/packages/thirdweb/src/wallets/types.ts @@ -26,6 +26,7 @@ export const socialAuthOptions = [ "discord", "line", "x", + "coinbase", "farcaster", "telegram", ] as const; From f228e03eccc94facfd12ab70eb5f2d81b194c3ef Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Thu, 19 Sep 2024 22:05:35 +0000 Subject: [PATCH 45/78] [Playground] Fix: Correct IAW checkbox labels (#4708) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR updates the `InAppWalletFormGroup` component to dynamically generate unique IDs for `htmlFor` and `id` attributes based on the `method`. ### Detailed summary - Dynamically generate unique IDs for `htmlFor` and `id` attributes based on the `method` value in `InAppWalletFormGroup.tsx` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../app/connect/sign-in/components/InAppWalletFormGroup.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx b/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx index b95f415b3aa..8bae1f0db69 100644 --- a/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx +++ b/apps/playground-web/src/app/connect/sign-in/components/InAppWalletFormGroup.tsx @@ -63,10 +63,10 @@ export function InAppWalletFormGroup(props: { !enabled && "opacity-50", )} key={method} - htmlFor="in-app-wallet" + htmlFor={`in-app-wallet-${method}`} > { setConnectOptions((v) => { From 3229e1f03c3cbb62ddc8dccf22ad8a8feb0a95f0 Mon Sep 17 00:00:00 2001 From: MananTank Date: Thu, 19 Sep 2024 23:34:04 +0000 Subject: [PATCH 46/78] Fix Explorer page component re-renders (#4716) FIXES: DASH-207 --- .changeset/purple-hairs-end.md | 5 +++ .../src/contract-ui/hooks/useRouteConfig.tsx | 36 +++++++++++-------- .../src/exports/extensions/erc1155.ts | 1 + 3 files changed, 27 insertions(+), 15 deletions(-) create mode 100644 .changeset/purple-hairs-end.md diff --git a/.changeset/purple-hairs-end.md b/.changeset/purple-hairs-end.md new file mode 100644 index 00000000000..f6ed63879d2 --- /dev/null +++ b/.changeset/purple-hairs-end.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Export `isGetNFTSupported` extension from "thirdweb/erc1155/extensions" diff --git a/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx b/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx index 3d947922b95..0463feb2425 100644 --- a/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx +++ b/apps/dashboard/src/contract-ui/hooks/useRouteConfig.tsx @@ -114,8 +114,17 @@ export function useContractRouteConfig( contract, }); const analyticsSupported = useAnalyticsSupportedForChain(contract.chain.id); - const isERC721Query = useReadContract(ERC721Ext.isERC721, { contract }); - const isERC1155Query = useReadContract(ERC1155Ext.isERC1155, { contract }); + + const isERC721 = useMemo( + () => ERC721Ext.isGetNFTSupported(functionSelectors), + [functionSelectors], + ); + + const isERC1155 = useMemo( + () => ERC1155Ext.isGetNFTSupported(functionSelectors), + [functionSelectors], + ); + const isERC20 = useMemo( () => ERC20Ext.isERC20(functionSelectors), [functionSelectors], @@ -251,11 +260,11 @@ export function useContractRouteConfig( // others only matter if claim conditions are detected if (hasClaimConditions) { // if erc721 its that - if (isERC721Query.data) { + if (isERC721) { return "erc721"; } // if erc1155 its that - if (isERC1155Query.data) { + if (isERC1155) { return "erc1155"; } // otherwise it has to be erc20 @@ -265,8 +274,8 @@ export function useContractRouteConfig( return null; }, [ hasClaimConditions, - isERC721Query.data, - isERC1155Query.data, + isERC721, + isERC1155, isDirectListing, isEnglishAuction, ]); @@ -281,9 +290,9 @@ export function useContractRouteConfig( contract={contract} hasDirectListings={isDirectListing} hasEnglishAuctions={isEnglishAuction} - isErc1155={isERC1155Query.data || false} + isErc1155={isERC1155} isErc20={isERC20} - isErc721={isERC721Query.data || false} + isErc721={isERC721} isPermissionsEnumerable={isPermissionsEnumerable} /> ), @@ -326,7 +335,7 @@ export function useContractRouteConfig( isEnabled: embedType !== null ? "enabled" - : isERC721Query.isLoading || isERC1155Query.isLoading + : functionSelectorQuery.isLoading ? "loading" : "disabled", component: () => ( @@ -352,16 +361,13 @@ export function useContractRouteConfig( title: "NFTs", path: "nfts", isEnabled: - isERC721Query.data || isERC1155Query.data + isERC721 || isERC1155 ? "enabled" - : isERC721Query.isLoading || isERC1155Query.isLoading + : functionSelectorQuery.isLoading ? "loading" : "disabled", component: () => ( - + ), }, { diff --git a/packages/thirdweb/src/exports/extensions/erc1155.ts b/packages/thirdweb/src/exports/extensions/erc1155.ts index e5acd971b11..4420e82e62d 100644 --- a/packages/thirdweb/src/exports/extensions/erc1155.ts +++ b/packages/thirdweb/src/exports/extensions/erc1155.ts @@ -6,6 +6,7 @@ export { } from "../../extensions/erc1155/__generated__/IERC1155/read/balanceOfBatch.js"; export { getNFT, + isGetNFTSupported, type GetNFTParams, } from "../../extensions/erc1155/read/getNFT.js"; export { From b0337849a5f7f6542eb48eed013236ec14ce189a Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Thu, 19 Sep 2024 23:45:23 +0000 Subject: [PATCH 47/78] [React] Feature: Shows the social provider name in details modal (#4709) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ![Screenshot 2024-09-19 at 2 22 09 PM](https://github.com/user-attachments/assets/9c8a14e9-3328-4e6f-8d56-0c420bdeea17) --- ## PR-Codex overview This PR focuses on displaying the social login provider in the details modal for wallet connections. ### Detailed summary - Added `SocialAuthOption` type and `socialAuthOptions` import - Updated logic to display social login provider in details modal based on active wallet and last auth provider > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/nasty-doors-fold.md | 5 +++++ .../src/react/web/ui/ConnectWallet/Details.tsx | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .changeset/nasty-doors-fold.md diff --git a/.changeset/nasty-doors-fold.md b/.changeset/nasty-doors-fold.md new file mode 100644 index 00000000000..8fd5320bb38 --- /dev/null +++ b/.changeset/nasty-doors-fold.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Displays the social login provider in the details modal diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx index c0c48c51f6c..5c462737e1f 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx @@ -20,7 +20,11 @@ import { formatNumber } from "../../../../utils/formatNumber.js"; import { webLocalStorage } from "../../../../utils/storage/webStorage.js"; import type { Account, Wallet } from "../../../../wallets/interfaces/wallet.js"; import type { SmartWalletOptions } from "../../../../wallets/smart/types.js"; -import type { AppMetadata } from "../../../../wallets/types.js"; +import { + type AppMetadata, + type SocialAuthOption, + socialAuthOptions, +} from "../../../../wallets/types.js"; import type { WalletId } from "../../../../wallets/wallet-types.js"; import { CustomThemeProvider, @@ -1071,6 +1075,15 @@ function InAppWalletUserInfo(props: { if (lastAuthProvider === "guest") { return "Guest"; } + if ( + lastAuthProvider && + (activeWallet?.id === "inApp" || activeWallet?.id === "smart") && + socialAuthOptions.includes(lastAuthProvider as SocialAuthOption) + ) { + return ( + lastAuthProvider.slice(0, 1).toUpperCase() + lastAuthProvider.slice(1) + ); + } return walletInfo?.name; }, enabled: !!activeWallet?.id && !!walletInfo, From a7b3d0e72c62414cb8d8ff801670c9065c39f7c6 Mon Sep 17 00:00:00 2001 From: joaquim-verges Date: Fri, 20 Sep 2024 00:04:05 +0000 Subject: [PATCH 48/78] feat: remove prompting for enclave ecosystem wallets (#4711) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR removes the usage of `getEcosystemPartnerPermissions` function and related logic in `IFrameWallet` class. ### Detailed summary - Removed `getEcosystemPartnerPermissions` function usage - Removed logic related to partner permissions and showing the iframe based on permissions > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../wallets/in-app/web/lib/iframe-wallet.ts | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/iframe-wallet.ts b/packages/thirdweb/src/wallets/in-app/web/lib/iframe-wallet.ts index 823c90edc87..c26f3889d68 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/iframe-wallet.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/iframe-wallet.ts @@ -10,7 +10,6 @@ import { type Hex, hexToString } from "../../../../utils/encoding/hex.js"; import { parseTypedData } from "../../../../utils/signatures/helpers/parseTypedData.js"; import { webLocalStorage } from "../../../../utils/storage/webStorage.js"; import type { Prettify } from "../../../../utils/type-utils.js"; -import { getEcosystemPartnerPermissions } from "../../../ecosystem/get-ecosystem-partner-permissions.js"; import type { Account, SendTransactionOption, @@ -199,14 +198,6 @@ export class IFrameWallet implements IWebWallet { .walletManagerQuerier as unknown as InAppWalletIframeCommunicator; const client = this.client; const partnerId = this.ecosystem?.partnerId; - const isEcosystem = !!this.ecosystem; - - const permissions = this.ecosystem?.partnerId - ? await getEcosystemPartnerPermissions( - this.ecosystem.id, - this.ecosystem?.partnerId, - ) - : undefined; const { address } = await querier.call({ procedureName: "getAddress", @@ -244,10 +235,6 @@ export class IFrameWallet implements IWebWallet { partnerId, rpcEndpoint: `https://${tx.chainId}.${RPC_URL}`, // TODO (ew) shouldnt be needed }, - // Can hide the iframe if the partner has full control (no user approvals) - showIframe: permissions?.permissions.includes("FULL_CONTROL_V1") - ? false - : isEcosystem, }); return signedTransaction as Hex; }; @@ -296,10 +283,6 @@ export class IFrameWallet implements IWebWallet { partnerId, chainId: 1, // TODO check if we need this }, - // Can hide the iframe if the partner has full control (no user approvals) - showIframe: permissions?.permissions.includes("FULL_CONTROL_V1") - ? false - : isEcosystem, }); return signedMessage as Hex; }, @@ -339,10 +322,6 @@ export class IFrameWallet implements IWebWallet { partnerId, rpcEndpoint: `https://${chainId}.${RPC_URL}`, // TODO (ew) shouldnt be needed }, - // Can hide the iframe if the partner has full control (no user approvals) - showIframe: permissions?.permissions.includes("FULL_CONTROL_V1") - ? false - : isEcosystem, }); return signedTypedData as Hex; }, From a491d8bd7c9d6c9333ef98b836864d1f6e9982ea Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 20 Sep 2024 00:26:34 +0000 Subject: [PATCH 49/78] Show Deterministic Deploy warning banner if constructor params exist (#4717) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FIXES DASH-257 --- ## PR-Codex overview The focus of this PR is to enhance the Custom Contract Form in the dashboard by adding a warning for deterministic deployment. ### Detailed summary - Added `CircleAlertIcon` and warning message for deterministic deployment - Updated the layout of the deterministic deploy checkbox and warning display > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../contract-deploy-form/custom-contract.tsx | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx index f35614b687a..292f4079b58 100644 --- a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx +++ b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx @@ -1,6 +1,7 @@ "use client"; import { Spinner } from "@/components/ui/Spinner/Spinner"; +import { Alert, AlertTitle } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; import { Checkbox, CheckboxWithLabel } from "@/components/ui/checkbox"; import { ToolTipLabel } from "@/components/ui/tooltip"; @@ -22,7 +23,7 @@ import { SolidityInput } from "contract-ui/components/solidity-inputs"; import { useTrack } from "hooks/analytics/useTrack"; import { useTxNotifications } from "hooks/useTxNotifications"; import { replaceTemplateValues } from "lib/deployment/template-values"; -import { ExternalLinkIcon } from "lucide-react"; +import { CircleAlertIcon, ExternalLinkIcon } from "lucide-react"; import Link from "next/link"; import { useCallback, useMemo } from "react"; import { FormProvider, type UseFormReturn, useForm } from "react-hook-form"; @@ -480,6 +481,9 @@ export const CustomContractForm: React.FC = ({ enabled: walletChain !== undefined && metadata !== undefined, }); + const shouldShowDeterministicDeployWarning = + constructorParams.length > 0 && form.watch("deployDeterministic"); + return ( <> @@ -837,23 +841,37 @@ export const CustomContractForm: React.FC = ({ {metadata?.deployType === "standard" && ( <> {/* Deterministic deploy */} - - - form.setValue("deployDeterministic", !!c) - } - /> - -
- - Deploy at a deterministic address - - -
- - + +
+ + + form.setValue("deployDeterministic", !!c) + } + /> + +
+ + Deploy at a deterministic address + + +
+
+
+ + {shouldShowDeterministicDeployWarning && ( + + + + Deterministic deployment would only result in the same + contract address if you use the same contructor params + on every deployment. + + + )} +
{/* Optional Salt Input */} {isCreate2Deployment && ( From dab7b4ebd8b2eb10845107b71176d2d9c7f1a6e2 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Fri, 20 Sep 2024 00:46:44 +0000 Subject: [PATCH 50/78] style(dashboard): add padding to partners table (#4713) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to rename `EcosystemRow` component to `PartnerRow` and update styling in the partners table. ### Detailed summary - Renamed `EcosystemRow` component to `PartnerRow`. - Updated styling in the partners table for better alignment. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../[slug]/(active)/components/server/partners-table.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx index 089b2c8210e..5d3e5dcc567 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx @@ -53,7 +53,7 @@ export function PartnersTable({ ecosystem }: { ecosystem: Ecosystem }) { {[...partners].reverse().map((partner: Partner) => ( - -
+
Date: Fri, 20 Sep 2024 01:10:25 +0000 Subject: [PATCH 51/78] feat(playground): add ecosystem and sponsored transaction pages for in-app wallet (#4719) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to enhance the in-app wallet feature by adding expanded navigation links, ecosystem connection, and sponsored transaction previews. ### Detailed summary - Added expanded navigation links in the in-app wallet section - Implemented ecosystem connection functionality - Included sponsored transaction previews for in-app wallets > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../connect/in-app-wallet/ecosystem/page.tsx | 72 +++++++++++++++++ .../connect/in-app-wallet/sponsor/page.tsx | 80 +++++++++++++++++++ apps/playground-web/src/app/navLinks.ts | 16 +++- .../components/in-app-wallet/ecosystem.tsx | 24 ++++++ .../components/in-app-wallet/sponsored-tx.tsx | 48 ++++++----- apps/playground-web/src/lib/constants.ts | 10 --- 6 files changed, 221 insertions(+), 29 deletions(-) create mode 100644 apps/playground-web/src/app/connect/in-app-wallet/ecosystem/page.tsx create mode 100644 apps/playground-web/src/app/connect/in-app-wallet/sponsor/page.tsx create mode 100644 apps/playground-web/src/components/in-app-wallet/ecosystem.tsx diff --git a/apps/playground-web/src/app/connect/in-app-wallet/ecosystem/page.tsx b/apps/playground-web/src/app/connect/in-app-wallet/ecosystem/page.tsx new file mode 100644 index 00000000000..833706daf04 --- /dev/null +++ b/apps/playground-web/src/app/connect/in-app-wallet/ecosystem/page.tsx @@ -0,0 +1,72 @@ +import { CodeExample } from "@/components/code/code-example"; +import ThirdwebProvider from "@/components/thirdweb-provider"; +import { metadataBase } from "@/lib/constants"; +import type { Metadata } from "next"; +import { APIHeader } from "../../../../components/blocks/APIHeader"; +import { EcosystemConnectEmbed } from "../../../../components/in-app-wallet/ecosystem"; + +export const metadata: Metadata = { + metadataBase, + title: "Sign In, Account Abstraction and SIWE Auth | thirdweb Connect", + description: + "Let users sign up with their email, phone number, social media accounts or directly with a wallet. Seamlessly integrate account abstraction and SIWE auth.", +}; + +export default function Page() { + return ( + +
+ + Onboard anyone with flexible auth options, secure account + recovery, and smart account integration. + + } + docsLink="https://portal.thirdweb.com/connect/in-app-wallet/overview" + heroLink="/in-app-wallet.png" + /> + +
+ +
+
+
+ ); +} + +function AnyAuth() { + return ( + <> +
+

+ Your own Ecosystem +

+

+ Build a public or permissioned ecosystem by allowing third party apps + and games to connect to the same accounts. +

+
+ + } + code={`import { ecosystemWallet } from "thirdweb/wallets"; + import { ConnectEmbed } from "thirdweb/react"; + + + const wallets = [ + // all settings are controlled in your dashboard + // including permissions, auth options, etc. + ecosystemWallet("ecosystem.your-ecosystem-name") + ]; + + function App(){ + return ( +); +};`} + lang="tsx" + /> + + ); +} diff --git a/apps/playground-web/src/app/connect/in-app-wallet/sponsor/page.tsx b/apps/playground-web/src/app/connect/in-app-wallet/sponsor/page.tsx new file mode 100644 index 00000000000..c7107123cd8 --- /dev/null +++ b/apps/playground-web/src/app/connect/in-app-wallet/sponsor/page.tsx @@ -0,0 +1,80 @@ +import { CodeExample } from "@/components/code/code-example"; +import ThirdwebProvider from "@/components/thirdweb-provider"; +import { metadataBase } from "@/lib/constants"; +import type { Metadata } from "next"; +import { APIHeader } from "../../../../components/blocks/APIHeader"; +import { SponsoredInAppTxPreview } from "../../../../components/in-app-wallet/sponsored-tx"; + +export const metadata: Metadata = { + metadataBase, + title: "Sign In, Account Abstraction and SIWE Auth | thirdweb Connect", + description: + "Let users sign up with their email, phone number, social media accounts or directly with a wallet. Seamlessly integrate account abstraction and SIWE auth.", +}; + +export default function Page() { + return ( + +
+ + Onboard anyone with flexible auth options, secure account + recovery, and smart account integration. + + } + docsLink="https://portal.thirdweb.com/connect/in-app-wallet/overview" + heroLink="/in-app-wallet.png" + /> + +
+ +
+ +
+
+
+ ); +} + +function SponsoredInAppTx() { + return ( + <> +
+

+ Signless Sponsored Transactions +

+

+ With in-app wallets, users don't need to confirm every + transaction. +
+ Combine it with smart account flag to cover gas costs for the best UX. +

+
+ } + code={`import { inAppWallet } from "thirdweb/wallets"; + import { claimTo } from "thirdweb/extensions/erc1155"; + import { ConnectButton, TransactionButton } from "thirdweb/react"; + + const wallets = [ + inAppWallet( + // turn on gas sponsorship for in-app wallets + { smartAccount: { chain, sponsorGas: true }} + ) + ]; + + function App(){ + return (<> + + +{/* signless, sponsored transactions */} + claimTo({ contract, to: "0x123...", tokenId: 0n, quantity: 1n })}>Mint +); +};`} + lang="tsx" + /> + + ); +} diff --git a/apps/playground-web/src/app/navLinks.ts b/apps/playground-web/src/app/navLinks.ts index 8c3f9146e53..4fe0f471f77 100644 --- a/apps/playground-web/src/app/navLinks.ts +++ b/apps/playground-web/src/app/navLinks.ts @@ -39,7 +39,21 @@ export const navLinks: SidebarLink[] = [ }, { name: "In-App Wallet", - href: "/connect/in-app-wallet", + expanded: true, + links: [ + { + name: "Any auth method", + href: "/connect/in-app-wallet", + }, + { + name: "Your own Ecosystem", + href: "/connect/in-app-wallet/ecosystem", + }, + { + name: "Sponsor Gas", + href: "/connect/in-app-wallet/sponsor", + }, + ], }, { name: "Social", diff --git a/apps/playground-web/src/components/in-app-wallet/ecosystem.tsx b/apps/playground-web/src/components/in-app-wallet/ecosystem.tsx new file mode 100644 index 00000000000..36557885234 --- /dev/null +++ b/apps/playground-web/src/components/in-app-wallet/ecosystem.tsx @@ -0,0 +1,24 @@ +"use client"; +import type { ConnectButtonProps } from "thirdweb/react"; +import { ecosystemWallet } from "thirdweb/wallets"; +import { StyledConnectEmbed } from "../styled-connect-embed"; + +const getEcosystem = () => { + if (process.env.NEXT_PUBLIC_IN_APP_WALLET_URL?.endsWith(".thirdweb.com")) { + // prod ecosystem + return "ecosystem.new-age"; + } + // dev ecosystem + return "ecosystem.bonfire-development"; +}; + +export function EcosystemConnectEmbed( + props?: Omit, +) { + return ( + + ); +} diff --git a/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx b/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx index d46ae431190..b7a964ea261 100644 --- a/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx +++ b/apps/playground-web/src/components/in-app-wallet/sponsored-tx.tsx @@ -1,5 +1,6 @@ "use client"; +import { baseSepolia } from "thirdweb/chains"; import { claimTo, getNFT, getOwnedNFTs } from "thirdweb/extensions/erc1155"; import { MediaRenderer, @@ -8,6 +9,7 @@ import { useReadContract, } from "thirdweb/react"; import { THIRDWEB_CLIENT } from "../../lib/client"; +import { StyledConnectButton } from "../styled-connect-button"; import { editionDropContract, editionDropTokenId } from "./constants"; export function SponsoredInAppTxPreview() { @@ -25,6 +27,14 @@ export function SponsoredInAppTxPreview() { return (
+
+ +
{isNftLoading ? (
Loading...
) : ( @@ -42,24 +52,26 @@ export function SponsoredInAppTxPreview() { You own {ownedNfts?.[0]?.quantityOwned.toString() || "0"}{" "} Kittens

- - claimTo({ - contract: editionDropContract, - tokenId: editionDropTokenId, - to: smartAccount.address, - quantity: 1n, - }) - } - onError={(error) => { - alert(`Error: ${error.message}`); - }} - onTransactionConfirmed={async () => { - alert("Minted successful!"); - }} - > - Mint - +
+ + claimTo({ + contract: editionDropContract, + tokenId: editionDropTokenId, + to: smartAccount.address, + quantity: 1n, + }) + } + onError={(error) => { + alert(`Error: ${error.message}`); + }} + onTransactionConfirmed={async () => { + alert("Minted successful!"); + }} + > + Mint + +
) : (

{ return undefined; }; -// const getEcosystem = () => { -// if (process.env.NEXT_PUBLIC_IN_APP_WALLET_URL?.endsWith(".thirdweb.com")) { -// // prod ecosystem -// return "ecosystem.new-age"; -// } -// // dev ecosystem -// return "ecosystem.bonfire-development"; -// }; - export const WALLETS = [ createWallet("inApp", { auth: { @@ -40,7 +31,6 @@ export const WALLETS = [ passkeyDomain: getDomain(), }, }), - // ecosystemWallet(getEcosystem()), TODO put this in its own section createWallet("io.metamask"), createWallet("com.coinbase.wallet"), createWallet("io.rabby"), From 11a833e1dce3cfa51745e2ddee9354a1c2003905 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Fri, 20 Sep 2024 01:29:02 +0000 Subject: [PATCH 52/78] [React] Fix: Improve social button icon arrangement (#4718) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ![Screenshot 2024-09-19 at 5 13 13 PM](https://github.com/user-attachments/assets/ae06781e-6b44-4231-9385-0a4ac27be563) ![Screenshot 2024-09-19 at 5 13 07 PM](https://github.com/user-attachments/assets/23b3f073-b6ab-4aae-8be8-a5820763cd65) --- ## PR-Codex overview This PR improves the layout of social icons in the Connect UI by organizing them into columns for better user experience. ### Detailed summary - Added logic to arrange social icons into columns based on the number of login options - Updated the layout of social buttons to display them in columns instead of a row > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/rude-frogs-learn.md | 5 + .../shared/ConnectWalletSocialOptions.tsx | 129 +++++++++++------- 2 files changed, 86 insertions(+), 48 deletions(-) create mode 100644 .changeset/rude-frogs-learn.md diff --git a/.changeset/rude-frogs-learn.md b/.changeset/rude-frogs-learn.md new file mode 100644 index 00000000000..d29d134bab2 --- /dev/null +++ b/.changeset/rude-frogs-learn.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Improve arrangement of social icons in Connect UI diff --git a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx index 796e9eda1e8..576e0877d48 100644 --- a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +++ b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx @@ -135,6 +135,27 @@ export const ConnectWalletSocialOptions = ( const isEmailEnabled = emailIndex !== -1; const phoneIndex = authOptions.indexOf("phone"); const isPhoneEnabled = phoneIndex !== -1; + const socialLogins: SocialAuthOption[] = authOptions.filter((o) => + socialAuthOptions.includes(o as SocialAuthOption), + ) as SocialAuthOption[]; + + const columnCount = useMemo(() => { + switch (socialLogins.length) { + case 7: + return 4; + case 6: + return 4; + default: + return 5; + } + }, [socialLogins.length]); + + const socialLoginColumns: SocialAuthOption[][] = useMemo(() => { + return Array.from( + { length: Math.ceil(socialLogins.length / columnCount) }, + (_, i) => socialLogins.slice(i * columnCount, (i + 1) * columnCount), + ); + }, [socialLogins, columnCount]); const [manualInputMode, setManualInputMode] = useState< "email" | "phone" | "none" | null @@ -175,10 +196,6 @@ export const ConnectWalletSocialOptions = ( type = "tel"; } - const socialLogins = authOptions.filter((o) => - socialAuthOptions.includes(o as SocialAuthOption), - ); - const hasSocialLogins = socialLogins.length > 0; const ecosystemInfo = isEcosystemWallet(wallet) ? { @@ -315,49 +332,46 @@ export const ConnectWalletSocialOptions = ( )} {/* Social Login */} {hasSocialLogins && ( - 4 ? "xs" : "sm"} - style={{ - justifyContent: "space-between", - display: "grid", - gridTemplateColumns: `repeat(${socialLogins.length}, 1fr)`, - }} - > - {socialLogins.map((loginMethod) => { - const imgIconSize = (() => { - if (!showOnlyIcons) { - return iconSize.md; - } - if (socialLogins.length > 4) { - return iconSize.md; - } - return iconSize.lg; - })(); - - return ( - { - handleSocialLogin(loginMethod as SocialAuthOption); - }} - > - - {!showOnlyIcons && - `${socialLogins.length === 1 ? "Continue with " : ""}${loginMethodsLabel[loginMethod as SocialAuthOption]}`} - - ); - })} + 4 ? "xs" : "sm"}> + {socialLoginColumns.map((column) => ( + + {column.map((loginMethod) => { + const imgIconSize = (() => { + if (!showOnlyIcons) { + return iconSize.md; + } + if (socialLogins.length > 4) { + return iconSize.md; + } + return iconSize.lg; + })(); + return ( + { + handleSocialLogin(loginMethod as SocialAuthOption); + }} + style={{ + flexGrow: socialLogins.length < 7 ? 1 : 0, + }} + > + + {!showOnlyIcons && + `${socialLogins.length === 1 ? "Continue with " : ""}${loginMethodsLabel[loginMethod as SocialAuthOption]}`} + + ); + })} + + ))} )} @@ -476,8 +490,27 @@ export const ConnectWalletSocialOptions = ( ); }; +const SocialButtonRow = (props: { children: React.ReactNode[] }) => ( + 4 ? "xs" : "sm"} + style={{ + justifyContent: "center", + display: "flex", + ...{ + "& > *": { + flexBasis: `${100 / props.children.length}%`, + maxWidth: `${100 / props.children.length}%`, + }, + }, + }} + > + {props.children} + +); + const SocialButton = /* @__PURE__ */ styled(Button)({ - flexGrow: 1, "&[data-variant='full']": { display: "flex", justifyContent: "flex-start", From c1008a5314616c2e0ffa33af0fcfa9dd58855e9a Mon Sep 17 00:00:00 2001 From: greg Date: Thu, 19 Sep 2024 20:11:36 -0700 Subject: [PATCH 53/78] [SDK] Feature: Enclave migration (#4684) --- .changeset/proud-files-drop.md | 5 +++++ .../wallets/in-app/web/lib/auth/iframe-auth.ts | 3 +++ .../wallets/in-app/web/lib/web-connector.ts | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 .changeset/proud-files-drop.md diff --git a/.changeset/proud-files-drop.md b/.changeset/proud-files-drop.md new file mode 100644 index 00000000000..4abbcdbf403 --- /dev/null +++ b/.changeset/proud-files-drop.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Migrates existing sharded ecosystem wallets to enclaves diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts b/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts index e1ccfc59e80..774011a15af 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts @@ -28,6 +28,9 @@ export type AuthQuerierTypes = { storedToken: AuthStoredTokenWithCookieReturnType["storedToken"]; recoveryCode?: string; }; + migrateFromShardToEnclave: { + storedToken: AuthStoredTokenWithCookieReturnType["storedToken"]; + }; }; /** diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts index 6b0b08ac432..20157c586ba 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts @@ -85,6 +85,23 @@ export class InAppWebConnector implements InAppConnector { ecosystem, onAuthSuccess: async (authResult) => { onAuthSuccess?.(authResult); + + if ( + this.ecosystem && + authResult.storedToken.authDetails.walletType === "sharded" + ) { + // If this is an existing sharded ecosystem wallet, we'll need to migrate + const result = await this.querier.call({ + procedureName: "migrateFromShardToEnclave", + params: { + storedToken: authResult.storedToken, + }, + }); + if (!result) { + throw new Error("Failed to migrate from sharded to enclave wallet"); + } + } + await this.initializeWallet(authResult.storedToken.cookieString); if (!this.wallet) { @@ -148,6 +165,7 @@ export class InAppWebConnector implements InAppConnector { "Cannot initialize wallet, this user does not have a wallet generated yet", ); } + if (user.wallets[0].type === "enclave") { this.wallet = new EnclaveWallet({ client: this.client, From 7d547a4e336ae7c1e43c8413a1640452d1e1f8f9 Mon Sep 17 00:00:00 2001 From: joaquim-verges Date: Fri, 20 Sep 2024 03:35:18 +0000 Subject: [PATCH 54/78] fix: show user info for ecosystem wallets (#4715) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR focuses on fixing the display of user information for ecosystem wallets in the Thirdweb application. ### Detailed summary - Updated function name from `getEnclaveUserStatus` to `getUserStatus` in multiple files. - Modified parameters in functions to include `ecosystem` for ecosystem wallets. - Updated caching mechanism for InAppWalletConnector. - Added logic to handle ecosystem wallets in `InAppWalletUserInfo` component. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/quick-hotels-repair.md | 5 +++ .../react/web/ui/ConnectWallet/Details.tsx | 33 +++++++++++++++++-- .../in-app/core/authentication/types.ts | 1 + .../wallets/in-app/core/wallet/in-app-core.ts | 7 ++-- .../lib/actions/get-enclave-user-status.ts | 2 +- .../in-app/web/lib/auth/iframe-auth.ts | 4 +-- .../src/wallets/in-app/web/lib/auth/index.ts | 4 +-- .../wallets/in-app/web/lib/enclave-wallet.ts | 9 ++--- .../wallets/in-app/web/lib/web-connector.ts | 4 +-- 9 files changed, 50 insertions(+), 19 deletions(-) create mode 100644 .changeset/quick-hotels-repair.md diff --git a/.changeset/quick-hotels-repair.md b/.changeset/quick-hotels-repair.md new file mode 100644 index 00000000000..db08f3b6afb --- /dev/null +++ b/.changeset/quick-hotels-repair.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Fix showing user info for ecosystem wallets diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx index 5c462737e1f..3e371f428ab 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx @@ -18,6 +18,8 @@ import { getLastAuthProvider } from "../../../../react/core/utils/storage.js"; import { isContractDeployed } from "../../../../utils/bytecode/is-contract-deployed.js"; import { formatNumber } from "../../../../utils/formatNumber.js"; import { webLocalStorage } from "../../../../utils/storage/webStorage.js"; +import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wallet.js"; +import type { Ecosystem } from "../../../../wallets/in-app/web/types.js"; import type { Account, Wallet } from "../../../../wallets/interfaces/wallet.js"; import type { SmartWalletOptions } from "../../../../wallets/smart/types.js"; import { @@ -25,7 +27,10 @@ import { type SocialAuthOption, socialAuthOptions, } from "../../../../wallets/types.js"; -import type { WalletId } from "../../../../wallets/wallet-types.js"; +import type { + EcosystemWalletId, + WalletId, +} from "../../../../wallets/wallet-types.js"; import { CustomThemeProvider, parseTheme, @@ -53,6 +58,7 @@ import { import { useActiveAccount } from "../../../core/hooks/wallets/useActiveAccount.js"; import { useActiveWallet } from "../../../core/hooks/wallets/useActiveWallet.js"; import { useActiveWalletChain } from "../../../core/hooks/wallets/useActiveWalletChain.js"; +import { useAdminWallet } from "../../../core/hooks/wallets/useAdminAccount.js"; import { useDisconnect } from "../../../core/hooks/wallets/useDisconnect.js"; import { useSwitchActiveWalletChain } from "../../../core/hooks/wallets/useSwitchActiveWalletChain.js"; import { SetRootElementContext } from "../../../core/providers/RootElementContext.js"; @@ -1066,6 +1072,7 @@ function InAppWalletUserInfo(props: { const { client, locale } = props; const account = useActiveAccount(); const activeWallet = useActiveWallet(); + const adminWallet = useAdminWallet(); const { data: walletInfo } = useWalletInfo(activeWallet?.id); const isSmartWallet = hasSmartAccount(activeWallet); const { data: walletName } = useQuery({ @@ -1092,6 +1099,24 @@ function InAppWalletUserInfo(props: { const userInfoQuery = useQuery({ queryKey: ["in-app-wallet-user", client, account?.address], queryFn: async () => { + const isInAppWallet = + adminWallet && + (adminWallet.id === "inApp" || adminWallet.id.startsWith("ecosystem.")); + + if (!isInAppWallet) { + return null; + } + + let ecosystem: Ecosystem | undefined; + if (isEcosystemWallet(adminWallet)) { + const ecosystemWallet = adminWallet as Wallet; + const partnerId = ecosystemWallet.getConfig()?.partnerId; + ecosystem = { + id: ecosystemWallet.id, + partnerId, + }; + } + const { getUserEmail, getUserPhoneNumber } = await import( "../../../../wallets/in-app/web/lib/auth/index.js" ); @@ -1099,18 +1124,20 @@ function InAppWalletUserInfo(props: { const [email, phone] = await Promise.all([ getUserEmail({ client: client, + ecosystem, }), getUserPhoneNumber({ client: client, + ecosystem, }), ]); return email || phone || null; }, - enabled: !isSmartWallet, + enabled: !!adminWallet, }); - if (isSmartWallet) { + if (!userInfoQuery.data && isSmartWallet) { return ; } diff --git a/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts b/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts index 061e717126d..a88979950ef 100644 --- a/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts +++ b/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts @@ -243,4 +243,5 @@ export type GetUser = export type GetAuthenticatedUserParams = { client: ThirdwebClient; + ecosystem?: Ecosystem; }; diff --git a/packages/thirdweb/src/wallets/in-app/core/wallet/in-app-core.ts b/packages/thirdweb/src/wallets/in-app/core/wallet/in-app-core.ts index e230f426b59..7bdac7a970d 100644 --- a/packages/thirdweb/src/wallets/in-app/core/wallet/in-app-core.ts +++ b/packages/thirdweb/src/wallets/in-app/core/wallet/in-app-core.ts @@ -17,10 +17,7 @@ import type { } from "../authentication/types.js"; import type { InAppConnector } from "../interfaces/connector.js"; -const connectorCache = new WeakMap< - { client: ThirdwebClient; ecosystem?: Ecosystem }, - InAppConnector ->(); +const connectorCache = new Map(); /** * @internal @@ -30,7 +27,7 @@ export async function getOrCreateInAppWalletConnector( connectorFactory: (client: ThirdwebClient) => Promise, ecosystem?: Ecosystem, ) { - const key = { client, ecosystem }; + const key = JSON.stringify({ clientId: client.clientId, ecosystem }); if (connectorCache.has(key)) { return connectorCache.get(key) as InAppConnector; } diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/actions/get-enclave-user-status.ts b/packages/thirdweb/src/wallets/in-app/web/lib/actions/get-enclave-user-status.ts index 1340c8f72c8..2f3f62f8845 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/actions/get-enclave-user-status.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/actions/get-enclave-user-status.ts @@ -9,7 +9,7 @@ import type { Ecosystem } from "../../types.js"; * * @internal */ -export async function getEnclaveUserStatus({ +export async function getUserStatus({ authToken, client, ecosystem, diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts b/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts index 774011a15af..bff451fef0e 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/auth/iframe-auth.ts @@ -11,7 +11,7 @@ import type { import type { ClientIdWithQuerierType, Ecosystem } from "../../types.js"; import type { InAppWalletIframeCommunicator } from "../../utils/iFrameCommunication/InAppWalletIframeCommunicator.js"; import { generateWallet } from "../actions/generate-wallet.enclave.js"; -import { getEnclaveUserStatus } from "../actions/get-enclave-user-status.js"; +import { getUserStatus } from "../actions/get-enclave-user-status.js"; import { BaseLogin } from "./base-login.js"; export type AuthQuerierTypes = { @@ -111,7 +111,7 @@ export class Auth { ): Promise { await this.preLogin(); - const user = await getEnclaveUserStatus({ + const user = await getUserStatus({ authToken: authToken.storedToken.cookieString, client: this.client, ecosystem: this.ecosystem, diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/auth/index.ts b/packages/thirdweb/src/wallets/in-app/web/lib/auth/index.ts index fd70876e8b7..e95f1a0277b 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/auth/index.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/auth/index.ts @@ -51,8 +51,8 @@ async function getInAppWalletConnector( export async function getAuthenticatedUser( options: GetAuthenticatedUserParams, ) { - const { client } = options; - const connector = await getInAppWalletConnector(client); + const { client, ecosystem } = options; + const connector = await getInAppWalletConnector(client, ecosystem); const user = await connector.getUser(); switch (user.status) { case UserWalletStatus.LOGGED_IN_WALLET_INITIALIZED: { diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/enclave-wallet.ts b/packages/thirdweb/src/wallets/in-app/web/lib/enclave-wallet.ts index b3528acd16b..94e1a128d76 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/enclave-wallet.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/enclave-wallet.ts @@ -20,7 +20,7 @@ import { type WalletAddressObjectType, } from "../../core/authentication/types.js"; import type { Ecosystem } from "../types.js"; -import { getEnclaveUserStatus } from "./actions/get-enclave-user-status.js"; +import { getUserStatus } from "./actions/get-enclave-user-status.js"; import { signMessage as signEnclaveMessage } from "./actions/sign-message.enclave.js"; import { signTransaction as signEnclaveTransaction } from "./actions/sign-transaction.enclave.js"; import { signTypedData as signEnclaveTypedData } from "./actions/sign-typed-data.enclave.js"; @@ -96,11 +96,12 @@ export class EnclaveWallet implements IWebWallet { return { status: UserWalletStatus.LOGGED_OUT }; } - const userStatus = await getEnclaveUserStatus({ + const userStatus = await getUserStatus({ authToken: token, client: this.client, ecosystem: this.ecosystem, }); + if (!userStatus) { return { status: UserWalletStatus.LOGGED_OUT }; } @@ -108,10 +109,10 @@ export class EnclaveWallet implements IWebWallet { const authDetails = { email: userStatus.linkedAccounts.find( - (account) => account.type === "email", + (account) => account.details.email !== undefined, )?.details.email, phoneNumber: userStatus.linkedAccounts.find( - (account) => account.type === "phone", + (account) => account.details.phone !== undefined, )?.details.phone, userWalletId: userStatus.id || "", recoveryShareManagement: RecoveryShareManagement.ENCLAVE, diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts index 20157c586ba..30b13f4b9e3 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts @@ -20,7 +20,7 @@ import { UserWalletStatus, } from "../../core/authentication/types.js"; import type { InAppConnector } from "../../core/interfaces/connector.js"; -import { getEnclaveUserStatus } from "../lib/actions/get-enclave-user-status.js"; +import { getUserStatus } from "../lib/actions/get-enclave-user-status.js"; import type { Ecosystem, InAppWalletConstructorType } from "../types.js"; import { InAppWalletIframeCommunicator } from "../utils/iFrameCommunication/InAppWalletIframeCommunicator.js"; import { Auth, type AuthQuerierTypes } from "./auth/iframe-auth.js"; @@ -152,7 +152,7 @@ export class InAppWebConnector implements InAppConnector { ); } - const user = await getEnclaveUserStatus({ + const user = await getUserStatus({ authToken: authToken || (storedAuthToken as string), client: this.client, ecosystem: this.ecosystem, From 63ada206a474bc1374c8f99d0b883c6db8ddc3fd Mon Sep 17 00:00:00 2001 From: arcoraven Date: Fri, 20 Sep 2024 06:56:18 +0000 Subject: [PATCH 55/78] Add Engine troubleshooting page (#4723) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview The focus of this PR is to add a troubleshooting page with detailed explanations and solutions for common transaction issues in the Engine application. ### Detailed summary - Added troubleshooting page for transaction issues - Imported `OutOfGasImage` for visual aid - Provided detailed explanations and resolutions for common transaction errors > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../app/engine/assets/engine-out-of-gas.png | Bin 0 -> 18615 bytes apps/portal/src/app/engine/sidebar.tsx | 4 + .../src/app/engine/troubleshooting/page.mdx | 91 ++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 apps/portal/src/app/engine/assets/engine-out-of-gas.png create mode 100644 apps/portal/src/app/engine/troubleshooting/page.mdx diff --git a/apps/portal/src/app/engine/assets/engine-out-of-gas.png b/apps/portal/src/app/engine/assets/engine-out-of-gas.png new file mode 100644 index 0000000000000000000000000000000000000000..2d08d4c30b01200a2784c73ae1afad663c140e90 GIT binary patch literal 18615 zcmeFZ1D7O08#UOrr)}G|ZQGo-ZQHiZX;0hT)10=gX;$0VdOz$ryWjf@_H3TWim0rp ziiix<6ZhUHqm>n<5aDp)KtMncWu(PbK|ml7fN6agDB$ZkDOCzE0(DiD5(R0P#XkeS zv9r*Yu~bk1p#`R4Kp;SIK_LH=1$YXA;{D%gNlYL{0-*@}f2Tq8|C3cVA3g&Z!8%FnxPpLSQvBxxl~E2eD33BtS1Y3~yl#9|fMp=j_)`kgjlMW>gA>Kwyq21n&2{-;K z+})bl>hT6ZZV`MH%$+(|0T0jqZovCB|NY4K7lsNt8Zqd92~IFuCuut5|Lr4UP=z2k za6uSyVX*%*2trgb--rys{gr@eb%eKP?PY$qf8ZVfsPgqf8-_r)~1u|NY5CSiqtb{a=O;8fUOqE%VDoWB<~u zqh~E*Zbyw7l@eW@?-YUOR`EiaY;g<*P0`)SbVHLO$$y(#Q9Qxle=a}!SpbwzJ}-xJ zLd#lHn$_`o?X^aYhKRopfpt>Cpi48-pw*Mz_CC!g0gOldzej6Q60F^ePpNDUd-P-; zjhbj*9EAUMp<;f;`D%UXb=O4$gg?O!6;UHPR3_th(U@XRgJL0{J*`j z=`NC=&tXIX%BPI_s#1xCt@bL?uU;<8H9Fww?0?7zAN7HCe{n>80p6XZ<=wzlEdO`= zj#^(p?`c0|ke1y4UKO0Cehh2@{_c}4HJOkt!Po26bnv$KA2;#{8t(OdzAv|E*jDSC zJ_?$?NS!<5r0&q7IoiGSZ}w^_Wb-H)^m-_?^a2We)r-Nrm((QStEEyY5GUS0!eebd zD;$?9>iL%1Y*&}7TTYjfiVLeM5N)dQ*P9`>n0WD+K?ZM|!k_@xdh)*L8kDEAM#{(( zvglUezb*nliW$FeN_|LQ%~S*)f3`)IoJSHhR*ggxWn2U>>-sxY=1T2Nuiu~N7n41L z5(QqWEVq5uasl@E(f-Hq5AvWA@c0PpdcW>gpG2oIWw=J)Qa4**g3_*>%Trkm=&x8P zlObTpTp=<)I3F5~J^!O#z2yJAJ>E?K4-xQw#pSL^i3sTY^msfK!Rh`96Nq=Ffldqn>_%;YBCmhqUSBGqN{8 zkm~vL*|xv7)p}t|wdJ3&tA1ZCnp|AZ5o<$~Ok9s+|7LxT;Hv6OKAYP3CcK*vnyPhEIR8H-5n^7kVQos_W<;-ZTK0DH#ck1>tUne z-GJ_z6Gr{I1bl&F#y@*Y>D}a(q7L(<%Untv|OAdFa!`hDfwaUO6n84Rj3CVmUcrc;;LXjWsleg^s< zRxer|#t-dfX^Z+ZyXeO`{7LFFaI7Xe#U9+71wij?Nhzg5*6y`DzqGk)#;+l?JHy2m<+KGZM~Jk2#Hst%n@qbco{OPh+tWKyv=@>K(9 zwMvt4csxkEC(3tqp{eyzDHW&_Are)e%;o|-YONM>IqXYpR;o@^i16sL%4&665<*Oo z4ggGX6L7PA#}@>$SdG8kHUjnI{o_7jtG0Qw(35;rYiFyh? z_$kHA8u%^CL)&b%3%cpoq1K+x)#>!I=KMZ=$>*j0t=ttEMlmtw*nS~Ija5QNHm0a) zG$~Awr$5+R$QGEK!}1K@!7FR=(+2Uozvu0Fb-vI=e(~$sNzFI#N*n7N=HuRR#A;@1 zxQg*mqbd6(GRsOFj2uM{0*R2n3|b0XS?cLIQC_e!B>P*?AG&JR!1sk3{;$K-iKBWi zl*00oHQUxUDZ{vAf8k7i<@u6r8FYC=GYIr9nP$Vb&x49V*Q4@kqtUak;I997Z;fhi zhHmT6=(#<>(jPUOJOo{4ZGk|+q52g^DXt>4NwAMk8s~w7&^&Hu)ki$$2|=OLQ8cn7 zyUjiW4x5E7F`c0HPAS_}du0yWRV{eT0Gywmg+4vcQcqiNn_szFTkQNyO6jzD%h8kV^5*#)U+=Zu*{`ETDh8i`hVl!DBo81>ltAS~k z&W`R^4V#r1a@i_mk?+*-rjuCU=Wp@3uhj5P%G3~iZs#RX2!2u~q^z9B+s{JEFZ$WO zknlmmE_V;so3pLRts~tXsD6#DKexw#Rkc@!YWMq+Xmj86SY$u4NG1(mwzW4}xw`$B z&H2=scpp2Ba6V57!aBKCGgoH9<(4k?^H#sIN&mbHVY+*~K;`0@4@IVSj7MC#P!H5J z==D)RJ_<}>LZn9Ah$$CQR|xdDd{d0al88XPEL5q(SSVAhZW{+SQhBosu>q9T^&0H4 zDvQQqa6Pi4s#yR?LN)^n# z4`L14G!=}=w79!s&&xN%Dr7GkG`ORwawL4-nkPc;vWxzm9t8}BB&C8_^>zYy z@;wD&>lAX{)G47m(Nl)VMEn*|!&I5ebSkiy9*IZ3>342@DxgsitPF#X5#EFPasc%M zkS(tbB45BdbG=YyBA`)a3>rST2Apn>#ISh2PuG=qQ;wb))7kc$#^G5{@D$ROvnJql z_|R;D7_@0>&#`oaTzVbRU}hD9A9d@l8tryE8jEA`{EE=vu^IJ7t>8ikv$*V4wcGSh z1l(0)@r6~;^w`3WS3=7E{Fh>hpWkwH%KC0sJ8Wfgf__I)Haj)(_VDm&HR*KL$IxjI zyLO0pO}$^1ROtuNRO*7ixTEB8x#}7j4g2tQ*eIY;Ya^IDB-j}>%c8ce0DYgp6^UN? ze7TyUe=gCsBP6+Wtm^)h@!u0R^C>30%IX5hHS}EnOS8Wrv)QLhE|&WFk`gV#-RXq9 zK$=yO!?y3mTvT`e4$4qJvV|rAxY>kW{zfg(9@;f)%(@$0t98%KylfjvsffM_*W(1E zpMCcW7TkG(O{MVAM_WD#KNUzI+Q!fp&zdu*_SZ+jvL?%BvqHh#kR#xA(*`z9DjYC4D7K^3Vk!UYN+sxheBNwaJ+p(injG}txOc6h z?M)tCM%k<9a~4ITS`{*TEnuRwFsvP|5-!xBWPVhh1tQ?zqpjBCex%M9q!EMGxMJR2 zmV_kSXr2yRZ5KzO2D0Ey(0Bl1S)rP#q?;yTk=PyU*Jpu0tyY2^p?yfbupFnYVHhV{ z@=I<1ttwria12MSraDn#!Ou|k1Y9ABUNXz!@9>9&<-&U6&>PhaCKk#7!NF^>Ci^C8 zoTbXx7Zn4w=WSodri%HUr|p7IkKO4K7#|IErKINaf(1>MO$if-bt)r9b?l$$A6P*k z=y?peE6?5TLrd8szp3bF2SpP9R7?Fryp2KO4e&|KmFQ=cZXh53g zD~NSmc@Q^3#=;tSU6<5ye6`ae1$ffFlhR0)M0`9lOTb^(5c9^|CFB;j-|Q39Q_O<3 zp*G(6cFNkRR2~eeG2GrbX(E&}m;OmU2iWrz`aAdhkL6Ik63N7Yj1ck1U)j7aa=SI` z3Ip)Qu}7P#?(2som{0O+xWl1Cv_0ryjGw-qQIwuXoirX9yLRL8qJfetJmW0xgBiB{ zJ9btdd$l{IVthmvpihA}!SBmc2YiW~C|T72_(Ja$jEw2k_K^4oY+}Jv=QNa-S0PI@JGbf0FbUR=>yVkD+J`$ckcnuofsdvsr$SNXi9O zT!q)!HMQWEBy(oQ3KL3vBEFM$R&Khtz`zmEgZ`FF2eL*(8Q1JvO_>=7L6^^$Cw8l!;MQKS^-%ZB{jJ8mX+KVeGRZs`wDvhMz8{zmtU zVS4>vz1^1pf&0Yg)l5S>dk?MmkrI*`*5~^uFR;d*hmyH>FT0!VJ~DbuoY{J*4o1N_ zfi$+JmEeH|63&A6eKN`OxuR?Kk-*9!45+4~&P7{#oI3bUJ)j*+e>T`CT`cO+Q5cBy zo)9A8-ErOPCXhy@%ny}nqfxsyqf9-Du-=$JsKuh~2?78U<0JB88Kbmbg#5cyXgafy*3StHQ`jUq9)+FsL-8DB|NfofA ze4Jh!_3umCG7BC~Nw;ks9kIBr9}JDXkV(ID)=&X!BtAc%Nn5_)ig7t=5+n~1q|Bs# zkfc=lmalA)d)WJ|QQ6M1*-UU;ZU8*j9Nv+A0Qbi-;```m(S=gx^{E+E6GyGx}eSX@A>$vw8tY|PW@_viyzTb^1u z`;&`8JHmV>PsGa1nZW{+QHODEk;lJx6#i6;XB2Xd-PD9;nOi}np+xLJ-??>b3#dc+X8#Xq7Rez*T zKUb_+6MA*TVsQ0$N2BHYhc zLdH2~MX^n+PgFWB=D(Ju5{X(Y(65u(XT67Zpn0~q5T5lojCdmy)Ee*<|g2O!|J+yZ=-RP1lQx`XuqwXq_ zA8fYEUT{c-&`4klA8gMzIoT=-m%jfZcddA!jqD^KmwgDTF>0xi!Usbz6?`}SwKK!# z8+-;2ic-uxAZ&gy>!=~YQk*ECR5MrRA+CpTM3#D2Uf2$9$p+%_JWq7VWAtw@OYeKU zF;M0sVt0h$Fif}4ruY11BQ_u%H>#3Z1!|wtFysuJhWxhUHkY7Ax4gL~FK>J%SG@c^^vk#(&_F9-QtCueXtR##d?=GTiH_ENbN8ElcHb?Jr<4GNd z+l*xW(S@~Ql7|C=N=t!FC%2wN@_GgTw=YJgq6 zsA2E9ex_4fO`oC_hT_pEqljjM4gR+HL2+i5NZArO@){>qq@{u+%vz>UpAJb)29x%i z@P(X^pT0qNzmUi-GB2$T?PassKl7ZiP)^GvVs0~}QS+ZiXXAQ{x$2qtyc`hv>THA2 z?*w+JG@(Q|s44<3>`7vL)s3Wy)7OVYI$LL-a3y1$On)YR;1dGcH+53yY21>tB=eyi zL}-?<4hnD!VxMyci_m>XL_@FBCC^}h`NRiWuAFW~2d#na2k61;3bk_7k3u$vsAe`3 z8;jnIPF|VoV3p_krj$#$clH}D`LJ2Z4H6TTU{qmvVlNncsmuLh#%AF7_=X9fJp}1T!&r5VIIWAs$DIa zgZ4kXkU3}!s0exV46LCU;U+mw@7D*aD22Zj5@v-8Fp?cx*%ET^W#2ev9Y)&hVWeIx zoFPF0S!W6IHw%Wd-p-zzX2k5~|EM@;LEA~RjWVXsEZRS7c!^u`QK)H9lKb@{+X*wE zvN$|LnM&+s=XF0RLctME;{1Mj{g!1s-E%ZH+ZY*LpoSkn%K*VT?h}&%8*Dxe@@%7n zUfJJBCLKNGb-cI!#mWrMf{+4tJjE~=9%75cQi^Dc0g=&7&GxH5;@y-IZ58#N;^uGY z7sn`fUkCbZp;V>1_@}kEw|1*txwueYnSqJ?=9qg8bbcGxmBRxXCJ}J&4tjU28AT9Ef~A1?&r!rQ*Eu8;US`PA2wsH1Dze z#_9~jI)=xVE2Y2Tj%oq3h{X9@f~yG`ePo!=?LA2t_;hMSyCnxWyoCesbP3&Fi>-F`?^4dgH9E{gQ4)-K>W-u@fz0gtdA)5t*=)1s}%zWf# z2m8S(cg6Q~^OKxTy3nf3sW_wp`_ARyNXdSawOnr9g*qHSuo`Ctb_pE#*I(GK5NO(n zI3oJt|KJV^FOfU0gJPu%wtkDMV()eTnGi@>cu;dD3K2bS-LjHzHJ{7Tz+lvuK43WF zoVje)&t|pREAo8wscyy~U$Yj2Y{%maQeT*CCDS4lG1&+t6T-7Y2!gx3)|j&2yx)1pbYmKCupPwizvVI{y08 z7RKRVY~pMnyI)t&8}@@&ix9Np1Y4*ju8IzU#c6t+)s1gG_r;p(!pXl3=-cj&|5W$G zCw(o#)Ugo4c|NnaU!%>9$(h=R0C4lTw5M}A26Sf!-o`bs_X65cAV(NqNoGh}LX&9# zTV}uH!N`-GVDdam;twg-G0YM+D*>D5+k@c#E{)wScgWDrscz8N#o{fA*8SH(y8`XL z_SD@maqy8K2i@r4a9L7jmQOjMIC=gyip>6`l2EmbqR`_o zbVl-J1^B=GjOYQ_A5@#2xSf5OMsdntQY+By!yLoXK=58+-V8^r?`%;@TkCSWL#dzY z#dq#D;QDswRF~Q(PdzA|Oe*mlBzO&hV)o+75b^Iq$Hu20nQiEwEn{6$MB1b96^3QJ z#~4aH`J&SwJf7E8o)FTW@itrl6xmRQ~&1$|?hTV6+Y#i5YP!|w~*TIrmx15t;b%#=i6xnT&kFi37x5W_53nelFwe-RS2}T`~7?08~ zR;UiN+?H+-E8q@w=pPfsfVi`Twd+3JUmF>*e@n_dhTu=@oc^56qw3>&;F$SNO3>L9By{W5&HsW;#hC7zSW zFgS7u1QzT)+iW2VqnZ)(!De9x0dc#2sbh!_1B=!NYIQ)4fL6OTY%+}_lh&ZUL<5sJ zV5oT%UVxSTV7aShcoWR@O*6nJYcHbWej8_#vL6x)^_3C*0mqnTh zmr|CJ>X)d<1XWYX$so#HUw)@EX-TGgSG2A(lu`6KqI?fd%oE43EK>F{9!?JpOw;eu zgr+G&f^HKdPZ>9-Q^PHA(V3+7@`W83c;5 zn>o;fA|%{m$*b~{5Is4`r4x~B=g~D41RaB#he80R3Rhhze~4gp_uMv5bB{4e1pkIw zWf)m9$$tBTJ~>h_kxAEWgxF}y6GH66rN^8^DBxVfp~p2Ym4v?PxwSODjJ7UOG{Q{z zT)X0b^`ntYYu4_ZA^IKk_tYPySf&<|&u(aeM`-d!rZm`>>4Vs91&cFUA{RMhB5I!= z$UcKhg8Eikb|5thd<6J!q=ET~0cef-MEQXU9e zhxoW4p}}O?w5?+;$|9m=WT9jPd-D&_<<%_jPDZ2Sp<|%$I4?{1@ z+w1+%)oO6Q4+#a-ihm-L-)wteKsoRs2z$l`BF)0a1n)K&F6Jis>R@!fAEgKHD8h0> zixdr9AKV+22^+#fWy>I|G7EbRz20;Id6Z@xuYG)?JGKdN0l(z9ExYiE$BWhFB4ok# zP%2kKZBtxJWlE5oG~BA;W*&nb#fck$jxW8=^5Yk%7Q zX_#RP=t)Fs3{_dbsEMO2{#fj&1DsD4`O2>^K6z9NbibWn2|2F(|xfz3Q*(CZt%vY^mli<%!6^%MvLXA!G+Kk%i zL7vWQvf$Z2^-}!N*8=bVXfHQ=ZLK_ArH^GXrfOp_CTSq7<+EACBZuHLF&8TpRo%}y zT4SoCQ!A?mL;V;KdyqX|CQyAF_btIkk+w=T>+~sZdy(Ymn?`808uC&!o5Kj;y`F>J z^HNc{f@-SesHeEqu!&&^(4lTnCC%j#FiBIv&|Z)Ni{V@hb3lbvVfQd&jK_AO_@r6f zwM~<*;Vcb8VbLLt=nZR77zCT!cRmLYUQ)8Gvtf?++SJo1UxvMp=JM4Rew-k4`<`zT zt%{K`TQ0aETMX8g;0Lw8o59M%iX`zvoY$%eOfP+hy`<(ECphet{!PHV*L1fPtVNmG z74PF(hdhbKn*+Zy3%NvLRzptHb?XqHmeTXQ!I{({si{l;H}WBjk3`laENnbHL9YH> zGV#W;dAl7thbEZ25h5zsIQHG3oecJr$6V`(4z-CN4vOx@rRPMnpA+P32@yObPsohAG0NJ`C!1lz;Et z&W3rrXcXFR5SY9k84;KzzVtZFXHvJ-aJ!t7T|Nwg^|Ppi$iU+ZDCvu7Ma#XQz|oh~ zU@pSrFwL^LchT#m3)#sY@T_23g(L9>x%XY-lPV7>c?hodlB^6^srv5G*!x zHlMdjQel`L=IMGD(3mYnu=Cs<%L<*MuwXMhWBD4RaUPG9Z+8OI0yTYWgIq4d!8mVv-aBwc|F{u50;G?la?SBDQBK^8FgxW#79 zk4h7cO(kL75p;35&%W++gKzhj>>$xP4SS4Xp9?n5 zEQEx#9ZYb_nS`<-l!vofRvGwbD7`27!|DDPk$}%M;k7eW=s+S`KTT3+L*^f_EVb_U zu~wsJYzIpEXKd>3)4VO`8R-=EgZv*A$H5SQmg{Lp>K`V-Z!v(!m;B2miXriC%Xk|! z1HozBmAv=DSpXl{r2QtLC1iAKc!MaM1JmJnK#61k>qbt+@JNsNFVh;4&n}zy1Og8a zZn+crig#)TmI*=*pStZzi~CbMp0uF`$9^@2!oYdXtBvwfpLQ3DZo*|Ss17k9FRgTH z9Z5i!HYEm=M}JvLICG!#F3TWCv&<@R!BXAo2a;mNf`mM>{=bM#RiVLwOA+0_OBzX& zBr2_jBo+D(m*nY{#`Y_<=*E6;N%>OS24~QM3V=I?Wp$ zL`!=f&z(~npj_gC5g=VOESEwvs)5OFqpjrs{ps+jPijxPrOw;>49E$wW0Q2~7nqIM zK0z<(jcZ|>BdJ)x9uP(;=VuKEg&LPuf~gHtH`PUK0T^>_KGY%;e>?Rkk31@jvy_$; z-K>7=MuRw7+OuSdgK)1x;Jyza;IR!2LS$nY+AOO}X$#PbT=b>l?AN1_Y$ND%#yk!g z1%B1%aMTgh;W@wugXjyz4UCRZ!z)97-!7U;_5&f%g9F9Q1&x$Dy z?BIiH&2(A8Y&nn14SWA51wDEbji5R5Bdk+76|JxvWRZ_JbPT#ET8yde<)A6w>pr@@ z_J4K*r}%-A`h}9_&VT5=JL18t$2+>+VAi}1T8Dgab zwEi+C~sLUN%Pve~eo9jsQ&HX3s?nAW_1Pl9CW<2mob zGjY>k&UmzZ{4v>Qx+=5wq@&Md)N7bonrZ9#-e*=r=&V~Us@{nZ_5rfww?DP+&MI30 zyiiZfn;vTV3Ax;V+GjEtav7w`n{1YG?Nt-~QL^TZVtR!?NkRfsPjxqDnA)uCb=!VA ztd{BxxEeGG3)YhJc;A^z!-3<^yrxP*nJ_nM*ecdO0?IiS0>`q%gt>MB#J>AdPNaOqix40pOrM=RqFJ1+jv=%K}Ph(#*qyK6$3Ps5ZkcOG>vbpbL5=eWP@dl?!O zX+q0j*pnCcOTSaIHlR~eS&KNqf4pd$31sOfL;GlT0@Rv5j-DR2xvXl05~}-zho!;>``<}& zCzSLjcax`8y*b;bqX+315x?IO?GI+NczRfvbL<*yIg(Z(JO>NZ^S+;v*r1XP9}ltG zTl^?zMs~U0qBK7tuJLwaCeRKtjLq*?2yAkx&*RX${@lV(J6BHUSpo3CRB^M}?Gt8w zOjdsXM-d*Z3`?)qC(2=a+w-N@=A$sMy|r8GR!vqXR_H{JfP~MD?G*R|g(rg>G6ci| zyF$OWeV?<%-suww60_)?tb9x|?EPByr>8&s@QkLa(TY!DNvCuSePxd|9}M= zwPC+0N_#I#V(ldv4SRmZs5Hkk@r|a6j^tY6=P5gTqkhY~beav^XJ>hL*y#%G>6Ceq z{`QfE`Vl1)B)y}JOv#ML)e=DwgNd-RWTnRv4Qs60d-WEO*olxA>(P2+bmSLL{I^ud zS&gb|6E*sC+oaSTBMp0-x7D5NB3L0E&SL5OG1pB1Y%w28=%$l3`HB0tSLYp_Z5DoYQK4#U!&3HGBC&s)#kL# zlCt3am07P_2_z_sxzYn_svZulDI-BWIAoBmw=9i|O^;$qtK=|=_mJed!660Qpg(Mn zc*Ms*?ZM4*%F12pGW}Z3Hp@18g`5VsdLH0AGa2mO6DHU7L8Eey zHOsbFg4hs}lq^@zGE`n<({ZRjXWDd`$G`0y!rBbl>vR;_3{NJKw{xf)(=HnC>?{(m zv|sP0M%x+HcRjkr!06H#)N~nM{1pGTNb*i?xZ`bbR(uMi5Rjk;YgkmyqBcMkwreJ-niMGlW^yP@MsYjO=84hnJhuz}hQ59h9qZ#YE=`j>@0r3mmYAAGG7}awIj6U$+1tLhQsIry=O5N2`y?(vBwKG0_Y1b) z>X~V5Lps35_8w8u7dYuu#^-mDw*oL059ez|RqW(Lt%7|W`SufdNN4-1??g(X(i8)mU zK3ijv$2sx7u;+y|I$PUyQ!lq7PAZPU?_)EV)B+Xq-_wMcaAMR91-9DbEBoE(J*Ij$ zcb>wA%KGqmYl2YkWT0qKd|*7TCr!{sK;`F~&mm>E100{nwW_p&Wf@Q-QbB#Pj25J$ z-$^V@#!2=evCAF=d32K~m7^h`cOjWIZnqzo-SR**JrFnfoJ-hs- zoAn};MCd8R*H!tXW|IR1HZdtdK}QimLH4T={lkv=s#H9I<5VzITDyoB=-`>5PkFvS zWegTm%?=(v^}n^@t5W4)n5mHfaHuza$De%eZwR$g2S3 z;E%CcNNpFKO`*1}7xTvq{WB)X;Bu${;i_yli{`m7Z_b{~tSlBVis*HRG_WibF?vWC zboMBUJq9OOuhZ>kJNM{=QM+}9y@LMb`pO1crZdwiezgq;$r#Cr8V+0joyZP{P0P*B z2HgrYhrM5TPS?MIM09UlEjg4&>&z$*rdk37>^NHSvC`|zY%vB}I%@JZUgx~b5*}(5F z$?&-RLdA`@tA$qdNSrlbPz=q9%+xq&eMguEPN6V3gYA?did}7#3|Xj-R$6u{j5skO zu+zC=H`<5`su?@a@=uoFf{w`xwtzuhQbK+3XXWgh{uSEntLv$nT$egPvzi ztYQR6D<9osi;z*(`Ep&%vNU8hMeb5#`B-cTNV61Jmm7dj8v_F#E03;E-{kEq-=H*| ze^D|y>{B)74rB#U8P3>v>;CFly?q)-qXAzBgEjneJ8;5Gl2@vIdQAcTiKFGzYt|Rh z&&VQu4x8Q!h5eyPo2+OD13@>Q2osDzlUi@V@>ZBwnji4{cx}ybt}nC;*)tH}0B2Aa+?6#H*j?_&3K zNM**M_~F8Va~M!b1DYhRj&2{d$p$*G*^WG?kOA7m?8?~cbld)wi&Tl~zgqek@;8zO zIH7^cXl`c$(t0_2-Z)FOu62(Dp^FC%K#kfjX%Ne$Wr3di9G_J#C|X zdp?gElVQm?eJenjqPkEljeGpLhP!MJ!>*l1 zVH|F4Vt8P^F8lpUyaa(|`R!05dPvrK{cdNr&3s+8s4#b@QIC*Y)}!;7@$haO>s#>) zRS*J1?dYBP?qDcyR-QAcux(awAp3)VzvaPH)omS1>;>q9Q;gxbw*;rkUns*`4 z#too8eQhanO`SPVkVC<;I}~;c{(J>i4ZY3(ks_Qu8KsP{PNlNXh9Vf#L?@UP5I=XBm2G^ zq=@BOb|ro#FsSm|ZGlK^O_s-sYIbD_lIpeFzQ?d)LWmu|TLXo`HJUT$cLh1p1ZmC- zfA>>J1-2$JFcrSgmAIkwV^I1*7HXxqdfC65BlPf#3w2xt7c-DfkMno6h4wb|pV3+h zYn7?>|Ej@SZ;+>1x#>RWKc*f+VZk2^%Gi}L6QUYxz{%0v6V zaZa_F2RJ|iC7tx6RPgfz$xiYVFN3WL7#sd0a`TAP+lTOxR0!OWD}xC;a0+?ZJ;Z*Y z?{p^FdSZ$qWl9pAw?8%DEMzI`)9<&geYVWsJ_tXF2h)urroQkm*<;^@j54|112?I# z5zOB%f^*agJBh#W@sm2>`w>H5%AG^m0ISS68X=5h*;ne6m=HC_@4Esss%D2D>JNm| zMg)RS<~TGqJ+IZ9n1kYQ_(ZCx20>2;C6}vZ07nt5;$iTxrp`NrH-C@-%2N;Ijm#0tob~{@kQv(xj2DctT;A-UTtMyd-c;cFwD^G=$>g994)_H6L0}5KFy3Hxk|3P#Y6+kbyMG!|S;C<6jVt9P zMX&B*QtpgL*$F6J>(?auo%lSSHRg(ngbFzZo0>&!r3&A|vsz9Ut<-6kAj$NE9L@4E zzEvyt)qU9=3VK}Z=zahG^t{-bH)yk1m96#r-P|rnf_bn+F$hAZQBoBG;DD%LoziU7 zBAVQTM(v*=9&LRzH07Ii6vAhj71L3cOhbzLN%TX81iXL8U}p)OetORb9!mAblZl!w zUSK3~O;0E2=_UDWts%bP*V7JBXjV=7WKF?=sR;x)E|*fJOr}eeQb{btpv`4gTsb1&qk ziSxqajFuZ87xT{aZ}?V=pl8A0m0DT9;A^x(Fh)2_r|b4njw~zsK*MhuTjPu!jW_Bv zp^n{qiHHQ7^r`Aqqo+r}P@T^vR*rAye%2vbFKL1OD*3llr+2z_D3ME<8@*Od7_#GM z+*FGm(1mDGpGGKAu0Wqhy}#kA%{`P0{2^E#66l#pt2+sX&)w0pb>R9Bzy=YHd;s#I zHjCv>HN_BgD8FdkyHyDIzH6p!W>P zP_Au`U5n;N$SS+1@jsYYDUe-vBLABLT$T^9W2Qb3!!Ew|K!cfVj%~+TH$TURt8F#J zf4iH2FJ*S(q2K*FeXgf-dPNQ!0_tOBMvK<@8yw4a(X)xJH<^_57osjmVO9-g2JhsP%EVY8nd*8~gGa4IQ6t zge^cRapK)Up)M+rUFFU7vN-ribCrRz@|gMvcN*`K#O)rP$>=PTu@IfCvfxR19@ zL6cyYg?do;S^kmewED_@KNkMERDDl7&+jn!0uo;^qmosC&Sn6Gw-z{wz2?TgICefL zbfR!L$qg2_3wKu zGj*p=t#yHw?&NL4RI|GXA%rk9jYMYT8JDR(tGu7uk__nPiJlo`urarx4-O?c!I7A~ zxrTXU)K5Mx0ijL}m!!%_8xnb1^0Gi23NAlOgp|08vMh)acDvDb0ms(zZ`d~oBmK+a zv7PxM5`NGz#S%s2(|Gb)X%Gbmnm@JE^QJMX3_WVh2#qE$>LAhchHxv2`MQ6mrzMJzq=Hv^Z?ObzKJH zM=EsUK?r9!Uj41F!{?)J^ijMtU`rY|OGf92hC70*ub%3yD zMDx2JqaYyAYyWu`!1J-B;5%$M_*^Q)7ac^v=cAT=O)NI0*E-kkS+U{wfBbSSr#++j zjDT{%kiLih`M%Vd`#zshtpJ6*8Ryc4#`ST7gYCV4^Jcu*4r2&s_D*aa3Qeqr`AUU6 zrL(aq;K9=e8(iMk2O2&@4DK=G>cLxmaLLB2XhiMV#nS3K?kHR(exuA-fB)l0A>tT0 z!#o~&aVrSj^Ia(5sYn7scpy!3W!VJU^!)X;V&Y(QyUvUSKcbz*Z&KH9*~Q4~*UL9N zBH=cM$IS`GCYVE??U~7CP5`)|Qp!*HwU3dm%6-_W;@v>XM>8TWEQv9~Fzjhc3`urS z(&~Suux%jc?0Sw#JSJv79?P_Om_7ue%-op^r0O|t6X2+`V7aQb*kswRRL%d%@u28Udm!Q3uRo#mQa!ZQ#7A+*y8An|BWwQ>!+ybt;Kym{3SnVY4w|I^ zpB*s3AOmuC5tB|`--y^UYSf4*Xyzj)8Z{_E;TA69#`t*^9J<^IoBGfIK*T9CQx&f) z4C_(KbP%Y+fUL8+i(Uq!xP}!LQ7=~2Ah$Z%uiktOY`5zjHHJ4+Lt(6hPTukF181Sa@9>#~zlPT; zDIko;u+a)VEzCC&(2MVErem%$)2Sxs2(I>>6axYz)h{{xB*8SK_wjevsTcn-qs2f% zt+UQ^iwgc>1Y;!AqT&cWT?$lz^W>D0Xo^*+1h)jQwJ1&+jT118N~txJBK z)^42k%_Hlmvb%pqH}jq^irS29H%_okn$Y}IRkVBAvPp)`rhg3(2PV=L0{;s$GAC!FD{|X};ue@HqUSsz4buXEhiF@BNRJPxjI)!zIMwG;z zJL#S7%8mb78eh0w?)5Kt!1uNJiCLXSpi<|8x3j}c?dEEqZ-t#}@L<1h!p%>juRcCG z8QLeqsULi7ZNYN^mYO5#i$lAgodxb{zgMjtGifiI7LN{>7-(7n1MxK8_G$FSdK8F| z0q~#@1C + +**How to resolve** + +If the transaction failed due to onchain logic, try to simulate the transaction (see above) to identify the reason. + +If the gas limit was reached, you may try [manually overriding the gas settings](https://portal.thirdweb.com/engine/features/contracts#override-gas-settings). Engine automatically estimates the gas limit through simulation, and it is not recommended to override the gas limit unless the estimation is incorrect. + +### Received "replacement transaction underpriced" error + +*Also known as: REPLACEMENT_UNDERPRICED, already known* + +**What it means** + +Engine has already submitted this or another transaction with the same nonce. That transaction is in mempool and waiting to be mined by the chain. + +Engine automatically manages nonces so this error typically should not occur. + +**How to resolve** + +It's possible the transactions are not being accepted by the mempool. To remediate this issue, you can retry a transaction, cancel it, or reset all backend wallet nonces. + +To retry a transaction, use [`POST /transaction/sync-retry`](https://redocly.github.io/redoc/?url=https://demo.web3api.thirdweb.com/json#tag/Transaction/operation/syncRetry) and provide the `queueId`. You may also provide a higher gas value to increase the likelihood of the transaction being mined. + +To cancel a transaction, use [`POST /transaction/cancel`](https://redocly.github.io/redoc/?url=https://demo.web3api.thirdweb.com/json#tag/Transaction/operation/cancel) and provide the `queueId`. + + + + Transactions that were sent but not yet mined may fail because new transactions will use the same nonce values as previously sent transactions. + + +To reset the nonce, use [`POST /backend-wallet/reset-nonce`](https://redocly.github.io/redoc/?url=https://demo.web3api.thirdweb.com/json#tag/Backend-Wallet/operation/resetNonces) to sync the Engine nonce with the onchain value. This step resets all nonce values tracked in Engine, and the next sent transaction will use the next available onchain nonce. + +### Received "Insufficient funds for gas * price + value" error + +*Also known as: Insufficient funds for intrinsic transaction cost* + +**What it means** + +Your backend wallet has insufficient funds to complete the transaction. + +Note that on EVM blockchains, a transaction must place a *gas fee bid* on a transaction that is higher than the amount that will actually get consumed. This means your wallet must have a minimum amount of gas in order to send transactions. + +You can estimate how much gas is needed. Adjust the values to your use case and chain. +- `gas` ("gas limit"): The unit of gas that a transaction needs to complete. Assume an NFT mint that takes **120,000 gas**. +- `maxFeePerGas`: The maximum amount of native token to bid, per gas. Assume **50 gwei**. +- Amount of gas needed = **6,000,000,000,000,000 wei**. Assume the native currency is ETH which has 18 decimals, this equals 0.006 ETH. + +Even though the transaction is expected to consume less gas, the transaction will fail unless the wallet holds at least this much native gas currency. + +**How to resolve** + +Add more funds to your backend wallet. Or wait until the gas fees on the chain are lower and try again. \ No newline at end of file From fb92f873cda201ab41b7baa724a130e504268a07 Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 20 Sep 2024 14:15:20 +0000 Subject: [PATCH 56/78] Fix body height issue in dashboard (#4724) Fixes body not expanding to content size: ![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/yNOf1svJ8o3zjO7zQouZ/de2d88d4-db8c-4325-9135-8fc3d400a75b.png) --- apps/dashboard/src/@/styles/globals.css | 5 ++++- apps/dashboard/src/app/team/[team_slug]/layout.tsx | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/dashboard/src/@/styles/globals.css b/apps/dashboard/src/@/styles/globals.css index f8bf56d95d7..fa2c8f76a39 100644 --- a/apps/dashboard/src/@/styles/globals.css +++ b/apps/dashboard/src/@/styles/globals.css @@ -140,7 +140,10 @@ } } -body, html { height: 100%; } + +body { + min-height: 100%; +} diff --git a/apps/dashboard/src/app/team/[team_slug]/layout.tsx b/apps/dashboard/src/app/team/[team_slug]/layout.tsx index b334d26942c..b27f90ad5d5 100644 --- a/apps/dashboard/src/app/team/[team_slug]/layout.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/layout.tsx @@ -6,7 +6,7 @@ export default function RootTeamLayout(props: { params: { team_slug: string }; }) { return ( -

+
{props.children}
From 2ece661620b0cccc20496c80d2b381cd7f592271 Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 20 Sep 2024 16:55:21 +0000 Subject: [PATCH 57/78] Remove Configure Network Modal contexts + Fix in App Router (#4725) FIXES: DASH-259 --- .../react/components/connect-wallet/index.tsx | 118 +++++++++++------- .../src/components/app-layouts/app.tsx | 26 ---- .../ConfigureNetworkModal.tsx | 47 +++---- .../configure-networks/ConfigureNetworks.tsx | 4 +- .../LazyConfigureNetworkModal.tsx | 28 +++++ .../selects/CustomChainRenderer.tsx | 12 +- .../selects/NetworkSelectorButton.tsx | 29 ++++- .../src/contexts/configured-chains.tsx | 45 +------ .../dashboard/src/hooks/networkConfigModal.ts | 35 ------ .../src/pages/[chain_id]/[...paths].tsx | 1 + 10 files changed, 156 insertions(+), 189 deletions(-) create mode 100644 apps/dashboard/src/components/configure-networks/LazyConfigureNetworkModal.tsx delete mode 100644 apps/dashboard/src/hooks/networkConfigModal.ts diff --git a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx index f7594a330e6..244317a687f 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx @@ -15,14 +15,15 @@ import { useAddRecentlyUsedChainId, useRecentlyUsedChains, } from "hooks/chains/recentlyUsedChains"; -import { useSetIsNetworkConfigModalOpen } from "hooks/networkConfigModal"; import { useTheme } from "next-themes"; import Image from "next/image"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import { useCallback, useMemo } from "react"; +import { useCallback, useMemo, useState } from "react"; import type { Chain } from "thirdweb"; import { AutoConnect, ConnectButton, useConnectModal } from "thirdweb/react"; +import { LazyConfigureNetworkModal } from "../../../../components/configure-networks/LazyConfigureNetworkModal"; +import type { StoredChain } from "../../../../contexts/configured-chains"; import { useFavoriteChains } from "../../hooks/useFavoriteChains"; import { useLoggedInUser } from "../../hooks/useLoggedInUser"; import { popularChains } from "../popularChains"; @@ -38,12 +39,10 @@ export const CustomConnectWallet = (props: { const { theme } = useTheme(); const recentChainsv4 = useRecentlyUsedChains(); const addRecentlyUsedChainId = useAddRecentlyUsedChainId(); - // const setIsNetworkConfigModalOpen = useSetIsNetworkConfigModalOpen(); const t = theme === "light" ? "light" : "dark"; const allv4Chains = useSupportedChains(); const chainsRecord = useSupportedChainsRecord(); const favChainsQuery = useFavoriteChains(); - const setIsNetworkConfigModalOpen = useSetIsNetworkConfigModalOpen(); const allChains = useMemo(() => { return allv4Chains.map(mapV4ChainToV5Chain); }, [allv4Chains]); @@ -52,6 +51,12 @@ export const CustomConnectWallet = (props: { return popularChains.map((x) => chainsRecord[x.id] || x); }, [chainsRecord]); + const [isNetworkConfigModalOpen, setIsNetworkConfigModalOpen] = + useState(false); + const [editChain, setEditChain] = useState( + undefined, + ); + const chainSections = useMemo(() => { return [ { @@ -102,50 +107,69 @@ export const CustomConnectWallet = (props: { } return ( - , - }} - appMetadata={{ - name: "thirdweb", - logoUrl: "https://thirdweb.com/favicon.ico", - url: "https://thirdweb.com", - }} - onDisconnect={async () => { - try { - // log out the user - await fetch("/api/auth/logout", { - method: "POST", - }); - } catch (err) { - console.error("Failed to log out", err); - } - }} - connectButton={{ - className: props.connectButtonClassName, - }} - detailsButton={{ - className: props.detailsButtonClassName, - }} - chains={allChains} - detailsModal={{ - networkSelector: { - sections: chainSections, - onSwitch(chain) { - addRecentlyUsedChainId(chain.id); - }, - renderChain: CustomChainRenderer, - onCustomClick: () => { - setIsNetworkConfigModalOpen(true); + <> + , + }} + appMetadata={{ + name: "thirdweb", + logoUrl: "https://thirdweb.com/favicon.ico", + url: "https://thirdweb.com", + }} + onDisconnect={async () => { + try { + // log out the user + await fetch("/api/auth/logout", { + method: "POST", + }); + } catch (err) { + console.error("Failed to log out", err); + } + }} + connectButton={{ + className: props.connectButtonClassName, + }} + detailsButton={{ + className: props.detailsButtonClassName, + }} + chains={allChains} + detailsModal={{ + networkSelector: { + sections: chainSections, + onSwitch(chain) { + addRecentlyUsedChainId(chain.id); + }, + renderChain(props) { + return ( + { + setIsNetworkConfigModalOpen(true); + setEditChain(c); + }} + /> + ); + }, + onCustomClick: () => { + setEditChain(undefined); + setIsNetworkConfigModalOpen(true); + }, }, - }, - }} - /> + }} + /> + + + ); }; diff --git a/apps/dashboard/src/components/app-layouts/app.tsx b/apps/dashboard/src/components/app-layouts/app.tsx index 6588caa5f57..804ade9fbc8 100644 --- a/apps/dashboard/src/components/app-layouts/app.tsx +++ b/apps/dashboard/src/components/app-layouts/app.tsx @@ -11,7 +11,6 @@ import { QueryClient, QueryClientProvider, } from "@tanstack/react-query"; -import { ConfigureNetworkModal } from "components/configure-networks/ConfigureNetworkModal"; import { AppShell, type AppShellProps } from "components/layout/app-shell"; import { Onboarding as OnboardingModal } from "components/onboarding"; import { OpCreditsGrantedModalWrapper } from "components/onboarding/OpCreditsGrantedModalWrapper"; @@ -20,11 +19,6 @@ import { AllChainsProvider } from "contexts/all-chains"; import { ChainsProvider } from "contexts/configured-chains"; import { ErrorProvider } from "contexts/error-handler"; import { isSanctionedAddress } from "data/eth-sanctioned-addresses"; -import { useAddRecentlyUsedChainId } from "hooks/chains/recentlyUsedChains"; -import { - useIsNetworkConfigModalOpen, - useSetIsNetworkConfigModalOpen, -} from "hooks/networkConfigModal"; import { useEffect, useMemo, useState } from "react"; import { useActiveAccount } from "thirdweb/react"; import { Heading } from "tw-components"; @@ -62,7 +56,6 @@ export const AppLayout: ComponentWithChildren = (props) => { - @@ -105,22 +98,3 @@ const SanctionedAddressesChecker: ComponentWithChildren = ({ children }) => { } return <>{children}; }; - -function ConfigModal() { - const isNetworkConfigModalOpen = useIsNetworkConfigModalOpen(); - const setIsNetworkConfigModalOpen = useSetIsNetworkConfigModalOpen(); - const addRecentlyUsedChains = useAddRecentlyUsedChainId(); - - if (!isNetworkConfigModalOpen) { - return null; - } - - return ( - { - addRecentlyUsedChains(_chain.chainId); - }} - onClose={() => setIsNetworkConfigModalOpen(false)} - /> - ); -} diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx index 75e4dbcabe8..b1aac05c525 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx @@ -1,42 +1,43 @@ +import { ChakraProviderSetup } from "@/components/ChakraProviderSetup"; import { Dialog, DialogContent } from "@/components/ui/dialog"; import type { StoredChain } from "contexts/configured-chains"; -import { useSetEditChain } from "hooks/networkConfigModal"; +import { useAddRecentlyUsedChainId } from "../../hooks/chains/recentlyUsedChains"; import { ConfigureNetworks } from "./ConfigureNetworks"; -interface AddNetworkModalProps { - onClose: () => void; +export type ConfigureNetworkModalProps = { + open: boolean; + onOpenChange: (open: boolean) => void; onNetworkAdded?: (chain: StoredChain) => void; -} + editChain: StoredChain | undefined; +}; -export const ConfigureNetworkModal: React.FC = ( +export const ConfigureNetworkModal: React.FC = ( props, ) => { - const setEditChain = useSetEditChain(); + const addRecentlyUsedChains = useAddRecentlyUsedChainId(); + const onModalClose = () => { - props.onClose(); - setEditChain(undefined); + props.onOpenChange(false); }; return ( - { - if (!v) { - onModalClose(); - } - }} - > + - { - props.onNetworkAdded?.(chain); - onModalClose(); - }} - onNetworkConfigured={onModalClose} - /> + {/* TODO - remove after moving ConfigureNetworks to shadcn */} + + { + addRecentlyUsedChains(chain.chainId); + props.onNetworkAdded?.(chain); + onModalClose(); + }} + onNetworkConfigured={onModalClose} + editChain={props.editChain} + /> + ); diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx index 459085f4612..c2015f1c247 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx @@ -2,7 +2,6 @@ import type { StoredChain } from "contexts/configured-chains"; import { useTrack } from "hooks/analytics/useTrack"; import { useAddRecentlyUsedChainId } from "hooks/chains/recentlyUsedChains"; import { useModifyChain } from "hooks/chains/useModifyChain"; -import { useEditChain } from "hooks/networkConfigModal"; import { toast } from "sonner"; import { ConfigureNetworkForm } from "./ConfigureNetworkForm"; @@ -22,13 +21,14 @@ interface ConfigureNetworksProps { onNetworkAdded?: (chain: StoredChain) => void; prefillSlug?: string; prefillChainId?: string; + editChain: StoredChain | undefined; } export const ConfigureNetworks: React.FC = (props) => { const trackChainConfig = useChainConfigTrack(); const addRecentlyUsedChainId = useAddRecentlyUsedChainId(); const modifyChain = useModifyChain(); - const editChain = useEditChain(); + const { editChain } = props; const handleSubmit = (chain: StoredChain) => { modifyChain(chain); diff --git a/apps/dashboard/src/components/configure-networks/LazyConfigureNetworkModal.tsx b/apps/dashboard/src/components/configure-networks/LazyConfigureNetworkModal.tsx new file mode 100644 index 00000000000..2773bfbc7db --- /dev/null +++ b/apps/dashboard/src/components/configure-networks/LazyConfigureNetworkModal.tsx @@ -0,0 +1,28 @@ +"use client"; + +import { Suspense, useEffect, useState } from "react"; +import { + ConfigureNetworkModal, + type ConfigureNetworkModalProps, +} from "./ConfigureNetworkModal"; + +export function LazyConfigureNetworkModal(props: ConfigureNetworkModalProps) { + const [hasEverOpened, setHasEverOpened] = useState(false); + + // eslint-disable-next-line no-restricted-syntax + useEffect(() => { + if (props.open) { + setHasEverOpened(true); + } + }, [props.open]); + + if (hasEverOpened) { + return ( + + + + ); + } + + return null; +} diff --git a/apps/dashboard/src/components/selects/CustomChainRenderer.tsx b/apps/dashboard/src/components/selects/CustomChainRenderer.tsx index 8a73a6aedb3..7765ea88352 100644 --- a/apps/dashboard/src/components/selects/CustomChainRenderer.tsx +++ b/apps/dashboard/src/components/selects/CustomChainRenderer.tsx @@ -5,13 +5,10 @@ import { ChainIcon } from "components/icons/ChainIcon"; import { OPSponsoredChains } from "constants/chains"; import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { useAddRecentlyUsedChainId } from "hooks/chains/recentlyUsedChains"; -import { - useSetEditChain, - useSetIsNetworkConfigModalOpen, -} from "hooks/networkConfigModal"; import { SettingsIcon } from "lucide-react"; import { useMemo } from "react"; import type { UseNetworkSwitcherModalOptions } from "thirdweb/react"; +import type { StoredChain } from "../../contexts/configured-chains"; type ChainRenderProps = React.ComponentProps< NonNullable @@ -19,6 +16,7 @@ type ChainRenderProps = React.ComponentProps< type CustomChainRendererProps = ChainRenderProps & { disableChainConfig?: boolean; + openEditChainModal: (chain: StoredChain) => void; }; export const CustomChainRenderer = ({ @@ -28,10 +26,9 @@ export const CustomChainRenderer = ({ switchFailed, close, disableChainConfig, + openEditChainModal, }: CustomChainRendererProps) => { - const setIsOpenNetworkConfigModal = useSetIsNetworkConfigModalOpen(); const addRecentlyUsedChain = useAddRecentlyUsedChainId(); - const setEditChain = useSetEditChain(); const supportedChainsRecord = useSupportedChainsRecord(); const storedChain = useMemo(() => { @@ -106,9 +103,8 @@ export const CustomChainRenderer = ({ className="ml-auto p-2 leading-4 md:opacity-0 group-hover:opacity-100 hover:bg-transparent transition-opacity" aria-label="Configure Network" onClick={() => { - setEditChain(storedChain); + openEditChainModal(storedChain); addRecentlyUsedChain(chain.id); - setIsOpenNetworkConfigModal(true); if (close) { close(); } else { diff --git a/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx b/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx index f230ea66c2f..33e65e866ee 100644 --- a/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx +++ b/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx @@ -14,15 +14,15 @@ import { useAddRecentlyUsedChainId, useRecentlyUsedChains, } from "hooks/chains/recentlyUsedChains"; -import { useSetIsNetworkConfigModalOpen } from "hooks/networkConfigModal"; import { useActiveChainAsDashboardChain } from "lib/v5-adapter"; import { useTheme } from "next-themes"; -import { useEffect, useMemo, useRef } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { BiChevronDown } from "react-icons/bi"; import { useActiveWallet } from "thirdweb/react"; import { useNetworkSwitcherModal } from "thirdweb/react"; import { getSDKTheme } from "../../app/components/sdk-component-theme"; import { mapV4ChainToV5Chain } from "../../contexts/map-chains"; +import { LazyConfigureNetworkModal } from "../configure-networks/LazyConfigureNetworkModal"; import { CustomChainRenderer } from "./CustomChainRenderer"; interface NetworkSelectorButtonProps { @@ -41,7 +41,11 @@ export const NetworkSelectorButton: React.FC = ({ const client = useThirdwebClient(); const recentlyUsedChains = useRecentlyUsedChains(); const addRecentlyUsedChains = useAddRecentlyUsedChainId(); - const setIsNetworkConfigModalOpen = useSetIsNetworkConfigModalOpen(); + const [isNetworkConfigModalOpen, setIsNetworkConfigModalOpen] = + useState(false); + const [editChain, setEditChain] = useState( + undefined, + ); const { theme } = useTheme(); const supportedChains = useSupportedChains(); const supportedChainsRecord = useSupportedChainsRecord(); @@ -137,10 +141,21 @@ export const NetworkSelectorButton: React.FC = ({ chains: (chains ?? []).map(mapV4ChainToV5Chain), }, ], - renderChain: CustomChainRenderer, + renderChain(props) { + return ( + { + setIsNetworkConfigModalOpen(true); + setEditChain(c); + }} + /> + ); + }, onCustomClick: networksEnabled ? undefined : () => { + setEditChain(undefined); setIsNetworkConfigModalOpen(true); }, async onSwitch(chain) { @@ -160,6 +175,12 @@ export const NetworkSelectorButton: React.FC = ({ + + ); }; diff --git a/apps/dashboard/src/contexts/configured-chains.tsx b/apps/dashboard/src/contexts/configured-chains.tsx index 259be20dbc4..2ac056720dd 100644 --- a/apps/dashboard/src/contexts/configured-chains.tsx +++ b/apps/dashboard/src/contexts/configured-chains.tsx @@ -87,32 +87,6 @@ export const ModifyChainContext = createContext< // eslint-disable-next-line no-restricted-syntax export const SupportedChainsReadyContext = createContext(false); -/** - * LEGACY - * - * Flag indicating if the "Network Config" Modal is open or not - */ -// eslint-disable-next-line no-restricted-syntax -export const isNetworkConfigModalOpenCtx = createContext(false); -// eslint-disable-next-line no-restricted-syntax -export const SetIsNetworkConfigModalOpenCtx = createContext< - ((value: boolean) => void) | undefined ->(undefined); - -/** - * LEGACY - * - * Chain object to be edited in the "Network Config" Modal - */ -// eslint-disable-next-line no-restricted-syntax -export const EditChainContext = createContext( - undefined, -); -// eslint-disable-next-line no-restricted-syntax -export const SetEditChainContext = createContext< - ((chain: ChainMetadata | undefined) => void) | undefined ->(undefined); - const replaceRpcsWithDevUrl = (chains: ChainMetadata[]) => { if (isProd) { return chains; @@ -138,11 +112,6 @@ export function ChainsProvider(props: { children: React.ReactNode }) { const [recentlyUsedChainIds, setRecentlyUsedChainIds] = useState( [], ); - const [isNetworkConfigModalOpen, setIsNetworkConfigModalOpen] = - useState(false); - const [editChain, setEditChain] = useState( - undefined, - ); const addRecentlyUsedChainId = useCallback((chainId: number) => { setRecentlyUsedChainIds((_recentlyUsedChainIds) => { @@ -327,19 +296,7 @@ export function ChainsProvider(props: { children: React.ReactNode }) { - - - - - {props.children} - - - - + {props.children} diff --git a/apps/dashboard/src/hooks/networkConfigModal.ts b/apps/dashboard/src/hooks/networkConfigModal.ts deleted file mode 100644 index 481dee221d3..00000000000 --- a/apps/dashboard/src/hooks/networkConfigModal.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - EditChainContext, - SetEditChainContext, - SetIsNetworkConfigModalOpenCtx, - isNetworkConfigModalOpenCtx, -} from "contexts/configured-chains"; -import { useContext } from "react"; -import invariant from "tiny-invariant"; - -export const useIsNetworkConfigModalOpen = () => { - return useContext(isNetworkConfigModalOpenCtx); -}; - -export const useSetIsNetworkConfigModalOpen = () => { - const context = useContext(SetIsNetworkConfigModalOpenCtx); - - invariant( - context, - "useSetIsNetworkConfigModalOpen must be used within a SetOpenNetworkConfigModalContext.Provider", - ); - return context; -}; - -export const useEditChain = () => { - return useContext(EditChainContext); -}; - -export const useSetEditChain = () => { - const context = useContext(SetEditChainContext); - invariant( - context, - "useSetEditChain must be used within a SetEditChainContext.Provider", - ); - return context; -}; diff --git a/apps/dashboard/src/pages/[chain_id]/[...paths].tsx b/apps/dashboard/src/pages/[chain_id]/[...paths].tsx index 4c5c825d2cd..80a5bac5ea5 100644 --- a/apps/dashboard/src/pages/[chain_id]/[...paths].tsx +++ b/apps/dashboard/src/pages/[chain_id]/[...paths].tsx @@ -209,6 +209,7 @@ const ContractPage: ThirdwebNextPage = () => { setChainNotFound(false); } }} + editChain={undefined} />
From 200e8da84b1ac4888e4befbc99eaff5cabd3c90a Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 20 Sep 2024 17:05:53 +0000 Subject: [PATCH 58/78] Fix login page centered layout + some UI adjustments (#4726) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to update the styling of the login page in the dashboard app for better UI/UX. ### Detailed summary - Updated main layout and styling of the login page - Adjusted heading size and alignment - Applied shadow to the custom connect component - Positioned background image dynamically based on screen size > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/dashboard/src/app/login/page.tsx | 29 ++++++++++++++------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/apps/dashboard/src/app/login/page.tsx b/apps/dashboard/src/app/login/page.tsx index 3fcf5972372..6f492df4d48 100644 --- a/apps/dashboard/src/app/login/page.tsx +++ b/apps/dashboard/src/app/login/page.tsx @@ -13,25 +13,25 @@ import { doLogin, doLogout, getLoginPayload, isLoggedIn } from "./auth-actions"; export default function LoginPage() { return ( -
+
-
-
-

Get started with thirdweb

- - - -
- {/* eslint-disable-next-line @next/next/no-img-element */} - +
+

+ Get started with thirdweb +

+ + +
+ {/* eslint-disable-next-line @next/next/no-img-element */} +
); } @@ -77,6 +77,7 @@ function CustomConnectEmmbed() { client={client} modalSize={isLG ? "wide" : "compact"} theme={getSDKTheme(theme === "light" ? "light" : "dark")} + className="shadow-lg" /> ); } From eb79810afa5870586a56000831ff7b265c9555d9 Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 20 Sep 2024 20:41:11 +0000 Subject: [PATCH 59/78] Replace all isLoading to isPending in dashboard (#4728) ### Why? we recently moved from react-query v4 to v5. In v5, `isLoading` is now called `isPending` but we haven't changed `isLoading` to `isPending` and that has introduced some bugs related to loading spinners/skeletons where they are not shown if the query is not currently being fetched (not enabled yet) `isLoading` is no longer `true` from the beggining as it is assumed to be throughout the codebase in v5 - it is only true when a fetch is in-flight To get a the "loading" state in v5 - we should be using the `isPending` state. `isPending` is true -> "if there's no cached data and no query attempt was finished yet" according to the docs: https://tanstack.com/query/latest/docs/framework/react/guides/migrating-to-v5#status-loading-has-been-changed-to-status-pending-and-isloading-has-been-changed-to-ispending-and-isinitialloading-has-now-been-renamed-to-isloading in v5 , `isLoading` is `isFetching && isPending` --- .../blocks/DangerSettingCard.stories.tsx | 4 +-- .../@/components/blocks/DangerSettingCard.tsx | 10 +++---- .../blocks/SettingsCard.stories.tsx | 8 ++--- .../src/@/components/blocks/SettingsCard.tsx | 8 ++--- .../@/components/blocks/wallet-address.tsx | 2 +- .../react/components/connect-wallet/index.tsx | 4 +-- .../react/hooks/useFavoriteChains.ts | 2 +- .../react/hooks/useLoggedInUser.ts | 14 ++++----- .../components/client/FaucetButton.tsx | 2 +- .../(chain)/components/client/star-button.tsx | 2 +- .../client/ecosystem-header.client.tsx | 4 +-- .../components/server/partners-table.tsx | 4 +-- .../[slug]/(active)/hooks/use-partners.ts | 2 +- .../ecosystem/hooks/use-ecosystem-list.ts | 2 +- .../pay/components/webhooks.client.tsx | 2 +- .../components/TransactionSimulator.tsx | 13 ++++---- .../settings/AccountSettingsPageUI.tsx | 6 ++-- .../settings/credits/SettingsCreditsPage.tsx | 4 +-- .../settings/general/GeneralSettingsPage.tsx | 10 +++---- .../[team_slug]/(team)/~/usage/UsagePage.tsx | 4 +-- .../AccountAbstractionPage.tsx | 2 +- .../analytics/ConnectAnalyticsDashboard.tsx | 4 +-- .../analytics/ConnectAnalyticsDashboardUI.tsx | 8 ++--- .../ConnectAnalyticsDashboard.stories.tsx | 2 +- .../DailyConnectionsChartCard.stories.tsx | 10 +++---- .../_components/DailyConnectionsChartCard.tsx | 6 ++-- .../_components/WalletConnectorsChartCard.tsx | 6 ++-- .../WalletConnectorsChartChart.stories.tsx | 10 +++---- .../WalletDistributionChartCard.stories.tsx | 10 +++---- .../WalletDistributionChartCard.tsx | 8 ++--- .../[project_slug]/contracts/page.tsx | 2 +- .../settings/ProjectGeneralSettingsPage.tsx | 10 +++---- .../src/components/buttons/MismatchButton.tsx | 2 +- .../components/buttons/TransactionButton.tsx | 8 ++--- .../contract-publish-form/index.tsx | 4 +-- .../import-contract/modal.tsx | 6 ++-- .../publisher/masked-avatar.tsx | 4 +-- .../tables/deployed-contracts.tsx | 2 +- .../tables/published-contracts.tsx | 2 +- .../embedded-wallets/Users/index.tsx | 2 +- .../components/engine/EnginePageLayout.tsx | 4 +-- .../engine/configuration/engine-webhooks.tsx | 2 +- .../engine/configuration/webhooks-table.tsx | 6 ++-- .../add-contract-subscription-button.tsx | 2 +- .../contract-subscriptions-table.tsx | 6 ++-- .../engine-contract-subscription.tsx | 2 +- .../engine/engine-instances-table.tsx | 6 ++-- .../src/components/engine/engine-list.tsx | 4 +-- .../engine/overview/backend-wallets-table.tsx | 6 ++-- .../engine/overview/engine-overview.tsx | 4 +-- .../engine/overview/transactions-table.tsx | 6 ++-- .../permissions/access-tokens-table.tsx | 6 ++-- .../engine/permissions/admins-table.tsx | 6 ++-- .../permissions/engine-access-tokens.tsx | 4 +-- .../engine/permissions/engine-admins.tsx | 2 +- .../engine/permissions/keypairs-table.tsx | 6 ++-- .../engine/relayer/engine-relayer.tsx | 2 +- .../engine/relayer/relayers-table.tsx | 6 ++-- .../explore/contract-card/index.tsx | 2 +- .../components/explore/publisher/index.tsx | 2 +- .../src/components/onboarding/index.tsx | 2 +- .../components/PayCustomersTable.tsx | 8 ++--- .../components/PayNewCustomers.tsx | 8 ++--- .../components/PaymentHistory.tsx | 6 ++-- .../components/PaymentsSuccessRate.tsx | 8 ++--- .../pay/PayAnalytics/components/Payouts.tsx | 8 ++--- .../components/TotalPayVolume.tsx | 8 ++--- .../components/TotalVolumePieChart.tsx | 6 ++-- .../src/components/pay/PayConfig.tsx | 2 +- .../product-pages/homepage/CodeSelector.tsx | 4 +-- .../Account/Billing/CreditsButton.tsx | 2 +- .../Account/Billing/UpgradeButton.tsx | 2 +- .../settings/Account/Billing/alerts/Alert.tsx | 4 +-- .../src/components/settings/Account/Usage.tsx | 8 ++--- .../src/components/settings/ApiKeys/index.tsx | 6 ++-- .../AuthorizedWalletsTable.tsx | 6 ++-- .../src/components/shared/TWQueryTable.tsx | 14 ++++----- .../src/components/shared/TWTable.tsx | 6 ++-- .../AccountFactories/factory-contracts.tsx | 6 ++-- .../smart-wallets/AccountFactories/index.tsx | 2 +- .../src/contract-ui/hooks/useRouteConfig.tsx | 30 +++++++++---------- .../tabs/account/components/nfts-owned.tsx | 4 +-- .../accounts/components/accounts-table.tsx | 12 ++++---- .../src/contract-ui/tabs/analytics/page.tsx | 2 +- .../claim-conditions-form/index.tsx | 4 +-- .../claim-conditions-form/phase.tsx | 6 ++-- .../tabs/code/components/code-overview.tsx | 6 ++-- .../src/contract-ui/tabs/code/page.tsx | 2 +- .../tabs/listings/components/list-form.tsx | 4 +-- .../components/InstalledModulesTable.tsx | 6 ++-- .../tabs/manage/components/ModuleForm.tsx | 8 ++--- .../src/contract-ui/tabs/manage/page.tsx | 4 +-- .../tabs/nfts/components/burn-tab.tsx | 4 +-- .../tabs/nfts/components/table.tsx | 2 +- .../tabs/nfts/components/transfer-tab.tsx | 2 +- .../src/contract-ui/tabs/nfts/page.tsx | 2 +- .../components/MarketplaceDetails.tsx | 28 ++++++++--------- .../tabs/overview/components/NFTCards.tsx | 12 ++++---- .../tabs/overview/components/NFTDetails.tsx | 4 +-- .../overview/components/PermissionsTable.tsx | 2 +- .../components/contract-permission.tsx | 18 +++++------ .../tabs/permissions/components/index.tsx | 2 +- .../proposals/components/delegate-button.tsx | 2 +- .../tabs/proposals/components/proposal.tsx | 2 +- .../tabs/settings/components/metadata.tsx | 20 ++++++------- .../settings/components/platform-fees.tsx | 21 +++++++------ .../tabs/settings/components/primary-sale.tsx | 2 +- .../tabs/settings/components/royalties.tsx | 2 +- .../src/contract-ui/tabs/settings/page.tsx | 12 ++++---- .../shared-components/marketplace-table.tsx | 10 +++---- .../src/contract-ui/tabs/sources/page.tsx | 4 +-- .../split/components/distribute-button.tsx | 8 ++--- .../src/contract-ui/tabs/split/page.tsx | 6 ++-- .../tabs/tokens/components/claim-button.tsx | 4 +-- .../core-ui/nft-drawer/useNftDrawerTabs.tsx | 4 +-- .../dashboard/connect/account-abstraction.tsx | 4 +-- .../src/pages/dashboard/connect/analytics.tsx | 2 +- .../dashboard/connect/in-app-wallets.tsx | 6 ++-- .../src/pages/dashboard/contracts/deploy.tsx | 2 +- .../src/pages/dashboard/contracts/publish.tsx | 2 +- apps/dashboard/src/pages/dashboard/index.tsx | 4 +-- .../dashboard/settings/api-keys/index.tsx | 2 +- .../src/pages/dashboard/settings/devices.tsx | 2 +- apps/dashboard/src/pages/events.tsx | 2 +- .../src/tw-components/masked-avatar/index.tsx | 6 ++-- 125 files changed, 356 insertions(+), 352 deletions(-) diff --git a/apps/dashboard/src/@/components/blocks/DangerSettingCard.stories.tsx b/apps/dashboard/src/@/components/blocks/DangerSettingCard.stories.tsx index da39e4702d0..63b61cf2960 100644 --- a/apps/dashboard/src/@/components/blocks/DangerSettingCard.stories.tsx +++ b/apps/dashboard/src/@/components/blocks/DangerSettingCard.stories.tsx @@ -36,7 +36,7 @@ function Story() { description="This is a description" buttonLabel="Some Action" buttonOnClick={() => {}} - isLoading={false} + isPending={false} confirmationDialog={{ title: "This is confirmation title", description: "This is confirmation description", @@ -50,7 +50,7 @@ function Story() { description="This is a description" buttonLabel="Some Action" buttonOnClick={() => {}} - isLoading={true} + isPending={true} confirmationDialog={{ title: "This is confirmation title", description: "This is confirmation description", diff --git a/apps/dashboard/src/@/components/blocks/DangerSettingCard.tsx b/apps/dashboard/src/@/components/blocks/DangerSettingCard.tsx index ce24eb43b2a..f93dc0b8ef3 100644 --- a/apps/dashboard/src/@/components/blocks/DangerSettingCard.tsx +++ b/apps/dashboard/src/@/components/blocks/DangerSettingCard.tsx @@ -17,7 +17,7 @@ export function DangerSettingCard(props: { description: string; buttonLabel: string; buttonOnClick: () => void; - isLoading: boolean; + isPending: boolean; confirmationDialog: { title: string; description: string; @@ -39,9 +39,9 @@ export function DangerSettingCard(props: { @@ -66,9 +66,9 @@ export function DangerSettingCard(props: { variant="destructive" className="bg-red-600 hover:bg-red-600/80 text-white font-semibold gap-2" onClick={props.buttonOnClick} - disabled={props.isLoading} + disabled={props.isPending} > - {props.isLoading && } + {props.isPending && } {props.buttonLabel} diff --git a/apps/dashboard/src/@/components/blocks/SettingsCard.stories.tsx b/apps/dashboard/src/@/components/blocks/SettingsCard.stories.tsx index 184c6491a8b..9153936da79 100644 --- a/apps/dashboard/src/@/components/blocks/SettingsCard.stories.tsx +++ b/apps/dashboard/src/@/components/blocks/SettingsCard.stories.tsx @@ -81,7 +81,7 @@ function Story() { }} saveButton={{ disabled: false, - isLoading: false, + isPending: false, onClick: () => {}, }} noPermissionText={"You do not have permission to edit this"} @@ -100,7 +100,7 @@ function Story() { }} saveButton={{ disabled: false, - isLoading: false, + isPending: false, onClick: () => {}, }} noPermissionText={undefined} @@ -119,7 +119,7 @@ function Story() { }} saveButton={{ disabled: true, - isLoading: false, + isPending: false, onClick: () => {}, }} noPermissionText={undefined} @@ -138,7 +138,7 @@ function Story() { }} saveButton={{ disabled: false, - isLoading: true, + isPending: true, onClick: () => {}, }} noPermissionText={undefined} diff --git a/apps/dashboard/src/@/components/blocks/SettingsCard.tsx b/apps/dashboard/src/@/components/blocks/SettingsCard.tsx index 8dd97b4d2fb..42786bc23da 100644 --- a/apps/dashboard/src/@/components/blocks/SettingsCard.tsx +++ b/apps/dashboard/src/@/components/blocks/SettingsCard.tsx @@ -15,7 +15,7 @@ export function SettingsCard(props: { saveButton?: { onClick?: () => void; disabled: boolean; - isLoading: boolean; + isPending: boolean; type?: "submit"; }; }) { @@ -59,12 +59,12 @@ export function SettingsCard(props: { size="sm" className="gap-2" onClick={props.saveButton.onClick} - disabled={props.saveButton.disabled || props.saveButton.isLoading} + disabled={props.saveButton.disabled || props.saveButton.isPending} variant="outline" type={props.saveButton.type} > - {props.saveButton.isLoading && } - {props.saveButton.isLoading ? "Saving" : "Save"} + {props.saveButton.isPending && } + {props.saveButton.isPending ? "Saving" : "Save"} )}
diff --git a/apps/dashboard/src/@/components/blocks/wallet-address.tsx b/apps/dashboard/src/@/components/blocks/wallet-address.tsx index de1a3f846e3..9207c30fae8 100644 --- a/apps/dashboard/src/@/components/blocks/wallet-address.tsx +++ b/apps/dashboard/src/@/components/blocks/wallet-address.tsx @@ -108,7 +108,7 @@ export function WalletAddress(props: { {lessShortenedAddress}

Social Profiles

- {profiles.isLoading ? ( + {profiles.isPending ? (

Loading profiles...

) : !profiles.data?.length ? (

No profiles found

diff --git a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx index 244317a687f..d0ee65c12c9 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx @@ -75,10 +75,10 @@ export const CustomConnectWallet = (props: { }, [recentChainsv4, favChainsQuery.data, popularChainsWithMeta]); // ensures login status on pages that need it - const { isLoading, isLoggedIn } = useLoggedInUser(); + const { isPending, isLoggedIn } = useLoggedInUser(); const pathname = usePathname(); - if (isLoading) { + if (isPending) { return ( <>
diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts index 110b6dadf73..53e6aac0659 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts @@ -25,7 +25,7 @@ export function useFavoriteChains() { }, [favChainsQuery.data, allChains]); return { - isLoading: favChainsQuery.isLoading, + isPending: favChainsQuery.isPending, data, }; } diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts index c7b4ee0ca4b..c61c62fd4a0 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useLoggedInUser.ts @@ -17,7 +17,7 @@ declare global { } export function useLoggedInUser(): { - isLoading: boolean; + isPending: boolean; isLoggedIn: boolean; user: { address: string; jwt?: string } | null; } { @@ -82,7 +82,7 @@ export function useLoggedInUser(): { // if we are "disconnected" we are not logged in if (connectionStatus === "disconnected") { return { - isLoading: false, + isPending: false, isLoggedIn: false, user: null, }; @@ -91,7 +91,7 @@ export function useLoggedInUser(): { // if we are still connecting, we are "loading" if (connectionStatus === "connecting") { return { - isLoading: true, + isPending: true, isLoggedIn: false, user: null, }; @@ -100,7 +100,7 @@ export function useLoggedInUser(): { // same if we do not yet have a path if (!pathname) { return { - isLoading: true, + isPending: true, isLoggedIn: false, user: null, }; @@ -109,7 +109,7 @@ export function useLoggedInUser(): { // if we do not have an address we are not logged in if (!connectedAddress) { return { - isLoading: false, + isPending: false, isLoggedIn: false, user: null, }; @@ -118,7 +118,7 @@ export function useLoggedInUser(): { // if we are not on a logged in path, we can simply return the connected address if (!isLoginRequired(pathname)) { return { - isLoading: false, + isPending: false, isLoggedIn: true, user: { address: connectedAddress }, }; @@ -126,7 +126,7 @@ export function useLoggedInUser(): { // otherwise we return the query data return { - isLoading: query.isLoading, + isPending: query.isPending, isLoggedIn: query.data ? query.data.isLoggedIn : false, user: query.data?.isLoggedIn ? { address: connectedAddress, jwt: query.data.jwt } diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx index 927cdc51e04..bd6111da044 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/FaucetButton.tsx @@ -118,7 +118,7 @@ export function FaucetButton({ faucetWalletBalanceQuery.data.value < toUnits("1", 17); // loading state - if (faucetWalletBalanceQuery.isLoading || canClaimFaucetQuery.isLoading) { + if (faucetWalletBalanceQuery.isPending || canClaimFaucetQuery.isPending) { return (
); diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.stories.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.stories.tsx index d30cade8f48..21b039155cb 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.stories.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.stories.tsx @@ -34,35 +34,35 @@ function Component() {
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.tsx index 6cde401bcf2..d1341de0987 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/DailyConnectionsChartCard.tsx @@ -46,7 +46,7 @@ const chartLabelToShow: Record = { export function DailyConnectionsChartCard(props: { walletStats: WalletStats[]; - isLoading: boolean; + isPending: boolean; }) { const { walletStats } = props; @@ -73,7 +73,7 @@ export function DailyConnectionsChartCard(props: { return Array.from(chartDataMap.values()); }, [walletStats]); - const disableActions = props.isLoading || barChartData.length === 0; + const disableActions = props.isPending || barChartData.length === 0; return (
@@ -126,7 +126,7 @@ export function DailyConnectionsChartCard(props: { config={chartConfig} className="w-full h-[250px] md:h-[350px]" > - {props.isLoading ? ( + {props.isPending ? ( ) : barChartData.length === 0 ? ( diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartCard.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartCard.tsx index 776e8fc6f90..92d903931ba 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartCard.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartCard.tsx @@ -34,7 +34,7 @@ const chartLabelToShow: Record = { }; export function WalletConnectorsChartCard(props: { walletStats: WalletStats[]; - isLoading: boolean; + isPending: boolean; }) { const { walletStats } = props; const [chartToShow, setChartToShow] = useState( @@ -90,7 +90,7 @@ export function WalletConnectorsChartCard(props: { }, [walletStats, chartToShow]); const uniqueWalletTypes = Object.keys(chartConfig); - const disableActions = props.isLoading || chartData.length === 0; + const disableActions = props.isPending || chartData.length === 0; return (
@@ -142,7 +142,7 @@ export function WalletConnectorsChartCard(props: { {/* Chart */} - {props.isLoading ? ( + {props.isPending ? ( ) : chartData.length === 0 ? ( diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartChart.stories.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartChart.stories.tsx index af3107d536c..a3c699bbecd 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartChart.stories.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletConnectorsChartChart.stories.tsx @@ -34,35 +34,35 @@ function Component() {
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.stories.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.stories.tsx index 9a872ea5206..cb85e93fab9 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.stories.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.stories.tsx @@ -34,35 +34,35 @@ function Component() {
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.tsx index 749a8793c4a..66e6383a6ba 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/connect/analytics/_components/WalletDistributionChartCard.tsx @@ -37,7 +37,7 @@ const chartLabelToShow: Record = { export function WalletDistributionChartCard(props: { walletStats: WalletStats[]; - isLoading: boolean; + isPending: boolean; }) { const { walletStats } = props; const [chartToShow, setChartToShow] = useState("total"); @@ -114,7 +114,7 @@ export function WalletDistributionChartCard(props: { }; }, [walletStats]); - const disableActions = props.isLoading || chartData.length === 0; + const disableActions = props.isPending || chartData.length === 0; return (

@@ -131,7 +131,7 @@ export function WalletDistributionChartCard(props: { setChartToShow(v as ChartToShow); }} value={chartToShow} - disabled={props.isLoading || chartData.length === 0} + disabled={props.isPending || chartData.length === 0} > @@ -184,7 +184,7 @@ export function WalletDistributionChartCard(props: { config={chartConfig} className="w-full h-[500px] [&_.recharts-pie-label-text]:fill-foreground mt-6" > - {props.isLoading ? ( + {props.isPending ? ( ) : chartData.length === 0 ? ( diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx index 89070b0dc61..5f779938fe8 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/contracts/page.tsx @@ -11,7 +11,7 @@ export default function Page() { const hasContracts = deployedContracts.data && deployedContracts.data?.length > 0; - if (deployedContracts.isLoading) { + if (deployedContracts.isPending) { return (
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx index 8530c8e7511..61aedd8d60c 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx @@ -283,7 +283,7 @@ function ProjectNameSetting(props: { saveButton={{ onClick: handleSubmit, disabled: !isNameDirty, - isLoading: updateMutation.isPending && isNameDirty, + isPending: updateMutation.isPending && isNameDirty, }} bottomText="Please use 64 characters at maximum" > @@ -349,7 +349,7 @@ function AllowedDomainsSetting(props: { saveButton={{ onClick: handleSubmit, disabled: !isDomainsDirty, - isLoading: updateMutation.isPending && isDomainsDirty, + isPending: updateMutation.isPending && isDomainsDirty, }} bottomText={"This is only applicable for web applications"} > @@ -417,7 +417,7 @@ function AllowedBundleIDsSetting(props: { saveButton={{ onClick: handleSubmit, disabled: !isBundleIdsDirty, - isLoading: updateMutation.isPending && isBundleIdsDirty, + isPending: updateMutation.isPending && isBundleIdsDirty, }} noPermissionText={undefined} header={{ @@ -523,7 +523,7 @@ function EnabledServicesSetting(props: { saveButton={{ onClick: handleSubmit, disabled: !form.formState.isDirty, - isLoading: updateMutation.isPending, + isPending: updateMutation.isPending, }} bottomText="" > @@ -739,7 +739,7 @@ function DeleteProject(props: { description: description, }} description={description} - isLoading={deleteMutation.isPending} + isPending={deleteMutation.isPending} title={wording === "project" ? "Delete Project" : "Delete API Key"} /> ); diff --git a/apps/dashboard/src/components/buttons/MismatchButton.tsx b/apps/dashboard/src/components/buttons/MismatchButton.tsx index 5995df9be64..1db5db3954b 100644 --- a/apps/dashboard/src/components/buttons/MismatchButton.tsx +++ b/apps/dashboard/src/components/buttons/MismatchButton.tsx @@ -121,7 +121,7 @@ export const MismatchButton = forwardRef( > + + + + + + + ); +} diff --git a/apps/dashboard/src/components/engine/alerts/EngineAlertsPage.tsx b/apps/dashboard/src/components/engine/alerts/EngineAlertsPage.tsx new file mode 100644 index 00000000000..9c2aa668ab2 --- /dev/null +++ b/apps/dashboard/src/components/engine/alerts/EngineAlertsPage.tsx @@ -0,0 +1,29 @@ +import { + type EngineInstance, + useEngineAlertRules, +} from "@3rdweb-sdk/react/hooks/useEngine"; +import { ManageEngineAlertsSection } from "./ManageEngineAlerts"; +import { RecentEngineAlertsSection } from "./RecentEngineAlerts"; + +export function EngineAlertsPage(props: { + instance: EngineInstance; +}) { + const alertRulesQuery = useEngineAlertRules(props.instance.id); + const alertRules = alertRulesQuery.data ?? []; + + return ( +
+ +
+ +
+ ); +} diff --git a/apps/dashboard/src/components/engine/alerts/EngineDeleteAlertModal.tsx b/apps/dashboard/src/components/engine/alerts/EngineDeleteAlertModal.tsx new file mode 100644 index 00000000000..bfe15c4b161 --- /dev/null +++ b/apps/dashboard/src/components/engine/alerts/EngineDeleteAlertModal.tsx @@ -0,0 +1,52 @@ +import { Spinner } from "@/components/ui/Spinner/Spinner"; +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { DialogDescription } from "@radix-ui/react-dialog"; + +export function EngineDeleteAlertModal(props: { + onConfirm: () => void; + isPending: boolean; + open: boolean; + onOpenChange: (open: boolean) => void; +}) { + return ( + + + + + Delete Alert + + + + You will no longer receive notifications from this webhook. + + + + + + + + + + ); +} diff --git a/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.stories.tsx b/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.stories.tsx new file mode 100644 index 00000000000..40eb1559b65 --- /dev/null +++ b/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.stories.tsx @@ -0,0 +1,131 @@ +import type { + CreateNotificationChannelInput, + EngineNotificationChannel, +} from "@3rdweb-sdk/react/hooks/useEngine"; +import type { Meta, StoryObj } from "@storybook/react"; +import { useMutation } from "@tanstack/react-query"; +import { Toaster } from "sonner"; +import { + createEngineAlertRuleStub, + createEngineNotificationChannelStub, +} from "../../../stories/stubs"; +import { BadgeContainer, mobileViewport } from "../../../stories/utils"; +import { ManageEngineAlertsSectionUI } from "./ManageEngineAlerts"; + +const meta = { + title: "engine/alerts/manage", + component: Story, + parameters: { + nextjs: { + appDirectory: true, + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Desktop: Story = { + args: {}, +}; + +export const Mobile: Story = { + args: {}, + parameters: { + viewport: mobileViewport("iphone14"), + }, +}; + +function Story() { + const createEngineAlertMutation = useMutation({ + mutationFn: async (values: CreateNotificationChannelInput) => { + console.log("creating alert using input:", values); + + await new Promise((resolve) => setTimeout(resolve, 1000)); + + const channelStub: EngineNotificationChannel = { + createdAt: new Date(), + id: "new-channel", + pausedAt: null, + subscriptionRoutes: values.subscriptionRoutes, + value: values.value, + type: values.type, + }; + + console.log("created channel:", channelStub); + return channelStub; + }, + }); + + async function deleteAlert(alertId: string) { + console.log("deleting alert:", alertId); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + return ( +
+ + {}} + engineId="test-engine-id" + createAlertMutation={createEngineAlertMutation} + deleteAlert={deleteAlert} + alertRules={[ + createEngineAlertRuleStub("foo"), + createEngineAlertRuleStub("bar"), + ]} + notificationChannels={[ + createEngineNotificationChannelStub("foo"), + createEngineNotificationChannelStub("foo", { + pausedAt: null, + }), + ]} + /> + + + + {}} + createAlertMutation={createEngineAlertMutation} + deleteAlert={deleteAlert} + /> + + + + {}} + createAlertMutation={createEngineAlertMutation} + deleteAlert={deleteAlert} + /> + + + + {}} + createAlertMutation={createEngineAlertMutation} + deleteAlert={deleteAlert} + /> + + +
+ ); +} diff --git a/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.tsx b/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.tsx new file mode 100644 index 00000000000..08f6da007e3 --- /dev/null +++ b/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.tsx @@ -0,0 +1,383 @@ +"use client"; +import { CopyTextButton } from "@/components/ui/CopyTextButton"; +import { Spinner } from "@/components/ui/Spinner/Spinner"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { ToolTipLabel } from "@/components/ui/tooltip"; +import { + type CreateNotificationChannelInput, + type EngineAlertRule, + type EngineNotificationChannel, + useEngineCreateNotificationChannel, + useEngineDeleteNotificationChannel, + useEngineNotificationChannels, +} from "@3rdweb-sdk/react/hooks/useEngine"; +import { type UseMutationResult, useMutation } from "@tanstack/react-query"; +import { formatDate } from "date-fns"; +import { EllipsisVerticalIcon, PlusIcon } from "lucide-react"; +import { useState } from "react"; +import { toast } from "sonner"; +import { EngineAlertDialogForm } from "./EngineAlertDialogForm"; +import { EngineDeleteAlertModal } from "./EngineDeleteAlertModal"; + +type CreateAlertMutation = UseMutationResult< + EngineNotificationChannel, + unknown, + CreateNotificationChannelInput, + unknown +>; + +export function ManageEngineAlertsSection(props: { + alertRules: EngineAlertRule[]; + alertRulesIsLoading: boolean; + engineId: string; +}) { + const notificationChannelsQuery = useEngineNotificationChannels( + props.engineId, + ); + const deleteAlertMutation = useEngineDeleteNotificationChannel( + props.engineId, + ); + + const createAlertMutation = useEngineCreateNotificationChannel( + props.engineId, + ); + + // not passing the mutation to avoid multiple rows sharing the same mutation state, we create the new mutation for each row instead in each component instead + async function deleteAlert(notificationChannelId: string) { + return deleteAlertMutation.mutate(notificationChannelId); + } + + return ( + { + notificationChannelsQuery.refetch(); + }} + createAlertMutation={createAlertMutation} + deleteAlert={deleteAlert} + /> + ); +} + +export function ManageEngineAlertsSectionUI(props: { + alertRules: EngineAlertRule[]; + engineId: string; + notificationChannels: EngineNotificationChannel[]; + isLoading: boolean; + onAlertsUpdated: () => void; + createAlertMutation: CreateAlertMutation; + deleteAlert: (notificationChannelId: string) => Promise; +}) { + const { + engineId, + notificationChannels, + isLoading, + onAlertsUpdated, + createAlertMutation, + deleteAlert, + } = props; + + return ( +
+
+
+

+ Manage Alerts +

+

+ Get notified when alerts are triggered on your Engine instance. +

+
+ + +
+ +
+ + {notificationChannels.length === 0 || isLoading ? ( +
+ {isLoading ? : "No alerts set up yet."} +
+ ) : ( + + )} +
+ ); +} + +function EngineAlertsTableUI(props: { + engineId: string; + alertRules: EngineAlertRule[]; + notificationChannels: EngineNotificationChannel[]; + onAlertsUpdated: () => void; + deleteAlert: (notificationChannelId: string) => Promise; +}) { + return ( + + + + + Status + Alert Rule + Notification Type + Created At + + + + + {props.notificationChannels.map((notificationChannel) => { + const isPaused = notificationChannel.pausedAt !== null; + + return ( + + + + {isPaused ? "Paused" : "Active"} + + + + + {getMatchingAlertRules( + notificationChannel.subscriptionRoutes, + props.alertRules, + ).map((alertRule) => ( +

{alertRule.title}

+ ))} +
+ + + + {notificationChannel.type} + + + + + + + {formatDate( + new Date(notificationChannel.createdAt), + "MMM dd, yyyy", + )} + + + + + +
+ ); + })} +
+
+
+ ); +} + +function CreateAlertButton(props: { + engineId: string; + alertRules: EngineAlertRule[]; + onSuccess: () => void; + createAlertMutation: CreateAlertMutation; +}) { + const [isModalOpen, setIsModalOpen] = useState(false); + const { createAlertMutation } = props; + + return ( + <> + + + + + { + const addPromise = createAlertMutation.mutateAsync(values); + + toast.promise(addPromise, { + success: "Alert added successfully", + error: "Failed to add alert", + }); + + addPromise.then(() => { + setIsModalOpen(false); + props.onSuccess(); + }); + }, + }} + values={null} + /> + + ); +} + +function AlertOptionsButton(props: { + alertRules: EngineAlertRule[]; + engineId: string; + notificationChannel: EngineNotificationChannel; + onDeleteSuccess: () => void; + deleteAlert: (notificationChannelId: string) => Promise; +}) { + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); + const deleteMutation = useMutation({ + mutationFn: props.deleteAlert, + }); + + return ( + <> + + + + + + { + setIsDeleteModalOpen(true); + }} + > + Delete + + + + + { + const deletePromise = deleteMutation.mutateAsync( + props.notificationChannel.id, + ); + + toast.promise(deletePromise, { + success: "Alert Deleted Successfully", + error: "Failed To Delete Alert", + }); + deletePromise.then(() => { + setIsDeleteModalOpen(false); + props.onDeleteSuccess(); + }); + }} + open={isDeleteModalOpen} + onOpenChange={setIsDeleteModalOpen} + /> + + ); +} + +const getMatchingAlertRules = ( + subscriptionRoutes: string[], + alertRules: EngineAlertRule[], +): EngineAlertRule[] => { + const results: EngineAlertRule[] = []; + + for (const alertRule of alertRules) { + for (const subscriptionRoute of subscriptionRoutes) { + if (isRoutingKeyMatch(subscriptionRoute, alertRule.routingKey)) { + results.push(alertRule); + break; + } + } + } + + return results; +}; + +/** + * Check if routingKey matches subscriptionRoute. + * + * Example: exact match + * `alert.stuck-nonce` matches `alert.stuck-nonce` + * + * Example: wildcard + * `alert.*` matches `alert.stuck-nonce` + */ +const isRoutingKeyMatch = ( + subscriptionRoute: string, + alertRoutingKey: string, +): boolean => { + if (!subscriptionRoute.includes("*")) { + // Check exact match if no wildcard. + return subscriptionRoute === alertRoutingKey; + } + + const [prefix, suffix] = subscriptionRoute.split("*"); + if (prefix && !subscriptionRoute.startsWith(prefix)) return false; + if (suffix && !subscriptionRoute.endsWith(suffix)) return false; + + return true; +}; + +const truncateValue = (str: string): string => { + if (str.length <= 16) return str; + return `${str.slice(0, 12)}...${str.slice(-4)}`; +}; diff --git a/apps/dashboard/src/components/engine/alerts/RecentEngineAlerts.stories.tsx b/apps/dashboard/src/components/engine/alerts/RecentEngineAlerts.stories.tsx new file mode 100644 index 00000000000..1bfe8ff1520 --- /dev/null +++ b/apps/dashboard/src/components/engine/alerts/RecentEngineAlerts.stories.tsx @@ -0,0 +1,75 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Toaster } from "sonner"; +import { + createEngineAlertRuleStub, + createEngineAlertStub, +} from "../../../stories/stubs"; +import { BadgeContainer, mobileViewport } from "../../../stories/utils"; +import { RecentEngineAlertsSectionUI } from "./RecentEngineAlerts"; + +const meta = { + title: "engine/alerts/recent", + component: Story, + parameters: { + nextjs: { + appDirectory: true, + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Desktop: Story = { + args: {}, +}; + +export const Mobile: Story = { + args: {}, + parameters: { + viewport: mobileViewport("iphone14"), + }, +}; + +function Story() { + return ( +
+ + {}} + alertRules={[createEngineAlertRuleStub("foo")]} + alerts={[ + createEngineAlertStub("foo"), + createEngineAlertStub("foo", { + status: "firing", + }), + createEngineAlertStub("foo", { + status: "resolved", + }), + ]} + /> + + + + {}} + /> + + + + {}} + /> + + + +
+ ); +} diff --git a/apps/dashboard/src/components/engine/alerts/RecentEngineAlerts.tsx b/apps/dashboard/src/components/engine/alerts/RecentEngineAlerts.tsx new file mode 100644 index 00000000000..ac8055b9e94 --- /dev/null +++ b/apps/dashboard/src/components/engine/alerts/RecentEngineAlerts.tsx @@ -0,0 +1,138 @@ +"use client"; + +import { Spinner } from "@/components/ui/Spinner/Spinner"; +import { Badge, type BadgeProps } from "@/components/ui/badge"; +import { + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { + type EngineAlert, + type EngineAlertRule, + useEngineAlerts, +} from "@3rdweb-sdk/react/hooks/useEngine"; +import { formatDistance } from "date-fns"; +import { useMemo } from "react"; + +export function RecentEngineAlertsSection(props: { + alertRules: EngineAlertRule[]; + alertRulesIsLoading: boolean; + engineId: string; +}) { + // TODO - pagination + // required : return the total number of alerts in response from API + const alertsQuery = useEngineAlerts(props.engineId, 100, 0); + const alerts = alertsQuery.data ?? []; + + return ( + { + alertsQuery.refetch(); + }} + /> + ); +} + +export function RecentEngineAlertsSectionUI(props: { + alertRules: EngineAlertRule[]; + alerts: EngineAlert[]; + isLoading: boolean; + onAlertsUpdated: () => void; +}) { + const { alerts, isLoading } = props; + return ( +
+

+ Recent Alerts +

+ +
+ + {alerts.length === 0 || isLoading ? ( +
+ {isLoading ? : "No alerts triggered."} +
+ ) : ( + + )} +
+ ); +} + +function RecentEngineAlertsTableUI(props: { + alertRules: EngineAlertRule[]; + alerts: EngineAlert[]; + onAlertsUpdated: () => void; +}) { + const alertRulesMap = useMemo(() => { + const map: Record = {}; + for (const alertRule of props.alertRules) { + map[alertRule.id] = alertRule; + } + return map; + }, [props.alertRules]); + + return ( + + + + + Alert Trigger + Status + Timestamp + + + + {props.alerts.map((alert) => { + let variant: BadgeProps["variant"]; + let status: string; + if (alert.status === "pending") { + variant = "warning"; + status = "Pending"; + } else if (alert.status === "firing") { + variant = "destructive"; + status = "Triggered"; + } else if (alert.status === "resolved") { + variant = "success"; + status = "Resolved"; + } else { + return null; + } + + return ( + + {alertRulesMap[alert.alertRuleId]?.title} + + + + {status} + + + + + {formatDistance( + new Date(alert.endsAt ?? alert.startsAt), + new Date(), + { addSuffix: true }, + )} + + + ); + })} + +
+
+ ); +} diff --git a/apps/dashboard/src/components/engine/system-metrics/index.tsx b/apps/dashboard/src/components/engine/system-metrics/index.tsx index 01f0d89e19f..0d3f9f4ee93 100644 --- a/apps/dashboard/src/components/engine/system-metrics/index.tsx +++ b/apps/dashboard/src/components/engine/system-metrics/index.tsx @@ -70,37 +70,48 @@ export const EngineSystemMetrics: React.FC = ({ ); } - let queueMetricsPanel = ; - if (!queueMetricsQuery.data || queueMetricsQuery.isError) { - queueMetricsPanel =

N/A

; - } else { + let queueMetricsPanel = ( +
+ +
+ ); + + if ( + !queueMetricsQuery.isPending && + (!queueMetricsQuery.data || queueMetricsQuery.isError) + ) { + queueMetricsPanel = ( +
+ No Data Available +
+ ); + } else if (queueMetricsQuery.data) { const numQueued = queueMetricsQuery.data.result.queued; const numPending = queueMetricsQuery.data.result.pending; const msToSend = queueMetricsQuery.data.result.latency?.msToSend; const msToMine = queueMetricsQuery.data.result.latency?.msToMine; queueMetricsPanel = ( - - + + - Queue Metrics -
+
-

# queued

-

{numQueued}

+

Queued

+

{numQueued}

-

# pending

-

{numPending}

+

Pending

+

{numPending}

{msToSend && (

Time to send

-

+

p50 {(msToSend.p50 / 1000).toFixed(2)}s, p90{" "} {(msToSend.p90 / 1000).toFixed(2)}s

@@ -109,8 +120,10 @@ export const EngineSystemMetrics: React.FC = ({ {msToMine && (

Time to mine

- p50 {(msToMine.p50 / 1000).toFixed(2)}s, p90{" "} - {(msToMine.p90 / 1000).toFixed(2)}s +

+ p50 {(msToMine.p50 / 1000).toFixed(2)}s, p90{" "} + {(msToMine.p90 / 1000).toFixed(2)}s +

)}
diff --git a/apps/dashboard/src/pages/dashboard/engine/[engineId]/alerts.tsx b/apps/dashboard/src/pages/dashboard/engine/[engineId]/alerts.tsx new file mode 100644 index 00000000000..12d22a617f4 --- /dev/null +++ b/apps/dashboard/src/pages/dashboard/engine/[engineId]/alerts.tsx @@ -0,0 +1,6 @@ +import { createEnginePage } from "components/engine/EnginePage"; +import { EngineAlertsPage } from "../../../../components/engine/alerts/EngineAlertsPage"; + +export default createEnginePage(({ instance }) => ( + +)); diff --git a/apps/dashboard/src/stories/stubs.ts b/apps/dashboard/src/stories/stubs.ts index 13bd2bc771a..40823b14172 100644 --- a/apps/dashboard/src/stories/stubs.ts +++ b/apps/dashboard/src/stories/stubs.ts @@ -1,6 +1,11 @@ import type { Project } from "@/api/projects"; import type { Team } from "@/api/team"; import type { ApiKey, ApiKeyService } from "@3rdweb-sdk/react/hooks/useApi"; +import type { + EngineAlert, + EngineAlertRule, + EngineNotificationChannel, +} from "@3rdweb-sdk/react/hooks/useEngine"; function projectStub(id: string, teamId: string) { const project: Project = { @@ -106,3 +111,48 @@ export function createApiKeyStub() { return apiKeyStub; } + +export function createEngineAlertRuleStub( + id: string, + overrides: Partial = {}, +): EngineAlertRule { + return { + title: `Alert Rule ${id}`, + routingKey: `alert.${id}`, + description: `This is a description for alert rule ${id}`, + id: `alert-rule-${id}`, + createdAt: new Date(), + pausedAt: null, + ...overrides, + }; +} + +export function createEngineNotificationChannelStub( + id: string, + overrides: Partial = {}, +): EngineNotificationChannel { + return { + id: Math.random().toString(), + subscriptionRoutes: [`alert.${id}`], + type: "slack", + value: + "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX", + createdAt: new Date(), + pausedAt: new Date(), + ...overrides, + }; +} + +export function createEngineAlertStub( + id: string, + overrides: Partial = {}, +): EngineAlert { + return { + alertRuleId: `alert-rule-${id}`, + endsAt: new Date(), + id: Math.random().toString(), + startsAt: new Date(), + status: "pending", + ...overrides, + }; +} From 07d191bd8b3278cfbb9faef0a4f55cf1e87dc0d4 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Fri, 20 Sep 2024 15:12:04 -0700 Subject: [PATCH 62/78] Version Packages (#4710) Co-authored-by: github-actions[bot] --- .changeset/breezy-guests-count.md | 17 ----------------- .changeset/nasty-doors-fold.md | 5 ----- .changeset/proud-files-drop.md | 5 ----- .changeset/purple-hairs-end.md | 5 ----- .changeset/quick-hotels-repair.md | 5 ----- .changeset/rude-frogs-learn.md | 5 ----- packages/thirdweb/CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ packages/thirdweb/package.json | 2 +- 8 files changed, 31 insertions(+), 43 deletions(-) delete mode 100644 .changeset/breezy-guests-count.md delete mode 100644 .changeset/nasty-doors-fold.md delete mode 100644 .changeset/proud-files-drop.md delete mode 100644 .changeset/purple-hairs-end.md delete mode 100644 .changeset/quick-hotels-repair.md delete mode 100644 .changeset/rude-frogs-learn.md diff --git a/.changeset/breezy-guests-count.md b/.changeset/breezy-guests-count.md deleted file mode 100644 index 02363f47f12..00000000000 --- a/.changeset/breezy-guests-count.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -"thirdweb": minor ---- - -Login to an in-app wallet with your Coinbase account - -```ts -import { inAppWallet } from "thirdweb/react" - -const wallet = inAppWallet(); - -const account = await wallet.connect({ - strategy: "coinbase", - chain: mainnet, - client: thirdwebClient, -}); -``` diff --git a/.changeset/nasty-doors-fold.md b/.changeset/nasty-doors-fold.md deleted file mode 100644 index 8fd5320bb38..00000000000 --- a/.changeset/nasty-doors-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Displays the social login provider in the details modal diff --git a/.changeset/proud-files-drop.md b/.changeset/proud-files-drop.md deleted file mode 100644 index 4abbcdbf403..00000000000 --- a/.changeset/proud-files-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Migrates existing sharded ecosystem wallets to enclaves diff --git a/.changeset/purple-hairs-end.md b/.changeset/purple-hairs-end.md deleted file mode 100644 index f6ed63879d2..00000000000 --- a/.changeset/purple-hairs-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Export `isGetNFTSupported` extension from "thirdweb/erc1155/extensions" diff --git a/.changeset/quick-hotels-repair.md b/.changeset/quick-hotels-repair.md deleted file mode 100644 index db08f3b6afb..00000000000 --- a/.changeset/quick-hotels-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Fix showing user info for ecosystem wallets diff --git a/.changeset/rude-frogs-learn.md b/.changeset/rude-frogs-learn.md deleted file mode 100644 index d29d134bab2..00000000000 --- a/.changeset/rude-frogs-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Improve arrangement of social icons in Connect UI diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index ba67e64a2f9..7f13e72bee7 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,35 @@ # thirdweb +## 5.58.0 + +### Minor Changes + +- [#4692](https://github.com/thirdweb-dev/js/pull/4692) [`0a7448c`](https://github.com/thirdweb-dev/js/commit/0a7448cb2b739b3882824fc98ef075a0416d6434) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Login to an in-app wallet with your Coinbase account + + ```ts + import { inAppWallet } from "thirdweb/react"; + + const wallet = inAppWallet(); + + const account = await wallet.connect({ + strategy: "coinbase", + chain: mainnet, + client: thirdwebClient, + }); + ``` + +### Patch Changes + +- [#4709](https://github.com/thirdweb-dev/js/pull/4709) [`b033784`](https://github.com/thirdweb-dev/js/commit/b0337849a5f7f6542eb48eed013236ec14ce189a) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Displays the social login provider in the details modal + +- [#4684](https://github.com/thirdweb-dev/js/pull/4684) [`c1008a5`](https://github.com/thirdweb-dev/js/commit/c1008a5314616c2e0ffa33af0fcfa9dd58855e9a) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Migrates existing sharded ecosystem wallets to enclaves + +- [#4716](https://github.com/thirdweb-dev/js/pull/4716) [`3229e1f`](https://github.com/thirdweb-dev/js/commit/3229e1f03c3cbb62ddc8dccf22ad8a8feb0a95f0) Thanks [@MananTank](https://github.com/MananTank)! - Export `isGetNFTSupported` extension from "thirdweb/erc1155/extensions" + +- [#4715](https://github.com/thirdweb-dev/js/pull/4715) [`7d547a4`](https://github.com/thirdweb-dev/js/commit/7d547a4e336ae7c1e43c8413a1640452d1e1f8f9) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix showing user info for ecosystem wallets + +- [#4718](https://github.com/thirdweb-dev/js/pull/4718) [`11a833e`](https://github.com/thirdweb-dev/js/commit/11a833e1dce3cfa51745e2ddee9354a1c2003905) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Improve arrangement of social icons in Connect UI + ## 5.57.3 ### Patch Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 09adb93483c..eb01a458e8d 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.57.3", + "version": "5.58.0", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" From f8e69989a368416b5f2d2c32bb64593927d7ab28 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Sat, 21 Sep 2024 10:52:32 +1200 Subject: [PATCH 63/78] feat(playground): update ecosystem for prod (#4731) --- .../src/components/in-app-wallet/ecosystem.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/playground-web/src/components/in-app-wallet/ecosystem.tsx b/apps/playground-web/src/components/in-app-wallet/ecosystem.tsx index 36557885234..fc119a3b53d 100644 --- a/apps/playground-web/src/components/in-app-wallet/ecosystem.tsx +++ b/apps/playground-web/src/components/in-app-wallet/ecosystem.tsx @@ -4,12 +4,14 @@ import { ecosystemWallet } from "thirdweb/wallets"; import { StyledConnectEmbed } from "../styled-connect-embed"; const getEcosystem = () => { - if (process.env.NEXT_PUBLIC_IN_APP_WALLET_URL?.endsWith(".thirdweb.com")) { - // prod ecosystem - return "ecosystem.new-age"; + if ( + process.env.NEXT_PUBLIC_IN_APP_WALLET_URL?.endsWith(".thirdweb-dev.com") + ) { + // dev ecosystem + return "ecosystem.bonfire-development"; } - // dev ecosystem - return "ecosystem.bonfire-development"; + // prod ecosystem + return "ecosystem.new-age"; }; export function EcosystemConnectEmbed( From 786ef9d7771d29fbab7c4449bdd980eeff606591 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Fri, 20 Sep 2024 23:11:42 +0000 Subject: [PATCH 64/78] Docs: Get User Page (#4730) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to add guides for retrieving user details from the server using In-App Wallets and pregenerating user wallets. ### Detailed summary - Added guide for retrieving In-App Wallet user details on the server - Added guide for pregenerating user wallets - Updated sidebar links for better navigation > The following files were skipped due to too many changes: `apps/portal/src/app/connect/sidebar.tsx`, `apps/portal/redirects.mjs` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/portal/redirects.mjs | 619 ++++++---- .../ecosystems/pregenerate-wallets/page.mdx | 53 + .../page.mdx | 74 -- .../guides/get-user-details/page.mdx | 128 ++ apps/portal/src/app/connect/sidebar.tsx | 1079 +++++++++-------- .../page.mdx | 58 - .../how-to/get-user-details/page.mdx | 60 + 7 files changed, 1196 insertions(+), 875 deletions(-) create mode 100644 apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx delete mode 100644 apps/portal/src/app/connect/in-app-wallet/guides/get-in-app-wallet-details-on-server/page.mdx create mode 100644 apps/portal/src/app/connect/in-app-wallet/guides/get-user-details/page.mdx delete mode 100644 apps/portal/src/app/react/v5/in-app-wallet/how-to/get-in-app-wallet-details-on-server/page.mdx create mode 100644 apps/portal/src/app/react/v5/in-app-wallet/how-to/get-user-details/page.mdx diff --git a/apps/portal/redirects.mjs b/apps/portal/redirects.mjs index 261415ed326..93ff2bc49fd 100644 --- a/apps/portal/redirects.mjs +++ b/apps/portal/redirects.mjs @@ -40,34 +40,49 @@ const reactRedirects = { "/react/react.usecontractwrite": "/references/react/v4/useContractWrite", "/react/react.usecontractevents": "/references/react/v4/useContractEvents", "/react/react.usesdk": "/references/react/v4/useSDK", - "/react/react.useactiveclaimcondition": "/references/react/v4/useActiveClaimCondition", - "/react/react.useactiveclaimconditionforwallet": "/references/react/v4/useActiveClaimConditionForWallet", + "/react/react.useactiveclaimcondition": + "/references/react/v4/useActiveClaimCondition", + "/react/react.useactiveclaimconditionforwallet": + "/references/react/v4/useActiveClaimConditionForWallet", "/react/react.useclaimconditions": "/references/react/v4/useClaimConditions", "/react/react.useclaimerproofs": "/references/react/v4/useClaimerProofs", - "/react/react.useclaimineligibilityreasons": "/references/react/v4/useClaimIneligibilityReasons", - "/react/react.usesetclaimconditions": "/references/react/v4/useSetClaimConditions", + "/react/react.useclaimineligibilityreasons": + "/references/react/v4/useClaimIneligibilityReasons", + "/react/react.usesetclaimconditions": + "/references/react/v4/useSetClaimConditions", "/react/react.usebatchestoreveal": "/references/react/v4/useBatchesToReveal", - "/react/react.usedelayedreveallazymint": "/references/react/v4/useDelayedRevealLazyMint", + "/react/react.usedelayedreveallazymint": + "/references/react/v4/useDelayedRevealLazyMint", "/react/react.usereveallazymint": "/references/react/v4/useRevealLazyMint", - "/react/react.useacceptdirectlistingoffer": "/references/react/v4/useAcceptDirectListingOffer", + "/react/react.useacceptdirectlistingoffer": + "/references/react/v4/useAcceptDirectListingOffer", "/react/react.useactivelistings": "/references/react/v4/useActiveListings", "/react/react.useauctionwinner": "/references/react/v4/useAuctionWinner", "/react/react.usebidbuffer": "/references/react/v4/useBidBuffer", - "/react/react.usebuydirectlisting": "/references/react/v4/useBuyDirectListing", + "/react/react.usebuydirectlisting": + "/references/react/v4/useBuyDirectListing", "/react/react.usebuynow": "/references/react/v4/useBuyNow", - "/react/react.usecanceldirectlisting": "/references/react/v4/useCancelDirectListing", - "/react/react.usecancelenglishauction": "/references/react/v4/useCancelEnglishAuction", + "/react/react.usecanceldirectlisting": + "/references/react/v4/useCancelDirectListing", + "/react/react.usecancelenglishauction": + "/references/react/v4/useCancelEnglishAuction", "/react/react.usecancellisting": "/references/react/v4/useCancelListing", - "/react/react.usecreateauctionlisting": "/references/react/v4/useCreateAuctionListing", - "/react/react.usecreatedirectlisting": "/references/react/v4/useCreateDirectListing", + "/react/react.usecreateauctionlisting": + "/references/react/v4/useCreateAuctionListing", + "/react/react.usecreatedirectlisting": + "/references/react/v4/useCreateDirectListing", "/react/react.usedirectlisting": "/references/react/v4/useDirectListing", "/react/react.usedirectlistings": "/references/react/v4/useDirectListings", - "/react/react.usedirectlistingscount": "/references/react/v4/useDirectListingsCount", + "/react/react.usedirectlistingscount": + "/references/react/v4/useDirectListingsCount", "/react/react.useenglishauction": "/references/react/v4/useEnglishAuction", "/react/react.useenglishauctions": "/references/react/v4/useEnglishAuctions", - "/react/react.useenglishauctionscount": "/references/react/v4/useEnglishAuctionsCount", - "/react/react.useenglishauctionwinningbid": "/references/react/v4/useEnglishAuctionWinningBid", - "/react/react.useexecuteauctionsale": "/references/react/v4/useExecuteAuctionSale", + "/react/react.useenglishauctionscount": + "/references/react/v4/useEnglishAuctionsCount", + "/react/react.useenglishauctionwinningbid": + "/references/react/v4/useEnglishAuctionWinningBid", + "/react/react.useexecuteauctionsale": + "/references/react/v4/useExecuteAuctionSale", "/react/react.uselisting": "/references/react/v4/useListing", "/react/react.uselistings": "/references/react/v4/useListings", "/react/react.uselistingscount": "/references/react/v4/useListingsCount", @@ -75,13 +90,17 @@ const reactRedirects = { "/react/react.usemakeoffer": "/references/react/v4/useMakeOffer", "/react/react.useminimumnextbid": "/references/react/v4/useMinimumNextBid", "/react/react.useoffers": "/references/react/v4/useOffers", - "/react/react.usevaliddirectlistings": "/references/react/v4/useValidDirectListings", - "/react/react.usevalidenglishauctions": "/references/react/v4/useValidEnglishAuctions", + "/react/react.usevaliddirectlistings": + "/references/react/v4/useValidDirectListings", + "/react/react.usevalidenglishauctions": + "/references/react/v4/useValidEnglishAuctions", "/react/react.usewinningbid": "/references/react/v4/useWinningBid", - "/react/react.usecompilermetadata": "/references/react/v4/useCompilerMetadata", + "/react/react.usecompilermetadata": + "/references/react/v4/useCompilerMetadata", "/react/react.usecontracttype": "/references/react/v4/useContractType", "/react/react.usemetadata": "/references/react/v4/useMetadata", - "/react/react.useresolvedmediatype": "/references/react/v4/useResolvedMediaType", + "/react/react.useresolvedmediatype": + "/references/react/v4/useResolvedMediaType", "/react/react.useupdatemetadata": "/references/react/v4/useUpdateMetadata", "/react/react.usechain": "/references/react/v4/useChain", "/react/react.useSwitchChain": "/references/react/v4/useSwitchChain", @@ -94,41 +113,52 @@ const reactRedirects = { "/react/react.usenftbalance": "/references/react/v4/useNFTBalance", "/react/react.usenfts": "/references/react/v4/useNFTs", "/react/react.useownednfts": "/references/react/v4/useOwnedNFTs", - "/react/react.usetotalcirculatingsupply": "/references/react/v4/useTotalCirculatingSupply", + "/react/react.usetotalcirculatingsupply": + "/references/react/v4/useTotalCirculatingSupply", "/react/react.usetotalcount": "/references/react/v4/useTotalCount", "/react/react.usetransfernft": "/references/react/v4/useTransferNFT", "/react/react.useclaimednfts": "/references/react/v4/useClaimedNFTs", - "/react/react.useclaimednftsupply": "/references/react/v4/useClaimedNFTSupply", + "/react/react.useclaimednftsupply": + "/references/react/v4/useClaimedNFTSupply", "/react/react.useclaimnft": "/references/react/v4/useClaimNFT", "/react/react.uselazymint": "/references/react/v4/useLazyMint", - "/react/react.useresetclaimconditions": "/references/react/v4/useResetClaimConditions", + "/react/react.useresetclaimconditions": + "/references/react/v4/useResetClaimConditions", "/react/react.useunclaimednfts": "/references/react/v4/useUnclaimedNFTs", - "/react/react.useunclaimednftsupply": "/references/react/v4/useUnclaimedNFTSupply", + "/react/react.useunclaimednftsupply": + "/references/react/v4/useUnclaimedNFTSupply", "/react/react.useallrolemembers": "/references/react/v4/useAllRoleMembers", "/react/react.usegrantrole": "/references/react/v4/useGrantRole", "/react/react.useisaddressrole": "/references/react/v4/useIsAddressRole", "/react/react.userevokerole": "/references/react/v4/useRevokeRole", "/react/react.userolemembers": "/references/react/v4/useRoleMembers", "/react/react.useplatformfees": "/references/react/v4/usePlatformFees", - "/react/react.useprimarysalerecipient": "/references/react/v4/usePrimarySaleRecipient", + "/react/react.useprimarysalerecipient": + "/references/react/v4/usePrimarySaleRecipient", "/react/react.useroyaltysettings": "/references/react/v4/useRoyaltySettings", - "/react/react.useupdateplatformfees": "/references/react/v4/useUpdatePlatformFees", - "/react/react.useupdateprimarysalerecipient": "/references/react/v4/useUpdatePrimarySaleRecipient", - "/react/react.useupdateroyaltysettings": "/references/react/v4/useUpdateRoyaltySettings", + "/react/react.useupdateplatformfees": + "/references/react/v4/useUpdatePlatformFees", + "/react/react.useupdateprimarysalerecipient": + "/references/react/v4/useUpdatePrimarySaleRecipient", + "/react/react.useupdateroyaltysettings": + "/references/react/v4/useUpdateRoyaltySettings", "/react/react.usebalance": "/references/react/v4/useBalance", - "/react/react.usebalanceforaddress": "/references/react/v4/useBalanceForAddress", + "/react/react.usebalanceforaddress": + "/references/react/v4/useBalanceForAddress", "/react/react.useburntoken": "/references/react/v4/useBurnToken", "/react/react.useminttoken": "/references/react/v4/useMintToken", "/react/react.usetokenbalance": "/references/react/v4/useTokenBalance", "/react/react.usetokendecimals": "/references/react/v4/useTokenDecimals", "/react/react.usetokensupply": "/references/react/v4/useTokenSupply", - "/react/react.usetransferbatchtoken": "/references/react/v4/useTransferBatchToken", + "/react/react.usetransferbatchtoken": + "/references/react/v4/useTransferBatchToken", "/react/react.usetransfertoken": "/references/react/v4/useTransferToken", "/react/react.useclaimtoken": "/references/react/v4/useClaimToken", "/react/react.useconnect": "/references/react/v4/useConnect", "/react/react.usedisconnect": "/references/react/v4/useDisconnect", "/react/react.usewallet": "/references/react/v4/useWallet", - "/react/react.useconnectionstatus": "/references/react/v4/useConnectionStatus", + "/react/react.useconnectionstatus": + "/references/react/v4/useConnectionStatus", "/react/react.usesigner": "/references/react/v4/useSigner", "/react/react.usemetamask": "/references/react/v4/useMetamask", "/react/react.usecoinbasewallet": "/references/react/v4/useCoinbaseWallet", @@ -141,96 +171,166 @@ const reactRedirects = { "/react/react.usetrustwallet": "/references/react/v4/useTrustWallet", "/react/react.usebloctowallet": "/references/react/v4/useBloctoWallet", "/react/react.useframewallet": "/references/react/v4/useFrameWallet", - "/react/react.usesetconnectedwallet": "/references/react/v4/useSetConnectedWallet", - "/react/react.usesetconnectionstatus": "/references/react/v4/useSetConnectionStatus", - "/react/react.usecreatewalletinstance": "/references/react/v4/useCreateWalletInstance", + "/react/react.usesetconnectedwallet": + "/references/react/v4/useSetConnectedWallet", + "/react/react.usesetconnectionstatus": + "/references/react/v4/useSetConnectionStatus", + "/react/react.usecreatewalletinstance": + "/references/react/v4/useCreateWalletInstance", "/react/react.usewalletconfig": "/references/react/v4/useWalletConfig", "/react/react.useaccountadmins": "/references/react/v4/useAccountAdmins", - "/react/react.useaccountadminsandsigners": "/references/react/v4/useAccountAdminsAndSigners", + "/react/react.useaccountadminsandsigners": + "/references/react/v4/useAccountAdminsAndSigners", "/react/react.useaccountsigners": "/references/react/v4/useAccountSigners", "/react/react.useaddadmin": "/references/react/v4/useAddAdmin", - "/react/react.usecreatesessionkey": "/references/react/v4/useCreateSessionKey", + "/react/react.usecreatesessionkey": + "/references/react/v4/useCreateSessionKey", "/react/react.useremoveadmin": "/references/react/v4/useRemoveAdmin", - "/react/react.userevokesessionkey": "/references/react/v4/useRevokeSessionKey", + "/react/react.userevokesessionkey": + "/references/react/v4/useRevokeSessionKey", "/react/react.uselogin": "/references/react/v4/useLogin", "/react/react.uselogout": "/references/react/v4/useLogout", "/react/react.useuser": "/references/react/v4/useUser", "/react/react.usestorage": "/references/react/v4/useStorage", "/react/react.usestorageupload": "/references/react/v4/useStorageUpload", "/ui-components/web3button": "/react/v4/components/Web3Button", + "/react/v5/in-app-wallet/how-to/get-in-app-wallet-details-on-server": + "/react/v5/in-app-wallet/how-to/get-user-details", }; const solidityRedirects = { "/solidity": "/contracts/build", "/solidity/extensions": "/contracts/build/extensions", "/solidity/extensions/erc721": "/contracts/build/extensions/erc-721/ERC721", - "/solidity/extensions/erc1155": "/contracts/build/extensions/erc-1155/ERC1155", - "/solidity/extensions/erc20mintable": "/contracts/build/extensions/erc-20/ERC20BatchMintable", - "/solidity/base-contracts/erc721base": "/contracts/build/base-contracts/erc-721/base", - "/solidity/base-contracts/erc20drop": "/contracts/build/base-contracts/erc-20/drop", - "/solidity/base-contracts/erc721delayedreveal": "/contracts/build/base-contracts/erc-721/delayed-reveal", - "/solidity/base-contracts/erc721drop": "/contracts/build/base-contracts/erc-721/drop", - "/solidity/base-contracts/erc721lazymint": "/contracts/build/base-contracts/erc-721/lazy-mint", - "/solidity/base-contracts/erc721signaturemint": "/contracts/build/base-contracts/erc-721/signature-mint", - "/solidity/extensions/erc20claimconditions": "/contracts/build/extensions/erc-20/ERC20ClaimConditions", - "/solidity/extensions/erc721mintable": "/contracts/build/extensions/erc-721/ERC721Mintable", - "/solidity/extensions/erc721burnable": "/contracts/build/extensions/erc-721/ERC721Burnable", - "/solidity/extensions/erc721batchmintable": "/contracts/build/extensions/erc-721/ERC721BatchMintable", - "/solidity/extensions/erc721supply": "/contracts/build/extensions/erc-721/ERC721Supply", + "/solidity/extensions/erc1155": + "/contracts/build/extensions/erc-1155/ERC1155", + "/solidity/extensions/erc20mintable": + "/contracts/build/extensions/erc-20/ERC20BatchMintable", + "/solidity/base-contracts/erc721base": + "/contracts/build/base-contracts/erc-721/base", + "/solidity/base-contracts/erc20drop": + "/contracts/build/base-contracts/erc-20/drop", + "/solidity/base-contracts/erc721delayedreveal": + "/contracts/build/base-contracts/erc-721/delayed-reveal", + "/solidity/base-contracts/erc721drop": + "/contracts/build/base-contracts/erc-721/drop", + "/solidity/base-contracts/erc721lazymint": + "/contracts/build/base-contracts/erc-721/lazy-mint", + "/solidity/base-contracts/erc721signaturemint": + "/contracts/build/base-contracts/erc-721/signature-mint", + "/solidity/extensions/erc20claimconditions": + "/contracts/build/extensions/erc-20/ERC20ClaimConditions", + "/solidity/extensions/erc721mintable": + "/contracts/build/extensions/erc-721/ERC721Mintable", + "/solidity/extensions/erc721burnable": + "/contracts/build/extensions/erc-721/ERC721Burnable", + "/solidity/extensions/erc721batchmintable": + "/contracts/build/extensions/erc-721/ERC721BatchMintable", + "/solidity/extensions/erc721supply": + "/contracts/build/extensions/erc-721/ERC721Supply", "/solidity/extensions/royalty": "/contracts/build/extensions/general/Royalty", - "/solidity/extensions/erc721claimphases": "/contracts/build/extensions/erc-721/ERC721ClaimPhases", - "/solidity/extensions/contractmetadata": "/contracts/build/extensions/general/ContractMetadata", + "/solidity/extensions/erc721claimphases": + "/contracts/build/extensions/erc-721/ERC721ClaimPhases", + "/solidity/extensions/contractmetadata": + "/contracts/build/extensions/general/ContractMetadata", "/solidity/extensions/ownable": "/contracts/build/extensions/general/Ownable", - "/solidity/extensions/multicall": "/contracts/build/extensions/general/Multicall", - "/solidity/extensions/dropsinglephase": "/contracts/build/extensions/general/DropSinglePhase", - "/solidity/extensions/erc1155batchmintable": "/contracts/build/extensions/erc-1155/ERC1155BatchMintable", - "/solidity/extensions/erc1155burnable": "/contracts/build/extensions/erc-1155/ERC1155Burnable", - "/solidity/extensions/erc1155enumerable": "/contracts/build/extensions/erc-1155/ERC1155Enumerable", - "/solidity/extensions/erc1155mintable": "/contracts/build/extensions/erc-1155/ERC1155Mintable", - "/solidity/base-contracts/erc1155lazymint": "/contracts/build/base-contracts/erc-1155/lazy-mint", - "/solidity/extensions/lazymint": "/contracts/build/extensions/general/LazyMint", - "/solidity/extensions/erc1155claimcustom": "/contracts/build/extensions/erc-1155/ERC1155ClaimCustom", - "/solidity/extensions/delayedreveal": "/contracts/build/extensions/general/DelayedReveal", - "/solidity/extensions/erc1155dropsinglephase": "/contracts/build/extensions/erc-1155/ERC1155DropSinglePhase", - "/solidity/extensions/erc1155claimconditions": "/contracts/build/extensions/erc-1155/ERC1155ClaimConditions", - "/solidity/extensions/primarysale": "/contracts/build/extensions/general/PrimarySale", - "/solidity/extensions/erc1155signaturemint": "/contracts/build/extensions/erc-1155/ERC1155SignatureMint", - "/solidity/base-contracts/erc1155base": "/contracts/build/base-contracts/erc-1155/base", - "/solidity/extensions/erc721revealable": "/contracts/build/extensions/erc-721/ERC721Revealable", - "/solidity/extensions/erc1155revealable": "/contracts/build/extensions/erc-1155/ERC1155Revealable", - "/solidity/extensions/erc20Permit": "/contracts/build/extensions/erc-20/ERC20Permit", - "/solidity/extensions/erc20batchmintable": "/contracts/build/extensions/erc-20/ERC20BatchMintable", - "/solidity/base-contracts/erc20base": "/contracts/build/base-contracts/erc-20/base", + "/solidity/extensions/multicall": + "/contracts/build/extensions/general/Multicall", + "/solidity/extensions/dropsinglephase": + "/contracts/build/extensions/general/DropSinglePhase", + "/solidity/extensions/erc1155batchmintable": + "/contracts/build/extensions/erc-1155/ERC1155BatchMintable", + "/solidity/extensions/erc1155burnable": + "/contracts/build/extensions/erc-1155/ERC1155Burnable", + "/solidity/extensions/erc1155enumerable": + "/contracts/build/extensions/erc-1155/ERC1155Enumerable", + "/solidity/extensions/erc1155mintable": + "/contracts/build/extensions/erc-1155/ERC1155Mintable", + "/solidity/base-contracts/erc1155lazymint": + "/contracts/build/base-contracts/erc-1155/lazy-mint", + "/solidity/extensions/lazymint": + "/contracts/build/extensions/general/LazyMint", + "/solidity/extensions/erc1155claimcustom": + "/contracts/build/extensions/erc-1155/ERC1155ClaimCustom", + "/solidity/extensions/delayedreveal": + "/contracts/build/extensions/general/DelayedReveal", + "/solidity/extensions/erc1155dropsinglephase": + "/contracts/build/extensions/erc-1155/ERC1155DropSinglePhase", + "/solidity/extensions/erc1155claimconditions": + "/contracts/build/extensions/erc-1155/ERC1155ClaimConditions", + "/solidity/extensions/primarysale": + "/contracts/build/extensions/general/PrimarySale", + "/solidity/extensions/erc1155signaturemint": + "/contracts/build/extensions/erc-1155/ERC1155SignatureMint", + "/solidity/base-contracts/erc1155base": + "/contracts/build/base-contracts/erc-1155/base", + "/solidity/extensions/erc721revealable": + "/contracts/build/extensions/erc-721/ERC721Revealable", + "/solidity/extensions/erc1155revealable": + "/contracts/build/extensions/erc-1155/ERC1155Revealable", + "/solidity/extensions/erc20Permit": + "/contracts/build/extensions/erc-20/ERC20Permit", + "/solidity/extensions/erc20batchmintable": + "/contracts/build/extensions/erc-20/ERC20BatchMintable", + "/solidity/base-contracts/erc20base": + "/contracts/build/base-contracts/erc-20/base", "/solidity/extensions/erc20": "/contracts/build/extensions/erc-20/ERC20", - "/solidity/base-contracts/erc20vote": "/contracts/build/base-contracts/erc-20/vote", - "/solidity/extensions/base-account": "/contracts/build/extensions/erc-4337/SmartWallet", - "/solidity/extensions/base-account-factory": "/contracts/build/extensions/erc-4337/SmartWalletFactory", + "/solidity/base-contracts/erc20vote": + "/contracts/build/base-contracts/erc-20/vote", + "/solidity/extensions/base-account": + "/contracts/build/extensions/erc-4337/SmartWallet", + "/solidity/extensions/base-account-factory": + "/contracts/build/extensions/erc-4337/SmartWalletFactory", "/solidity/base-contracts": "/contracts/build/base-contracts", - "/solidity/base-contracts/account-factory": "/contracts/build/base-contracts/erc-4337/account-factory", - "/solidity/base-contracts/account": "/contracts/build/base-contracts/erc-4337/account", - "/solidity/base-contracts/managed-account-factory": "/contracts/build/base-contracts/erc-4337/managed-account-factory", - "/solidity/base-contracts/managed-account": "/contracts/build/base-contracts/erc-4337/managed-account", - "/solidity/extensions/erc721claimcustom": "/contracts/build/extensions/erc-721/ERC721ClaimCustom", - "/solidity/extensions/permissions": "/contracts/build/extensions/general/Permissions", - "/solidity/base-contracts/erc1155drop": "/contracts/build/base-contracts/erc-1155/drop", - "/solidity/base-contracts/erc1155signaturemint": "/contracts/build/base-contracts/erc-1155/signature-mint", - "/solidity/base-contracts/erc20signaturemint": "/contracts/build/base-contracts/erc-20/signature-mint", - "/solidity/extensions/erc1155supply": "/contracts/build/extensions/erc-1155/ERC1155Supply", - "/solidity/extensions/erc1155claimable": "/contracts/build/extensions/erc-1155/ERC1155Claimable", - "/solidity/extensions/platformfee": "/contracts/build/extensions/general/PlatformFee", - "/solidity/base-contracts/erc1155delayedreveal": "/contracts/build/base-contracts/erc-1155/delayed-reveal", + "/solidity/base-contracts/account-factory": + "/contracts/build/base-contracts/erc-4337/account-factory", + "/solidity/base-contracts/account": + "/contracts/build/base-contracts/erc-4337/account", + "/solidity/base-contracts/managed-account-factory": + "/contracts/build/base-contracts/erc-4337/managed-account-factory", + "/solidity/base-contracts/managed-account": + "/contracts/build/base-contracts/erc-4337/managed-account", + "/solidity/extensions/erc721claimcustom": + "/contracts/build/extensions/erc-721/ERC721ClaimCustom", + "/solidity/extensions/permissions": + "/contracts/build/extensions/general/Permissions", + "/solidity/base-contracts/erc1155drop": + "/contracts/build/base-contracts/erc-1155/drop", + "/solidity/base-contracts/erc1155signaturemint": + "/contracts/build/base-contracts/erc-1155/signature-mint", + "/solidity/base-contracts/erc20signaturemint": + "/contracts/build/base-contracts/erc-20/signature-mint", + "/solidity/extensions/erc1155supply": + "/contracts/build/extensions/erc-1155/ERC1155Supply", + "/solidity/extensions/erc1155claimable": + "/contracts/build/extensions/erc-1155/ERC1155Claimable", + "/solidity/extensions/platformfee": + "/contracts/build/extensions/general/PlatformFee", + "/solidity/base-contracts/erc1155delayedreveal": + "/contracts/build/base-contracts/erc-1155/delayed-reveal", "/solidity/extensions/drop": "/contracts/build/extensions/general/Drop", - "/solidity/extensions/erc721claimable": "/contracts/build/extensions/erc-721/ERC721Claimable", - "/solidity/base-contract/erc1155delayedreveal": "/contracts/build/extensions/erc-1155/ERC1155Revealable", - "/solidity/extensions/erc721claimconditions": "/contracts/build/extensions/erc-721/ERC721ClaimConditions", - "/solidity/extensions/erc721signaturemint": "/contracts/build/extensions/erc-721/ERC721SignatureMint", - "/solidity/extensions/contract-metadata": "/contracts/build/extensions/general/ContractMetadata", - "/solidity/extensions/erc1155claimphases": "/contracts/build/extensions/erc-1155/ERC1155ClaimPhases", - "/solidity/base-contracts/staking/staking1155base": "/contracts/build/base-contracts/erc-1155/staking", - "/solidity/base-contracts/staking/staking20base": "/contracts/build/base-contracts/erc-20/staking", - "/solidity/base-contracts/staking/staking721base": "/contracts/build/base-contracts/erc-721/staking", - "/solidity/base-contract/erc721delayedreveal": "/contracts/build/base-contracts/erc-721/delayed-reveal", - "/solidity/base-contracts/smart-accounts": "/contracts/build/base-contracts/erc-4337", + "/solidity/extensions/erc721claimable": + "/contracts/build/extensions/erc-721/ERC721Claimable", + "/solidity/base-contract/erc1155delayedreveal": + "/contracts/build/extensions/erc-1155/ERC1155Revealable", + "/solidity/extensions/erc721claimconditions": + "/contracts/build/extensions/erc-721/ERC721ClaimConditions", + "/solidity/extensions/erc721signaturemint": + "/contracts/build/extensions/erc-721/ERC721SignatureMint", + "/solidity/extensions/contract-metadata": + "/contracts/build/extensions/general/ContractMetadata", + "/solidity/extensions/erc1155claimphases": + "/contracts/build/extensions/erc-1155/ERC1155ClaimPhases", + "/solidity/base-contracts/staking/staking1155base": + "/contracts/build/base-contracts/erc-1155/staking", + "/solidity/base-contracts/staking/staking20base": + "/contracts/build/base-contracts/erc-20/staking", + "/solidity/base-contracts/staking/staking721base": + "/contracts/build/base-contracts/erc-721/staking", + "/solidity/base-contract/erc721delayedreveal": + "/contracts/build/base-contracts/erc-721/delayed-reveal", + "/solidity/base-contracts/smart-accounts": + "/contracts/build/base-contracts/erc-4337", }; const extensionsTable = "/typescript/v4/extensions#all-available-extensions"; @@ -239,16 +339,22 @@ const typescriptRedirects = { "/typescript": "/typescript/v4", "/typescript/getting-started": "/typescript/v4/getting-started", "/typescript/sdk.thirdwebsdk": "/typescript/v4/getting-started", - "/typescript/sdk.thirdwebsdk.fromprivatekey": "/references/typescript/v4/ThirdwebSDK#fromPrivateKey", - "/typescript/sdk.thirdwebsdk.fromwallet": "/references/typescript/v4/ThirdwebSDK#fromWallet", - "/typescript/sdk.thirdwebsdk.fromsigner": "/references/typescript/v4/ThirdwebSDK#fromSigner", + "/typescript/sdk.thirdwebsdk.fromprivatekey": + "/references/typescript/v4/ThirdwebSDK#fromPrivateKey", + "/typescript/sdk.thirdwebsdk.fromwallet": + "/references/typescript/v4/ThirdwebSDK#fromWallet", + "/typescript/sdk.thirdwebsdk.fromsigner": + "/references/typescript/v4/ThirdwebSDK#fromSigner", "/typescript/sdk.contractdeployer": "/typescript/v4/deploy", - "/typescript/sdk.contractverifier": "/typescript/v4/utilities#contract-verification", + "/typescript/sdk.contractverifier": + "/typescript/v4/utilities#contract-verification", "/typescript/extensions": "/typescript/v4/extensions", "/typescript/sdk.thirdwebsdk.smartcontract": "/typescript/v4/extensions", "/typescript/sdk.smartcontract.call": "/typescript/v4/extensions", - "/typescript/sdk.smartcontract.prepare": "/typescript/v4/extensions#preparing-transactions", - "/typescript/sdk.thirdwebsdk.detectextensions": "/v4/extensions#detecting-avilable-extensions", + "/typescript/sdk.smartcontract.prepare": + "/typescript/v4/extensions#preparing-transactions", + "/typescript/sdk.thirdwebsdk.detectextensions": + "/v4/extensions#detecting-avilable-extensions", // extensions "/typescript/sdk.erc721": "/references/typescript/v4/Erc721", "/typescript/sdk.erc1155": "/references/typescript/v4/Erc1155", @@ -261,26 +367,34 @@ const reactNativeRedirects = { "/react-native": "/typescript/v5/react-native", "/react-native/getting-started": "/typescript/v5/react-native", // wallets - "/react-native/react-native.embeddedwallet": "/react-native/v0/wallets/embedded-wallet", - "/react-native/react-native.smartwallet": "/react-native/v0/wallets/smartwallet", - "/react-native/react-native.walletconnect": "/react-native/v0/wallets/walletconnect", + "/react-native/react-native.embeddedwallet": + "/react-native/v0/wallets/embedded-wallet", + "/react-native/react-native.smartwallet": + "/react-native/v0/wallets/smartwallet", + "/react-native/react-native.walletconnect": + "/react-native/v0/wallets/walletconnect", "/react-native/react-native.metamask": "/react-native/v0/wallets/metamask", "/react-native/react-native.magic": "/react-native/v0/wallets/magiclink", "/react-native/react-native.rainbow": "/react-native/v0/wallets/rainbow", "/react-native/react-native.trust": "/react-native/v0/wallets/trust", "/react-native/react-native.coinbase": "/react-native/v0/wallets/coinbase", - "/react-native/react-native.localwallet": "/react-native/v0/wallets/local-wallet", + "/react-native/react-native.localwallet": + "/react-native/v0/wallets/local-wallet", // components - "/react-native/react-native.connectwallet": "/react-native/v0/components/ConnectWallet", - "/react-native/react-native.web3button": "/react-native/v0/components/Web3Button", + "/react-native/react-native.connectwallet": + "/react-native/v0/components/ConnectWallet", + "/react-native/react-native.web3button": + "/react-native/v0/components/Web3Button", // others "/react-native/available-hooks": "/references/react-native/v0/hooks", "/react-native/react-native.uselogin": "/references/react-native/v0/useLogin", - "/react-native/react-native.uselogout": "/references/react-native/v0/useLogout", + "/react-native/react-native.uselogout": + "/references/react-native/v0/useLogout", "/react-native/react-native.useuser": "/references/react-native/v0/useUser", "/react-native/storage": "/references/react-native/v0/hooks#storage", "/react-native/faq/deeplinks": "/react-native/v0/faq", - "/typescript/v5/react-native/installation": "/typescript/v5/react-native/getting-started", + "/typescript/v5/react-native/installation": + "/typescript/v5/react-native/getting-started", }; const unityRedirects = { @@ -293,37 +407,51 @@ const unityRedirects = { // wallets "/unity/wallets/prefab": "/unity/v4/wallets/prefab", // wallet providers - "/unity/wallets/providers/in-app-wallet": "/unity/v4/wallets/providers/in-app-wallet", - "/unity/wallets/providers/account-abstraction": "/unity/v4/wallets/providers/account-abstraction", - "/unity/wallets/providers/local-wallet": "/unity/v4/wallets/providers/local-wallet", + "/unity/wallets/providers/in-app-wallet": + "/unity/v4/wallets/providers/in-app-wallet", + "/unity/wallets/providers/account-abstraction": + "/unity/v4/wallets/providers/account-abstraction", + "/unity/wallets/providers/local-wallet": + "/unity/v4/wallets/providers/local-wallet", "/unity/wallets/providers/metamask": "/unity/v4/wallets/providers/metamask", "/unity/wallets/providers/coinbase": "/unity/v4/wallets/providers/coinbase", - "/unity/wallets/providers/walletconnect": "/unity/v4/wallets/providers/walletconnect", + "/unity/wallets/providers/walletconnect": + "/unity/v4/wallets/providers/walletconnect", "/unity/wallets/providers/hyperplay": "/unity/v4/wallets/providers/hyperplay", "/unity/wallets/providers/rabby": "/unity/v4/wallets/providers/rabby", // wallet actions "/unity/wallets/actions/connect": "/unity/v4/wallets/actions/connect", "/unity/wallets/actions/disconnect": "/unity/v4/wallets/actions/disconnect", - "/unity/wallets/actions/authenticate": "/unity/v4/wallets/actions/authenticate", + "/unity/wallets/actions/authenticate": + "/unity/v4/wallets/actions/authenticate", "/unity/wallets/actions/getaddress": "/unity/v4/wallets/actions/getaddress", "/unity/wallets/actions/getbalance": "/unity/v4/wallets/actions/getbalance", "/unity/wallets/actions/getchainid": "/unity/v4/wallets/actions/getchainid", "/unity/wallets/actions/isconnected": "/unity/v4/wallets/actions/isconnected", - "/unity/wallets/actions/recoveraddress": "/unity/v4/wallets/actions/recoveraddress", - "/unity/wallets/actions/sendrawtransaction": "/unity/v4/wallets/actions/sendrawtransaction", - "/unity/wallets/actions/executerawtransaction": "/unity/v4/wallets/actions/executerawtransaction", + "/unity/wallets/actions/recoveraddress": + "/unity/v4/wallets/actions/recoveraddress", + "/unity/wallets/actions/sendrawtransaction": + "/unity/v4/wallets/actions/sendrawtransaction", + "/unity/wallets/actions/executerawtransaction": + "/unity/v4/wallets/actions/executerawtransaction", "/unity/wallets/actions/sign": "/unity/v4/wallets/actions/sign", - "/unity/wallets/actions/switchnetwork": "/unity/v4/wallets/actions/switchnetwork", + "/unity/wallets/actions/switchnetwork": + "/unity/v4/wallets/actions/switchnetwork", "/unity/wallets/actions/transfer": "/unity/v4/wallets/actions/transfer", "/unity/wallets/actions/addadmin": "/unity/v4/wallets/actions/addadmin", "/unity/wallets/actions/removeadmin": "/unity/v4/wallets/actions/removeadmin", - "/unity/wallets/actions/createsessionkey": "/unity/v4/wallets/actions/createsessionkey", - "/unity/wallets/actions/revokesessionkey": "/unity/v4/wallets/actions/revokesessionkey", - "/unity/wallets/actions/getallactivesigners": "/unity/v4/wallets/actions/getallactivesigners", + "/unity/wallets/actions/createsessionkey": + "/unity/v4/wallets/actions/createsessionkey", + "/unity/wallets/actions/revokesessionkey": + "/unity/v4/wallets/actions/revokesessionkey", + "/unity/wallets/actions/getallactivesigners": + "/unity/v4/wallets/actions/getallactivesigners", "/unity/wallets/actions/getemail": "/unity/v4/wallets/actions/getemail", "/unity/wallets/actions/getnonce": "/unity/v4/wallets/actions/getnonce", - "/unity/wallets/actions/getsigneraddress": "/unity/v4/wallets/actions/getsigneraddress", - "/unity/wallets/actions/signtypeddatav4": "/unity/v4/wallets/actions/signtypeddatav4", + "/unity/wallets/actions/getsigneraddress": + "/unity/v4/wallets/actions/getsigneraddress", + "/unity/wallets/actions/signtypeddatav4": + "/unity/v4/wallets/actions/signtypeddatav4", // submission "/unity/wallets/submission": "/unity/v4/wallets/submission", // pay @@ -332,7 +460,8 @@ const unityRedirects = { "/unity/pay/getbuywithfiatquote": "/unity/v4/pay/getbuywithfiatquote", "/unity/pay/buywithfiat": "/unity/v4/pay/buywithfiat", "/unity/pay/getbuywithfiatstatus": "/unity/v4/pay/getbuywithfiatstatus", - "/unity/pay/getbuywithfiatcurrencies": "/unity/v4/pay/getbuywithfiatcurrencies", + "/unity/pay/getbuywithfiatcurrencies": + "/unity/v4/pay/getbuywithfiatcurrencies", // buy with crypto "/unity/pay/getbuywithcryptoquote": "/unity/v4/pay/getbuywithcryptoquote", "/unity/pay/buywithcrypto": "/unity/v4/pay/buywithcrypto", @@ -345,25 +474,40 @@ const unityRedirects = { "/unity/contracts/prepare": "/unity/v4/contracts/prepare", // erc20 "/unity/contracts/erc20/erc20": "/unity/v4/contracts/erc20/erc20", - "/unity/contracts/erc20/erc20burnable": "/unity/v4/contracts/erc20/erc20burnable", - "/unity/contracts/erc20/erc20claimconditions": "/unity/v4/contracts/erc20/erc20claimconditions", - "/unity/contracts/erc20/erc20mintable": "/unity/v4/contracts/erc20/erc20mintable", - "/unity/contracts/erc20/erc20signaturemintable": "/unity/v4/contracts/erc20/erc20signaturemintable", + "/unity/contracts/erc20/erc20burnable": + "/unity/v4/contracts/erc20/erc20burnable", + "/unity/contracts/erc20/erc20claimconditions": + "/unity/v4/contracts/erc20/erc20claimconditions", + "/unity/contracts/erc20/erc20mintable": + "/unity/v4/contracts/erc20/erc20mintable", + "/unity/contracts/erc20/erc20signaturemintable": + "/unity/v4/contracts/erc20/erc20signaturemintable", // erc721 "/unity/contracts/erc721/erc721": "/unity/v4/contracts/erc721/erc721", - "/unity/contracts/erc721/erc721burnable": "/unity/v4/contracts/erc721/erc721burnable", - "/unity/contracts/erc721/erc721claimconditions": "/unity/v4/contracts/erc721/erc721claimconditions", - "/unity/contracts/erc721/erc721enumerable": "/unity/v4/contracts/erc721/erc721enumerable", - "/unity/contracts/erc721/erc721mintable": "/unity/v4/contracts/erc721/erc721mintable", - "/unity/contracts/erc721/erc721signaturemintable": "/unity/v4/contracts/erc721/erc721signaturemintable", - "/unity/contracts/erc721/erc721supply": "/unity/v4/contracts/erc721/erc721supply", + "/unity/contracts/erc721/erc721burnable": + "/unity/v4/contracts/erc721/erc721burnable", + "/unity/contracts/erc721/erc721claimconditions": + "/unity/v4/contracts/erc721/erc721claimconditions", + "/unity/contracts/erc721/erc721enumerable": + "/unity/v4/contracts/erc721/erc721enumerable", + "/unity/contracts/erc721/erc721mintable": + "/unity/v4/contracts/erc721/erc721mintable", + "/unity/contracts/erc721/erc721signaturemintable": + "/unity/v4/contracts/erc721/erc721signaturemintable", + "/unity/contracts/erc721/erc721supply": + "/unity/v4/contracts/erc721/erc721supply", // erc1155 "/unity/contracts/erc1155/erc1155": "/unity/v4/contracts/erc1155/erc1155", - "/unity/contracts/erc1155/erc1155burnable": "/unity/v4/contracts/erc1155/erc1155burnable", - "/unity/contracts/erc1155/erc1155claimconditions": "/unity/v4/contracts/erc1155/erc1155claimconditions", - "/unity/contracts/erc1155/erc1155enumerable": "/unity/v4/contracts/erc1155/erc1155enumerable", - "/unity/contracts/erc1155/erc1155mintable": "/unity/v4/contracts/erc1155/erc1155mintable", - "/unity/contracts/erc1155/erc1155signaturemintable": "/unity/v4/contracts/erc1155/erc1155signaturemintable", + "/unity/contracts/erc1155/erc1155burnable": + "/unity/v4/contracts/erc1155/erc1155burnable", + "/unity/contracts/erc1155/erc1155claimconditions": + "/unity/v4/contracts/erc1155/erc1155claimconditions", + "/unity/contracts/erc1155/erc1155enumerable": + "/unity/v4/contracts/erc1155/erc1155enumerable", + "/unity/contracts/erc1155/erc1155mintable": + "/unity/v4/contracts/erc1155/erc1155mintable", + "/unity/contracts/erc1155/erc1155signaturemintable": + "/unity/v4/contracts/erc1155/erc1155signaturemintable", // marketplace "/unity/contracts/marketplace": "/unity/v4/contracts/marketplace", // pack @@ -371,13 +515,17 @@ const unityRedirects = { // events "/unity/contracts/events/get": "/unity/v4/contracts/events/get", "/unity/contracts/events/getall": "/unity/v4/contracts/events/getall", - "/unity/contracts/events/listentoall": "/unity/v4/contracts/events/listentoall", - "/unity/contracts/events/removealllisteners": "/unity/v4/contracts/events/removealllisteners", + "/unity/contracts/events/listentoall": + "/unity/v4/contracts/events/listentoall", + "/unity/contracts/events/removealllisteners": + "/unity/v4/contracts/events/removealllisteners", // blocks "/unity/blocks/getblock": "/unity/v4/blocks/getblock", - "/unity/blocks/getblockwithtransactions": "/unity/v4/blocks/getblockwithtransactions", + "/unity/blocks/getblockwithtransactions": + "/unity/v4/blocks/getblockwithtransactions", "/unity/blocks/getlatestblocknumber": "/unity/v4/blocks/getlatestblocknumber", - "/unity/blocks/getlatestblocktimestamp": "/unity/v4/blocks/getlatestblocktimestamp", + "/unity/blocks/getlatestblocktimestamp": + "/unity/v4/blocks/getlatestblocktimestamp", }; const walletRedirects = { @@ -411,15 +559,24 @@ const walletRedirects = { "/embedded-wallet/how-it-works": "/wallets/embedded-wallet/how-it-works", "/embedded-wallet/getting-started": "/wallets/embedded-wallet/get-started", "/embedded-wallet/connect": "/wallets/embedded-wallet/how-to/connect-users", - "/embedded-wallet/custom": "/wallets/embedded-wallet/how-to/build-your-own-ui", - "/embedded-wallet/use": "/wallets/embedded-wallet/how-to/interact-with-wallets", - "/embedded-wallet/interact": "/wallets/embedded-wallet/how-to/interact-blockchain", - "/embedded-wallet/smart-wallet-and-embedded-wallet": "/wallets/embedded-wallet/how-to/enable-gasless", - "/embedded-wallet/export-private-key": "/wallets/embedded-wallet/how-to/export-private-key", - "/embedded-wallet/custom-auth": "/wallets/embedded-wallet/custom-auth/configuration", - "/embedded-wallet/custom-auth-server": "/wallets/embedded-wallet/custom-auth/custom-auth-server", - "/embedded-wallet/integrate-firebase": "/wallets/embedded-wallet/custom-auth/firebase-auth", - "/embedded-wallet/custom-jwt-auth-server": "/wallets/embedded-wallet/custom-auth/custom-jwt-auth-server", + "/embedded-wallet/custom": + "/wallets/embedded-wallet/how-to/build-your-own-ui", + "/embedded-wallet/use": + "/wallets/embedded-wallet/how-to/interact-with-wallets", + "/embedded-wallet/interact": + "/wallets/embedded-wallet/how-to/interact-blockchain", + "/embedded-wallet/smart-wallet-and-embedded-wallet": + "/wallets/embedded-wallet/how-to/enable-gasless", + "/embedded-wallet/export-private-key": + "/wallets/embedded-wallet/how-to/export-private-key", + "/embedded-wallet/custom-auth": + "/wallets/embedded-wallet/custom-auth/configuration", + "/embedded-wallet/custom-auth-server": + "/wallets/embedded-wallet/custom-auth/custom-auth-server", + "/embedded-wallet/integrate-firebase": + "/wallets/embedded-wallet/custom-auth/firebase-auth", + "/embedded-wallet/custom-jwt-auth-server": + "/wallets/embedded-wallet/custom-auth/custom-jwt-auth-server", "/embedded-wallet/faqs": "/wallets/embedded-wallet/faqs", //smart wallet "/smart-wallet": "/wallets/smart-wallet", @@ -438,7 +595,8 @@ const walletRedirects = { "/auth/how-auth-works/auth-api": "/connect/auth/how-it-works/api", "/auth/getting-started": "/connect/auth/get-started", "/auth/client-frameworks/react": "/connect/auth/client-frameworks/react", - "/auth/client-frameworks/react-native": "/connect/auth/client-frameworks/react-native", + "/auth/client-frameworks/react-native": + "/connect/auth/client-frameworks/react-native", "/auth/server-frameworks/next": "/connect/auth/server-frameworks/next", "/auth/server-frameworks/express": "/connect/auth/server-frameworks/express", "/auth/integrations/next-auth": "/connect/auth/integrations/next-auth", @@ -470,7 +628,8 @@ const walletRedirects = { "/wallet/usage-with-unity-sdk": "/wallet-sdk/v2/usage", // build a wallet "/wallet/build-a-wallet": "/wallet-sdk/v2/build", - "/wallet/interfaces/abstract-client-wallet": "/references/wallets/v2/AbstractClientWallet", + "/wallet/interfaces/abstract-client-wallet": + "/references/wallets/v2/AbstractClientWallet", "/wallet/interfaces/abstract-wallet": "/references/wallets/v2/AbstractWallet", "/wallet/interfaces/connector": "/references/wallets/v2/Connector", // wallets @@ -491,7 +650,8 @@ const walletRedirects = { "/wallet/frame": "/references/wallets/v2/FrameWallet", "/wallet/phantom": "/references/wallets/v2/PhantomWallet", "/wallet/aws-kms": "/references/wallets/v2/AwsKmsWallet", - "/wallet/aws-secrets-manager": "/references/wallets/v2/AwsSecretsManagerWallet", + "/wallet/aws-secrets-manager": + "/references/wallets/v2/AwsSecretsManagerWallet", "/wallet/coin98-wallet": "/references/wallets/v2/Coin98Wallet", "/wallet/core-wallet": "/references/wallets/v2/CoreWallet", "/wallet/defi-wallet": "/references/wallets/v2/CryptoDefiWallet", @@ -514,9 +674,11 @@ const paymentRedirects = { "/checkouts/webhooks": "/payments/nft-checkout/webhooks", "/checkouts/translations": "/payments/nft-checkout/translations", "/checkouts/marketplaces": "/payments/nft-checkout/marketplaces", - "/checkouts/one-time-checkout-link": "/payments/nft-checkout/one-time-checkout-link", + "/checkouts/one-time-checkout-link": + "/payments/nft-checkout/one-time-checkout-link", "/checkouts/custom-contracts": "/payments/nft-checkout/custom-contracts", - "/checkouts/pre-built-contracts": "/payments/nft-checkout/pre-built-contracts", + "/checkouts/pre-built-contracts": + "/payments/nft-checkout/pre-built-contracts", "/checkouts/erc20-pricing": "/payments/nft-checkout/erc20-pricing", "/checkouts/api-reference": "/payments/nft-checkout/api-reference", "/checkouts/faq": "/payments/nft-checkout/faq", @@ -525,10 +687,13 @@ const paymentRedirects = { "/connect/pay/buy-with-crypto": "/connect/pay/overview", "/connect/pay/buy-with-crypto/overview": "/connect/pay/overview", "/connect/pay/buy-with-crypto/fee-sharing": "/connect/pay/fee-sharing", - "/connect/pay/build-a-custom-experience": "/connect/pay/guides/build-a-custom-experience", + "/connect/pay/build-a-custom-experience": + "/connect/pay/guides/build-a-custom-experience", "/connect/pay/enable-test-mode": "/connect/pay/guides/enable-test-mode", "/connect/pay/guides/enable-test-mode": "/connect/pay/testing-pay", "/connect/in-app-wallet/how-it-works": "/connect/in-app-wallet/security", + "/connect/in-app-wallet/guides/get-in-app-wallet-details-on-server": + "/connect/in-app-wallet/guides/get-user-details", }; const contractRedirects = { @@ -536,29 +701,49 @@ const contractRedirects = { "/pre-built-contracts": "/contracts", "/pre-built-contracts/how-it-works": "/contracts", "/explore/faqs": "/contracts", - "/pre-built-contracts/account-factory": "/contracts/explore/pre-built-contracts/account-factory", - "/pre-built-contracts/airdrop-erc1155-claimable": "/explore/pre-built-contracts/airdrop-erc1155-claimable", - "/pre-built-contracts/airdrop-erc1155": "/contracts/explore/pre-built-contracts/airdrop-erc1155", - "/pre-built-contracts/airdrop-erc20-claimable": "/contracts/explore/pre-built-contracts/airdrop-erc20-claimable", - "/pre-built-contracts/airdrop-erc20": "/contracts/explore/pre-built-contracts/airdrop-erc20", - "/pre-built-contracts/airdrop-erc721-claimable": "/contracts/explore/pre-built-contracts/airdrop-erc721-claimable", - "/pre-built-contracts/airdrop-erc721": "/contracts/explore/pre-built-contracts/airdrop-erc721", - "/pre-built-contracts/edition-drop": "/contracts/explore/pre-built-contracts/edition-drop", - "/pre-built-contracts/edition": "/contracts/explore/pre-built-contracts/edition", - "/pre-built-contracts/loyalty-card": "/contracts/explore/pre-built-contracts/loyalty-card", - "/pre-built-contracts/managed-account-factory": "/contracts/explore/pre-built-contracts/managed-account-factory", - "/pre-built-contracts/marketplace": "/contracts/explore/pre-built-contracts/marketplace", - "/pre-built-contracts/multiwrap": "/contracts/explore/pre-built-contracts/multiwrap", - "/pre-built-contracts/nft-collection": "/contracts/explore/pre-built-contracts/nft-collection", - "/pre-built-contracts/nft-drop": "/contracts/explore/pre-built-contracts/nft-drop", - "/pre-built-contracts/open-edition-erc721": "/contracts/explore/pre-built-contracts/open-edition", + "/pre-built-contracts/account-factory": + "/contracts/explore/pre-built-contracts/account-factory", + "/pre-built-contracts/airdrop-erc1155-claimable": + "/explore/pre-built-contracts/airdrop-erc1155-claimable", + "/pre-built-contracts/airdrop-erc1155": + "/contracts/explore/pre-built-contracts/airdrop-erc1155", + "/pre-built-contracts/airdrop-erc20-claimable": + "/contracts/explore/pre-built-contracts/airdrop-erc20-claimable", + "/pre-built-contracts/airdrop-erc20": + "/contracts/explore/pre-built-contracts/airdrop-erc20", + "/pre-built-contracts/airdrop-erc721-claimable": + "/contracts/explore/pre-built-contracts/airdrop-erc721-claimable", + "/pre-built-contracts/airdrop-erc721": + "/contracts/explore/pre-built-contracts/airdrop-erc721", + "/pre-built-contracts/edition-drop": + "/contracts/explore/pre-built-contracts/edition-drop", + "/pre-built-contracts/edition": + "/contracts/explore/pre-built-contracts/edition", + "/pre-built-contracts/loyalty-card": + "/contracts/explore/pre-built-contracts/loyalty-card", + "/pre-built-contracts/managed-account-factory": + "/contracts/explore/pre-built-contracts/managed-account-factory", + "/pre-built-contracts/marketplace": + "/contracts/explore/pre-built-contracts/marketplace", + "/pre-built-contracts/multiwrap": + "/contracts/explore/pre-built-contracts/multiwrap", + "/pre-built-contracts/nft-collection": + "/contracts/explore/pre-built-contracts/nft-collection", + "/pre-built-contracts/nft-drop": + "/contracts/explore/pre-built-contracts/nft-drop", + "/pre-built-contracts/open-edition-erc721": + "/contracts/explore/pre-built-contracts/open-edition", "/pre-built-contracts/pack": "/contracts/explore/pre-built-contracts/pack", "/pre-built-contracts/signature-drop": "/contracts", "/pre-built-contracts/split": "/contracts/explore/pre-built-contracts/split", - "/pre-built-contracts/stake-erc1155": "/contracts/explore/pre-built-contracts/stake-erc1155", - "/pre-built-contracts/stake-erc20": "/contracts/explore/pre-built-contracts/stake-erc20", - "/pre-built-contracts/stake-erc721": "/contracts/explore/pre-built-contracts/stake-erc721", - "/pre-built-contracts/token-drop": "/contracts/explore/pre-built-contracts/token-drop", + "/pre-built-contracts/stake-erc1155": + "/contracts/explore/pre-built-contracts/stake-erc1155", + "/pre-built-contracts/stake-erc20": + "/contracts/explore/pre-built-contracts/stake-erc20", + "/pre-built-contracts/stake-erc721": + "/contracts/explore/pre-built-contracts/stake-erc721", + "/pre-built-contracts/token-drop": + "/contracts/explore/pre-built-contracts/token-drop", "/pre-built-contracts/token": "/contracts/explore/pre-built-contracts/token", "/pre-built-contracts/vote": "/contracts/explore/pre-built-contracts/vote", //deploy @@ -589,18 +774,23 @@ const infrastructureRedirects = { "/infrastructure/engine/get-started": "/engine/get-started", "/infrastructure/engine/production-checklist": "/engine/production-checklist", "/infrastructure/engine/self-host": "/engine/self-host", - "/infrastructure/engine/features/backend-wallets": "/engine/features/backend-wallets", + "/infrastructure/engine/features/backend-wallets": + "/engine/features/backend-wallets", "/infrastructure/engine/features/contracts": "/engine/features/contracts", "/infrastructure/engine/features/permissions": "/engine/features/permissions", "/infrastructure/engine/features/webhooks": "/engine/features/webhooks", - "/infrastructure/engine/features/smart-wallets": "/engine/features/smart-wallets", + "/infrastructure/engine/features/smart-wallets": + "/engine/features/smart-wallets", "/infrastructure/engine/features/relayers": "/engine/features/relayers", - "/infrastructure/engine/features/gasless-transactions": "/engine/features/gasless-transactions", + "/infrastructure/engine/features/gasless-transactions": + "/engine/features/gasless-transactions", "/infrastructure/engine/guides/airdrop-nfts": "/engine/guides/airdrop-nfts", "/infrastructure/engine/guides/nft-checkout": "/engine/guides/nft-checkout", "/infrastructure/engine/guides/smart-wallets": "/engine/guides/smart-wallets", - "/infrastructure/engine/references/api-reference": "/engine/references/api-reference", - "/infrastructure/engine/references/typescript": "/engine/references/typescript", + "/infrastructure/engine/references/api-reference": + "/engine/references/api-reference", + "/infrastructure/engine/references/typescript": + "/engine/references/typescript", "/infrastucture/engine/security": "/engine/security", "/infrastructure/engine/faq": "/engine/faq", "/guides/engine/relayer": "/engine/features/relayer", @@ -610,8 +800,10 @@ const infrastructureRedirects = { //storage "/storage": "/infrastructure/storage/overview", "/storage/how-storage-works": "/infrastructure/storage/how-storage-works", - "/storage/upload-to-ipfs": "/infrastructure/storage/how-to-use-storage/upload-files-to-ipfs", - "/storage/host-web-app": "/infrastructure/storage/how-to-use-storage/host-web-app", + "/storage/upload-to-ipfs": + "/infrastructure/storage/how-to-use-storage/upload-files-to-ipfs", + "/storage/host-web-app": + "/infrastructure/storage/how-to-use-storage/host-web-app", //rpc-edge "/rpc-edge": "/infrastructure/rpc-edge/overview", "/rpc-edge/get-started": "/infrastructure/rpc-edge/get-started", @@ -626,16 +818,20 @@ const otherRedirects = { "/wallets/auth/:path*": "/connect/auth/:path*", // guides "/solana/:match*": "https://blog.thirdweb.com/discontinuing-solana-support/", - "/pre-built-contracts/solana/:match*": "https://blog.thirdweb.com/discontinuing-solana-support/", + "/pre-built-contracts/solana/:match*": + "https://blog.thirdweb.com/discontinuing-solana-support/", "/learn/recipes/:match*": "https://blog.thirdweb.com/", "/guides/tag/bundle-collection": "https://blog.thirdweb.com/tag/edition", "/guides/tag/bundle-drop": "https://blog.thirdweb.com/tag/bundle-drop", "/guides/bundle-drop": "https://blog.thirdweb.com/tag/edition-drop", "/guides/splits": "https://blog.thirdweb.com/tag/split", "/guides/bundle-collection": "https://blog.thirdweb.com/tag/edition", - "/guides/connect-wallet": "https://blog.thirdweb.com/guides/add-connectwallet-to-your-website/", - "/guides/create-a-drop-with-thirdweb-dashboard": "https://blog.thirdweb.com/guides/release-an-nft-drop-with-no-code", - "/guides/minting-with-signature": "https://blog.thirdweb.com/guides/on-demand-minting", + "/guides/connect-wallet": + "https://blog.thirdweb.com/guides/add-connectwallet-to-your-website/", + "/guides/create-a-drop-with-thirdweb-dashboard": + "https://blog.thirdweb.com/guides/release-an-nft-drop-with-no-code", + "/guides/minting-with-signature": + "https://blog.thirdweb.com/guides/on-demand-minting", "/guides/nft-drop": "https://blog.thirdweb.com/tag/nft-drop", "/guides/nft-collection": "https://blog.thirdweb.com/tag/nft-collection", "/guides/edition-drop": "https://blog.thirdweb.com/tag/edition-drop", @@ -647,20 +843,27 @@ const otherRedirects = { "/guides/pack": "https://blog.thirdweb.com/tag/pack", "/guides": "https://blog.thirdweb.com/guides", "/tag/:match*": "https://blog.thirdweb.com/tag/:match*", - "/guides/on-demand-minting": "https://blog.thirdweb.com/guides/mint-nft-unique-code", - "/guides/create-your-own-marketplace-with-thirdweb-typescript-sdk": "https://blog.thirdweb.com/guides/nft-marketplace-with-typescript-next", - "/guides/create-a-pack-with-typescript-and-nextjs": "https://blog.thirdweb.com/guides/create-an-nft-lootbox", - "/guides/randomized-nft-drop": "https://blog.thirdweb.com/guides/shuffle-nft-drop", + "/guides/on-demand-minting": + "https://blog.thirdweb.com/guides/mint-nft-unique-code", + "/guides/create-your-own-marketplace-with-thirdweb-typescript-sdk": + "https://blog.thirdweb.com/guides/nft-marketplace-with-typescript-next", + "/guides/create-a-pack-with-typescript-and-nextjs": + "https://blog.thirdweb.com/guides/create-an-nft-lootbox", + "/guides/randomized-nft-drop": + "https://blog.thirdweb.com/guides/shuffle-nft-drop", // solidity sdk "/contracts/nft-drop": "/contracts/explore/pre-built-contracts/nft-drop", - "/contracts/nft-collection": "contracts/explore/pre-built-contracts/nft-collection", - "/contracts/edition-drop": "/contracts/explore/pre-built-contracts/edition-drop", + "/contracts/nft-collection": + "contracts/explore/pre-built-contracts/nft-collection", + "/contracts/edition-drop": + "/contracts/explore/pre-built-contracts/edition-drop", "/contracts/edition": "/contracts/explore/pre-built-contracts/edition", "/contracts/token-drop": "/contracts/explore/pre-built-contracts/token-drop", "/contracts/token": "/contracts/explore/pre-built-contracts/token", "/contracts/vote": "/contracts/explore/pre-built-contracts/vote", "/contracts/split": "/contracts/explore/pre-built-contracts/split", - "/contracts/marketplace": "/contracts/explore/pre-built-contracts/marketplace", + "/contracts/marketplace": + "/contracts/explore/pre-built-contracts/marketplace", "/contracts/pack": "/contracts/explore/pre-built-contracts/pack", "/contracts/nfts-and-tokens": "/contracts", "/contracts/drops": "/contracts", @@ -669,7 +872,8 @@ const otherRedirects = { "/wallets/smart-wallet/:path*": "/connect/account-abstraction/:path*", "/connect/smart-wallet/:path*": "/connect/account-abstraction/:path*", "/connect/account-abstraction": "/connect/account-abstraction/overview", - "/unity/wallets/providers/smart-wallet": "/unity/wallets/providers/account-abstraction", + "/unity/wallets/providers/smart-wallet": + "/unity/wallets/providers/account-abstraction", "/engine/features/smart-wallets": "/engine/features/account-abstraction", // others "/pre-built-contracts/:path*": "/contracts", @@ -698,14 +902,19 @@ const otherRedirects = { "/solutions/gaming": "/", "/signature-minting": "/contracts/design-docs/signature-mint", // in-app wallet - "/references/typescript/v5/embeddedWallet": "/references/typescript/v5/inAppWallet", + "/references/typescript/v5/embeddedWallet": + "/references/typescript/v5/inAppWallet", "/connect/embedded-wallet/:path*": "/connect/in-app-wallet/:path*", - "/connect/embedded-wallet/how-to/get-embedded-wallet-details-on-server": "/connect/in-app-wallet/how-to/get-in-app-wallet-details-on-server", - "/react-native/v0/wallets/embedded-wallet": "/react-native/v0/wallets/in-app-wallet", - "/unity/wallets/providers/embedded-wallet": "/unity/wallets/providers/in-app-wallet", + "/connect/embedded-wallet/how-to/get-embedded-wallet-details-on-server": + "/connect/in-app-wallet/how-to/get-in-app-wallet-details-on-server", + "/react-native/v0/wallets/embedded-wallet": + "/react-native/v0/wallets/in-app-wallet", + "/unity/wallets/providers/embedded-wallet": + "/unity/wallets/providers/in-app-wallet", // connect "/connect/connect": "/connect/sign-in", - "/connect/in-app-wallet/how-to/get-in-app-wallet-details-on-server": "/connect/in-app-wallet/guides/get-in-app-wallet-details-on-server", + "/connect/in-app-wallet/how-to/get-in-app-wallet-details-on-server": + "/connect/in-app-wallet/guides/get-in-app-wallet-details-on-server", }; const v5RestructuredRedirects = { diff --git a/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx new file mode 100644 index 00000000000..627423a69e9 --- /dev/null +++ b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx @@ -0,0 +1,53 @@ +# Pregenerate User Wallets + +To pregenerate an embedded wallet, you can make a `POST` request to the following endpoint: + +``` +https://embedded-wallet.thirdweb-dev.com/api/v1/pregenerate +``` + +### Request Body + +The request body should be a JSON object with the following parameters: + +- `strategy`: The strategy for wallet generation (currently supports "email") +- `email`: The email address associated with the wallet to be generated + +### Headers + +You need to include the following headers: + +- `x-ecosystem-id`: Your ecosystem ID +- `x-secret-key`: Your secret key for authentication +- `Content-Type`: Must be set to `application/json` + +### Example curl Command + +Here's an example curl command to pregenerate an embedded wallet: + +```bash +curl -X POST 'https://embedded-wallet.thirdweb-dev.com/api/v1/pregenerate' \ + -H 'x-ecosystem-id: ecosystem.example-eco-123' \ + -H 'x-secret-key: 9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7' \ + -H 'Content-Type: application/json' \ + -d '{ + "strategy": "email", + "email": "user@example.com" + }' +``` + +Replace the header values with your actual client ID, ecosystem ID, and secret key. + +### Response Format + +The API returns a JSON object. The exact structure may vary based on the implementation, but it typically includes information about the pregenerated wallet. Here's a possible structure: + +```json +{ + "walletAddress": "string", +} +``` + +Note: The actual response may include additional fields or have a different structure. Please refer to the most up-to-date documentation for the exact response format. + +Remember to handle the response appropriately in your chosen programming language, including error cases and parsing the JSON response. diff --git a/apps/portal/src/app/connect/in-app-wallet/guides/get-in-app-wallet-details-on-server/page.mdx b/apps/portal/src/app/connect/in-app-wallet/guides/get-in-app-wallet-details-on-server/page.mdx deleted file mode 100644 index ae96b05402c..00000000000 --- a/apps/portal/src/app/connect/in-app-wallet/guides/get-in-app-wallet-details-on-server/page.mdx +++ /dev/null @@ -1,74 +0,0 @@ -# Fetch User Details on the server - -If you want to get the user details for a given thirdweb In-App Wallet on the server, you can make a `GET` request on `https://embedded-wallet.thirdweb.com/api/2023-11-30/embedded-wallet/user-details` - -Here's an example function on how you might perform the query: - -```ts -export async function fetchInAppWalletMetadataFromThirdweb( - args: - | { - queryBy: "walletAddress"; - walletAddress: string; - } - | { - queryBy: "email"; - email: string; - } - | { - queryBy: "phone"; - phone: string; - } - | { - queryBy: "phone"; - phone: string; - } - | { - queryBy: "id"; - id: string; - }, -) { - const url = new URL( - "https://embedded-wallet.thirdweb.com/api/2023-11-30/embedded-wallet/user-details", - ); - if (args.queryBy === "walletAddress") { - url.searchParams.set("queryBy", "walletAddress"); - url.searchParams.set("walletAddress", args.walletAddress); - } - if (args.queryBy === "email") { - url.searchParams.set("queryBy", "email"); - url.searchParams.set("email", args.email); - } - if (args.queryBy === "phone") { - url.searchParams.set("queryBy", "phone"); - url.searchParams.set("phone", args.phone); - } - if (args.queryBy === "id") { - url.searchParams.set("queryBy", "id"); - url.searchParams.set("id", args.phone); - } - - const resp = await fetchReq(url.href, { - headers: { - Authorization: `Bearer ${THIRD_WEB_CLIENT_SECRET}`, - }, - }); - - const data = (await resp.json()) as { - userId: string; - walletAddress: string; - email?: string; - phone?: string; - createdAt: string; - linkedAccounts: { - type: string; - details: - | { phone: string, [key: string]: string; } - | { email: string, [key: string]: string; } - | { address: string, [key: string]: string; }; - | { id: string, [key: string]: string; }; - }[]; - }[]; - return data; -} -``` diff --git a/apps/portal/src/app/connect/in-app-wallet/guides/get-user-details/page.mdx b/apps/portal/src/app/connect/in-app-wallet/guides/get-user-details/page.mdx new file mode 100644 index 00000000000..274ada0945c --- /dev/null +++ b/apps/portal/src/app/connect/in-app-wallet/guides/get-user-details/page.mdx @@ -0,0 +1,128 @@ +import { Tabs, TabsList, TabsContent, TabsTrigger, DocImage } from "@doc"; + +# Retrieving In-App Wallet User Details on the Server + +## Using the thirdweb TypeScript SDK + +You can query user details through the thirdweb SDK using a wallet address, email, phone number, or user ID. **This function requires a secret key to be present on the thirdweb client and should only be used on the server.** + + + + Wallet + Email + Phone + User ID + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + walletAddress: "0x123...", +}); +``` + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + email: "user@example.com", +}); +``` + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + phone: "+11234567890", +}); +``` + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + id: "1234567890", +}); +``` + + + + +## Fetching User Details via API + +To get the user details, you can make a `GET` request to the following endpoint: + +``` +https://embedded-wallet.thirdweb.com/api/2023-11-30/embedded-wallet/user-details +``` + +### Query Parameters + +You can query user details using one of the following parameters: + +- `walletAddress`: The user's wallet address +- `email`: The user's email address +- `phone`: The user's phone number +- `id`: The user's ID + +### Authentication + +You need to include your ThirdWeb Client Secret in the Authorization header. + +### Example curl Command + +Here's an example curl command to fetch user details: + +```bash +curl -X GET 'https://embedded-wallet.thirdweb.com/api/2023-11-30/embedded-wallet/user-details?queryBy=walletAddress&walletAddress=0x123456789abcdef' \ + -H 'Authorization: Bearer YOUR_THIRD_WEB_CLIENT_SECRET' +``` + +Replace `YOUR_THIRD_WEB_CLIENT_SECRET` with your actual ThirdWeb Client Secret. + +### Response Format + +The API returns a JSON array with the following structure for each user: + +```json +[ + { + "userId": "string", + "walletAddress": "string", + "email": "string (optional)", + "phone": "string (optional)", + "createdAt": "string", + "linkedAccounts": [ + { + "type": "string", + "details": { + "phone": "string", + // or + "email": "string", + // or + "address": "string", + // or + "id": "string", + // Additional key-value pairs may be present + } + } + ] + } +] +``` + +Note: The `details` object in `linkedAccounts` will contain different fields based on the account type. + +Remember to handle the response appropriately in your chosen programming language, including error cases and parsing the JSON response. diff --git a/apps/portal/src/app/connect/sidebar.tsx b/apps/portal/src/app/connect/sidebar.tsx index f300bbc200f..a7e9ee7fc03 100644 --- a/apps/portal/src/app/connect/sidebar.tsx +++ b/apps/portal/src/app/connect/sidebar.tsx @@ -1,15 +1,15 @@ import type { SideBar } from "@/components/Layouts/DocLayout"; import { - DotNetIcon, - EcosystemWalletsIcon, - PayIcon, - ReactIcon, - TypeScriptIcon, - UnityIcon, - WalletsAuthIcon, - WalletsConnectIcon, - WalletsInAppIcon, - WalletsSmartIcon, + DotNetIcon, + EcosystemWalletsIcon, + PayIcon, + ReactIcon, + TypeScriptIcon, + UnityIcon, + WalletsAuthIcon, + WalletsConnectIcon, + WalletsInAppIcon, + WalletsSmartIcon, } from "@/icons"; import { CodeIcon, ExternalLink, ZapIcon } from "lucide-react"; import { UnrealIcon } from "../../icons/sdks/UnrealIcon"; @@ -22,538 +22,541 @@ const authSlug = "/connect/auth"; const paySlug = "/connect/pay"; export const sidebar: SideBar = { - name: "Connect", - links: [ - { separator: true }, - { - name: "Introduction", - href: "/connect", - }, - { - name: "Why thirdweb?", - href: "/connect/why-thirdweb", - }, - { - name: "Quickstart", - href: "/connect/quickstart", - icon: , - }, - { - name: "Playground", - href: "https://playground.thirdweb.com/", - icon: , - }, - { - name: "Templates", - href: "https://thirdweb.com/templates", - icon: , - }, - { separator: true }, - { - name: "Get Started", - isCollapsible: false, - links: [ - { - name: "TypeScript", - href: "/typescript/v5", - icon: , - }, - { - name: "React", - href: "/react/v5", - icon: , - }, - { - name: "React Native", - href: "/react-native/v5", - icon: , - }, - { - name: "Dotnet", - href: "/dotnet", - icon: , - }, - { - name: "Unity", - href: "/unity", - icon: , - }, - { - name: "Unreal", - href: "/unreal", - icon: , - }, - ], - }, - { separator: true }, - { - name: "Learn", - isCollapsible: false, - links: [ - // Connect - { - name: "Sign-In", - icon: , - links: [ - { - name: "Overview", - href: `${connectSlug}/overview`, - }, - { - name: "Get Started", - // expanded: true, - links: [ - { - name: "Connect Button", - href: `${connectSlug}/ConnectButton`, - }, - { - name: "Connect Embed", - href: `${connectSlug}/ConnectEmbed`, - }, - { - name: "Custom UI", - href: `${connectSlug}/Custom-UI`, - }, - ], - }, - { - name: "Sign-In Methods", - links: [ - { - name: "Email & Phone", - href: `${connectSlug}/methods/email-and-phone`, - }, - { - name: "Social Login", - href: `${connectSlug}/methods/social-logins`, - }, - { - name: "External Wallets", - href: `${connectSlug}/methods/external-wallets`, - }, - ], - }, - { - name: "Customization", - links: [ - { - name: "Logo", - href: `${connectSlug}/customization#logo`, - }, - { - name: "Compact Modal", - href: `${connectSlug}/customization#compact-modal`, - }, - { - name: "Theme", - href: `${connectSlug}/customization#theming`, - }, - { - name: "Localization", - href: `${connectSlug}/customization#localization`, - }, - ], - }, - { - name: "Playground", - href: "https://playground.thirdweb.com/connect/sign-in/button", - }, - ], - }, + name: "Connect", + links: [ + { separator: true }, + { + name: "Introduction", + href: "/connect", + }, + { + name: "Why thirdweb?", + href: "/connect/why-thirdweb", + }, + { + name: "Quickstart", + href: "/connect/quickstart", + icon: , + }, + { + name: "Playground", + href: "https://playground.thirdweb.com/", + icon: , + }, + { + name: "Templates", + href: "https://thirdweb.com/templates", + icon: , + }, + { separator: true }, + { + name: "Get Started", + isCollapsible: false, + links: [ + { + name: "TypeScript", + href: "/typescript/v5", + icon: , + }, + { + name: "React", + href: "/react/v5", + icon: , + }, + { + name: "React Native", + href: "/react-native/v5", + icon: , + }, + { + name: "Dotnet", + href: "/dotnet", + icon: , + }, + { + name: "Unity", + href: "/unity", + icon: , + }, + { + name: "Unreal", + href: "/unreal", + icon: , + }, + ], + }, + { separator: true }, + { + name: "Learn", + isCollapsible: false, + links: [ + // Connect + { + name: "Sign-In", + icon: , + links: [ + { + name: "Overview", + href: `${connectSlug}/overview`, + }, + { + name: "Get Started", + // expanded: true, + links: [ + { + name: "Connect Button", + href: `${connectSlug}/ConnectButton`, + }, + { + name: "Connect Embed", + href: `${connectSlug}/ConnectEmbed`, + }, + { + name: "Custom UI", + href: `${connectSlug}/Custom-UI`, + }, + ], + }, + { + name: "Sign-In Methods", + links: [ + { + name: "Email & Phone", + href: `${connectSlug}/methods/email-and-phone`, + }, + { + name: "Social Login", + href: `${connectSlug}/methods/social-logins`, + }, + { + name: "External Wallets", + href: `${connectSlug}/methods/external-wallets`, + }, + ], + }, + { + name: "Customization", + links: [ + { + name: "Logo", + href: `${connectSlug}/customization#logo`, + }, + { + name: "Compact Modal", + href: `${connectSlug}/customization#compact-modal`, + }, + { + name: "Theme", + href: `${connectSlug}/customization#theming`, + }, + { + name: "Localization", + href: `${connectSlug}/customization#localization`, + }, + ], + }, + { + name: "Playground", + href: "https://playground.thirdweb.com/connect/sign-in/button", + }, + ], + }, - //In-App Wallets - { - name: "In-App Wallet", - icon: , - links: [ - { - name: "Overview", - href: `${inAppSlug}/overview`, - }, - { - name: "Security", - href: `${inAppSlug}/security`, - }, - { - name: "Get Started", - links: [ - { - name: "TypeScript", - href: "/typescript/v5/inAppWallet", - icon: , - }, - { - name: "React", - href: "/react/v5/in-app-wallet/get-started", - icon: , - }, - { - name: "React Native", - // TODO - add react-native dedicated page - href: "/react/v5/in-app-wallet/get-started", - icon: , - }, - { - name: "Dotnet", - href: "/dotnet/wallets/providers/in-app-wallet", - icon: , - }, - { - name: "Unity", - href: "/unity/wallets/providers/in-app-wallet", - icon: , - }, - ], - }, - { - name: "Guides", - links: [ - { - name: "Export Private Keys", - href: `${inAppSlug}/guides/export-private-key`, - }, - { - name: "Link Multiple Profiles", - href: `${inAppSlug}/guides/link-multiple-profiles`, - }, - { - name: "Retrieving Linked Profiles", - href: `${inAppSlug}/guides/retrieve-linked-profiles`, - }, - ], - }, - { - name: "Custom Authentication", - links: [ - { - name: "Overview", - href: `${inAppSlug}/custom-auth/overview`, - }, - { - name: "Configuration", - href: `${inAppSlug}/custom-auth/configuration`, - }, - { - name: "Integration guides", - links: [ - { - name: "Custom auth server (OIDC Auth)", - href: `${inAppSlug}/custom-auth/custom-jwt-auth-server`, - }, - { - name: "Custom auth server (Generic Auth)", - href: `${inAppSlug}/custom-auth/custom-auth-server`, - }, - { - name: "Firebase Auth", - href: `${inAppSlug}/custom-auth/firebase-auth`, - }, - ], - }, - ], - }, - { - name: "Backend APIs", - href: `${inAppSlug}/guides/get-in-app-wallet-details-on-server`, - }, - { - name: "FAQs", - href: `${inAppSlug}/faqs`, - }, - ], - }, - // Ecosystem Wallet - { - name: "Ecosystem Wallets", - icon: , - links: [ - { - name: "Overview", - href: `${ecosystemSlug}/overview`, - }, - { - name: "Get Started", - href: `${ecosystemSlug}/get-started`, - }, - { - name: "Managing Ecosystem Permissions", - href: `${ecosystemSlug}/ecosystem-permissions`, - }, - { - name: "Integrating with Partners", - href: `${ecosystemSlug}/integrating-partners`, - }, + //In-App Wallets + { + name: "In-App Wallet", + icon: , + links: [ + { + name: "Overview", + href: `${inAppSlug}/overview`, + }, + { + name: "Security", + href: `${inAppSlug}/security`, + }, + { + name: "Get Started", + links: [ + { + name: "TypeScript", + href: "/typescript/v5/inAppWallet", + icon: , + }, + { + name: "React", + href: "/react/v5/in-app-wallet/get-started", + icon: , + }, + { + name: "React Native", + // TODO - add react-native dedicated page + href: "/react/v5/in-app-wallet/get-started", + icon: , + }, + { + name: "Dotnet", + href: "/dotnet/wallets/providers/in-app-wallet", + icon: , + }, + { + name: "Unity", + href: "/unity/wallets/providers/in-app-wallet", + icon: , + }, + ], + }, + { + name: "Guides", + links: [ + { + name: "Export Private Keys", + href: `${inAppSlug}/guides/export-private-key`, + }, + { + name: "Link Multiple Profiles", + href: `${inAppSlug}/guides/link-multiple-profiles`, + }, + { + name: "Retrieving Linked Profiles", + href: `${inAppSlug}/guides/retrieve-linked-profiles`, + }, + { + name: "Retrieving User Info", + href: `${inAppSlug}/guides/get-user-details`, + }, + ], + }, + { + name: "Custom Authentication", + links: [ + { + name: "Overview", + href: `${inAppSlug}/custom-auth/overview`, + }, + { + name: "Configuration", + href: `${inAppSlug}/custom-auth/configuration`, + }, + { + name: "Integration guides", + links: [ + { + name: "Custom auth server (OIDC Auth)", + href: `${inAppSlug}/custom-auth/custom-jwt-auth-server`, + }, + { + name: "Custom auth server (Generic Auth)", + href: `${inAppSlug}/custom-auth/custom-auth-server`, + }, + { + name: "Firebase Auth", + href: `${inAppSlug}/custom-auth/firebase-auth`, + }, + ], + }, + ], + }, + { + name: "FAQs", + href: `${inAppSlug}/faqs`, + }, + ], + }, + // Ecosystem Wallet + { + name: "Ecosystem Wallets", + icon: , + links: [ + { + name: "Overview", + href: `${ecosystemSlug}/overview`, + }, + { + name: "Get Started", + href: `${ecosystemSlug}/get-started`, + }, + { + name: "Managing Ecosystem Permissions", + href: `${ecosystemSlug}/ecosystem-permissions`, + }, + { + name: "Integrating with Partners", + href: `${ecosystemSlug}/integrating-partners`, + }, + { + name: "Pregenerate Wallets", + href: `${ecosystemSlug}/pregenerate-wallets`, + }, + { + name: "Ecosystem Wallet Explorer Page", + href: `${ecosystemSlug}/wallet-explorer`, + }, + { + name: "FAQ", + href: `${ecosystemSlug}/faq`, + }, + ], + }, + //Account abstraction + { + name: "Account Abstraction", + icon: , + links: [ + { + name: "Overview", + href: `${aAslug}/overview`, + }, + { + name: "How it Works", + href: `${aAslug}/how-it-works`, + }, + { + name: "Get Started", + links: [ + { + name: "TypeScript", + href: "/typescript/v5/account-abstraction/get-started", + icon: , + }, + { + name: "React", + href: "/react/v5/account-abstraction/get-started", + icon: , + }, + { + name: "React Native", + // TODO - add react-native dedicated page + href: "/react/v5/account-abstraction/get-started", + icon: , + }, + { + name: "Dotnet", + href: "/dotnet/wallets/providers/account-abstraction", + icon: , + }, + { + name: "Unity", + href: "/unity/wallets/providers/account-abstraction", + icon: , + }, + ], + }, + { + name: "Account Factories", + href: `${aAslug}/factories`, + }, + { + name: "Bundler & Paymaster", + href: `${aAslug}/infrastructure`, + }, + { + name: "Sponsorship rules", + href: `${aAslug}/sponsorship-rules`, + }, + { + name: "Gasless", + isCollapsible: true, + links: [ + { + name: "Engine", + href: `${aAslug}/gasless/engine`, + }, + { + name: "Biconomy", + href: `${aAslug}/gasless/biconomy`, + }, + { + name: "OpenZeppelin", + href: `${aAslug}/gasless/openzeppelin`, + }, + ], + }, + // { + // name: "References", + // isCollapsible: true, + // expanded: true, + // links: [ + // { + // name: "React", + // href: `/references/typescript/v5/smartWallet`, + // }, + // { + // name: "React Native", + // href: `/react-native/v0/wallets/smartwallet`, + // }, + // { + // name: "TypeScript", + // href: `/references/wallets/v2/SmartWallet`, + // }, + // { + // name: "Unity", + // href: `/unity/wallets/providers/smart-wallet`, + // }, + // ], + // }, + { + name: "FAQs", + href: `${aAslug}/faq`, + }, + ], + }, + // Auth + { + name: "Auth (SIWE)", + icon: , + links: [ + { + name: "Get Started", + href: `${authSlug}`, + }, + { + name: "Frameworks", + isCollapsible: true, + expanded: false, + links: [ + { + name: "Next.js", + href: `${authSlug}/frameworks/next`, + }, + { + name: "React + Express", + href: `${authSlug}/frameworks/react-express`, + }, + ], + }, + { + name: "Deploying to Production", + href: `${authSlug}/deploying-to-production`, + }, + ], + }, + // Pay + { + name: "Pay", + icon: , + links: [ + { + name: "Overview", + href: `${paySlug}/overview`, + }, + { + name: "Get Started", + href: `${paySlug}/get-started`, + expanded: true, + links: [ + { + name: "ConnectButton", + href: `${paySlug}/get-started#option-1-connectbutton`, + }, + { + name: "Embed Pay", + href: `${paySlug}/get-started#option-2-embed-pay`, + }, + { + name: "Send a Transaction", + href: `${paySlug}/get-started#option-3-send-a-transaction-with-pay`, + }, + ], + }, + { + name: "Supported Chains", + href: `${paySlug}/supported-chains`, + }, - { - name: "Ecosystem Wallet Explorer Page", - href: `${ecosystemSlug}/wallet-explorer`, - }, - { - name: "FAQ", - href: `${ecosystemSlug}/faq`, - }, - ], - }, - //Account abstraction - { - name: "Account Abstraction", - icon: , - links: [ - { - name: "Overview", - href: `${aAslug}/overview`, - }, - { - name: "How it Works", - href: `${aAslug}/how-it-works`, - }, - { - name: "Get Started", - links: [ - { - name: "TypeScript", - href: "/typescript/v5/account-abstraction/get-started", - icon: , - }, - { - name: "React", - href: "/react/v5/account-abstraction/get-started", - icon: , - }, - { - name: "React Native", - // TODO - add react-native dedicated page - href: "/react/v5/account-abstraction/get-started", - icon: , - }, - { - name: "Dotnet", - href: "/dotnet/wallets/providers/account-abstraction", - icon: , - }, - { - name: "Unity", - href: "/unity/wallets/providers/account-abstraction", - icon: , - }, - ], - }, - { - name: "Account Factories", - href: `${aAslug}/factories`, - }, - { - name: "Bundler & Paymaster", - href: `${aAslug}/infrastructure`, - }, - { - name: "Sponsorship rules", - href: `${aAslug}/sponsorship-rules`, - }, - { - name: "Gasless", - isCollapsible: true, - links: [ - { - name: "Engine", - href: `${aAslug}/gasless/engine`, - }, - { - name: "Biconomy", - href: `${aAslug}/gasless/biconomy`, - }, - { - name: "OpenZeppelin", - href: `${aAslug}/gasless/openzeppelin`, - }, - ], - }, - // { - // name: "References", - // isCollapsible: true, - // expanded: true, - // links: [ - // { - // name: "React", - // href: `/references/typescript/v5/smartWallet`, - // }, - // { - // name: "React Native", - // href: `/react-native/v0/wallets/smartwallet`, - // }, - // { - // name: "TypeScript", - // href: `/references/wallets/v2/SmartWallet`, - // }, - // { - // name: "Unity", - // href: `/unity/wallets/providers/smart-wallet`, - // }, - // ], - // }, - { - name: "FAQs", - href: `${aAslug}/faq`, - }, - ], - }, - // Auth - { - name: "Auth (SIWE)", - icon: , - links: [ - { - name: "Get Started", - href: `${authSlug}`, - }, - { - name: "Frameworks", - isCollapsible: true, - expanded: false, - links: [ - { - name: "Next.js", - href: `${authSlug}/frameworks/next`, - }, - { - name: "React + Express", - href: `${authSlug}/frameworks/react-express`, - }, - ], - }, - { - name: "Deploying to Production", - href: `${authSlug}/deploying-to-production`, - }, - ], - }, - // Pay - { - name: "Pay", - icon: , - links: [ - { - name: "Overview", - href: `${paySlug}/overview`, - }, - { - name: "Get Started", - href: `${paySlug}/get-started`, - expanded: true, - links: [ - { - name: "ConnectButton", - href: `${paySlug}/get-started#option-1-connectbutton`, - }, - { - name: "Embed Pay", - href: `${paySlug}/get-started#option-2-embed-pay`, - }, - { - name: "Send a Transaction", - href: `${paySlug}/get-started#option-3-send-a-transaction-with-pay`, - }, - ], - }, - { - name: "Supported Chains", - href: `${paySlug}/supported-chains`, - }, + { + name: "Fee Sharing", + href: `${paySlug}/fee-sharing`, + }, - { - name: "Fee Sharing", - href: `${paySlug}/fee-sharing`, - }, + { + name: "Webhooks", + href: `${paySlug}/webhooks`, + }, + { + name: "Testing Pay", + href: `${paySlug}/testing-pay`, + }, + { + name: "Guides", + isCollapsible: true, - { - name: "Webhooks", - href: `${paySlug}/webhooks`, - }, - { - name: "Testing Pay", - href: `${paySlug}/testing-pay`, - }, - { - name: "Guides", - isCollapsible: true, + links: [ + { + name: "Accept Direct Payments", + href: `${paySlug}/guides/accept-direct-payments`, + }, + { + name: "Build a Custom Experience", + href: `${paySlug}/guides/build-a-custom-experience`, + }, + ], + }, - links: [ - { - name: "Accept Direct Payments", - href: `${paySlug}/guides/accept-direct-payments`, - }, - { - name: "Build a Custom Experience", - href: `${paySlug}/guides/build-a-custom-experience`, - }, - ], - }, + { + name: "Customization", + isCollapsible: true, - { - name: "Customization", - isCollapsible: true, - - links: [ - { - name: "ConnectButton", - href: `${paySlug}/customization/connectbutton`, - }, - { - name: "PayEmbed", - href: `${paySlug}/customization/payembed`, - }, - { - name: "useSendTransaction", - href: `${paySlug}/customization/send-transaction`, - }, - ], - }, - { - name: "FAQs", - href: `${paySlug}/faqs`, - }, - ], - }, - // Blockchain API - { - name: "Blockchain API", - icon: , - href: "/connect/blockchain-api", - links: [ - { - name: "TypeScript", - href: "/typescript/v5", - icon: , - }, - { - name: "React", - href: "/react/v5", - icon: , - }, - { - name: "React Native", - href: "/react-native/v5", - icon: , - }, - { - name: "Dotnet", - href: "/dotnet", - icon: , - }, - { - name: "Unity", - href: "/unity", - icon: , - }, - { - name: "Unreal", - href: "/unreal", - icon: , - }, - ], - }, - ], - }, - ], + links: [ + { + name: "ConnectButton", + href: `${paySlug}/customization/connectbutton`, + }, + { + name: "PayEmbed", + href: `${paySlug}/customization/payembed`, + }, + { + name: "useSendTransaction", + href: `${paySlug}/customization/send-transaction`, + }, + ], + }, + { + name: "FAQs", + href: `${paySlug}/faqs`, + }, + ], + }, + // Blockchain API + { + name: "Blockchain API", + icon: , + href: "/connect/blockchain-api", + links: [ + { + name: "TypeScript", + href: "/typescript/v5", + icon: , + }, + { + name: "React", + href: "/react/v5", + icon: , + }, + { + name: "React Native", + href: "/react-native/v5", + icon: , + }, + { + name: "Dotnet", + href: "/dotnet", + icon: , + }, + { + name: "Unity", + href: "/unity", + icon: , + }, + { + name: "Unreal", + href: "/unreal", + icon: , + }, + ], + }, + ], + }, + ], }; diff --git a/apps/portal/src/app/react/v5/in-app-wallet/how-to/get-in-app-wallet-details-on-server/page.mdx b/apps/portal/src/app/react/v5/in-app-wallet/how-to/get-in-app-wallet-details-on-server/page.mdx deleted file mode 100644 index d4bab50f46e..00000000000 --- a/apps/portal/src/app/react/v5/in-app-wallet/how-to/get-in-app-wallet-details-on-server/page.mdx +++ /dev/null @@ -1,58 +0,0 @@ -# Getting User Details on the server - -If you want to get the user details for a given thirdweb In-App Wallet on the server, you can make a `GET` request on `https://embedded-wallet.thirdweb.com/api/2023-11-30/embedded-wallet/user-details` - -Here's an example function on how you might perform the query: - -```ts -export async function fetchInAppWalletMetadataFromThirdweb( - args: - | { - queryBy: "walletAddress"; - walletAddress: string; - } - | { - queryBy: "email"; - email: string; - } - | { - queryBy: "phone"; - phone: string; - } - | { - queryBy: "phone"; - phone: string; - }, -) { - const url = new URL( - "https://embedded-wallet.thirdweb.com/api/2023-11-30/embedded-wallet/user-details", - ); - if (args.queryBy === "walletAddress") { - url.searchParams.set("queryBy", "walletAddress"); - url.searchParams.set("walletAddress", args.walletAddress); - } - if (args.queryBy === "email") { - url.searchParams.set("queryBy", "email"); - url.searchParams.set("email", args.email); - } - if (args.queryBy === "phone") { - url.searchParams.set("queryBy", "phone"); - url.searchParams.set("phone", args.phone); - } - - const resp = await fetchReq(url.href, { - headers: { - Authorization: `Bearer ${THIRD_WEB_CLIENT_SECRET}`, - }, - }); - - const data = (await resp.json()) as { - userId: string; - walletAddress: string; - email?: string; - phone?: string; - createdAt: string; - }[]; - return data; -} -``` diff --git a/apps/portal/src/app/react/v5/in-app-wallet/how-to/get-user-details/page.mdx b/apps/portal/src/app/react/v5/in-app-wallet/how-to/get-user-details/page.mdx new file mode 100644 index 00000000000..66c56dc4427 --- /dev/null +++ b/apps/portal/src/app/react/v5/in-app-wallet/how-to/get-user-details/page.mdx @@ -0,0 +1,60 @@ +import { Tabs, TabsList, TabsContent, TabsTrigger, DocImage } from "@doc"; + +# Retrieving In-App Wallet User Details on the Server + +You can query user details through the thirdweb SDK using a wallet address, email, phone number, or user ID. **This function requires a secret key to be present on the thirdweb client and should only be used on the server.** + + + + Wallet + Email + Phone + User ID + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + walletAddress: "0x123...", +}); +``` + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + email: "user@example.com", +}); +``` + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + phone: "+11234567890", +}); +``` + + + +```ts +import { getUser } from "thirdweb"; + +const user = await getUser({ + client, + id: "1234567890", +}); +``` + + + + From 09eb0e6a3fe057c699635b0a7f723df2b4a5ee78 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Fri, 20 Sep 2024 23:37:40 +0000 Subject: [PATCH 65/78] Fix/pregen docs (#4732) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR updates the structure of the `wallet` object in the `page.mdx` file to include `address` and `createdAt` properties. ### Detailed summary - Updated the `wallet` object in `page.mdx` to include `address` and `createdAt` properties. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/app/connect/ecosystems/pregenerate-wallets/page.mdx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx index 627423a69e9..b7572d7fd77 100644 --- a/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx +++ b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx @@ -44,7 +44,10 @@ The API returns a JSON object. The exact structure may vary based on the impleme ```json { - "walletAddress": "string", + "wallet": { + "address": "string", + "createdAt": "string", + } } ``` From 6e3669d3849f5b41256cd60edbfb0164cc29e3a8 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Sat, 21 Sep 2024 11:54:20 +1200 Subject: [PATCH 66/78] chore(docs): update embedded wallet API endpoint (#4734) --- .../src/app/connect/ecosystems/pregenerate-wallets/page.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx index b7572d7fd77..006412c7536 100644 --- a/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx +++ b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx @@ -3,7 +3,7 @@ To pregenerate an embedded wallet, you can make a `POST` request to the following endpoint: ``` -https://embedded-wallet.thirdweb-dev.com/api/v1/pregenerate +https://embedded-wallet.thirdweb.com/api/v1/pregenerate ``` ### Request Body @@ -26,9 +26,9 @@ You need to include the following headers: Here's an example curl command to pregenerate an embedded wallet: ```bash -curl -X POST 'https://embedded-wallet.thirdweb-dev.com/api/v1/pregenerate' \ +curl -X POST 'https://embedded-wallet.thirdweb.com/api/v1/pregenerate' \ -H 'x-ecosystem-id: ecosystem.example-eco-123' \ - -H 'x-secret-key: 9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7' \ + -H 'x-secret-key: 9f8e7d6c5b4a3f2e1d0c9b8a7ffge434b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7' \ -H 'Content-Type: application/json' \ -d '{ "strategy": "email", From 824b1bdb69cb02644dbe9d77f965bdab6e046ab5 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Sat, 21 Sep 2024 01:01:07 +0000 Subject: [PATCH 67/78] [SDK] Feature: Ecosystem account linking (#4733) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR enables account linking for ecosystem wallets. ### Detailed summary - Added support for ecosystem wallets in account linking functionality - Updated conditions for multi-auth support in various components - Imported and utilized `isEcosystemWallet` function in multiple files - Modified functions to handle both in-app and ecosystem wallets in account linking operations > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/nine-ladybugs-doubt.md | 5 ++ .../react/core/hooks/others/useProfiles.ts | 3 +- .../screens/LinkProfileScreen.tsx | 27 +++++++++ .../screens/ManageWalletScreen.tsx | 33 +++++----- .../ecosystem/EcosystemWalletConnectUI.tsx | 12 ++-- .../react/web/wallets/in-app/LinkButton.tsx | 20 ------- .../shared/ConnectWalletSocialOptions.tsx | 2 +- .../in-app/core/authentication/linkAccount.ts | 31 +++++----- .../in-app/core/wallet/ecosystem-core.ts | 60 +++++++++++++++---- .../wallets/in-app/core/wallet/profiles.ts | 10 ++-- 10 files changed, 129 insertions(+), 74 deletions(-) create mode 100644 .changeset/nine-ladybugs-doubt.md delete mode 100644 packages/thirdweb/src/react/web/wallets/in-app/LinkButton.tsx diff --git a/.changeset/nine-ladybugs-doubt.md b/.changeset/nine-ladybugs-doubt.md new file mode 100644 index 00000000000..8c4cb3cdbbe --- /dev/null +++ b/.changeset/nine-ladybugs-doubt.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Enable account linking for ecosystem wallets diff --git a/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts b/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts index b4e36de1180..77769edf32b 100644 --- a/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts +++ b/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts @@ -1,4 +1,5 @@ import { type UseQueryResult, useQuery } from "@tanstack/react-query"; +import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wallet.js"; import type { Profile } from "../../../../wallets/in-app/core/authentication/types.js"; import { getProfiles } from "../../../../wallets/in-app/core/wallet/profiles.js"; import type { Wallet } from "../../../../wallets/interfaces/wallet.js"; @@ -28,7 +29,7 @@ export function useProfiles(): UseQueryResult { return useQuery({ queryKey: ["profiles", wallet?.id], - enabled: !!wallet && wallet.id === "inApp", + enabled: !!wallet && (wallet.id === "inApp" || isEcosystemWallet(wallet)), queryFn: async () => { return getProfiles(wallet as Wallet<"inApp">); }, diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx index 4e74ecd4538..a2cd8d143e1 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx @@ -3,10 +3,13 @@ import { CrossCircledIcon } from "@radix-ui/react-icons"; import { useQueryClient } from "@tanstack/react-query"; import { Suspense, lazy } from "react"; import type { ThirdwebClient } from "../../../../../client/client.js"; +import { isEcosystemWallet } from "../../../../../wallets/ecosystem/is-ecosystem-wallet.js"; import type { Wallet } from "../../../../../wallets/interfaces/wallet.js"; +import type { EcosystemWalletId } from "../../../../../wallets/wallet-types.js"; import { iconSize } from "../../../../core/design-system/index.js"; import { useActiveWallet } from "../../../../core/hooks/wallets/useActiveWallet.js"; import { useActiveWalletChain } from "../../../../core/hooks/wallets/useActiveWalletChain.js"; +import EcosystemWalletConnectUI from "../../../wallets/ecosystem/EcosystemWalletConnectUI.js"; import { LoadingScreen } from "../../../wallets/shared/LoadingScreen.js"; import { Container, Line, ModalHeader } from "../../components/basic.js"; import { Text } from "../../components/text.js"; @@ -58,6 +61,30 @@ export function LinkProfileScreen(props: { ); } + if (isEcosystemWallet(activeWallet)) { + return ( + }> + } + done={() => { + queryClient.invalidateQueries({ queryKey: ["profiles"] }); + props.onBack(); + }} + connectLocale={props.locale} + client={props.client} + size="compact" + chain={chain} + meta={{ + title: props.locale.manageWallet.linkProfile, + showThirdwebBranding: false, + }} + isLinking={true} + goBack={props.onBack} + /> + + ); + } + return ( {/* Multi-auth */} - {activeWallet?.id === "inApp" && ( - { - props.setScreen("linked-profiles"); - }} - style={{ - fontSize: fontSize.sm, - }} - > - - - {props.locale.manageWallet.linkedProfiles} - - - )} + {activeWallet && + (activeWallet?.id === "inApp" || + isEcosystemWallet(activeWallet)) && ( + { + props.setScreen("linked-profiles"); + }} + style={{ + fontSize: fontSize.sm, + }} + > + + + {props.locale.manageWallet.linkedProfiles} + + + )} {/* Wallet Connect Receiver */} ; } - const goBackToMain = - props.size === "compact" - ? props.goBack - : () => { - setSelectionData({}); - }; + const goBackToMain = () => { + if (props.size === "compact") { + props.goBack?.(); + } + setSelectionData({}); + }; const done = () => { props.done(); diff --git a/packages/thirdweb/src/react/web/wallets/in-app/LinkButton.tsx b/packages/thirdweb/src/react/web/wallets/in-app/LinkButton.tsx deleted file mode 100644 index 8c1a4b5c17f..00000000000 --- a/packages/thirdweb/src/react/web/wallets/in-app/LinkButton.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; -import { useCustomTheme } from "../../../core/design-system/CustomThemeProvider.js"; -import { fontSize } from "../../../core/design-system/index.js"; -import { StyledButton } from "../../ui/design-system/elements.js"; - -export const LinkButton = /* @__PURE__ */ StyledButton((_) => { - const theme = useCustomTheme(); - return { - all: "unset", - color: theme.colors.accentText, - fontSize: fontSize.sm, - cursor: "pointer", - textAlign: "center", - fontWeight: 500, - width: "100%", - "&:hover": { - color: theme.colors.primaryText, - }, - }; -}); diff --git a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx index 576e0877d48..396af47c25c 100644 --- a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +++ b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx @@ -266,7 +266,7 @@ export const ConnectWalletSocialOptions = ( const connectPromise = (() => { if (props.isLinking) { - if (wallet.id !== "inApp") { + if (wallet.id !== "inApp" && !isEcosystemWallet(wallet)) { throw new Error("Only in-app wallets support multi-auth"); } return linkProfile(wallet, connectOptions); diff --git a/packages/thirdweb/src/wallets/in-app/core/authentication/linkAccount.ts b/packages/thirdweb/src/wallets/in-app/core/authentication/linkAccount.ts index 755df981d46..7b634adee4a 100644 --- a/packages/thirdweb/src/wallets/in-app/core/authentication/linkAccount.ts +++ b/packages/thirdweb/src/wallets/in-app/core/authentication/linkAccount.ts @@ -1,5 +1,7 @@ import type { ThirdwebClient } from "../../../../client/client.js"; import { getThirdwebBaseUrl } from "../../../../utils/domains.js"; +import { getClientFetch } from "../../../../utils/fetch.js"; +import type { Ecosystem } from "../../web/types.js"; import type { Profile } from "./types.js"; /** @@ -11,14 +13,17 @@ import type { Profile } from "./types.js"; */ export async function linkAccount({ client, + ecosystem, tokenToLink, }: { client: ThirdwebClient; + ecosystem?: Ecosystem; tokenToLink: string; }): Promise { + const clientFetch = getClientFetch(client, ecosystem); const IN_APP_URL = getThirdwebBaseUrl("inAppWallet"); const currentAccountToken = localStorage.getItem( - `walletToken-${client.clientId}`, + `walletToken-${client.clientId}${ecosystem?.id ? `-${ecosystem.id}` : ""}`, ); if (!currentAccountToken) { @@ -26,12 +31,10 @@ export async function linkAccount({ } const headers: Record = { - "Content-Type": "application/json", Authorization: `Bearer iaw-auth-token:${currentAccountToken}`, - "x-thirdweb-client-id": client.clientId, + "Content-Type": "application/json", }; - - const linkedDetailsResp = await fetch( + const linkedDetailsResp = await clientFetch( `${IN_APP_URL}/api/2024-05-05/account/connect`, { method: "POST", @@ -61,23 +64,23 @@ export async function linkAccount({ */ export async function getLinkedProfilesInternal({ client, -}: { client: ThirdwebClient }): Promise { + ecosystem, +}: { client: ThirdwebClient; ecosystem?: Ecosystem }): Promise { + const clientFetch = getClientFetch(client, ecosystem); const IN_APP_URL = getThirdwebBaseUrl("inAppWallet"); const currentAccountToken = localStorage.getItem( - `walletToken-${client.clientId}`, + `walletToken-${client.clientId}${ecosystem?.id ? `-${ecosystem.id}` : ""}`, ); - if (!currentAccountToken) { - throw new Error("Failed to get linked accounts, no user logged in"); - } - const headers: Record = { - "Content-Type": "application/json", Authorization: `Bearer iaw-auth-token:${currentAccountToken}`, - "x-thirdweb-client-id": client.clientId, + "Content-Type": "application/json", }; + if (!currentAccountToken) { + throw new Error("Failed to get linked accounts, no user logged in"); + } - const linkedAccountsResp = await fetch( + const linkedAccountsResp = await clientFetch( `${IN_APP_URL}/api/2024-05-05/accounts`, { method: "GET", diff --git a/packages/thirdweb/src/wallets/in-app/core/wallet/ecosystem-core.ts b/packages/thirdweb/src/wallets/in-app/core/wallet/ecosystem-core.ts index c81a2eeb352..74c9327d262 100644 --- a/packages/thirdweb/src/wallets/in-app/core/wallet/ecosystem-core.ts +++ b/packages/thirdweb/src/wallets/in-app/core/wallet/ecosystem-core.ts @@ -8,6 +8,16 @@ import type { CreateWalletArgs, EcosystemWalletId, } from "../../../wallet-types.js"; +import type { Ecosystem } from "../../web/types.js"; +import { + getLinkedProfilesInternal, + linkAccount as linkProfileWithToken, +} from "../authentication/linkAccount.js"; +import type { + MultiStepAuthArgsType, + Profile, + SingleStepAuthArgsType, +} from "../authentication/types.js"; import type { InAppConnector } from "../interfaces/connector.js"; import { getOrCreateInAppWalletConnector } from "./in-app-core.js"; @@ -25,6 +35,10 @@ export function createEcosystemWallet(args: { let account: Account | undefined = undefined; let chain: Chain | undefined = undefined; let client: ThirdwebClient | undefined; + const ecosystem: Ecosystem = { + id, + partnerId: createOptions?.partnerId, + }; return { id, @@ -38,7 +52,13 @@ export function createEcosystemWallet(args: { return chain; }, getConfig: () => createOptions, + getProfiles: async () => { + if (!client) { + return []; + } + return getLinkedProfilesInternal({ client, ecosystem }); + }, getAccount: () => account, autoConnect: async (options) => { const { autoConnectInAppWallet } = await import("./index.js"); @@ -46,10 +66,7 @@ export function createEcosystemWallet(args: { const connector = await getOrCreateInAppWalletConnector( options.client, connectorFactory, - { - id, - partnerId: createOptions?.partnerId, - }, + ecosystem, ); const [connectedAccount, connectedChain] = await autoConnectInAppWallet( @@ -75,10 +92,7 @@ export function createEcosystemWallet(args: { const connector = await getOrCreateInAppWalletConnector( options.client, connectorFactory, - { - id, - partnerId: createOptions?.partnerId, - }, + ecosystem, ); const [connectedAccount, connectedChain] = await connectInAppWallet( @@ -104,10 +118,7 @@ export function createEcosystemWallet(args: { const connector = await getOrCreateInAppWalletConnector( client, connectorFactory, - { - id, - partnerId: createOptions?.partnerId, - }, + ecosystem, ); const result = await connector.logout(); if (!result.success) { @@ -122,5 +133,28 @@ export function createEcosystemWallet(args: { chain = newChain; emitter.emit("chainChanged", newChain); }, - }; + // This is not included on the global interface but is force-resolved in linkProfile + linkProfile: async ( + options: SingleStepAuthArgsType | MultiStepAuthArgsType, + ): Promise => { + if (!client) { + throw new Error( + "No client found, please connect the wallet before linking a profile", + ); + } + + const connector = await getOrCreateInAppWalletConnector( + client, + connectorFactory, + ecosystem, + ); + + const { storedToken } = await connector.authenticate(options); + return await linkProfileWithToken({ + client, + ecosystem, + tokenToLink: storedToken.cookieString, + }); + }, + } as Wallet; } diff --git a/packages/thirdweb/src/wallets/in-app/core/wallet/profiles.ts b/packages/thirdweb/src/wallets/in-app/core/wallet/profiles.ts index c5bfc5916af..ca08d64d91e 100644 --- a/packages/thirdweb/src/wallets/in-app/core/wallet/profiles.ts +++ b/packages/thirdweb/src/wallets/in-app/core/wallet/profiles.ts @@ -1,3 +1,5 @@ +import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wallet.js"; +import type { EcosystemWalletId } from "../../../../wallets/wallet-types.js"; import type { Wallet } from "../../../interfaces/wallet.js"; import type { MultiStepAuthArgsType, @@ -25,8 +27,8 @@ import type { * ``` * @wallet */ -export async function getProfiles(wallet: Wallet<"inApp">) { - if (wallet.id !== "inApp") { +export async function getProfiles(wallet: Wallet<"inApp" | EcosystemWalletId>) { + if (wallet.id !== "inApp" && !isEcosystemWallet(wallet)) { throw new Error("Multi-auth currently only supports in-app wallets"); } @@ -59,10 +61,10 @@ export async function getProfiles(wallet: Wallet<"inApp">) { * @wallet */ export async function linkProfile( - wallet: Wallet<"inApp">, + wallet: Wallet<"inApp" | EcosystemWalletId>, auth: MultiStepAuthArgsType | SingleStepAuthArgsType, ): Promise { - if (wallet.id !== "inApp") { + if (wallet.id !== "inApp" && !isEcosystemWallet(wallet)) { throw new Error("Multi-auth currently only supports in-app wallets"); } From 997bfa84cc95b98ec555011a08b1ed0377befba6 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Sat, 21 Sep 2024 13:14:48 +1200 Subject: [PATCH 68/78] Update pregenerate docs (#4736) Signed-off-by: Joaquim Verges --- .../ecosystems/pregenerate-wallets/page.mdx | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx index 006412c7536..4a8d42359c5 100644 --- a/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx +++ b/apps/portal/src/app/connect/ecosystems/pregenerate-wallets/page.mdx @@ -5,15 +5,38 @@ To pregenerate an embedded wallet, you can make a `POST` request to the followin ``` https://embedded-wallet.thirdweb.com/api/v1/pregenerate ``` +This allows you to safely create wallet addresses for your users before they login to your app. -### Request Body +## Request Body The request body should be a JSON object with the following parameters: -- `strategy`: The strategy for wallet generation (currently supports "email") -- `email`: The email address associated with the wallet to be generated +- `strategy`: The strategy for wallet generation +- `email` or `phone` or `userId`: The user identifier associated with the wallet to be generated -### Headers +### Email based wallets + +``` +{ strategy: "email", email: "user@example.com" } +``` + +When the user logs in with any method associated with that email (including google, facebook, discord auth), they will get access to the same pregenerated wallet. + +### Phone based wallets + +``` +{ strategy: "phone", phone: "+1321123321" } +``` + +### Custom user id based wallets + +``` +{ strategy: "custom_auth_endpoint", userId: "some_user_id" } +``` + +Use this when [bringing your own authentication method](/connect/in-app-wallet/custom-auth/configuration). When the user logs in, if the user ids you provide from the auth endpoint match, they will get access to the same pregenerated wallet. + +## Headers You need to include the following headers: @@ -21,7 +44,7 @@ You need to include the following headers: - `x-secret-key`: Your secret key for authentication - `Content-Type`: Must be set to `application/json` -### Example curl Command +## Example curl Command Here's an example curl command to pregenerate an embedded wallet: @@ -38,7 +61,7 @@ curl -X POST 'https://embedded-wallet.thirdweb.com/api/v1/pregenerate' \ Replace the header values with your actual client ID, ecosystem ID, and secret key. -### Response Format +## Response Format The API returns a JSON object. The exact structure may vary based on the implementation, but it typically includes information about the pregenerated wallet. Here's a possible structure: From ca23a95bfd6be478a0c78a9985b352893a828d44 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Fri, 20 Sep 2024 19:27:50 -0700 Subject: [PATCH 69/78] Version Packages (#4735) Co-authored-by: github-actions[bot] --- .changeset/nine-ladybugs-doubt.md | 5 ----- packages/thirdweb/CHANGELOG.md | 6 ++++++ packages/thirdweb/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/nine-ladybugs-doubt.md diff --git a/.changeset/nine-ladybugs-doubt.md b/.changeset/nine-ladybugs-doubt.md deleted file mode 100644 index 8c4cb3cdbbe..00000000000 --- a/.changeset/nine-ladybugs-doubt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Enable account linking for ecosystem wallets diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index 7f13e72bee7..88bafffaece 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,11 @@ # thirdweb +## 5.58.1 + +### Patch Changes + +- [#4733](https://github.com/thirdweb-dev/js/pull/4733) [`824b1bd`](https://github.com/thirdweb-dev/js/commit/824b1bdb69cb02644dbe9d77f965bdab6e046ab5) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Enable account linking for ecosystem wallets + ## 5.58.0 ### Minor Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index eb01a458e8d..5ec3c0074cd 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.58.0", + "version": "5.58.1", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" From 2707db136ed98ed1c39dd5da20f0ebd41dcaf5b9 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Sat, 21 Sep 2024 19:34:23 +1200 Subject: [PATCH 70/78] feat: allow linking identities when using in-app + smart wallets (#4737) --- .changeset/brave-socks-impress.md | 5 +++++ .../src/react/core/hooks/others/useProfiles.ts | 4 ++-- .../ui/ConnectWallet/screens/LinkProfileScreen.tsx | 4 ++-- .../ConnectWallet/screens/ManageWalletScreen.tsx | 3 ++- .../web/wallets/in-app/InAppWalletConnectUI.tsx | 14 ++++++++------ 5 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 .changeset/brave-socks-impress.md diff --git a/.changeset/brave-socks-impress.md b/.changeset/brave-socks-impress.md new file mode 100644 index 00000000000..6095140017a --- /dev/null +++ b/.changeset/brave-socks-impress.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Allow linking accounts when using in-app + smart wallets diff --git a/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts b/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts index 77769edf32b..830132ec4dd 100644 --- a/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts +++ b/packages/thirdweb/src/react/core/hooks/others/useProfiles.ts @@ -3,7 +3,7 @@ import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wa import type { Profile } from "../../../../wallets/in-app/core/authentication/types.js"; import { getProfiles } from "../../../../wallets/in-app/core/wallet/profiles.js"; import type { Wallet } from "../../../../wallets/interfaces/wallet.js"; -import { useActiveWallet } from "../wallets/useActiveWallet.js"; +import { useAdminWallet } from "../wallets/useAdminAccount.js"; /** * Retrieves all linked profiles for the current wallet. @@ -25,7 +25,7 @@ import { useActiveWallet } from "../wallets/useActiveWallet.js"; * @wallet */ export function useProfiles(): UseQueryResult { - const wallet = useActiveWallet(); + const wallet = useAdminWallet(); return useQuery({ queryKey: ["profiles", wallet?.id], diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx index a2cd8d143e1..a36c92b2411 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx @@ -7,8 +7,8 @@ import { isEcosystemWallet } from "../../../../../wallets/ecosystem/is-ecosystem import type { Wallet } from "../../../../../wallets/interfaces/wallet.js"; import type { EcosystemWalletId } from "../../../../../wallets/wallet-types.js"; import { iconSize } from "../../../../core/design-system/index.js"; -import { useActiveWallet } from "../../../../core/hooks/wallets/useActiveWallet.js"; import { useActiveWalletChain } from "../../../../core/hooks/wallets/useActiveWalletChain.js"; +import { useAdminWallet } from "../../../../core/hooks/wallets/useAdminAccount.js"; import EcosystemWalletConnectUI from "../../../wallets/ecosystem/EcosystemWalletConnectUI.js"; import { LoadingScreen } from "../../../wallets/shared/LoadingScreen.js"; import { Container, Line, ModalHeader } from "../../components/basic.js"; @@ -28,7 +28,7 @@ export function LinkProfileScreen(props: { client: ThirdwebClient; walletConnect: { projectId?: string } | undefined; }) { - const activeWallet = useActiveWallet(); + const activeWallet = useAdminWallet(); const chain = useActiveWalletChain(); const queryClient = useQueryClient(); diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/ManageWalletScreen.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/ManageWalletScreen.tsx index 61f19af5fbc..bfd27a532a2 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/ManageWalletScreen.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/ManageWalletScreen.tsx @@ -6,6 +6,7 @@ import { isInAppWallet } from "../../../../../wallets/in-app/core/wallet/index.j import { injectedProvider } from "../../../../../wallets/injected/mipdStore.js"; import { fontSize, iconSize } from "../../../../core/design-system/index.js"; import { useActiveWallet } from "../../../../core/hooks/wallets/useActiveWallet.js"; +import { useAdminWallet } from "../../../../core/hooks/wallets/useAdminAccount.js"; import { Spacer } from "../../components/Spacer.js"; import { Container, Line, ModalHeader } from "../../components/basic.js"; import { Text } from "../../components/text.js"; @@ -26,7 +27,7 @@ export function ManageWalletScreen(props: { locale: ConnectLocale; client: ThirdwebClient; }) { - const activeWallet = useActiveWallet(); + const activeWallet = useAdminWallet(); return ( { - setSelectionData({}); - } - : props.goBack; + const goBackToMain = () => { + if (initialScreen === props.wallet) { + setSelectionData({}); + } else { + props.goBack?.(); + setSelectionData({}); + } + }; const done = () => { props.done(); From 89728c6578e661a4763992e85c2c24ac616dec57 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Sat, 21 Sep 2024 00:43:51 -0700 Subject: [PATCH 71/78] Version Packages (#4739) Co-authored-by: github-actions[bot] --- .changeset/brave-socks-impress.md | 5 ----- packages/thirdweb/CHANGELOG.md | 6 ++++++ packages/thirdweb/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/brave-socks-impress.md diff --git a/.changeset/brave-socks-impress.md b/.changeset/brave-socks-impress.md deleted file mode 100644 index 6095140017a..00000000000 --- a/.changeset/brave-socks-impress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Allow linking accounts when using in-app + smart wallets diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index 88bafffaece..e561d55cae9 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,11 @@ # thirdweb +## 5.58.2 + +### Patch Changes + +- [#4737](https://github.com/thirdweb-dev/js/pull/4737) [`2707db1`](https://github.com/thirdweb-dev/js/commit/2707db136ed98ed1c39dd5da20f0ebd41dcaf5b9) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Allow linking accounts when using in-app + smart wallets + ## 5.58.1 ### Patch Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 5ec3c0074cd..8e8aadcbe29 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.58.1", + "version": "5.58.2", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" From 915442e1c4e769b56187311420c7e762325c4872 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Sat, 21 Sep 2024 22:31:25 +1200 Subject: [PATCH 72/78] feat: enable wallet linking and guest mode for ecosystem wallets (#4740) --- .changeset/cuddly-parrots-laugh.md | 5 +++ .../Modal/AnyWalletConnectUI.tsx | 1 + .../screens/LinkProfileScreen.tsx | 1 + .../ecosystem/EcosystemWalletConnectUI.tsx | 34 +++++++++++++++++++ .../react/web/wallets/in-app/WalletAuth.tsx | 3 +- 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 .changeset/cuddly-parrots-laugh.md diff --git a/.changeset/cuddly-parrots-laugh.md b/.changeset/cuddly-parrots-laugh.md new file mode 100644 index 00000000000..96be5d34336 --- /dev/null +++ b/.changeset/cuddly-parrots-laugh.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Enable wallet linking and guest mode for ecosystem wallets diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx index 1b65506b6f3..46263420d3e 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx @@ -287,6 +287,7 @@ export function AnyWalletConnectUI(props: { client={props.client} size={props.size} meta={props.meta} + walletConnect={props.walletConnect} connectLocale={props.connectLocale} /> diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx index a36c92b2411..77cabb6b875 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/LinkProfileScreen.tsx @@ -78,6 +78,7 @@ export function LinkProfileScreen(props: { title: props.locale.manageWallet.linkProfile, showThirdwebBranding: false, }} + walletConnect={props.walletConnect} isLinking={true} goBack={props.onBack} /> diff --git a/packages/thirdweb/src/react/web/wallets/ecosystem/EcosystemWalletConnectUI.tsx b/packages/thirdweb/src/react/web/wallets/ecosystem/EcosystemWalletConnectUI.tsx index 4b608342a3d..0baf6c852b5 100644 --- a/packages/thirdweb/src/react/web/wallets/ecosystem/EcosystemWalletConnectUI.tsx +++ b/packages/thirdweb/src/react/web/wallets/ecosystem/EcosystemWalletConnectUI.tsx @@ -8,8 +8,10 @@ import { useSetSelectionData, } from "../../providers/wallet-ui-states-provider.js"; import type { ConnectLocale } from "../../ui/ConnectWallet/locale/types.js"; +import { WalletAuth } from "../in-app/WalletAuth.js"; import { useInAppWalletLocale } from "../in-app/useInAppWalletLocale.js"; import type { ConnectWalletSelectUIState } from "../shared/ConnectWalletSocialOptions.js"; +import { GuestLogin } from "../shared/GuestLogin.js"; import { LoadingScreen } from "../shared/LoadingScreen.js"; import { OTPLoginUI } from "../shared/OTPLoginUI.js"; import { PassKeyLogin } from "../shared/PassKeyLogin.js"; @@ -35,6 +37,7 @@ function EcosystemWalletConnectUI(props: { termsOfServiceUrl?: string; privacyPolicyUrl?: string; }; + walletConnect: { projectId?: string } | undefined; isLinking?: boolean; }) { const data = useSelectionData(); @@ -114,6 +117,37 @@ function EcosystemWalletConnectUI(props: { ); } + if (state?.walletLogin) { + return ( + setSelectionData({}))} + locale={props.connectLocale} + /> + ); + } + + if (state?.guestLogin) { + return ( + + ); + } + return ( {}} diff --git a/packages/thirdweb/src/react/web/wallets/in-app/WalletAuth.tsx b/packages/thirdweb/src/react/web/wallets/in-app/WalletAuth.tsx index 2e916929680..8101d7c6af4 100644 --- a/packages/thirdweb/src/react/web/wallets/in-app/WalletAuth.tsx +++ b/packages/thirdweb/src/react/web/wallets/in-app/WalletAuth.tsx @@ -3,6 +3,7 @@ import { defineChain } from "../../../../chains/utils.js"; import type { ThirdwebClient } from "../../../../client/client.js"; import { linkProfile } from "../../../../wallets/in-app/core/wallet/profiles.js"; import type { Wallet } from "../../../../wallets/interfaces/wallet.js"; +import type { EcosystemWalletId } from "../../../../wallets/wallet-types.js"; import { iconSize } from "../../../core/design-system/index.js"; import { useAddConnectedWallet } from "../../../core/hooks/wallets/useAddConnectedWallet.js"; import AllWalletsUI from "../../ui/ConnectWallet/Modal/AllWalletsUI.js"; @@ -18,7 +19,7 @@ import { LoadingState } from "../shared/LoadingState.js"; import type { InAppWalletLocale } from "../shared/locale/types.js"; export function WalletAuth(props: { - wallet: Wallet<"inApp">; + wallet: Wallet<"inApp" | EcosystemWalletId>; client: ThirdwebClient; done: () => void; size: "compact" | "wide"; From f424d0ab2d82f219dfcf2e3ac878fc7b548863c7 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Sat, 21 Sep 2024 03:46:48 -0700 Subject: [PATCH 73/78] Version Packages (#4741) Co-authored-by: github-actions[bot] --- .changeset/cuddly-parrots-laugh.md | 5 ----- packages/thirdweb/CHANGELOG.md | 6 ++++++ packages/thirdweb/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/cuddly-parrots-laugh.md diff --git a/.changeset/cuddly-parrots-laugh.md b/.changeset/cuddly-parrots-laugh.md deleted file mode 100644 index 96be5d34336..00000000000 --- a/.changeset/cuddly-parrots-laugh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Enable wallet linking and guest mode for ecosystem wallets diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index e561d55cae9..61dc754abb4 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,11 @@ # thirdweb +## 5.58.3 + +### Patch Changes + +- [#4740](https://github.com/thirdweb-dev/js/pull/4740) [`915442e`](https://github.com/thirdweb-dev/js/commit/915442e1c4e769b56187311420c7e762325c4872) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Enable wallet linking and guest mode for ecosystem wallets + ## 5.58.2 ### Patch Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 8e8aadcbe29..a0ce26bb1c2 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.58.2", + "version": "5.58.3", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" From a4dac9563002a2909902b84aa5b764e3fae27b6b Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Sat, 21 Sep 2024 11:08:35 +0000 Subject: [PATCH 74/78] [SDK] Fix jsdoc for getCLaimParams (#4738) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to fix the JSDoc for the `getClaimParams` function in the `thirdweb` package. ### Detailed summary - Updated JSDoc for `getClaimParams` in `thirdweb/utils` directory. - Changed import path from `thirdweb/extensions/erc1155` to `thirdweb/utils`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/green-otters-judge.md | 5 +++++ .../thirdweb/src/utils/extensions/drops/get-claim-params.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/green-otters-judge.md diff --git a/.changeset/green-otters-judge.md b/.changeset/green-otters-judge.md new file mode 100644 index 00000000000..c138c8ab0ec --- /dev/null +++ b/.changeset/green-otters-judge.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Fix jsdoc for getClaimParams diff --git a/packages/thirdweb/src/utils/extensions/drops/get-claim-params.ts b/packages/thirdweb/src/utils/extensions/drops/get-claim-params.ts index 85d7aa032d0..49d10e71dc7 100644 --- a/packages/thirdweb/src/utils/extensions/drops/get-claim-params.ts +++ b/packages/thirdweb/src/utils/extensions/drops/get-claim-params.ts @@ -34,7 +34,7 @@ export type GetClaimParamsOptions = { * @extension ERC1155 * @example * ```ts - * import { getClaimParams } from "thirdweb/extensions/erc1155"; + * import { getClaimParams } from "thirdweb/utils"; * * const claimParams = await getClaimParams({ * contract, From f2307fde028751ce3162c798d3b94229f4c99f17 Mon Sep 17 00:00:00 2001 From: arcoraven Date: Sat, 21 Sep 2024 16:30:43 +0000 Subject: [PATCH 75/78] chore: show min version number (#4744) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview This PR updates the alert management feature message for cloud-hosted Engines to specify version requirement. ### Detailed summary - Updated alert management feature message for cloud-hosted Engines to require v2.0.10 or later. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/components/engine/alerts/ManageEngineAlerts.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.tsx b/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.tsx index 08f6da007e3..d672b114e17 100644 --- a/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.tsx +++ b/apps/dashboard/src/components/engine/alerts/ManageEngineAlerts.tsx @@ -235,7 +235,7 @@ function CreateAlertButton(props: { From 0a4e44575d875b9c2b60bef709ef8ea7f060adbb Mon Sep 17 00:00:00 2001 From: MananTank Date: Sat, 21 Sep 2024 21:10:49 +0000 Subject: [PATCH 76/78] Remove all chain override contexts and move to global store (#4743) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview The focus of this PR is to refactor chain-related functionality and imports, update TypeScript types, and improve store management. ### Detailed summary - Refactored chain-related functionality and imports - Updated TypeScript types for chain mapping - Improved store management for chains - Updated API calls for chain data - Removed unused hooks and contexts > The following files were skipped due to too many changes: `apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx`, `apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signer.tsx`, `apps/dashboard/src/contract-ui/tabs/split/page.tsx`, `apps/dashboard/src/stores/SyncStoreToStorage.tsx`, `apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx`, `apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx`, `apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx`, `apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx`, `apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx`, `apps/dashboard/src/components/buttons/MismatchButton.tsx`, `apps/dashboard/src/components/selects/NetworkSelectDropdown.tsx`, `apps/dashboard/src/components/selects/CustomChainRenderer.tsx`, `apps/dashboard/src/components/app-layouts/app.tsx`, `apps/dashboard/src/components/contract-components/published-contract/addresses-modal.tsx`, `apps/dashboard/src/components/contract-components/tables/deployed-contracts.tsx`, `apps/dashboard/src/lib/v5-adapter.ts`, `apps/dashboard/src/components/engine/overview/transactions-table.tsx`, `apps/dashboard/src/@3rdweb-sdk/react/hooks/useRegistry.ts`, `apps/dashboard/src/stores/chainStores.tsx`, `apps/dashboard/src/components/engine/relayer/relayers-table.tsx`, `apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx`, `apps/dashboard/src/hooks/chains/allChains.ts`, `apps/dashboard/src/pages/[chain_id]/[...paths].tsx`, `apps/dashboard/src/components/selects/NetworkSelectorButton.tsx`, `apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/dashboard/package.json | 1 + apps/dashboard/src/@/lib/reactive.ts | 8 +- .../react/components/connect-wallet/index.tsx | 105 ++++-- .../src/@3rdweb-sdk/react/hooks/useApi.ts | 26 -- .../react/hooks/useFavoriteChains.ts | 31 -- .../@3rdweb-sdk/react/hooks/useRegistry.ts | 22 +- .../(chain)/components/client/star-button.tsx | 4 +- apps/dashboard/src/app/providers.tsx | 18 +- .../src/components/app-layouts/app.tsx | 28 +- .../src/components/buttons/MismatchButton.tsx | 10 +- .../ConfigureNetworkForm.tsx | 23 +- .../ConfigureNetworkModal.tsx | 10 +- .../configure-networks/ConfigureNetworks.tsx | 12 +- .../Form/NetworkIdInput.tsx | 11 +- .../contract-publish-form/NetworkDropdown.tsx | 8 +- .../published-contract/addresses-modal.tsx | 78 ++-- .../tables/deployed-contracts.tsx | 14 +- .../contract-subscriptions-table.tsx | 10 +- .../engine/overview/transactions-table.tsx | 16 +- .../engine/relayer/add-relayer-button.tsx | 6 +- .../engine/relayer/relayers-table.tsx | 17 +- .../selects/CustomChainRenderer.tsx | 22 +- .../selects/NetworkSelectDropdown.tsx | 14 +- .../selects/NetworkSelectorButton.tsx | 86 +++-- .../components/shared/CurrencySelector.tsx | 6 +- apps/dashboard/src/contexts/all-chains.tsx | 49 --- .../src/contexts/configured-chains.tsx | 336 ------------------ apps/dashboard/src/contexts/map-chains.tsx | 2 +- .../components/account-signer.tsx | 6 +- .../account/components/deposit-native.tsx | 2 +- .../src/contract-ui/tabs/account/page.tsx | 6 +- .../components/price-preview.tsx | 6 +- .../tabs/code/components/code-overview.tsx | 5 +- .../tabs/embed/components/embed-setup.tsx | 10 +- .../tabs/nfts/components/token-id.tsx | 2 +- .../src/contract-ui/tabs/split/page.tsx | 6 +- apps/dashboard/src/hooks/chains/allChains.ts | 137 ++++++- apps/dashboard/src/hooks/chains/chainSlug.ts | 19 +- .../src/hooks/chains/configureChains.ts | 81 ----- .../src/hooks/chains/recentlyUsedChains.ts | 40 --- .../src/hooks/chains/useModifyChain.ts | 21 -- apps/dashboard/src/lib/v5-adapter.ts | 25 +- .../src/pages/[chain_id]/[...paths].tsx | 45 ++- .../src/stores/SyncStoreToStorage.tsx | 45 +++ apps/dashboard/src/stores/chainStores.tsx | 80 +++++ 45 files changed, 608 insertions(+), 901 deletions(-) delete mode 100644 apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts delete mode 100644 apps/dashboard/src/contexts/all-chains.tsx delete mode 100644 apps/dashboard/src/contexts/configured-chains.tsx delete mode 100644 apps/dashboard/src/hooks/chains/configureChains.ts delete mode 100644 apps/dashboard/src/hooks/chains/recentlyUsedChains.ts delete mode 100644 apps/dashboard/src/hooks/chains/useModifyChain.ts create mode 100644 apps/dashboard/src/stores/SyncStoreToStorage.tsx create mode 100644 apps/dashboard/src/stores/chainStores.tsx diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 0831d64ae46..1f3d9048c79 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -10,6 +10,7 @@ "format": "biome format ./src --write", "lint": "biome check ./src && knip && eslint ./src", "fix": "biome check ./src --fix && eslint ./src --fix", + "typecheck": "tsc --noEmit", "gen:theme-typings": "chakra-cli tokens src/theme/index.ts", "postinstall": "pnpm run gen:theme-typings", "postbuild": "next-sitemap", diff --git a/apps/dashboard/src/@/lib/reactive.ts b/apps/dashboard/src/@/lib/reactive.ts index 422ecb77ab5..931ecdf25e8 100644 --- a/apps/dashboard/src/@/lib/reactive.ts +++ b/apps/dashboard/src/@/lib/reactive.ts @@ -1,4 +1,6 @@ -type Store = { +import { useSyncExternalStore } from "react"; + +export type Store = { getValue(): T; setValue(newValue: T): void; subscribe(listener: () => void): () => void; @@ -45,3 +47,7 @@ export function createStore(initialValue: T): Store { }, }; } + +export function useStore(store: Store): T { + return useSyncExternalStore(store.subscribe, store.getValue, store.getValue); +} diff --git a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx index d0ee65c12c9..aad817a3a72 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx @@ -3,28 +3,31 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button } from "@/components/ui/button"; import { useThirdwebClient } from "@/constants/thirdweb.client"; +import { useStore } from "@/lib/reactive"; import { getSDKTheme } from "app/components/sdk-component-theme"; import { CustomChainRenderer } from "components/selects/CustomChainRenderer"; import { mapV4ChainToV5Chain } from "contexts/map-chains"; import { useTrack } from "hooks/analytics/useTrack"; -import { - useSupportedChains, - useSupportedChainsRecord, -} from "hooks/chains/configureChains"; -import { - useAddRecentlyUsedChainId, - useRecentlyUsedChains, -} from "hooks/chains/recentlyUsedChains"; import { useTheme } from "next-themes"; import Image from "next/image"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useCallback, useMemo, useState } from "react"; import type { Chain } from "thirdweb"; -import { AutoConnect, ConnectButton, useConnectModal } from "thirdweb/react"; +import { + AutoConnect, + ConnectButton, + type NetworkSelectorProps, + useConnectModal, +} from "thirdweb/react"; +import { useFavoriteChainIds } from "../../../../app/(dashboard)/(chain)/components/client/star-button"; import { LazyConfigureNetworkModal } from "../../../../components/configure-networks/LazyConfigureNetworkModal"; -import type { StoredChain } from "../../../../contexts/configured-chains"; -import { useFavoriteChains } from "../../hooks/useFavoriteChains"; +import { useAllChainsData } from "../../../../hooks/chains/allChains"; +import { + type StoredChain, + addRecentlyUsedChainId, + recentlyUsedChainIdsStore, +} from "../../../../stores/chainStores"; import { useLoggedInUser } from "../../hooks/useLoggedInUser"; import { popularChains } from "../popularChains"; @@ -36,43 +39,81 @@ export const CustomConnectWallet = (props: { const thirdwebClient = useThirdwebClient(); const loginRequired = props.loginRequired === undefined ? true : props.loginRequired; + const { theme } = useTheme(); - const recentChainsv4 = useRecentlyUsedChains(); - const addRecentlyUsedChainId = useAddRecentlyUsedChainId(); const t = theme === "light" ? "light" : "dark"; - const allv4Chains = useSupportedChains(); - const chainsRecord = useSupportedChainsRecord(); - const favChainsQuery = useFavoriteChains(); - const allChains = useMemo(() => { - return allv4Chains.map(mapV4ChainToV5Chain); - }, [allv4Chains]); - const popularChainsWithMeta = useMemo(() => { - return popularChains.map((x) => chainsRecord[x.id] || x); - }, [chainsRecord]); + // chains + const favChainIdsQuery = useFavoriteChainIds(); + const recentChainIds = useStore(recentlyUsedChainIdsStore); + const { idToChain, allChains } = useAllChainsData(); + + const allChainsWithMetadata = useMemo( + () => allChains.map(mapV4ChainToV5Chain), + [allChains], + ); + + const recentlyUsedChainsWithMetadata = useMemo( + () => + recentChainIds + .map((id) => { + const c = idToChain.get(id); + // eslint-disable-next-line no-restricted-syntax + return c ? mapV4ChainToV5Chain(c) : undefined; + }) + .filter((x) => !!x), + [recentChainIds, idToChain], + ); + + const favoriteChainsWithMetadata = useMemo(() => { + return (favChainIdsQuery.data || []) + .map((id) => { + const c = idToChain.get(Number(id)); + // eslint-disable-next-line no-restricted-syntax + return c ? mapV4ChainToV5Chain(c) : undefined; + }) + .filter((x) => !!x); + }, [idToChain, favChainIdsQuery.data]); + + const popularChainsWithMetadata = useMemo(() => { + // eslint-disable-next-line no-restricted-syntax + return popularChains.map((x) => + // eslint-disable-next-line no-restricted-syntax + { + const v4Chain = idToChain.get(x.id); + // eslint-disable-next-line no-restricted-syntax + return v4Chain ? mapV4ChainToV5Chain(v4Chain) : x; + }, + ); + }, [idToChain]); + // Network Config Modal const [isNetworkConfigModalOpen, setIsNetworkConfigModalOpen] = useState(false); const [editChain, setEditChain] = useState( undefined, ); - const chainSections = useMemo(() => { + const chainSections: NetworkSelectorProps["sections"] = useMemo(() => { return [ { label: "Favorites", - chains: favChainsQuery.data.map(mapV4ChainToV5Chain), + chains: favoriteChainsWithMetadata, }, { - label: "Popular", - chains: popularChainsWithMeta.map(mapV4ChainToV5Chain), + label: "Recent", + chains: recentlyUsedChainsWithMetadata, }, { - label: "Recent", - chains: recentChainsv4.map(mapV4ChainToV5Chain), + label: "Popular", + chains: popularChainsWithMetadata, }, ]; - }, [recentChainsv4, favChainsQuery.data, popularChainsWithMeta]); + }, [ + recentlyUsedChainsWithMetadata, + favoriteChainsWithMetadata, + popularChainsWithMetadata, + ]); // ensures login status on pages that need it const { isPending, isLoggedIn } = useLoggedInUser(); @@ -84,7 +125,7 @@ export const CustomConnectWallet = (props: {
- {/* need autoconnect here so that we actually connect */} + {/* need auto connect here so that we actually connect */} ); @@ -100,7 +141,7 @@ export const CustomConnectWallet = (props: { Sign In - {/* need autoconnect here so that we actually connect */} + {/* need auto connect here so that we actually connect */} ); @@ -138,7 +179,7 @@ export const CustomConnectWallet = (props: { detailsButton={{ className: props.detailsButtonClassName, }} - chains={allChains} + chains={allChainsWithMetadata} detailsModal={{ networkSelector: { sections: chainSections, diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useApi.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useApi.ts index 4efc02419ed..34bd493a745 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useApi.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useApi.ts @@ -5,7 +5,6 @@ import { useQueryClient, } from "@tanstack/react-query"; import { THIRDWEB_ANALYTICS_API_HOST, THIRDWEB_API_HOST } from "constants/urls"; -import type { ChainMetadata } from "thirdweb/chains"; import invariant from "tiny-invariant"; import { accountKeys, apiKeys, authorizedWallets } from "../cache-keys"; import { useMutationWithInvalidate } from "./query/useQueryWithNetwork"; @@ -947,28 +946,3 @@ export function useAuthorizedWallets() { gcTime: 0, }); } - -/** - * - */ -async function fetchChainsFromApi() { - // always fetch from prod for chains for now - // TODO: re-visit this - const res = await fetch("https://api.thirdweb.com/v1/chains"); - const json = await res.json(); - - if (json.error) { - throw new Error(json.error.message); - } - - return json.data as ChainMetadata[]; -} - -export function useApiChains() { - return useQuery({ - queryKey: ["all-chains"], - queryFn: () => { - return fetchChainsFromApi(); - }, - }); -} diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts deleted file mode 100644 index 53e6aac0659..00000000000 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useFavoriteChains.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { useFavouriteChainIds } from "app/(dashboard)/(chain)/components/client/star-button"; -import { useSupportedChains } from "hooks/chains/configureChains"; -import { useMemo } from "react"; -import type { ChainMetadata } from "thirdweb/chains"; - -export function useFavoriteChains() { - const allChains = useSupportedChains(); - const favChainsQuery = useFavouriteChainIds(); - - const data = useMemo(() => { - if (favChainsQuery.data) { - const _chains: ChainMetadata[] = []; - // biome-ignore lint/complexity/noForEach: FIXME - favChainsQuery.data.forEach((chainId) => { - const chain = allChains.find((c) => String(c.chainId) === chainId); - if (chain) { - _chains.push(chain); - } - }); - - return _chains; - } - - return [] as ChainMetadata[]; - }, [favChainsQuery.data, allChains]); - - return { - isPending: favChainsQuery.isPending, - data, - }; -} diff --git a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useRegistry.ts b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useRegistry.ts index 7a566a52e05..c1b3f7636bd 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/hooks/useRegistry.ts +++ b/apps/dashboard/src/@3rdweb-sdk/react/hooks/useRegistry.ts @@ -8,7 +8,6 @@ import { import type { BasicContract } from "contract-ui/types/types"; import { getAllMultichainRegistry } from "dashboard-extensions/common/read/getAllMultichainRegistry"; import { useAllChainsData } from "hooks/chains/allChains"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { useMemo } from "react"; import { sendAndConfirmTransaction } from "thirdweb"; import { remove } from "thirdweb/extensions/thirdweb"; @@ -42,7 +41,8 @@ export const useAllContractList = ( ) => { const multiChainQuery = useMultiChainRegContractList(walletAddress); - const configuredChainsRecord = useSupportedChainsRecord(); + // TODO - instead of using ALL chains, fetch only the ones used here + const { idToChain } = useAllChainsData(); const contractList = useMemo(() => { const data = multiChainQuery.data || []; @@ -51,14 +51,12 @@ export const useAllContractList = ( // biome-ignore lint/complexity/noForEach: FIXME data.forEach((net) => { - if (net.chainId in configuredChainsRecord) { - const chainRecord = configuredChainsRecord[net.chainId]; - if (chainRecord.status !== "deprecated") { - if (chainRecord.testnet) { - testnets.push(net); - } else { - mainnets.push(net); - } + const chn = idToChain.get(net.chainId); + if (chn && chn.status !== "deprecated") { + if (chn.testnet) { + testnets.push(net); + } else { + mainnets.push(net); } } }); @@ -71,7 +69,7 @@ export const useAllContractList = ( testnets.sort((a, b) => a.chainId - b.chainId); return mainnets.concat(testnets); - }, [multiChainQuery.data, onlyMainnet, configuredChainsRecord]); + }, [multiChainQuery.data, onlyMainnet, idToChain]); return { ...multiChainQuery, @@ -85,12 +83,10 @@ type RemoveContractParams = { }; export function useRemoveContractMutation() { - const { chainIdToChainRecord } = useAllChainsData(); const queryClient = useQueryClient(); const account = useActiveAccount(); return useMutation({ mutationFn: async (data: RemoveContractParams) => { - invariant(chainIdToChainRecord, "chains not initialzed yet"); invariant(data.chainId, "chainId not provided"); invariant(account, "No wallet connected"); const { contractAddress, chainId } = data; diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/components/client/star-button.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/components/client/star-button.tsx index f0d3cf40123..467920db85a 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/components/client/star-button.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/components/client/star-button.tsx @@ -42,7 +42,7 @@ async function removeChainFromFavorites(chainId: number) { return result?.data?.favorite; } -export function useFavouriteChainIds() { +export function useFavoriteChainIds() { const loggedInUser = useLoggedInUser(); return useQuery({ queryKey: ["favoriteChains", loggedInUser.user?.address], @@ -59,7 +59,7 @@ export function StarButton(props: { }) { const loggedInUser = useLoggedInUser(); const queryClient = useQueryClient(); - const favChainsQuery = useFavouriteChainIds(); + const favChainsQuery = useFavoriteChainIds(); const mutation = useMutation({ mutationFn: (preferred: boolean) => { diff --git a/apps/dashboard/src/app/providers.tsx b/apps/dashboard/src/app/providers.tsx index 823f6806a1f..33a820c908d 100644 --- a/apps/dashboard/src/app/providers.tsx +++ b/apps/dashboard/src/app/providers.tsx @@ -1,25 +1,21 @@ "use client"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { AllChainsProvider } from "contexts/all-chains"; -import { ChainsProvider } from "contexts/configured-chains"; import { ThemeProvider } from "next-themes"; import { ThirdwebProvider } from "thirdweb/react"; +import { SyncChainStores } from "../stores/chainStores"; const queryClient = new QueryClient(); export function AppRouterProviders(props: { children: React.ReactNode }) { return ( - - - - - {props.children} - - - - + + + + {props.children} + + ); } diff --git a/apps/dashboard/src/components/app-layouts/app.tsx b/apps/dashboard/src/components/app-layouts/app.tsx index 804ade9fbc8..19077c7e180 100644 --- a/apps/dashboard/src/components/app-layouts/app.tsx +++ b/apps/dashboard/src/components/app-layouts/app.tsx @@ -15,14 +15,13 @@ import { AppShell, type AppShellProps } from "components/layout/app-shell"; import { Onboarding as OnboardingModal } from "components/onboarding"; import { OpCreditsGrantedModalWrapper } from "components/onboarding/OpCreditsGrantedModalWrapper"; import { PosthogIdentifier } from "components/wallets/PosthogIdentifier"; -import { AllChainsProvider } from "contexts/all-chains"; -import { ChainsProvider } from "contexts/configured-chains"; import { ErrorProvider } from "contexts/error-handler"; import { isSanctionedAddress } from "data/eth-sanctioned-addresses"; import { useEffect, useMemo, useState } from "react"; import { useActiveAccount } from "thirdweb/react"; import { Heading } from "tw-components"; import type { ComponentWithChildren } from "types/component-with-children"; +import { SyncChainStores } from "../../stores/chainStores"; import { DashboardThirdwebProvider } from "./providers"; interface AppLayoutProps extends AppShellProps { @@ -50,22 +49,19 @@ export const AppLayout: ComponentWithChildren = (props) => { - - - - - - + + + + + - - + + - - - - - - + + + + diff --git a/apps/dashboard/src/components/buttons/MismatchButton.tsx b/apps/dashboard/src/components/buttons/MismatchButton.tsx index 1db5db3954b..f5dee038458 100644 --- a/apps/dashboard/src/components/buttons/MismatchButton.tsx +++ b/apps/dashboard/src/components/buttons/MismatchButton.tsx @@ -37,7 +37,6 @@ import type { import { getSDKTheme } from "app/components/sdk-component-theme"; import { LOCAL_NODE_PKEY } from "constants/misc"; import { useTrack } from "hooks/analytics/useTrack"; -import { useSupportedChain } from "hooks/chains/configureChains"; import { ExternalLinkIcon } from "lucide-react"; import { useTheme } from "next-themes"; import Link from "next/link"; @@ -58,6 +57,7 @@ import { import { privateKeyToAccount } from "thirdweb/wallets"; import { Button, type ButtonProps, Card, Heading, Text } from "tw-components"; import { THIRDWEB_API_HOST } from "../../constants/urls"; +import { useAllChainsData } from "../../hooks/chains/allChains"; import { useV5DashboardChain } from "../../lib/v5-adapter"; const GAS_FREE_CHAINS = [ @@ -408,10 +408,12 @@ const MismatchNotice: React.FC<{ const activeWallet = useActiveWallet(); const actuallyCanAttemptSwitch = activeWallet && activeWallet.id !== "global.safe"; - const walletConnectedNetworkInfo = useSupportedChain(connectedChainId || -1); + const { idToChain } = useAllChainsData(); + const walletConnectedNetworkInfo = connectedChainId + ? idToChain.get(connectedChainId) + : undefined; const isMobile = useBreakpointValue({ base: true, md: false }); - - const chain = useSupportedChain(desiredChainId || -1); + const chain = desiredChainId ? idToChain.get(desiredChainId) : undefined; const chainV5 = useV5DashboardChain(desiredChainId); const onSwitchWallet = useCallback(async () => { diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx index 78a10fc34cd..10d467bc49e 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx @@ -8,13 +8,14 @@ import { RadioGroup, } from "@chakra-ui/react"; import { ChainIcon } from "components/icons/ChainIcon"; -import type { StoredChain } from "contexts/configured-chains"; -import { useAllChainsData } from "hooks/chains/allChains"; -import { useSupportedChainsNameRecord } from "hooks/chains/configureChains"; -import { useRemoveChainModification } from "hooks/chains/useModifyChain"; import { getDashboardChainRpc } from "lib/rpc"; import { useForm } from "react-hook-form"; import { FormErrorMessage, FormLabel } from "tw-components"; +import { useAllChainsData } from "../../hooks/chains/allChains"; +import { + type StoredChain, + removeChainOverrides, +} from "../../stores/chainStores"; import { ChainIdInput } from "./Form/ChainIdInput"; import { ConfirmationPopover } from "./Form/ConfirmationPopover"; import { IconUpload } from "./Form/IconUpload"; @@ -55,9 +56,7 @@ export const ConfigureNetworkForm: React.FC = ({ prefillSlug, prefillChainId, }) => { - const configuredChainNameRecord = useSupportedChainsNameRecord(); - const { chainIdToChainRecord } = useAllChainsData(); - const removeChainModification = useRemoveChainModification(); + const { idToChain, nameToChain } = useAllChainsData(); const form = useForm({ values: { @@ -86,11 +85,11 @@ export const ConfigureNetworkForm: React.FC = ({ const chainId = Number(form.watch("chainId")); const isChainIdDirty = form.formState.dirtyFields.chainId; - const overwritingChain = isChainIdDirty && chainIdToChainRecord[chainId]; + const overwritingChain = isChainIdDirty && idToChain.get(chainId); const editedFrom = editingChain?.isModified || editingChain?.isOverwritten - ? chainIdToChainRecord[editingChain.chainId] + ? idToChain.get(editingChain.chainId) : undefined; const { ref } = form.register("name", { @@ -104,7 +103,7 @@ export const ConfigureNetworkForm: React.FC = ({ return true; } - const chain = configuredChainNameRecord[value]; + const chain = nameToChain.get(value); // valid if chain is not found if (!chain) { @@ -173,7 +172,7 @@ export const ConfigureNetworkForm: React.FC = ({ } if (editingChain && editingChain.chainId !== configuredNetwork.chainId) { - removeChainModification(editingChain.chainId); + removeChainOverrides(editingChain.chainId); } if (overwritingChain) { @@ -394,7 +393,7 @@ export const ConfigureNetworkForm: React.FC = ({ variant="outline" onClick={() => { onSubmit(editedFrom); - removeChainModification(editedFrom.chainId); + removeChainOverrides(editedFrom.chainId); }} > Reset diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx index b1aac05c525..cde5768f806 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx @@ -1,7 +1,9 @@ import { ChakraProviderSetup } from "@/components/ChakraProviderSetup"; import { Dialog, DialogContent } from "@/components/ui/dialog"; -import type { StoredChain } from "contexts/configured-chains"; -import { useAddRecentlyUsedChainId } from "../../hooks/chains/recentlyUsedChains"; +import { + type StoredChain, + addRecentlyUsedChainId, +} from "../../stores/chainStores"; import { ConfigureNetworks } from "./ConfigureNetworks"; export type ConfigureNetworkModalProps = { @@ -14,8 +16,6 @@ export type ConfigureNetworkModalProps = { export const ConfigureNetworkModal: React.FC = ( props, ) => { - const addRecentlyUsedChains = useAddRecentlyUsedChainId(); - const onModalClose = () => { props.onOpenChange(false); }; @@ -30,7 +30,7 @@ export const ConfigureNetworkModal: React.FC = ( { - addRecentlyUsedChains(chain.chainId); + addRecentlyUsedChainId(chain.chainId); props.onNetworkAdded?.(chain); onModalClose(); }} diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx index c2015f1c247..a0926d08c7d 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx @@ -1,8 +1,10 @@ -import type { StoredChain } from "contexts/configured-chains"; import { useTrack } from "hooks/analytics/useTrack"; -import { useAddRecentlyUsedChainId } from "hooks/chains/recentlyUsedChains"; -import { useModifyChain } from "hooks/chains/useModifyChain"; import { toast } from "sonner"; +import { + type StoredChain, + addChainOverrides, + addRecentlyUsedChainId, +} from "../../stores/chainStores"; import { ConfigureNetworkForm } from "./ConfigureNetworkForm"; function useChainConfigTrack() { @@ -26,12 +28,10 @@ interface ConfigureNetworksProps { export const ConfigureNetworks: React.FC = (props) => { const trackChainConfig = useChainConfigTrack(); - const addRecentlyUsedChainId = useAddRecentlyUsedChainId(); - const modifyChain = useModifyChain(); const { editChain } = props; const handleSubmit = (chain: StoredChain) => { - modifyChain(chain); + addChainOverrides(chain); addRecentlyUsedChainId(chain.chainId); if (chain.isCustom) { diff --git a/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx b/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx index fbf25c543d0..6e56df2d616 100644 --- a/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx +++ b/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx @@ -1,8 +1,8 @@ import { Input } from "@/components/ui/input"; import { FormControl } from "@chakra-ui/react"; -import { useAllChainsData } from "hooks/chains/allChains"; import type { UseFormReturn } from "react-hook-form"; import { FormErrorMessage, FormLabel } from "tw-components"; +import { useAllChainsData } from "../../../hooks/chains/allChains"; import type { NetworkConfigFormData } from "../ConfigureNetworkForm"; import { TooltipBox } from "./TooltipBox"; @@ -11,7 +11,8 @@ export const NetworkIDInput: React.FC<{ disabled?: boolean; }> = ({ form, disabled }) => { const slug = form.watch("slug"); - const { slugToChainRecord } = useAllChainsData(); + const { slugToChain } = useAllChainsData(); + const existingChain = slugToChain.get(slug); return ( Can not use Network ID {`"${slug}"`}. - {slug && slug in slugToChainRecord && ( + {slug && existingChain && ( <> {" "} It is being used by {`"`} - {slugToChainRecord[slug].name} + {existingChain.name} {`"`} )} diff --git a/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx b/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx index 7475fc283ad..48f9aabc98a 100644 --- a/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx +++ b/apps/dashboard/src/components/contract-components/contract-publish-form/NetworkDropdown.tsx @@ -1,8 +1,8 @@ import { Select } from "chakra-react-select"; import type { SizeProp } from "chakra-react-select"; -import { useSupportedChains } from "hooks/chains/configureChains"; import { useMemo } from "react"; import { useFormContext } from "react-hook-form"; +import { useAllChainsData } from "../../../hooks/chains/allChains"; interface NetworkDropdownProps { useCleanChainName?: boolean; @@ -26,10 +26,10 @@ export const NetworkDropdown: React.FC = ({ size = "md", }) => { const form = useFormContext(); - const supportedChains = useSupportedChains(); + const { allChains } = useAllChainsData(); const options = useMemo(() => { - return supportedChains.map((chain) => { + return allChains.map((chain) => { return { label: useCleanChainName ? cleanChainName(chain.name) @@ -37,7 +37,7 @@ export const NetworkDropdown: React.FC = ({ value: chain.chainId, }; }); - }, [supportedChains, useCleanChainName]); + }, [allChains, useCleanChainName]); const defaultValues = useMemo(() => { const networksEnabled = form?.watch( diff --git a/apps/dashboard/src/components/contract-components/published-contract/addresses-modal.tsx b/apps/dashboard/src/components/contract-components/published-contract/addresses-modal.tsx index f1e91d74832..bac9dda845b 100644 --- a/apps/dashboard/src/components/contract-components/published-contract/addresses-modal.tsx +++ b/apps/dashboard/src/components/contract-components/published-contract/addresses-modal.tsx @@ -14,7 +14,7 @@ export const AddressesModal: React.FC = ({ buttonTitle, modalTitle, }) => { - const { chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const { isOpen, onOpen, onClose } = useDisclosure(); return ( @@ -35,47 +35,45 @@ export const AddressesModal: React.FC = ({ - {chainIdToChainRecord && ( - - {modalTitle} - - ), - }} - > - - {Object.entries(chainAddressRecord).map(([chainId, address]) => - !address ? null : ( - + {modalTitle} + + ), + }} + > + + {Object.entries(chainAddressRecord).map(([chainId, address]) => + !address ? null : ( + + + {idToChain.get(Number.parseInt(chainId))?.name} + + - - {chainIdToChainRecord[Number.parseInt(chainId)]?.name} + + {address} - - - {address} - - - - ), - )} - - - )} + + + ), + )} + + ); }; diff --git a/apps/dashboard/src/components/contract-components/tables/deployed-contracts.tsx b/apps/dashboard/src/components/contract-components/tables/deployed-contracts.tsx index c22d2ad3c02..de1fb4e631a 100644 --- a/apps/dashboard/src/components/contract-components/tables/deployed-contracts.tsx +++ b/apps/dashboard/src/components/contract-components/tables/deployed-contracts.tsx @@ -26,9 +26,6 @@ import { import { ChainIcon } from "components/icons/ChainIcon"; import { NetworkSelectDropdown } from "components/selects/NetworkSelectDropdown"; import type { BasicContract } from "contract-ui/types/types"; -import { useAllChainsData } from "hooks/chains/allChains"; -import { useChainSlug } from "hooks/chains/chainSlug"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { DownloadIcon, EllipsisVerticalIcon, @@ -45,6 +42,8 @@ import { usePagination, useTable, } from "react-table"; +import { useAllChainsData } from "../../../hooks/chains/allChains"; +import { useChainSlug } from "../../../hooks/chains/chainSlug"; import { ImportModal } from "../import-contract/modal"; import { AsyncContractNameCell, AsyncContractTypeCell } from "./cells"; import { ShowMoreButton } from "./show-more-button"; @@ -198,8 +197,7 @@ const ContractTable: React.FC = ({ chainIdsWithDeployments, loading, }) => { - const { chainIdToChainRecord } = useAllChainsData(); - const configuredChains = useSupportedChainsRecord(); + const { idToChain } = useAllChainsData(); const columns: Column<(typeof combinedList)[number]>[] = useMemo( () => [ @@ -231,9 +229,7 @@ const ContractTable: React.FC = ({ filter: "equals", // biome-ignore lint/suspicious/noExplicitAny: FIXME Cell: (cell: any) => { - const data = - configuredChains[cell.row.original.chainId] || - chainIdToChainRecord[cell.row.original.chainId]; + const data = idToChain.get(cell.row.original.chainId); const cleanedChainName = data?.name?.replace("Mainnet", "").trim() || `Unknown Network (#${cell.row.original.chainId})`; @@ -296,7 +292,7 @@ const ContractTable: React.FC = ({ }, }, ], - [configuredChains, chainIdsWithDeployments, chainIdToChainRecord], + [chainIdsWithDeployments, idToChain], ); const defaultColumn = useMemo( diff --git a/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx b/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx index f7ffbb0c2ef..72a326a3cb3 100644 --- a/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx +++ b/apps/dashboard/src/components/engine/contract-subscription/contract-subscriptions-table.tsx @@ -71,13 +71,13 @@ export const ContractSubscriptionTable: React.FC< const removeDisclosure = useDisclosure(); const [selectedContractSub, setSelectedContractSub] = useState(); - const { chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const columns = [ columnHelper.accessor("chainId", { header: "Chain", cell: (cell) => { - const chain = chainIdToChainRecord[cell.getValue()]; + const chain = idToChain.get(cell.getValue()); return ( @@ -90,7 +90,7 @@ export const ContractSubscriptionTable: React.FC< header: "Contract Address", cell: (cell) => { const { chainId } = cell.row.original; - const chain = chainIdToChainRecord[chainId]; + const chain = idToChain.get(chainId); const explorer = chain?.explorers?.[0]; if (!explorer) { return ( @@ -338,8 +338,8 @@ const RemoveModal = ({ "Successfully removed contract subscription.", "Failed to remove contract subscription.", ); - const { chainIdToChainRecord } = useAllChainsData(); - const chain = chainIdToChainRecord[contractSubscription.chainId]; + const { idToChain } = useAllChainsData(); + const chain = idToChain.get(contractSubscription.chainId); const onClick = () => { removeContractSubscription( diff --git a/apps/dashboard/src/components/engine/overview/transactions-table.tsx b/apps/dashboard/src/components/engine/overview/transactions-table.tsx index 30c2016101d..4c8fe8bec0c 100644 --- a/apps/dashboard/src/components/engine/overview/transactions-table.tsx +++ b/apps/dashboard/src/components/engine/overview/transactions-table.tsx @@ -22,7 +22,6 @@ import { useAllChainsData } from "hooks/chains/allChains"; import { useState } from "react"; import { FiArrowLeft, FiArrowRight, FiInfo } from "react-icons/fi"; import { toTokens } from "thirdweb"; -import type { ChainMetadata } from "thirdweb/chains"; import { Button, Card, @@ -101,7 +100,7 @@ export const TransactionsTable: React.FC = ({ isFetched, instanceUrl, }) => { - const { chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const transactionDisclosure = useDisclosure(); const [selectedTransaction, setSelectedTransaction] = useState(null); @@ -128,7 +127,7 @@ export const TransactionsTable: React.FC = ({ return; } - const chain = chainIdToChainRecord[Number.parseInt(chainId)]; + const chain = idToChain.get(Number.parseInt(chainId)); if (chain) { return ( @@ -200,7 +199,7 @@ export const TransactionsTable: React.FC = ({ return; } - const chain = chainIdToChainRecord[Number.parseInt(chainId)]; + const chain = idToChain.get(Number.parseInt(chainId)); if (chain) { const explorer = chain.explorers?.[0]; if (!explorer) { @@ -306,7 +305,7 @@ const TransactionDetailsDrawer = ({ onClickPrevious?: () => void; onClickNext?: () => void; }) => { - const { chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const errorMessageDisclosure = useDisclosure(); const advancedTxDetailsDisclosure = useDisclosure(); @@ -314,10 +313,9 @@ const TransactionDetailsDrawer = ({ return null; } - const chain: ChainMetadata | undefined = - chainIdToChainRecord[Number.parseInt(transaction.chainId)]; - const decimals = chain.nativeCurrency.decimals || 18; - const symbol = chain.nativeCurrency.symbol || "ETH"; + const chain = idToChain.get(Number.parseInt(transaction.chainId)); + const decimals = chain?.nativeCurrency.decimals || 18; + const symbol = chain?.nativeCurrency.symbol || "ETH"; const explorer = chain?.explorers?.[0]; const status = statusDetails[transaction.status as EngineStatus]; diff --git a/apps/dashboard/src/components/engine/relayer/add-relayer-button.tsx b/apps/dashboard/src/components/engine/relayer/add-relayer-button.tsx index 64af6b0ad75..62c50abf6c8 100644 --- a/apps/dashboard/src/components/engine/relayer/add-relayer-button.tsx +++ b/apps/dashboard/src/components/engine/relayer/add-relayer-button.tsx @@ -75,7 +75,7 @@ const AddModal = ({ }) => { const { mutate: createRelayer } = useEngineCreateRelayer(instanceUrl); const { data: backendWallets } = useEngineBackendWallets(instanceUrl); - const { slugToChainRecord, chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const trackEvent = useTrack(); const { onSuccess, onError } = useTxNotifications( "Relayer created successfully.", @@ -84,13 +84,13 @@ const AddModal = ({ const form = useForm({ defaultValues: { - chainId: slugToChainRecord.sepolia.chainId, + chainId: 11155111, // sepolia chain id }, }); const onSubmit = (data: AddModalInput) => { const createRelayerData: CreateRelayerInput = { - chain: chainIdToChainRecord[data.chainId]?.slug ?? "unknown", + chain: idToChain.get(data.chainId)?.slug ?? "unknown", backendWalletAddress: data.backendWalletAddress, name: data.name, allowedContracts: parseAddressListRaw(data.allowedContractsRaw), diff --git a/apps/dashboard/src/components/engine/relayer/relayers-table.tsx b/apps/dashboard/src/components/engine/relayer/relayers-table.tsx index dc107f3061f..75d2632c2d4 100644 --- a/apps/dashboard/src/components/engine/relayer/relayers-table.tsx +++ b/apps/dashboard/src/components/engine/relayer/relayers-table.tsx @@ -62,13 +62,13 @@ export const RelayersTable: React.FC = ({ const editDisclosure = useDisclosure(); const removeDisclosure = useDisclosure(); const [selectedRelayer, setSelectedRelayer] = useState(); - const { chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const columns = [ columnHelper.accessor("chainId", { header: "Chain", cell: (cell) => { - const chain = chainIdToChainRecord[Number.parseInt(cell.getValue())]; + const chain = idToChain.get(Number.parseInt(cell.getValue())); return ( @@ -81,7 +81,7 @@ export const RelayersTable: React.FC = ({ header: "Backend Wallet", cell: (cell) => { const { chainId, backendWalletAddress } = cell.row.original; - const chain = chainIdToChainRecord[Number.parseInt(chainId)]; + const chain = idToChain.get(Number.parseInt(chainId)); const explorer = chain?.explorers?.[0]; if (!explorer) { @@ -208,7 +208,7 @@ const EditModal = ({ }) => { const { mutate: updateRelayer } = useEngineUpdateRelayer(instanceUrl); const { data: backendWallets } = useEngineBackendWallets(instanceUrl); - const { chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const trackEvent = useTrack(); const { onSuccess, onError } = useTxNotifications( "Successfully updated relayer", @@ -227,7 +227,7 @@ const EditModal = ({ const onSubmit = (data: AddModalInput) => { const updateRelayerData: UpdateRelayerInput = { id: relayer.id, - chain: chainIdToChainRecord[data.chainId]?.slug ?? "unknown", + chain: idToChain.get(data.chainId)?.slug ?? "unknown", backendWalletAddress: data.backendWalletAddress, name: data.name, allowedContracts: parseAddressListRaw(data.allowedContractsRaw), @@ -347,7 +347,7 @@ const RemoveModal = ({ "Successfully removed relayer", "Failed to remove relayer", ); - const { chainIdToChainRecord } = useAllChainsData(); + const { idToChain } = useAllChainsData(); const onClick = () => { revokeRelayer( @@ -392,12 +392,11 @@ const RemoveModal = ({ - {chainIdToChainRecord[Number.parseInt(relayer.chainId)]?.name} + {idToChain.get(Number.parseInt(relayer.chainId))?.name} diff --git a/apps/dashboard/src/components/selects/CustomChainRenderer.tsx b/apps/dashboard/src/components/selects/CustomChainRenderer.tsx index 7765ea88352..1de3a746c5d 100644 --- a/apps/dashboard/src/components/selects/CustomChainRenderer.tsx +++ b/apps/dashboard/src/components/selects/CustomChainRenderer.tsx @@ -3,12 +3,13 @@ import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { ChainIcon } from "components/icons/ChainIcon"; import { OPSponsoredChains } from "constants/chains"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; -import { useAddRecentlyUsedChainId } from "hooks/chains/recentlyUsedChains"; import { SettingsIcon } from "lucide-react"; -import { useMemo } from "react"; import type { UseNetworkSwitcherModalOptions } from "thirdweb/react"; -import type { StoredChain } from "../../contexts/configured-chains"; +import { useAllChainsData } from "../../hooks/chains/allChains"; +import { + type StoredChain, + addRecentlyUsedChainId, +} from "../../stores/chainStores"; type ChainRenderProps = React.ComponentProps< NonNullable @@ -28,15 +29,8 @@ export const CustomChainRenderer = ({ disableChainConfig, openEditChainModal, }: CustomChainRendererProps) => { - const addRecentlyUsedChain = useAddRecentlyUsedChainId(); - const supportedChainsRecord = useSupportedChainsRecord(); - - const storedChain = useMemo(() => { - return chain.id in supportedChainsRecord - ? supportedChainsRecord[chain.id] - : undefined; - }, [chain, supportedChainsRecord]); - + const { idToChain } = useAllChainsData(); + const storedChain = idToChain.get(chain.id); const isDeprecated = storedChain?.status === "deprecated"; const isSponsored = OPSponsoredChains.includes(chain.id); @@ -104,7 +98,7 @@ export const CustomChainRenderer = ({ aria-label="Configure Network" onClick={() => { openEditChainModal(storedChain); - addRecentlyUsedChain(chain.id); + addRecentlyUsedChainId(chain.id); if (close) { close(); } else { diff --git a/apps/dashboard/src/components/selects/NetworkSelectDropdown.tsx b/apps/dashboard/src/components/selects/NetworkSelectDropdown.tsx index d766febc6e1..5264e93d571 100644 --- a/apps/dashboard/src/components/selects/NetworkSelectDropdown.tsx +++ b/apps/dashboard/src/components/selects/NetworkSelectDropdown.tsx @@ -6,8 +6,8 @@ import { SelectValue, } from "@/components/ui/select"; import { ChainIcon } from "components/icons/ChainIcon"; -import { useSupportedChains } from "hooks/chains/configureChains"; import { useMemo } from "react"; +import { useAllChainsData } from "../../hooks/chains/allChains"; interface NetworkSelectDropdownProps { enabledChainIds?: number[]; @@ -26,26 +26,24 @@ export const NetworkSelectDropdown: React.FC = ({ selectedChain, onSelect, }) => { - const supportedChains = useSupportedChains(); + const { allChains } = useAllChainsData(); const chains = useMemo(() => { // return only enabled chains if enabled chains are specified if (enabledChainIds && enabledChainIds.length > 0) { const enabledChainIdsSet = new Set(enabledChainIds); - return supportedChains.filter((chain) => - enabledChainIdsSet.has(chain.chainId), - ); + return allChains.filter((chain) => enabledChainIdsSet.has(chain.chainId)); } // return supported chains that are not disabled if disabled chains are specified if (disabledChainIds && disabledChainIds.length > 0) { const disabledChainIdsSet = new Set(disabledChainIds); - return supportedChains.filter( + return allChains.filter( (chain) => !disabledChainIdsSet.has(chain.chainId), ); } // if no enabled or disabled chains are specified, return all supported chains - return supportedChains; - }, [supportedChains, enabledChainIds, disabledChainIds]); + return allChains; + }, [allChains, enabledChainIds, disabledChainIds]); const cleanChainName = (chainName: string) => { return chainName.replace("Mainnet", ""); diff --git a/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx b/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx index 33e65e866ee..8e7bcbfbab6 100644 --- a/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx +++ b/apps/dashboard/src/components/selects/NetworkSelectorButton.tsx @@ -2,26 +2,24 @@ import { Button } from "@/components/ui/button"; import { useThirdwebClient } from "@/constants/thirdweb.client"; +import { useStore } from "@/lib/reactive"; import { popularChains } from "@3rdweb-sdk/react/components/popularChains"; -import { useFavoriteChains } from "@3rdweb-sdk/react/hooks/useFavoriteChains"; import { ChainIcon } from "components/icons/ChainIcon"; -import type { StoredChain } from "contexts/configured-chains"; -import { - useSupportedChains, - useSupportedChainsRecord, -} from "hooks/chains/configureChains"; -import { - useAddRecentlyUsedChainId, - useRecentlyUsedChains, -} from "hooks/chains/recentlyUsedChains"; import { useActiveChainAsDashboardChain } from "lib/v5-adapter"; import { useTheme } from "next-themes"; import { useEffect, useMemo, useRef, useState } from "react"; import { BiChevronDown } from "react-icons/bi"; import { useActiveWallet } from "thirdweb/react"; import { useNetworkSwitcherModal } from "thirdweb/react"; +import { useFavoriteChainIds } from "../../app/(dashboard)/(chain)/components/client/star-button"; import { getSDKTheme } from "../../app/components/sdk-component-theme"; import { mapV4ChainToV5Chain } from "../../contexts/map-chains"; +import { useAllChainsData } from "../../hooks/chains/allChains"; +import { + type StoredChain, + addRecentlyUsedChainId, + recentlyUsedChainIdsStore, +} from "../../stores/chainStores"; import { LazyConfigureNetworkModal } from "../configure-networks/LazyConfigureNetworkModal"; import { CustomChainRenderer } from "./CustomChainRenderer"; @@ -39,37 +37,66 @@ export const NetworkSelectorButton: React.FC = ({ onSwitchChain, }) => { const client = useThirdwebClient(); - const recentlyUsedChains = useRecentlyUsedChains(); - const addRecentlyUsedChains = useAddRecentlyUsedChainId(); + const { idToChain, allChains } = useAllChainsData(); + + // recently used chains + const recentlyUsedChainIds = useStore(recentlyUsedChainIdsStore); + const recentlyUsedChains = useMemo(() => { + return recentlyUsedChainIds + .map((id) => idToChain.get(id)) + .filter((v) => !!v); + }, [recentlyUsedChainIds, idToChain]); + + // configure network modal const [isNetworkConfigModalOpen, setIsNetworkConfigModalOpen] = useState(false); const [editChain, setEditChain] = useState( undefined, ); + const { theme } = useTheme(); - const supportedChains = useSupportedChains(); - const supportedChainsRecord = useSupportedChainsRecord(); - const favoriteChainsQuery = useFavoriteChains(); + const favoriteChainIdsQuery = useFavoriteChainIds(); + + const popularChainsWithMetadata = useMemo(() => { + // eslint-disable-next-line no-restricted-syntax + return popularChains.map((x) => + // eslint-disable-next-line no-restricted-syntax + { + const v4Chain = idToChain.get(x.id); + // eslint-disable-next-line no-restricted-syntax + return v4Chain ? mapV4ChainToV5Chain(v4Chain) : x; + }, + ); + }, [idToChain]); + + const favoriteChainsWithMetadata = useMemo(() => { + return (favoriteChainIdsQuery.data || []) + .map((id) => { + const c = idToChain.get(Number(id)); + // eslint-disable-next-line no-restricted-syntax + return c ? mapV4ChainToV5Chain(c) : undefined; + }) + .filter((x) => !!x); + }, [idToChain, favoriteChainIdsQuery.data]); + const networkSwitcherModal = useNetworkSwitcherModal(); const chains = useMemo(() => { if (disabledChainIds && disabledChainIds.length > 0) { const disabledChainIdsSet = new Set(disabledChainIds); - return supportedChains.filter( + return allChains.filter( (chain) => !disabledChainIdsSet.has(chain.chainId), ); } if (networksEnabled && networksEnabled.length > 0) { const networksEnabledSet = new Set(networksEnabled); - return supportedChains.filter((chain) => - networksEnabledSet.has(chain.chainId), - ); + return allChains.filter((chain) => networksEnabledSet.has(chain.chainId)); } // if no restrictions, show all supported chains - return supportedChains; - }, [disabledChainIds, networksEnabled, supportedChains]); + return allChains; + }, [disabledChainIds, networksEnabled, allChains]); const filteredRecentlyUsedChains = useMemo(() => { if (recentlyUsedChains && recentlyUsedChains.length > 0) { @@ -103,10 +130,10 @@ export const NetworkSelectorButton: React.FC = ({ if (onSwitchChain) { onSwitchChain(chain); } - addRecentlyUsedChains(chain.chainId); + addRecentlyUsedChainId(chain.chainId); prevChain.current = chain; } - }, [chain, onSwitchChain, addRecentlyUsedChains]); + }, [chain, onSwitchChain]); const wallet = useActiveWallet(); @@ -128,13 +155,11 @@ export const NetworkSelectorButton: React.FC = ({ }, { label: "Favorites", - chains: (favoriteChainsQuery.data ?? []).map( - mapV4ChainToV5Chain, - ), + chains: favoriteChainsWithMetadata, }, { label: "Popular", - chains: networksEnabled ? [] : popularChains, + chains: networksEnabled ? [] : popularChainsWithMetadata, }, { label: "All Networks", @@ -159,10 +184,11 @@ export const NetworkSelectorButton: React.FC = ({ setIsNetworkConfigModalOpen(true); }, async onSwitch(chain) { - addRecentlyUsedChains(chain.id); + addRecentlyUsedChainId(chain.id); if (onSwitchChain) { - if (supportedChainsRecord[chain.id]) { - onSwitchChain(supportedChainsRecord[chain.id]); + const storedChain = idToChain.get(chain.id); + if (storedChain) { + onSwitchChain(storedChain); } } }, diff --git a/apps/dashboard/src/components/shared/CurrencySelector.tsx b/apps/dashboard/src/components/shared/CurrencySelector.tsx index 1af7b916f33..d63ab5883b7 100644 --- a/apps/dashboard/src/components/shared/CurrencySelector.tsx +++ b/apps/dashboard/src/components/shared/CurrencySelector.tsx @@ -1,10 +1,10 @@ import { useDashboardEVMChainId } from "@3rdweb-sdk/react"; import { Flex, Input, Select, type SelectProps } from "@chakra-ui/react"; import { CURRENCIES, type CurrencyMetadata } from "constants/currencies"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { useMemo, useState } from "react"; import { NATIVE_TOKEN_ADDRESS, ZERO_ADDRESS, isAddress } from "thirdweb"; import { Button } from "tw-components"; +import { useAllChainsData } from "../../hooks/chains/allChains"; interface CurrencySelectorProps extends SelectProps { value: string; @@ -26,8 +26,8 @@ export const CurrencySelector: React.FC = ({ ...props }) => { const chainId = useDashboardEVMChainId(); - const configuredChainsRecord = useSupportedChainsRecord(); - const chain = chainId ? configuredChainsRecord[chainId] : undefined; + const { idToChain } = useAllChainsData(); + const chain = chainId ? idToChain.get(chainId) : undefined; const helperCurrencies = defaultCurrencies.length > 0 diff --git a/apps/dashboard/src/contexts/all-chains.tsx b/apps/dashboard/src/contexts/all-chains.tsx deleted file mode 100644 index 6b971655613..00000000000 --- a/apps/dashboard/src/contexts/all-chains.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { useApiChains } from "@3rdweb-sdk/react/hooks/useApi"; -import { createContext, useMemo } from "react"; -import type { ChainMetadata } from "thirdweb/chains"; - -type AllChainsData = { - allChains: ChainMetadata[]; - chainIdToChainRecord: Record; - chainIdToIndexRecord: Record; - slugToChainRecord: Record; -}; - -// Legacy: we need to find a way to remove this -// eslint-disable-next-line no-restricted-syntax -export const AllChainsContext = createContext( - undefined, -); - -/** - * if no networks are configured by the user, return the defaultChains - */ -export function AllChainsProvider(props: { children: React.ReactNode }) { - const { data } = useApiChains(); - - const allChainsData: AllChainsData = useMemo(() => { - const slugToChainRecord: Record = {}; - const chainIdToChainRecord: Record = {}; - const chainIdToIndexRecord: Record = {}; - if (data?.length) { - for (let i = 0; i < data.length; i++) { - const chain = data[i]; - slugToChainRecord[chain.slug] = chain; - chainIdToChainRecord[chain.chainId] = chain; - chainIdToIndexRecord[chain.chainId] = i; - } - } - return { - allChains: data || [], - chainIdToChainRecord, - slugToChainRecord, - chainIdToIndexRecord, - }; - }, [data]); - - return ( - - {props.children} - - ); -} diff --git a/apps/dashboard/src/contexts/configured-chains.tsx b/apps/dashboard/src/contexts/configured-chains.tsx deleted file mode 100644 index 2ac056720dd..00000000000 --- a/apps/dashboard/src/contexts/configured-chains.tsx +++ /dev/null @@ -1,336 +0,0 @@ -import { isProd } from "@/constants/env"; -import { useAllChainsData } from "hooks/chains/allChains"; -import { createContext, useCallback, useEffect, useState } from "react"; -import type { ChainMetadata } from "thirdweb/chains"; - -// extra information on top of Chain interface -// all keys added here must be optional -export interface StoredChain extends ChainMetadata { - isModified?: boolean; - isCustom?: boolean; - isOverwritten?: boolean; -} - -const MODIFIED_CHAINS_KEY = "tw-modified-chains"; -const RECENTLY_USED_CHAIN_IDS_KEY = "tw-recently-used-chains"; - -/** - * LEGACY - * - * holds the "supported chains" array - * initially it is set to the defaultChains, then it is updated to the "allChains" with "modified chains" overrides - */ -// eslint-disable-next-line no-restricted-syntax -export const SupportedChainsContext = createContext( - undefined, -); - -/** - * LEGACY - * - * holds the "modified chains" array - */ -// eslint-disable-next-line no-restricted-syntax -const ModifiedChainsContext = createContext( - undefined, -); - -/** - * LEGACY - * - * holds the "modified chains" array - */ -// eslint-disable-next-line no-restricted-syntax -export const RemoveChainModification = createContext< - ((chainId: number) => void) | undefined ->(undefined); - -/** - * LEGACY - * - * holds the "recently used chain ids" array - */ -// eslint-disable-next-line no-restricted-syntax -export const RecentlyUsedChainIdsContext = createContext( - undefined, -); - -/** - * LEGACY - * - * holds the function that takes a chainId and adds it to the "recently used chains" and handles its storage - */ -// eslint-disable-next-line no-restricted-syntax -export const AddRecentlyUsedChainIdsContext = createContext< - ((chainId: number) => void) | undefined ->(undefined); - -/** - * LEGACY - * - * holds the function that takes the "modified chain" object - * and handles the logic of updating the "supported chains" and "modified chains" and "recently used chains" - */ -// eslint-disable-next-line no-restricted-syntax -export const ModifyChainContext = createContext< - ((chain: ChainMetadata, remove?: boolean) => void) | undefined ->(undefined); - -/** - * LEGACY - * - * flag indicating if the supported chains is having the final value or not - * app starts with the defaultChains as supported chains - * then allChains is dynamically imported or fetched from indexedDB, user modified chains are fetched from localStorage - * and then the final supported chains is calculated by overriding the modifiedChains on allChains - */ -// eslint-disable-next-line no-restricted-syntax -export const SupportedChainsReadyContext = createContext(false); - -const replaceRpcsWithDevUrl = (chains: ChainMetadata[]) => { - if (isProd) { - return chains; - } - - return chains.map((chn) => { - return { - ...chn, - rpc: chn.rpc.map((rpc) => - rpc.replace("rpc.thirdweb.com", "rpc.thirdweb-dev.com"), - ), - }; - }); -}; - -/** - * if no networks are configured by the user, return the defaultChains - */ -export function ChainsProvider(props: { children: React.ReactNode }) { - const [supportedChains, setSupportedChains] = useState([]); - const [modifiedChains, setModifiedChains] = useState([]); - const [isSupportedChainsReady, setIsSupportedChainsReady] = useState(false); - const [recentlyUsedChainIds, setRecentlyUsedChainIds] = useState( - [], - ); - - const addRecentlyUsedChainId = useCallback((chainId: number) => { - setRecentlyUsedChainIds((_recentlyUsedChainIds) => { - const newRecentlyUsedChains = _recentlyUsedChainIds.filter( - (c) => c !== chainId, - ); - - // add to the front of the array - newRecentlyUsedChains.unshift(chainId); - - // only keep the first 5 - newRecentlyUsedChains.splice(5); - - return newRecentlyUsedChains; - }); - }, []); - - // save recently used chains to storage - // FIXME: probably want to move this to backend (similar to favorites) - // eslint-disable-next-line no-restricted-syntax - useEffect(() => { - try { - localStorage.setItem( - RECENTLY_USED_CHAIN_IDS_KEY, - JSON.stringify(recentlyUsedChainIds), - ); - } catch { - localStorage.clear(); - localStorage.setItem( - RECENTLY_USED_CHAIN_IDS_KEY, - JSON.stringify(recentlyUsedChainIds), - ); - } - }, [recentlyUsedChainIds]); - - const { allChains, chainIdToIndexRecord } = useAllChainsData(); - - // get recently used chains from stroage - // FIXME: probably want to move this to backend (similar to favorites) - // eslint-disable-next-line no-restricted-syntax - useEffect(() => { - if (!isSupportedChainsReady) { - return; - } - const _recentlyUsedChainsStr = localStorage.getItem( - RECENTLY_USED_CHAIN_IDS_KEY, - ); - if (!_recentlyUsedChainsStr) { - return; - } - - try { - const _recentlyUsedChainIds = JSON.parse( - _recentlyUsedChainsStr, - ) as number[]; - - setRecentlyUsedChainIds(_recentlyUsedChainIds); - } catch { - localStorage.removeItem(RECENTLY_USED_CHAIN_IDS_KEY); - } - }, [isSupportedChainsReady]); - - const applyOverrides = useCallback( - (target: StoredChain[], overrides: StoredChain[]) => { - const result = [...target]; - - // biome-ignore lint/complexity/noForEach: FIXME - overrides.forEach((modifiedChain) => { - // if this chain is already in the supported chains, update it - if (modifiedChain.chainId in chainIdToIndexRecord) { - const i = chainIdToIndexRecord[modifiedChain.chainId]; - if (!result[i]) { - throw new Error("invalid attempt to overide"); - } - - result[i] = modifiedChain; - } else { - result.push(modifiedChain); - } - }); - - return result; - }, - [chainIdToIndexRecord], - ); - - const applyModificationsToSupportedChains = useCallback( - (newModifiedChains: ChainMetadata[]) => { - setSupportedChains((_supportedChains) => { - return applyOverrides(_supportedChains, newModifiedChains); - }); - }, - [applyOverrides], - ); - - // create supported chains and modified chains on mount - // FIXME: this should be computed not via setState - // eslint-disable-next-line no-restricted-syntax - useEffect(() => { - if (allChains.length === 0) { - return; - } - - if (isSupportedChainsReady) { - return; - } - - const allChainsReplaced = replaceRpcsWithDevUrl(allChains); - - const _modifiedChains = chainStorage.get(MODIFIED_CHAINS_KEY); - - if (_modifiedChains.length === 0) { - setSupportedChains(allChainsReplaced); - setIsSupportedChainsReady(true); - return; - } - - const newSupportedChains = applyOverrides( - allChainsReplaced, - _modifiedChains, - ); - setSupportedChains(newSupportedChains); - setModifiedChains(_modifiedChains); - setIsSupportedChainsReady(true); - }, [allChains, isSupportedChainsReady, applyOverrides]); - - const modifyChain = useCallback( - (chain: StoredChain) => { - setModifiedChains((_modifiedChains) => { - const i = _modifiedChains.findIndex((c) => c.chainId === chain.chainId); - let newModifiedChains: StoredChain[]; - if (i !== -1) { - // if this chain is already in the modified chains, update it - newModifiedChains = [..._modifiedChains]; - newModifiedChains[i] = chain as StoredChain; - } else { - // else add it to the modified chains - newModifiedChains = [..._modifiedChains, chain as StoredChain]; - } - - applyModificationsToSupportedChains(newModifiedChains); - chainStorage.set(MODIFIED_CHAINS_KEY, newModifiedChains); - - return newModifiedChains; - }); - }, - [applyModificationsToSupportedChains], - ); - - const removeChainModification = useCallback( - (chainId: number) => { - setModifiedChains((_modifiedChains) => { - const newModifiedChains = _modifiedChains.filter( - (c) => c.chainId !== chainId, - ); - - applyModificationsToSupportedChains(newModifiedChains); - chainStorage.set(MODIFIED_CHAINS_KEY, newModifiedChains); - - // also remove from recently used chains - setRecentlyUsedChainIds((prevIds) => { - return prevIds.filter((id) => id !== chainId); - }); - return newModifiedChains; - }); - }, - [applyModificationsToSupportedChains], - ); - - return ( - - - - - - - - {props.children} - - - - - - - - ); -} - -// storage -------------------------------------------- - -const chainStorage = { - get(key: string): ChainMetadata[] { - try { - const networkListStr = localStorage.getItem(key); - return networkListStr ? JSON.parse(networkListStr) : []; - } catch { - // if parsing error, clear dirty storage - localStorage.removeItem(key); - } - - return []; - }, - - set(key: string, networkList: ChainMetadata[]) { - const value = JSON.stringify(networkList); - try { - localStorage.setItem(key, value); - } catch { - // if storage limit exceed - // clear entire local storage and then try again - localStorage.clear(); - localStorage.setItem(key, value); - } - }, -}; diff --git a/apps/dashboard/src/contexts/map-chains.tsx b/apps/dashboard/src/contexts/map-chains.tsx index dca690a58e0..a150ac5e998 100644 --- a/apps/dashboard/src/contexts/map-chains.tsx +++ b/apps/dashboard/src/contexts/map-chains.tsx @@ -1,5 +1,5 @@ import type { Chain } from "thirdweb"; -import type { StoredChain } from "./configured-chains"; +import type { StoredChain } from "../stores/chainStores"; export function mapV4ChainToV5Chain(v4Chain: StoredChain) { const chain: Chain = { diff --git a/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signer.tsx b/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signer.tsx index af196e62df1..c67e1d8a001 100644 --- a/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signer.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account-permissions/components/account-signer.tsx @@ -2,9 +2,9 @@ import { WalletAddress } from "@/components/blocks/wallet-address"; import { useDashboardEVMChainId } from "@3rdweb-sdk/react"; import { Flex, SimpleGrid, useBreakpointValue } from "@chakra-ui/react"; import { formatDistance } from "date-fns/formatDistance"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { useActiveAccount } from "thirdweb/react"; import { Badge, Card, Heading, Text } from "tw-components"; +import { useAllChainsData } from "../../../../hooks/chains/allChains"; export type AccountSignerType = { signer: string; @@ -20,8 +20,8 @@ interface AccountSignerProps { export const AccountSigner: React.FC = ({ item }) => { const address = useActiveAccount()?.address; const chainId = useDashboardEVMChainId(); - const configuredChainsRecord = useSupportedChainsRecord(); - const chain = chainId ? configuredChainsRecord[chainId] : undefined; + const { idToChain } = useAllChainsData(); + const chain = chainId ? idToChain.get(chainId) : undefined; const isMobile = useBreakpointValue({ base: true, md: false }); const { isAdmin, diff --git a/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx b/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx index 4c1a55bc56d..9476bbded35 100644 --- a/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account/components/deposit-native.tsx @@ -7,8 +7,8 @@ import { type ChangeEvent, useState } from "react"; import { prepareTransaction, toWei } from "thirdweb"; import { useSendAndConfirmTransaction } from "thirdweb/react"; import { Card } from "tw-components"; -import type { StoredChain } from "../../../../contexts/configured-chains"; import { useV5DashboardChain } from "../../../../lib/v5-adapter"; +import type { StoredChain } from "../../../../stores/chainStores"; interface DepositNativeProps { address: string; diff --git a/apps/dashboard/src/contract-ui/tabs/account/page.tsx b/apps/dashboard/src/contract-ui/tabs/account/page.tsx index 8766ef9e453..9a68ff00b46 100644 --- a/apps/dashboard/src/contract-ui/tabs/account/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/account/page.tsx @@ -1,7 +1,7 @@ import { useDashboardEVMChainId } from "@3rdweb-sdk/react"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import type { ThirdwebContract } from "thirdweb"; import { Heading } from "tw-components"; +import { useAllChainsData } from "../../../hooks/chains/allChains"; import { AccountBalance } from "./components/account-balance"; import { DepositNative } from "./components/deposit-native"; import { NftsOwned } from "./components/nfts-owned"; @@ -11,9 +11,9 @@ interface AccountPageProps { } export const AccountPage: React.FC = ({ contract }) => { - const configuredChainsRecord = useSupportedChainsRecord(); + const { idToChain } = useAllChainsData(); const chainId = useDashboardEVMChainId(); - const chain = chainId ? configuredChainsRecord[chainId] : undefined; + const chain = chainId ? idToChain.get(chainId) : undefined; const symbol = chain?.nativeCurrency.symbol || "Native Token"; return ( diff --git a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx index cd17b5ca567..dda478b0221 100644 --- a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx +++ b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/price-preview.tsx @@ -1,9 +1,9 @@ import { useDashboardEVMChainId } from "@3rdweb-sdk/react"; import { CURRENCIES } from "constants/currencies"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { Text } from "tw-components"; import { shortenIfAddress } from "utils/usedapp-external"; import { isAddressZero } from "utils/zeroAddress"; +import { useAllChainsData } from "../../../../hooks/chains/allChains"; interface PricePreviewProps { price: string | number | undefined; @@ -15,8 +15,8 @@ export const PricePreview: React.FC = ({ currencyAddress, }) => { const chainId = useDashboardEVMChainId(); - const configuredChainsRecord = useSupportedChainsRecord(); - const chain = chainId ? configuredChainsRecord[chainId] : undefined; + const { idToChain } = useAllChainsData(); + const chain = chainId ? idToChain.get(chainId) : undefined; const helperCurrencies = chainId ? CURRENCIES[chainId] || [] : []; diff --git a/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx b/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx index 07983874032..9368411e1b9 100644 --- a/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx +++ b/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx @@ -28,7 +28,6 @@ import { } from "components/contract-components/hooks"; import { CodeSegment } from "components/contract-tabs/code/CodeSegment"; import type { CodeEnvironment } from "components/contract-tabs/code/types"; -import { useSupportedChain } from "hooks/chains/configureChains"; import { useSearchParams } from "next/navigation"; import { useMemo, useState } from "react"; import * as ERC20Ext from "thirdweb/extensions/erc20"; @@ -38,6 +37,7 @@ import * as ERC4337Ext from "thirdweb/extensions/erc4337"; import { useActiveAccount } from "thirdweb/react"; import { toFunctionSelector } from "thirdweb/utils"; import { Button, Card, Heading, Link, Text, TrackedLink } from "tw-components"; +import { useAllChainsData } from "../../../../hooks/chains/allChains"; interface CodeOverviewProps { abi?: Abi; @@ -592,7 +592,8 @@ export const CodeOverview: React.FC = ({ }, [isERC20, isERC721, isERC1155]); const chainId = useDashboardEVMChainId() || chainIdProp || 1; - const chainInfo = useSupportedChain(chainId || -1); + const { idToChain } = useAllChainsData(); + const chainInfo = chainId ? idToChain.get(chainId) : undefined; const functions = useContractFunctions(abi || []); const events = useContractEvents(abi as Abi); diff --git a/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx b/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx index 96a2cc668d1..a40f430281e 100644 --- a/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx +++ b/apps/dashboard/src/contract-ui/tabs/embed/components/embed-setup.tsx @@ -11,7 +11,6 @@ import { } from "@chakra-ui/react"; import { IoMdCheckmark } from "@react-icons/all-files/io/IoMdCheckmark"; import { useTrack } from "hooks/analytics/useTrack"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { useClipboard } from "hooks/useClipboard"; import { useTxNotifications } from "hooks/useTxNotifications"; import { useMemo } from "react"; @@ -28,7 +27,8 @@ import { Heading, Text, } from "tw-components"; -import type { StoredChain } from "../../../../contexts/configured-chains"; +import { useAllChainsData } from "../../../../hooks/chains/allChains"; +import type { StoredChain } from "../../../../stores/chainStores"; interface EmbedSetupProps { contract: ThirdwebContract; @@ -236,11 +236,9 @@ export const EmbedSetup: React.FC = ({ ); const chainId = useDashboardEVMChainId(); - const configuredChains = useSupportedChainsRecord(); + const { idToChain } = useAllChainsData(); - const chain = (configuredChains[chainId as number] as - | StoredChain - | undefined) || { + const chain: StoredChain = (chainId ? idToChain.get(chainId) : undefined) || { name: "Unknown Chain", chainId: chainId || -1, rpc: [], diff --git a/apps/dashboard/src/contract-ui/tabs/nfts/components/token-id.tsx b/apps/dashboard/src/contract-ui/tabs/nfts/components/token-id.tsx index 5f538eca3f3..4887074d60c 100644 --- a/apps/dashboard/src/contract-ui/tabs/nfts/components/token-id.tsx +++ b/apps/dashboard/src/contract-ui/tabs/nfts/components/token-id.tsx @@ -13,7 +13,6 @@ import { useBreakpointValue, } from "@chakra-ui/react"; import { useNFTDrawerTabs } from "core-ui/nft-drawer/useNftDrawerTabs"; -import { useChainSlug } from "hooks/chains/chainSlug"; import { useRouter } from "next/router"; import { useState } from "react"; import { IoChevronBack } from "react-icons/io5"; @@ -24,6 +23,7 @@ import { useReadContract } from "thirdweb/react"; import { Badge, Button, Card, CodeBlock, Heading, Text } from "tw-components"; import { AddressCopyButton } from "tw-components/AddressCopyButton"; import { NFTMediaWithEmptyState } from "tw-components/nft-media"; +import { useChainSlug } from "../../../../hooks/chains/chainSlug"; import { NftProperty } from "./nft-property"; function isValidUrl(possibleUrl?: string | null) { diff --git a/apps/dashboard/src/contract-ui/tabs/split/page.tsx b/apps/dashboard/src/contract-ui/tabs/split/page.tsx index 82967ac6217..40cdc6a9787 100644 --- a/apps/dashboard/src/contract-ui/tabs/split/page.tsx +++ b/apps/dashboard/src/contract-ui/tabs/split/page.tsx @@ -9,7 +9,6 @@ import { StatLabel, StatNumber, } from "@chakra-ui/react"; -import { useSupportedChainsRecord } from "hooks/chains/configureChains"; import { useMemo } from "react"; import { type ThirdwebContract, @@ -25,6 +24,7 @@ import { } from "thirdweb/react"; import { Card, Heading, Text } from "tw-components"; import { shortenIfAddress } from "utils/usedapp-external"; +import { useAllChainsData } from "../../../hooks/chains/allChains"; import { DistributeButton } from "./components/distribute-button"; export type Balance = { @@ -41,9 +41,9 @@ interface SplitPageProps { export const ContractSplitPage: React.FC = ({ contract }) => { const address = useActiveAccount()?.address; - const configuredChainsRecord = useSupportedChainsRecord(); + const { idToChain } = useAllChainsData(); const chainId = contract.chain.id; - const v4Chain = configuredChainsRecord[chainId]; + const v4Chain = idToChain.get(chainId); const contractAddress = contract.address; const nativeBalanceQuery = useWalletBalance({ address: contractAddress, diff --git a/apps/dashboard/src/hooks/chains/allChains.ts b/apps/dashboard/src/hooks/chains/allChains.ts index 0e126b5b316..6a1f0607513 100644 --- a/apps/dashboard/src/hooks/chains/allChains.ts +++ b/apps/dashboard/src/hooks/chains/allChains.ts @@ -1,9 +1,134 @@ -import { AllChainsContext } from "contexts/all-chains"; -import { useContext } from "react"; -import invariant from "tiny-invariant"; +import { isProd } from "@/constants/env"; +import { useQuery } from "@tanstack/react-query"; +import { useEffect } from "react"; +import type { ChainMetadata } from "thirdweb/chains"; +import { createStore, useStore } from "../../@/lib/reactive"; +import { + type StoredChain, + chainOverridesStore, +} from "../../stores/chainStores"; + +type AllChainsStore = { + allChains: StoredChain[]; + idToChain: Map; + nameToChain: Map; + slugToChain: Map; +}; + +function createAllChainsStore() { + const store = createStore({ + allChains: [], + idToChain: new Map(), + nameToChain: new Map(), + slugToChain: new Map(), + }); + + const dependencies = [chainOverridesStore, originalAllChainsStore]; + for (const dep of dependencies) { + dep.subscribe(() => { + updateAllChainsStore( + originalAllChainsStore.getValue(), + chainOverridesStore.getValue(), + ); + }); + } + + function updateAllChainsStore( + originalAllChains: ChainMetadata[], + chainOverrides: StoredChain[], + ) { + // if original chains are not loaded yet - ignore + if (originalAllChains.length === 0) { + return; + } + + // but don't ignore if chainOverrides is empty! + + const allChains: StoredChain[] = []; + const idToChain: Map = new Map(); + const nameToChain: Map = new Map(); + const slugToChain: Map = new Map(); + + for (let i = 0; i < originalAllChains.length; i++) { + let _chain = originalAllChains[i]; + + // for dev env, replace the rpc urls to dev domain + if (!isProd) { + _chain = { + ..._chain, + rpc: _chain.rpc.map((rpc) => + rpc.replace("rpc.thirdweb.com", "rpc.thirdweb-dev.com"), + ), + }; + } + + const chain: StoredChain = + chainOverrides.find((x) => x.chainId === _chain.chainId) || _chain; + + allChains.push(chain); + idToChain.set(chain.chainId, chain); + nameToChain.set(chain.name, chain); + slugToChain.set(chain.slug, chain); + } + + // add custom chains + for (const c of chainOverrides) { + if (c.isCustom) { + allChains.push(c); + idToChain.set(c.chainId, c); + nameToChain.set(c.name, c); + slugToChain.set(c.slug, c); + } + } + + store.setValue({ + allChains, + idToChain: idToChain, + nameToChain: nameToChain, + slugToChain: slugToChain, + }); + } + + return store; +} + +const originalAllChainsStore = /* @__PURE__ */ createStore([]); +const allChainsStore = /* @__PURE__ */ createAllChainsStore(); + +async function fetchChainsFromApi() { + // always fetch from prod for chains for now + // TODO: re-visit this + const res = await fetch("https://api.thirdweb.com/v1/chains"); + const json = await res.json(); + + if (json.error) { + throw new Error(json.error.message); + } + + return json.data as ChainMetadata[]; +} export function useAllChainsData() { - const data = useContext(AllChainsContext); - invariant(data, "useAllChains must be used within AllChainsContext"); - return data; + // trigger fetching all chains if this hook is used instead of putting this on root + // so we can avoid fetching all chains if it's not required + const allChainsQuery = useQuery({ + queryKey: ["all-chains"], + queryFn: () => fetchChainsFromApi(), + }); + + // eslint-disable-next-line no-restricted-syntax + useEffect(() => { + // already set + if (originalAllChainsStore.getValue().length > 0) { + return; + } + + if (!allChainsQuery.data) { + return; + } + + originalAllChainsStore.setValue(allChainsQuery.data); + }, [allChainsQuery.data]); + + return useStore(allChainsStore); } diff --git a/apps/dashboard/src/hooks/chains/chainSlug.ts b/apps/dashboard/src/hooks/chains/chainSlug.ts index 21efb956775..f7ea474c5d0 100644 --- a/apps/dashboard/src/hooks/chains/chainSlug.ts +++ b/apps/dashboard/src/hooks/chains/chainSlug.ts @@ -1,15 +1,22 @@ -import { useSupportedChainsRecord } from "./configureChains"; +import { useAllChainsData } from "./allChains"; /** * * @returns the slug for the given evm chainId */ -export function useChainSlug(chainId: string | number) { - const configuredChainsRecord = useSupportedChainsRecord(); +export function useChainSlug(chainId: string | number | undefined) { + const { idToChain } = useAllChainsData(); - // EVM - if (chainId in configuredChainsRecord) { - return configuredChainsRecord[chainId as number].slug; + if (!chainId) { + return ""; + } + + const _chain = idToChain.get( + typeof chainId === "string" ? Number.parseInt(chainId) : chainId, + ); + + if (_chain) { + return _chain.slug; } // if can not find a network slug - use chainId as slug diff --git a/apps/dashboard/src/hooks/chains/configureChains.ts b/apps/dashboard/src/hooks/chains/configureChains.ts deleted file mode 100644 index 7612cd0b519..00000000000 --- a/apps/dashboard/src/hooks/chains/configureChains.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { - type StoredChain, - SupportedChainsContext, -} from "contexts/configured-chains"; -import { useContext, useMemo } from "react"; -import type { ChainMetadata } from "thirdweb/chains"; -import invariant from "tiny-invariant"; - -/** - * @returns a list of all the chains that are configured - */ -export function useSupportedChains() { - const chains = useContext(SupportedChainsContext); - - invariant( - chains, - "useSupportedChains must be used within a SupportedChainsContext", - ); - return chains; -} - -// maps chainId to Chain -type ConfiguredChainRecord = Record; - -/** - * @returns a list of record that maps configured chainId to `Chain` object - */ -export function useSupportedChainsRecord() { - const chains = useSupportedChains(); - return useMemo(() => { - const record: ConfiguredChainRecord = {}; - // biome-ignore lint/complexity/noForEach: FIXME - chains.forEach((network) => { - record[network.chainId] = network; - }); - - return record; - }, [chains]); -} - -/** - * @returns a list of record that maps configured chainId to `Chain` object - */ -export function useSupportedChainsNameRecord() { - const chains = useSupportedChains(); - return useMemo(() => { - const record: Record = {}; - // biome-ignore lint/complexity/noForEach: FIXME - chains.forEach((network) => { - record[network.name] = network; - }); - - return record; - }, [chains]); -} - -/** - * @returns a list of record that maps configured chainSlug to `Chain` object - */ -export function useSupportedChainsSlugRecord() { - const chains = useSupportedChains(); - return useMemo(() => { - const record: Record = {}; - // biome-ignore lint/complexity/noForEach: FIXME - chains.forEach((network) => { - record[network.slug] = network; - }); - - return record; - }, [chains]); -} - -/** - * @returns `Chain` object for the given chainId if it is configured, otherwise `undefined` - */ -export function useSupportedChain(chainId: number) { - const record = useSupportedChainsRecord(); - if (chainId in record) { - return record[chainId]; - } -} diff --git a/apps/dashboard/src/hooks/chains/recentlyUsedChains.ts b/apps/dashboard/src/hooks/chains/recentlyUsedChains.ts deleted file mode 100644 index e2ee18ac2d4..00000000000 --- a/apps/dashboard/src/hooks/chains/recentlyUsedChains.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - AddRecentlyUsedChainIdsContext, - RecentlyUsedChainIdsContext, - SupportedChainsReadyContext, -} from "contexts/configured-chains"; -import { useContext, useMemo } from "react"; -import invariant from "tiny-invariant"; -import { useSupportedChainsRecord } from "./configureChains"; - -export function useRecentlyUsedChains() { - const recentlyUsedChainIds = useContext(RecentlyUsedChainIdsContext); - const supportedChainsRecord = useSupportedChainsRecord(); - - const isSupportedChainsReady = useContext(SupportedChainsReadyContext); - - const recentlyUsedChains = useMemo(() => { - if (!recentlyUsedChainIds || !isSupportedChainsReady) { - return []; - } - return recentlyUsedChainIds.map( - (chainId) => supportedChainsRecord[chainId], - ); - }, [supportedChainsRecord, recentlyUsedChainIds, isSupportedChainsReady]); - - invariant( - recentlyUsedChainIds, - "useRecentlyUsedChains must be used within RecentlyUsedChainIdsContext", - ); - - return recentlyUsedChains; -} - -export function useAddRecentlyUsedChainId() { - const context = useContext(AddRecentlyUsedChainIdsContext); - invariant( - context, - "useAddRecentlyUsedChainId must be used within AddRecentlyUsedChainIdsContext", - ); - return context; -} diff --git a/apps/dashboard/src/hooks/chains/useModifyChain.ts b/apps/dashboard/src/hooks/chains/useModifyChain.ts deleted file mode 100644 index b1beccb376b..00000000000 --- a/apps/dashboard/src/hooks/chains/useModifyChain.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { - ModifyChainContext, - RemoveChainModification, -} from "contexts/configured-chains"; -import { useContext } from "react"; -import invariant from "tiny-invariant"; - -export function useModifyChain() { - const context = useContext(ModifyChainContext); - invariant(context, "useModifyChain must be used within ModifyChainContext"); - return context; -} - -export function useRemoveChainModification() { - const context = useContext(RemoveChainModification); - invariant( - context, - "useRemoveChainModification must be used within ModifyChainContext", - ); - return context; -} diff --git a/apps/dashboard/src/lib/v5-adapter.ts b/apps/dashboard/src/lib/v5-adapter.ts index 571268bf604..3d2806f06df 100644 --- a/apps/dashboard/src/lib/v5-adapter.ts +++ b/apps/dashboard/src/lib/v5-adapter.ts @@ -2,7 +2,7 @@ import { defineDashboardChain } from "lib/defineDashboardChain"; import { useMemo } from "react"; import type { Chain, ChainMetadata } from "thirdweb/chains"; import { useActiveWalletChain } from "thirdweb/react"; -import { useSupportedChainsRecord } from "../hooks/chains/configureChains"; +import { useAllChainsData } from "../hooks/chains/allChains"; export function useV5DashboardChain(chainId: undefined): undefined; export function useV5DashboardChain(chainId: number): Chain; @@ -12,23 +12,17 @@ export function useV5DashboardChain( export function useV5DashboardChain( chainId: number | undefined, ): Chain | undefined { - const configuredChainsRecord = useSupportedChainsRecord(); + const { idToChain } = useAllChainsData(); // memo is very very important! return useMemo(() => { - let configuedChain = undefined; - if (chainId === undefined) { return undefined; } - if (chainId in configuredChainsRecord) { - configuedChain = configuredChainsRecord[chainId as number]; - } - // eslint-disable-next-line no-restricted-syntax - return defineDashboardChain(chainId, configuedChain); - }, [chainId, configuredChainsRecord]); + return defineDashboardChain(chainId, idToChain.get(chainId)); + }, [chainId, idToChain]); } /** @@ -36,14 +30,11 @@ export function useV5DashboardChain( */ export function useActiveChainAsDashboardChain(): ChainMetadata | undefined { // eslint-disable-next-line no-restricted-syntax - const activeChain = useActiveWalletChain()?.id; - const configuredChainsRecord = useSupportedChainsRecord(); + const activeChainId = useActiveWalletChain()?.id; + const { idToChain } = useAllChainsData(); // memo is very very important! return useMemo(() => { - if (activeChain && activeChain in configuredChainsRecord) { - return configuredChainsRecord[activeChain as number]; - } - return undefined; - }, [activeChain, configuredChainsRecord]); + return activeChainId ? idToChain.get(activeChainId) : undefined; + }, [activeChainId, idToChain]); } diff --git a/apps/dashboard/src/pages/[chain_id]/[...paths].tsx b/apps/dashboard/src/pages/[chain_id]/[...paths].tsx index 80a5bac5ea5..c66e1996e3c 100644 --- a/apps/dashboard/src/pages/[chain_id]/[...paths].tsx +++ b/apps/dashboard/src/pages/[chain_id]/[...paths].tsx @@ -2,6 +2,7 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Alert } from "@/components/ui/alert"; import { useThirdwebClient } from "@/constants/thirdweb.client"; import { getThirdwebClient } from "@/constants/thirdweb.server"; +import { useStore } from "@/lib/reactive"; import { type EVMContractInfo, useEVMContractInfo, @@ -20,15 +21,10 @@ import { ensQuery } from "components/contract-components/hooks"; import { ContractMetadata } from "components/custom-contract/contract-header/contract-metadata"; import { DeprecatedAlert } from "components/shared/DeprecatedAlert"; import { THIRDWEB_DOMAIN } from "constants/urls"; -import { SupportedChainsReadyContext } from "contexts/configured-chains"; import { mapV4ChainToV5Chain } from "contexts/map-chains"; import { PrimaryDashboardButton } from "contract-ui/components/primary-dashboard-button"; import { useContractRouteConfig } from "contract-ui/hooks/useRouteConfig"; import { ContractSidebar } from "core-ui/sidebar/detail-page"; -import { - useSupportedChainsRecord, - useSupportedChainsSlugRecord, -} from "hooks/chains/configureChains"; import { getDashboardChainRpc } from "lib/rpc"; import { resolveFunctionSelectors } from "lib/selectors"; import { useV5DashboardChain } from "lib/v5-adapter"; @@ -37,7 +33,7 @@ import { NextSeo } from "next-seo"; import { useRouter } from "next/router"; import { ContractOG } from "og-lib/url-utils"; import { PageId } from "page-id"; -import { useContext, useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { type ThirdwebContract, getAddress, @@ -52,6 +48,8 @@ import { stringify } from "thirdweb/utils"; import { fetchChain } from "utils/fetchChain"; import type { ThirdwebNextPage } from "utils/types"; import { shortenIfAddress } from "utils/usedapp-external"; +import { useAllChainsData } from "../../hooks/chains/allChains"; +import { isChainOverridesLoadedStore } from "../../stores/chainStores"; type EVMContractProps = { contractInfo?: EVMContractInfo; @@ -68,7 +66,7 @@ type EVMContractProps = { const ContractPage: ThirdwebNextPage = () => { // show optimistic UI first - assume chain is configured until proven otherwise const [chainNotFound, setChainNotFound] = useState(false); - const isSupportedChainsReady = useContext(SupportedChainsReadyContext); + const isChainOverridesLoaded = useStore(isChainOverridesLoadedStore); const contractInfo = useEVMContractInfo(); @@ -77,13 +75,12 @@ const ContractPage: ThirdwebNextPage = () => { const contractAddress = contractInfo?.contractAddress || ""; const setContractInfo = useSetEVMContractInfo(); - const supportedChainsSlugRecord = useSupportedChainsSlugRecord(); - const configuredChainsRecord = useSupportedChainsRecord(); + const { idToChain, slugToChain } = useAllChainsData(); // this will go away as part of the RSC rewrite! // eslint-disable-next-line no-restricted-syntax useEffect(() => { - if (!isSupportedChainsReady || !chainSlug) { + if (!isChainOverridesLoaded || !chainSlug) { return; } @@ -95,7 +92,7 @@ const ContractPage: ThirdwebNextPage = () => { // currently user can only update RPC - so check if it is updated or not // if updated, update the contractInfo.chain - const configuredChain = supportedChainsSlugRecord[chainSlug]; + const configuredChain = slugToChain.get(chainSlug); if ( configuredChain && getDashboardChainRpc(configuredChain.chainId, configuredChain) !== @@ -116,32 +113,32 @@ const ContractPage: ThirdwebNextPage = () => { // if server could not resolve the chain using allChains else { + const chainFoundBySlug = slugToChain.get(chainSlug); + const chainFoundById = idToChain.get(Number(chainSlug)); + // if it is configured on client storage, use that - if (chainSlug in supportedChainsSlugRecord) { + if (chainFoundBySlug) { setContractInfo({ chainSlug, contractAddress, - chain: supportedChainsSlugRecord[chainSlug], + chain: chainFoundBySlug, }); - } else if (chainSlug in configuredChainsRecord) { + } else if (chainFoundById) { // this is for thirdweb internal tools // it allows us to use chainId as slug for a custom network as well - const chainId = Number(chainSlug); - const _chain = configuredChainsRecord[chainId]; - // replace the chainId with slug in URL without reloading the page // If we don't do this, tanstack router creates issues window.history.replaceState( null, document.title, - `/${_chain.slug}/${contractAddress}`, + `/${chainSlug}/${contractAddress}`, ); setContractInfo({ - chainSlug: _chain.slug, + chainSlug, contractAddress, - chain: _chain, + chain: chainFoundById, }); } @@ -154,11 +151,11 @@ const ContractPage: ThirdwebNextPage = () => { }, [ chain, chainSlug, - supportedChainsSlugRecord, - configuredChainsRecord, + idToChain, + slugToChain, contractAddress, setContractInfo, - isSupportedChainsReady, + isChainOverridesLoaded, ]); const isSlugNumber = !Number.isNaN(Number(chainSlug)); @@ -216,7 +213,7 @@ const ContractPage: ThirdwebNextPage = () => { ); } - if (!isSupportedChainsReady) { + if (!isChainOverridesLoaded) { return (
diff --git a/apps/dashboard/src/stores/SyncStoreToStorage.tsx b/apps/dashboard/src/stores/SyncStoreToStorage.tsx new file mode 100644 index 00000000000..55a6c926a35 --- /dev/null +++ b/apps/dashboard/src/stores/SyncStoreToStorage.tsx @@ -0,0 +1,45 @@ +import { type Store, useStore } from "@/lib/reactive"; +import { useEffect } from "react"; + +const loadedStoreKeys = new Set(); + +export function SyncStoreToStorage(props: { + store: Store; + storageKey: string; + onLoaded?: () => void; +}) { + const storeValue = useStore(props.store); + + // load from storage + // eslint-disable-next-line no-restricted-syntax + useEffect(() => { + if (loadedStoreKeys.has(props.storageKey)) { + return; + } + + try { + const storedValueStr = localStorage.getItem(props.storageKey); + if (storedValueStr) { + const parsedValue = JSON.parse(storedValueStr); + props.store.setValue(parsedValue); + } + } catch { + // ignore errors + } + + loadedStoreKeys.add(props.storageKey); + props.onLoaded?.(); + }, [props.store, props.storageKey, props.onLoaded]); + + // save changes to storage + // eslint-disable-next-line no-restricted-syntax + useEffect(() => { + try { + localStorage.setItem(props.storageKey, JSON.stringify(storeValue)); + } catch { + // ignore + } + }, [storeValue, props.storageKey]); + + return null; +} diff --git a/apps/dashboard/src/stores/chainStores.tsx b/apps/dashboard/src/stores/chainStores.tsx new file mode 100644 index 00000000000..fba54d1fe86 --- /dev/null +++ b/apps/dashboard/src/stores/chainStores.tsx @@ -0,0 +1,80 @@ +"use client"; + +import type { ChainMetadata } from "thirdweb/chains"; +import { createStore } from "../@/lib/reactive"; +import { SyncStoreToStorage } from "./SyncStoreToStorage"; + +export interface StoredChain extends ChainMetadata { + // any of the name, logo, rpc etc is modified, testnet or not + // user can not change chainId, symbol, slug + isModified?: boolean; + + // if this chain (id) is not in our db, user added it + isCustom?: boolean; + + // TODO - remove this, we can not allow this anymore + isOverwritten?: boolean; +} + +export const isChainOverridesLoadedStore = createStore(false); +export const chainOverridesStore = createStore([]); +export const recentlyUsedChainIdsStore = createStore([]); + +export function SyncChainStores() { + return ( + <> + { + console.log("chain overrides loaded"); + isChainOverridesLoadedStore.setValue(true); + }} + /> + + + + ); +} + +export function addRecentlyUsedChainId(chainId: number) { + const newRecentlyUsedChains = recentlyUsedChainIdsStore + .getValue() + .filter((c) => c !== chainId); + + // add to the front of the array + newRecentlyUsedChains.unshift(chainId); + // only keep the first 5 + newRecentlyUsedChains.splice(5); + + recentlyUsedChainIdsStore.setValue(newRecentlyUsedChains); +} + +export function addChainOverrides(newChain: StoredChain) { + const currentChains = chainOverridesStore.getValue(); + const index = currentChains.findIndex((c) => c.chainId === newChain.chainId); + + let newChains: StoredChain[]; + + // if this chain is already in the chains, update it in array + if (index !== -1) { + newChains = [...currentChains]; + newChains[index] = newChain; + } + + // else append it + else { + newChains = [...currentChains, newChain]; + } + + chainOverridesStore.setValue(newChains); +} + +export function removeChainOverrides(id: number) { + chainOverridesStore.setValue( + chainOverridesStore.getValue().filter((c) => c.chainId !== id), + ); +} From bc7288370c3f9bd9b71053835ad6d44cda7e5d1e Mon Sep 17 00:00:00 2001 From: MananTank Date: Sat, 21 Sep 2024 21:24:47 +0000 Subject: [PATCH 77/78] Migrate Network Config Modal from chakra to shadcn/tailwind (#4745) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR removes unused components, updates UI elements, and refactors form fields in the dashboard application. ### Detailed summary - Deleted `TooltipBox.tsx` and `ConfirmationPopover.tsx` - Updated UI elements in `IconUpload.tsx` and `ConfigureNetworkModal.tsx` - Refactored form fields in `ChainIdInput.tsx`, `RpcInput.tsx`, and `NetworkIDInput.tsx` > The following files were skipped due to too many changes: `apps/dashboard/src/@/components/ui/radio-group.tsx`, `apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../@/components/blocks/FormFieldSetup.tsx | 36 ++ .../src/@/components/ui/radio-group.tsx | 6 +- .../src/@/constants/thirdweb.client.ts | 1 - .../ConfigureNetworkForm.tsx | 316 ++++++++---------- .../ConfigureNetworkModal.tsx | 22 +- .../configure-networks/ConfigureNetworks.tsx | 42 +-- .../configure-networks/Form/ChainIdInput.tsx | 20 +- .../Form/ConfirmationPopover.tsx | 57 ---- .../configure-networks/Form/IconUpload.tsx | 18 +- .../Form/NetworkIdInput.tsx | 61 ++-- .../configure-networks/Form/RpcInput.tsx | 35 +- .../configure-networks/Form/TooltipBox.tsx | 12 - .../claim-conditions-form/index.tsx | 13 +- apps/dashboard/src/stores/chainStores.tsx | 3 - 14 files changed, 292 insertions(+), 350 deletions(-) create mode 100644 apps/dashboard/src/@/components/blocks/FormFieldSetup.tsx delete mode 100644 apps/dashboard/src/components/configure-networks/Form/ConfirmationPopover.tsx delete mode 100644 apps/dashboard/src/components/configure-networks/Form/TooltipBox.tsx diff --git a/apps/dashboard/src/@/components/blocks/FormFieldSetup.tsx b/apps/dashboard/src/@/components/blocks/FormFieldSetup.tsx new file mode 100644 index 00000000000..127ebc2032b --- /dev/null +++ b/apps/dashboard/src/@/components/blocks/FormFieldSetup.tsx @@ -0,0 +1,36 @@ +import { Label } from "@/components/ui/label"; +import { ToolTipLabel } from "@/components/ui/tooltip"; +import { AsteriskIcon, InfoIcon } from "lucide-react"; + +export function FormFieldSetup(props: { + htmlFor: string; + label: string; + errorMessage: React.ReactNode | undefined; + children: React.ReactNode; + tooltip: React.ReactNode | undefined; + isRequired: boolean; +}) { + return ( +
+
+ + + {props.isRequired && ( + + )} + + {props.tooltip && ( + + + + )} +
+ {props.children} + {props.errorMessage && ( +

+ {props.errorMessage} +

+ )} +
+ ); +} diff --git a/apps/dashboard/src/@/components/ui/radio-group.tsx b/apps/dashboard/src/@/components/ui/radio-group.tsx index bc9eb47ee42..f417b0b8ced 100644 --- a/apps/dashboard/src/@/components/ui/radio-group.tsx +++ b/apps/dashboard/src/@/components/ui/radio-group.tsx @@ -29,7 +29,7 @@ const RadioGroupItem = React.forwardRef< -
+
{/* Show on checked */} diff --git a/apps/dashboard/src/@/constants/thirdweb.client.ts b/apps/dashboard/src/@/constants/thirdweb.client.ts index e34de3571d2..86e1a624f65 100644 --- a/apps/dashboard/src/@/constants/thirdweb.client.ts +++ b/apps/dashboard/src/@/constants/thirdweb.client.ts @@ -1,4 +1,3 @@ -import {} from "@/constants/env"; import { useQuery } from "@tanstack/react-query"; import { useMemo } from "react"; import { useActiveAccount } from "thirdweb/react"; diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx index 10d467bc49e..04f63351093 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworkForm.tsx @@ -1,27 +1,21 @@ +import { FormFieldSetup } from "@/components/blocks/FormFieldSetup"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; -import { - Alert, - AlertIcon, - FormControl, - Radio, - RadioGroup, -} from "@chakra-ui/react"; +import { Label } from "@/components/ui/label"; +import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { ChainIcon } from "components/icons/ChainIcon"; import { getDashboardChainRpc } from "lib/rpc"; +import { CircleAlertIcon } from "lucide-react"; import { useForm } from "react-hook-form"; -import { FormErrorMessage, FormLabel } from "tw-components"; import { useAllChainsData } from "../../hooks/chains/allChains"; import { type StoredChain, removeChainOverrides, } from "../../stores/chainStores"; import { ChainIdInput } from "./Form/ChainIdInput"; -import { ConfirmationPopover } from "./Form/ConfirmationPopover"; import { IconUpload } from "./Form/IconUpload"; import { NetworkIDInput } from "./Form/NetworkIdInput"; import { RpcInput } from "./Form/RpcInput"; -import { TooltipBox } from "./Form/TooltipBox"; export type NetworkConfigFormData = { name: string; @@ -31,7 +25,6 @@ export type NetworkConfigFormData = { type: "testnet" | "mainnet"; icon: string; slug: string; - status: string; }; // lowercase it, replace all spaces with hyphens, and then strip all non-alphanumeric characters @@ -72,7 +65,6 @@ export const ConfigureNetworkForm: React.FC = ({ type: editingChain?.testnet ? "testnet" : "mainnet", icon: editingChain?.icon?.url || "", slug: editingChain?.slug || "", - status: editingChain?.status === "deprecated" ? "deprecated" : "active", }, defaultValues: { slug: prefillSlug, @@ -80,17 +72,15 @@ export const ConfigureNetworkForm: React.FC = ({ mode: "onChange", }); - const isFullyEditable = - !editingChain || editingChain?.isCustom || editingChain.isOverwritten; + const isFullyEditable = !editingChain || editingChain?.isCustom; const chainId = Number(form.watch("chainId")); const isChainIdDirty = form.formState.dirtyFields.chainId; const overwritingChain = isChainIdDirty && idToChain.get(chainId); - const editedFrom = - editingChain?.isModified || editingChain?.isOverwritten - ? idToChain.get(editingChain.chainId) - : undefined; + const editedFrom = editingChain?.isModified + ? idToChain.get(editingChain.chainId) + : undefined; const { ref } = form.register("name", { required: true, @@ -117,6 +107,10 @@ export const ConfigureNetworkForm: React.FC = ({ }); const handleSubmit = form.handleSubmit((data) => { + if (overwritingChain) { + return; + } + let configuredNetwork: StoredChain; if (editingChain) { @@ -142,7 +136,6 @@ export const ConfigureNetworkForm: React.FC = ({ format: "", }, testnet: data.type === "testnet", - status: data.status, }; } else { configuredNetwork = { @@ -167,7 +160,6 @@ export const ConfigureNetworkForm: React.FC = ({ format: "", } : undefined, - status: data.status, }; } @@ -175,32 +167,18 @@ export const ConfigureNetworkForm: React.FC = ({ removeChainOverrides(editingChain.chainId); } - if (overwritingChain) { - configuredNetwork.isOverwritten = true; - configuredNetwork.isCustom = false; - configuredNetwork.isModified = false; - } else { - if (editingChain) { - if (editingChain.isCustom) { - configuredNetwork.isOverwritten = false; - configuredNetwork.isCustom = true; - configuredNetwork.isModified = false; - } else if (editingChain.isOverwritten) { - configuredNetwork.isOverwritten = true; - configuredNetwork.isCustom = false; - configuredNetwork.isModified = false; - } else { - configuredNetwork.isCustom = false; - configuredNetwork.isModified = true; - configuredNetwork.isOverwritten = false; - } - } else { + if (editingChain) { + if (editingChain.isCustom) { configuredNetwork.isCustom = true; configuredNetwork.isModified = false; - configuredNetwork.isOverwritten = false; + } else { + configuredNetwork.isCustom = false; + configuredNetwork.isModified = true; } + } else { + configuredNetwork.isCustom = true; + configuredNetwork.isModified = false; } - onSubmit(configuredNetwork); }); @@ -210,17 +188,7 @@ export const ConfigureNetworkForm: React.FC = ({ ? "Network already exists" : "Network name is required"); - const disableSubmit = !form.formState.isDirty || !form.formState.isValid; - - const submitBtn = ( - - ); + const disableSubmit = !form.formState.isDirty || !!overwritingChain; return (
= ({ return handleSubmit(e); }} > - {/* Network Name for Custom Network */} - - Network name - { - const value = e.target.value; - - form.setValue("name", value, { - shouldValidate: true, - shouldDirty: true, - }); - - if (isFullyEditable) { - if (!form.formState.dirtyFields.slug) { - form.setValue("slug", nameToSlug(value), { +
+ {/* Name + Slug */} +
+ {/* name */} + + { + const value = e.target.value; + + form.setValue("name", value, { shouldValidate: true, + shouldDirty: true, }); - } - } - }} - ref={ref} - /> - {networkNameErrorMessage} - + if (isFullyEditable) { + if (!form.formState.dirtyFields.slug) { + form.setValue("slug", nameToSlug(value), { + shouldValidate: true, + }); + } + } + }} + ref={ref} + /> + - {/* Slug URL */} - + {/* Slug */} + +
-
{/* Chain ID + Currency Symbol */} -
+
{/* Currency Symbol */} - - Currency Symbol + - +
-
+
{/* Testnet / Mainnet */} - - - Network type - - - The network type indicates whether it is intended for - production or testing. - - - - It{`'`}s only used for displaying network type on the - dashboard and does not affect functionality. - - - } - /> - + + + The network type indicates whether it is intended for + production or testing. + + + + It{`'`}s only used for displaying network type on the + dashboard and does not affect functionality. + + + } + > { - form.setValue("type", value, { + id="network-type" + value={form.watch("type")} + onValueChange={(v) => { + form.setValue("type", v === "testnet" ? "testnet" : "mainnet", { shouldValidate: true, shouldDirty: true, }); }} - value={form.watch("type")} + className="flex gap-4" > -
- Mainnet - Testnet +
+ + +
+ +
+ +
- + {/* Icon */} - - Icon - +
- + { form.setValue("icon", uri, { shouldDirty: true }); }} />
-
+
- {editingChain?.status === "deprecated" && ( -
- {/* Active / Deprecated */} - - Network status - { - form.setValue("status", value, { - shouldValidate: true, - shouldDirty: true, - }); - }} - value={form.watch("status")} - > -
- Live - Deprecated -
-
-
-
- )} - {/* RPC URL */} {overwritingChain && ( - - - Chain ID {chainId} is being used by {`"${overwritingChain.name}"`}{" "} -
- Adding this network will overwrite it -
+
+ +

+ Chain ID {chainId} is taken by {`${overwritingChain.name}`} +

+
)} +
- {/* Buttons */} -
- {/* Add / Update Button */} - {overwritingChain && !disableSubmit ? ( - - This action can be reversed later by resetting this network - {`'s`} config - - } - > - {submitBtn} - - ) : ( - submitBtn - )} - - {editedFrom && ( - - )} -
+ {/* Buttons */} +
+ + + {editedFrom && ( + + )}
); diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx index cde5768f806..abdf3fbd262 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworkModal.tsx @@ -1,4 +1,3 @@ -import { ChakraProviderSetup } from "@/components/ChakraProviderSetup"; import { Dialog, DialogContent } from "@/components/ui/dialog"; import { type StoredChain, @@ -26,18 +25,15 @@ export const ConfigureNetworkModal: React.FC = ( className="p-0 z-[10001] max-w-[480px]" dialogOverlayClassName="z-[10000]" > - {/* TODO - remove after moving ConfigureNetworks to shadcn */} - - { - addRecentlyUsedChainId(chain.chainId); - props.onNetworkAdded?.(chain); - onModalClose(); - }} - onNetworkConfigured={onModalClose} - editChain={props.editChain} - /> - + { + addRecentlyUsedChainId(chain.chainId); + props.onNetworkAdded?.(chain); + onModalClose(); + }} + onNetworkConfigured={onModalClose} + editChain={props.editChain} + /> ); diff --git a/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx b/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx index a0926d08c7d..a76d9666caf 100644 --- a/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx +++ b/apps/dashboard/src/components/configure-networks/ConfigureNetworks.tsx @@ -52,27 +52,31 @@ export const ConfigureNetworks: React.FC = (props) => { }; return ( -
-

- {editChain ? "Edit Network" : "Add Custom Network"} -

+
+
+

+ {editChain ? "Edit Network" : "Add Custom Network"} +

+
- {/* Modify the given chain */} - {editChain && ( - - )} +
+ {/* Modify the given chain */} + {editChain && ( + + )} - {/* Custom chain */} - {!editChain && ( - - )} + {/* Custom chain */} + {!editChain && ( + + )} +
); }; diff --git a/apps/dashboard/src/components/configure-networks/Form/ChainIdInput.tsx b/apps/dashboard/src/components/configure-networks/Form/ChainIdInput.tsx index c657b307bf2..ddd8bd91322 100644 --- a/apps/dashboard/src/components/configure-networks/Form/ChainIdInput.tsx +++ b/apps/dashboard/src/components/configure-networks/Form/ChainIdInput.tsx @@ -1,7 +1,6 @@ +import { FormFieldSetup } from "@/components/blocks/FormFieldSetup"; import { Input } from "@/components/ui/input"; -import { FormControl } from "@chakra-ui/react"; import type { UseFormReturn } from "react-hook-form"; -import { FormLabel } from "tw-components"; import type { NetworkConfigFormData } from "../ConfigureNetworkForm"; export const ChainIdInput: React.FC<{ @@ -9,15 +8,22 @@ export const ChainIdInput: React.FC<{ disabled: boolean; }> = ({ form, disabled }) => { return ( - - Chain ID { // prevent typing e, +, - if (e.key === "e" || e.key === "+" || e.key === "-") { @@ -29,6 +35,6 @@ export const ChainIdInput: React.FC<{ required: true, })} /> - + ); }; diff --git a/apps/dashboard/src/components/configure-networks/Form/ConfirmationPopover.tsx b/apps/dashboard/src/components/configure-networks/Form/ConfirmationPopover.tsx deleted file mode 100644 index cd718ebaf6d..00000000000 --- a/apps/dashboard/src/components/configure-networks/Form/ConfirmationPopover.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { - ButtonGroup, - Popover, - PopoverArrow, - PopoverContent, - PopoverFooter, - PopoverHeader, - PopoverTrigger, - useDisclosure, -} from "@chakra-ui/react"; -import { Button, Card, Heading, Text } from "tw-components"; - -export const ConfirmationPopover: React.FC<{ - onConfirm: () => void; - children: React.ReactNode; - prompt: string; - description?: React.ReactNode; - confirmationText: React.ReactNode; -}> = (props) => { - const { isOpen, onOpen, onClose } = useDisclosure(); - - return ( - - {props.children} - - - - - - {props.prompt} - - - {props.description} - - - - - - - - - - ); -}; diff --git a/apps/dashboard/src/components/configure-networks/Form/IconUpload.tsx b/apps/dashboard/src/components/configure-networks/Form/IconUpload.tsx index 61340dc9fb4..aff017878bc 100644 --- a/apps/dashboard/src/components/configure-networks/Form/IconUpload.tsx +++ b/apps/dashboard/src/components/configure-networks/Form/IconUpload.tsx @@ -36,14 +36,22 @@ export const IconUpload: React.FC<{ onUpload: (url: string) => void }> = ({ }; return ( - - ); diff --git a/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx b/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx index 6e56df2d616..3f814ae82b2 100644 --- a/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx +++ b/apps/dashboard/src/components/configure-networks/Form/NetworkIdInput.tsx @@ -1,10 +1,8 @@ +import { FormFieldSetup } from "@/components/blocks/FormFieldSetup"; import { Input } from "@/components/ui/input"; -import { FormControl } from "@chakra-ui/react"; import type { UseFormReturn } from "react-hook-form"; -import { FormErrorMessage, FormLabel } from "tw-components"; import { useAllChainsData } from "../../../hooks/chains/allChains"; import type { NetworkConfigFormData } from "../ConfigureNetworkForm"; -import { TooltipBox } from "./TooltipBox"; export const NetworkIDInput: React.FC<{ form: UseFormReturn; @@ -15,29 +13,37 @@ export const NetworkIDInput: React.FC<{ const existingChain = slugToChain.get(slug); return ( - + Network slug is used to identify the network in the thirdweb + dashboard. +

Example

+

+ {"thirdweb.com//..."} +

+ + } + errorMessage={ + form.formState.errors.slug?.type === "taken" ? ( + <> + Can not use {`"${slug}"`}.{" "} + {slug && + existingChain && + `It is being used by "${existingChain.name}"`} + + ) : undefined + } > - - Network ID - - Network ID is used to identify the network in the URL -

Example

-

- {"thirdweb.com//"} -

- - } - /> -
{ // only allow alphanumeric characters and dashes if (!/^[a-z0-9-]*$/i.test(e.key)) { @@ -58,17 +64,6 @@ export const NetworkIDInput: React.FC<{ }, })} /> - - Can not use Network ID {`"${slug}"`}. - {slug && existingChain && ( - <> - {" "} - It is being used by {`"`} - {existingChain.name} - {`"`} - - )} - -
+ ); }; diff --git a/apps/dashboard/src/components/configure-networks/Form/RpcInput.tsx b/apps/dashboard/src/components/configure-networks/Form/RpcInput.tsx index 6465937406b..91cae616469 100644 --- a/apps/dashboard/src/components/configure-networks/Form/RpcInput.tsx +++ b/apps/dashboard/src/components/configure-networks/Form/RpcInput.tsx @@ -1,8 +1,6 @@ +import { FormFieldSetup } from "@/components/blocks/FormFieldSetup"; import { Input } from "@/components/ui/input"; -import { Alert, AlertIcon, FormControl } from "@chakra-ui/react"; import type { UseFormReturn } from "react-hook-form"; -import { IoWarning } from "react-icons/io5"; -import { FormErrorMessage, FormLabel } from "tw-components"; import type { NetworkConfigFormData } from "../ConfigureNetworkForm"; export const RpcInput: React.FC<{ @@ -23,21 +21,26 @@ export const RpcInput: React.FC<{ }); return ( - - RPC URL - + - Invalid RPC URL - - - - Only add custom networks that you trust.
Malicious RPCs can - record activity and lie about the state of the network. -
-
+

+ Only add RPC URL that you trust. Malicious RPCs can record activity and + lie about the state of the network. +

+ ); }; diff --git a/apps/dashboard/src/components/configure-networks/Form/TooltipBox.tsx b/apps/dashboard/src/components/configure-networks/Form/TooltipBox.tsx deleted file mode 100644 index ad9194a0c15..00000000000 --- a/apps/dashboard/src/components/configure-networks/Form/TooltipBox.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { ToolTipLabel } from "@/components/ui/tooltip"; -import { CircleHelpIcon } from "lucide-react"; - -export const TooltipBox: React.FC<{ - content: React.ReactNode; -}> = ({ content }) => { - return ( - {content}
}> - - - ); -}; diff --git a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx index c4ef2be91b4..c9d1e906df6 100644 --- a/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx +++ b/apps/dashboard/src/contract-ui/tabs/claim-conditions/components/claim-conditions-form/index.tsx @@ -1,3 +1,4 @@ +import { ToolTipLabel } from "@/components/ui/tooltip"; import { AdminOnly } from "@3rdweb-sdk/react/components/roles/admin-only"; import { useIsAdmin } from "@3rdweb-sdk/react/hooks/useContractRoles"; import { @@ -14,10 +15,10 @@ import { Spinner, } from "@chakra-ui/react"; import { TransactionButton } from "components/buttons/TransactionButton"; -import { TooltipBox } from "components/configure-networks/Form/TooltipBox"; import { SnapshotUpload } from "contract-ui/tabs/claim-conditions/components/snapshot-upload"; import { useTrack } from "hooks/analytics/useTrack"; import { useTxNotifications } from "hooks/useTxNotifications"; +import { CircleHelpIcon } from "lucide-react"; import { Fragment, createContext, useContext, useMemo, useState } from "react"; import { type UseFieldArrayReturn, @@ -649,3 +650,13 @@ export const ClaimConditionsForm: React.FC = ({ ); }; + +const TooltipBox: React.FC<{ + content: React.ReactNode; +}> = ({ content }) => { + return ( + {content}
}> + + + ); +}; diff --git a/apps/dashboard/src/stores/chainStores.tsx b/apps/dashboard/src/stores/chainStores.tsx index fba54d1fe86..f1425f015d1 100644 --- a/apps/dashboard/src/stores/chainStores.tsx +++ b/apps/dashboard/src/stores/chainStores.tsx @@ -11,9 +11,6 @@ export interface StoredChain extends ChainMetadata { // if this chain (id) is not in our db, user added it isCustom?: boolean; - - // TODO - remove this, we can not allow this anymore - isOverwritten?: boolean; } export const isChainOverridesLoadedStore = createStore(false); From d936d4e5b9d1455fb57548ed0f1f90beb72ed942 Mon Sep 17 00:00:00 2001 From: MananTank Date: Sat, 21 Sep 2024 22:51:27 +0000 Subject: [PATCH 78/78] Remove permissions form field in ecosystem partners page + UI adjusments (#4747) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR removes unused code related to partner permissions and updates UI components in the dashboard ecosystem section. ### Detailed summary - Removed unused `PartnerPermission` type and related code - Updated UI components in the dashboard ecosystem section for better user experience > The following files were skipped due to too many changes: `apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/add-partner-form.client.tsx` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../client/AddPartnerDialogButton.tsx | 41 ++++++ .../client/add-partner-form.client.tsx | 120 +++++------------- .../client/update-partner-form.client.tsx | 114 +++++------------ .../client/update-partner-modal.client.tsx | 7 +- .../server/ecosystem-partners-section.tsx | 28 ++-- .../components/server/partners-table.tsx | 10 +- .../ecosystem/[slug]/(active)/constants.ts | 8 -- .../[slug]/(active)/hooks/use-add-partner.ts | 4 +- .../(active)/hooks/use-update-partner.ts | 2 - .../ecosystem/[slug]/(active)/utils.ts | 6 - .../dashboard/connect/ecosystem/types.ts | 2 +- apps/dashboard/src/app/(dashboard)/layout.tsx | 2 +- 12 files changed, 126 insertions(+), 218 deletions(-) create mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/AddPartnerDialogButton.tsx delete mode 100644 apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/utils.ts diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/AddPartnerDialogButton.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/AddPartnerDialogButton.tsx new file mode 100644 index 00000000000..df82c47c78d --- /dev/null +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/AddPartnerDialogButton.tsx @@ -0,0 +1,41 @@ +"use client"; + +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { PlusIcon } from "lucide-react"; +import { useState } from "react"; +import type { Ecosystem } from "../../../../types"; +import { AddPartnerForm } from "./add-partner-form.client"; + +export function AddPartnerDialogButton(props: { + ecosystem: Ecosystem; +}) { + const [open, setOpen] = useState(false); + return ( + + + + + + + + Add Partner + + + setOpen(false)} + /> + + + ); +} diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/add-partner-form.client.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/add-partner-form.client.tsx index 92777a603d4..ee0db640973 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/add-partner-form.client.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/add-partner-form.client.tsx @@ -1,4 +1,5 @@ "use client"; +import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button } from "@/components/ui/button"; import { Form, @@ -6,17 +7,10 @@ import { FormDescription, FormField, FormItem, + FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { ToolTipLabel } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; @@ -26,14 +20,17 @@ import type { Ecosystem } from "../../../../types"; import { partnerFormSchema } from "../../constants"; import { useAddPartner } from "../../hooks/use-add-partner"; -export function AddPartnerForm({ ecosystem }: { ecosystem: Ecosystem }) { +export function AddPartnerForm({ + ecosystem, + onPartnerAdded, +}: { ecosystem: Ecosystem; onPartnerAdded: () => void }) { const form = useForm>({ resolver: zodResolver(partnerFormSchema), }); const { mutateAsync: addPartner, isPending } = useAddPartner({ onSuccess: () => { - form.reset(); + onPartnerAdded(); }, onError: (error) => { const message = @@ -57,18 +54,18 @@ export function AddPartnerForm({ ecosystem }: { ecosystem: Ecosystem }) { allowlistedBundleIds: values.bundleIds .split(/,| /) .filter((d) => d.length > 0), - permissions: [values.permissions], }); })} - className="flex flex-col gap-2 lg:flex-row" + className="flex flex-col gap-6" > -
+
( - + + App Name ( - + + Domains - <> - - - {form.formState.errors.domains?.message ?? - "Space or comma-separated list of regex domains (e.g. *.example.com)"} - - + + + + Space or comma-separated list of regex domains (e.g. + *.example.com) + )} /> @@ -118,75 +109,24 @@ export function AddPartnerForm({ ecosystem }: { ecosystem: Ecosystem }) { name="bundleIds" defaultValue="" // Note: you *must* provide a default value here or the field won't reset render={({ field }) => ( - + + Bundle ID - <> - - - {form.formState.errors.bundleIds?.message ?? - "Space or comma-separated list of bundle IDs"} - - + - - - )} - /> - ( - - + + Space or comma-separated list of bundle IDs + + + )} />
- diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-form.client.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-form.client.tsx index cb7f59e1991..f6cb23a77bc 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-form.client.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-form.client.tsx @@ -1,4 +1,5 @@ "use client"; +import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button } from "@/components/ui/button"; import { Form, @@ -6,20 +7,12 @@ import { FormDescription, FormField, FormItem, + FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { ToolTipLabel } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; import { zodResolver } from "@hookform/resolvers/zod"; -import { Loader2 } from "lucide-react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import type { z } from "zod"; @@ -38,7 +31,6 @@ export function UpdatePartnerForm({ name: partner.name, domains: partner.allowlistedDomains.join(","), bundleIds: partner.allowlistedBundleIds.join(","), - permissions: partner.permissions[0], }, }); @@ -70,18 +62,18 @@ export function UpdatePartnerForm({ allowlistedBundleIds: values.bundleIds .split(/,| /) .filter((d) => d.length > 0), - permissions: [values.permissions], }); })} className="flex flex-col gap-4" > -
+
( + Name ( + Domains - <> - - - {form.formState.errors.domains?.message ?? - "Space or comma-separated list of regex domains (e.g. *.example.com)"} - - + + + {form.formState.errors.domains?.message ?? + "Space or comma-separated list of regex domains (e.g. *.example.com)"} + )} /> @@ -132,75 +123,32 @@ export function UpdatePartnerForm({ defaultValue="" // Note: you *must* provide a default value here or the field won't reset render={({ field }) => ( + Bundle ID - <> - - - {form.formState.errors.bundleIds?.message ?? - "Space or comma-separated list of bundle IDs"} - - + - - - )} - /> - ( - - + {form.formState.errors.bundleIds?.message ?? + "Space or comma-separated list of bundle IDs"} + + )} />
+ diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-modal.client.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-modal.client.tsx index f58c8213ac6..17ec8494123 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-modal.client.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/client/update-partner-modal.client.tsx @@ -20,11 +20,8 @@ export function UpdatePartnerModal({ return ( {children} - - + + Update {partner.name} -
-

- Ecosystem partners -

-

- Configure apps that can use your wallet. Creating a partner will - generate a unique partner ID that can access your ecosystem. You will - need to generate at least one partner ID for use in your own app. -

+
+
+
+

+ Ecosystem partners +

+

+ Configure apps that can use your wallet. Creating a partner will + generate a unique partner ID that can access your ecosystem.
{" "} + You will need to generate at least one partner ID for use in your + own app. +

+
+ +
-
); diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx index d884c31d0d0..3b864daaddf 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/components/server/partners-table.tsx @@ -44,9 +44,7 @@ export function PartnersTable({ ecosystem }: { ecosystem: Ecosystem }) { Domains Bundle ID Partner ID - - Wallet Prompts - + {/* Empty space for delete button */} @@ -108,11 +106,7 @@ function PartnerRow(props: {
- - {props.partner.permissions.includes("PROMPT_USER_V1") - ? "Prompt user" - : "Never prompt"} - +
d.length > 0) .join(","), ), - permissions: z.custom( - (value) => isValidPermission(value), - { - message: "Invalid permissions setting", - }, - ), }); diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-add-partner.ts b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-add-partner.ts index aacdf298c80..509c2503f29 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-add-partner.ts +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-add-partner.ts @@ -11,7 +11,6 @@ type AddPartnerParams = { name: string; allowlistedDomains: string[]; allowlistedBundleIds: string[]; - permissions: ["PROMPT_USER_V1" | "FULL_CONTROL_V1"]; }; export function useAddPartner( @@ -44,7 +43,8 @@ export function useAddPartner( name: params.name, allowlistedDomains: params.allowlistedDomains, allowlistedBundleIds: params.allowlistedBundleIds, - permissions: params.permissions, + // TODO - remove the requirement for permissions in API endpoint + permissions: ["FULL_CONTROL_V1"], }), }, ); diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-update-partner.ts b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-update-partner.ts index d74750501ef..74f47e80886 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-update-partner.ts +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/hooks/use-update-partner.ts @@ -12,7 +12,6 @@ type UpdatePartnerParams = { name: string; allowlistedDomains: string[]; allowlistedBundleIds: string[]; - permissions: ["PROMPT_USER_V1" | "FULL_CONTROL_V1"]; }; export function useUpdatePartner( @@ -45,7 +44,6 @@ export function useUpdatePartner( name: params.name, allowlistedDomains: params.allowlistedDomains, allowlistedBundleIds: params.allowlistedBundleIds, - permissions: params.permissions, }), }, ); diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/utils.ts b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/utils.ts deleted file mode 100644 index 435e219604a..00000000000 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/[slug]/(active)/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { PartnerPermission } from "../../types.ts"; - -export const isValidPermission = ( - permission: string, -): permission is PartnerPermission => - ["FULL_CONTROL_V1", "PROMPT_USER_V1"].includes(permission); diff --git a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/types.ts b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/types.ts index d9e8ce55be2..e72a222a4fa 100644 --- a/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/types.ts +++ b/apps/dashboard/src/app/(dashboard)/dashboard/connect/ecosystem/types.ts @@ -11,7 +11,7 @@ export type Ecosystem = { updatedAt: string; }; -export type PartnerPermission = "PROMPT_USER_V1" | "FULL_CONTROL_V1"; +type PartnerPermission = "PROMPT_USER_V1" | "FULL_CONTROL_V1"; export type Partner = { id: string; name: string; diff --git a/apps/dashboard/src/app/(dashboard)/layout.tsx b/apps/dashboard/src/app/(dashboard)/layout.tsx index 5e401b5ce1d..d228dd56ba2 100644 --- a/apps/dashboard/src/app/(dashboard)/layout.tsx +++ b/apps/dashboard/src/app/(dashboard)/layout.tsx @@ -5,7 +5,7 @@ import { ErrorProvider } from "../../contexts/error-handler"; export default function DashboardLayout(props: { children: React.ReactNode }) { return ( -
+
{props.children}