diff --git a/.env b/.env deleted file mode 100644 index 572274e..0000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -NEXT_PUBLIC_NETWORK=testnet \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..4d3c330 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +NEXT_PUBLIC_NETWORK=NETWORK +NEXT_PUBLIC_AUTH_URL=AUTH_ENDPOINT \ No newline at end of file diff --git a/components/profile/menu-list.tsx b/components/profile/menu-list.tsx index 7798888..f4d8d47 100644 --- a/components/profile/menu-list.tsx +++ b/components/profile/menu-list.tsx @@ -2,6 +2,9 @@ import { useDisconnectWallet } from '@mysten/dapp-kit'; import { Div } from '@stylin.js/elements'; import { not } from 'ramda'; import { FC, useState } from 'react'; +import { useLocalStorage } from 'usehooks-ts'; + +import { MEMEZ_FUN_TOKEN_AUTH } from '@/constants'; import { DocIDSVG, @@ -20,9 +23,24 @@ import RPCCollapseMenuInfo from './rpc-collapse-info'; const MenuList: FC = () => { const [isActiveNSFE, setIsActiveNSFE] = useState(false); const [isRPCMenuOpen, setIsRPCMenuOpen] = useState(false); + const { mutate: disconnectWallet } = useDisconnectWallet(); const [isAccountMenuOpen, setIsAccountMenuOpen] = useState(false); const [isExplorerMenuOpen, setIsExplorerMenuOpen] = useState(false); - const { mutate: disconnectWallet } = useDisconnectWallet(); + + const [, setSignedPM] = useLocalStorage<{ + signature: string; + message: string; + cookies?: unknown; + }>(MEMEZ_FUN_TOKEN_AUTH, { signature: '', message: '' }); + + const handleDisconnectWallet = async () => { + setSignedPM({ signature: '', message: '' }); + await fetch(`${process.env.NEXT_PUBLIC_BASE_URL!}/auth/sign-out`, { + method: 'DELETE', + credentials: 'include', + }); + disconnectWallet(); + }; return (
@@ -58,7 +76,7 @@ const MenuList: FC = () => { Icon={LogoutSVG} title="Disconnect" color="#E85965" - onClick={() => disconnectWallet()} + onClick={handleDisconnectWallet} />
); diff --git a/components/profile/profile-info.tsx b/components/profile/profile-info.tsx index 5743347..6d1678b 100644 --- a/components/profile/profile-info.tsx +++ b/components/profile/profile-info.tsx @@ -12,14 +12,16 @@ import { FixedPointMath } from '@/lib/entities/fixed-point-math'; import { BannerProfileSVG, CopySVG } from '../svg'; const ProfileInfo: FC = () => { - const currentAccount = useCurrentAccount(); const { push } = useRouter(); + const currentAccount = useCurrentAccount(); const { balance } = useCoinBalance('0x2::sui::SUI', currentAccount?.address); const copyAddress = () => { toast.success('Copied!'); - window.navigator.clipboard.writeText('0x2::sui::SUI'); + window.navigator.clipboard.writeText( + formatAddress(currentAccount?.address || '') + ); }; return ( @@ -67,10 +69,10 @@ const ProfileInfo: FC = () => { flexDirection="column" > - Name + name - {formatAddress(currentAccount?.address || '')} + username
{ const wallets = useWallets(); - const { push } = useRouter(); const { mutateAsync } = useConnectWallet(); const { dialog, handleClose } = useDialog(); @@ -19,11 +16,6 @@ const ConnectModal: FC = () => { await mutateAsync({ wallet }); }; - const handleSignInNavigation = () => { - push(RoutesEnum.SignIn); - handleClose(); - }; - const handleConnect = (wallet: WalletWithRequiredFeatures) => { dialog.promise(connectWallet(wallet), { success: () => ({ @@ -83,60 +75,15 @@ const ConnectModal: FC = () => { width={['100vw', '33.25rem']} borderRadius={['1rem 1rem 0 0', '1rem']} > -

- {wallets ? 'Select Your Wallet' : 'Go to sign in'} -

- {wallets ? ( - - ) : ( -
); }; diff --git a/components/wallet-button/index.tsx b/components/wallet-button/index.tsx index 1390f85..6d99a11 100644 --- a/components/wallet-button/index.tsx +++ b/components/wallet-button/index.tsx @@ -1,16 +1,137 @@ -import { useCurrentAccount } from '@mysten/dapp-kit'; -import { Button, Div } from '@stylin.js/elements'; -import { useRouter } from 'next/router'; -import { FC } from 'react'; +import { + useCurrentAccount, + useDisconnectWallet, + useSignPersonalMessage, +} from '@mysten/dapp-kit'; +import { Button, Div, Img } from '@stylin.js/elements'; +import { not } from 'ramda'; +import { FC, useEffect, useState } from 'react'; +import { useLocalStorage } from 'usehooks-ts'; +import { v4 } from 'uuid'; -import { WalletSVG } from '@/components/svg'; -import { Routes, RoutesEnum } from '@/constants'; +import { LoaderSVG, MemeZLogoSVG, WalletSVG } from '@/components/svg'; +import { MEMEZ_FUN_TOKEN_AUTH } from '@/constants'; +import { useDialog } from '@/hooks/use-dialog'; import ConnectedModal from './connected-modal'; +import { useConnectModal } from './wallet-button.hook'; const WalletButton: FC = () => { + const handleOpenConnectModal = useConnectModal(); const currentAccount = useCurrentAccount(); - const { push } = useRouter(); + const { mutate: disconnectWallet } = useDisconnectWallet(); + const [signing, setSigning] = useState(false); + const { dialog, handleClose } = useDialog(); + const { mutate: signPersonalMessage } = useSignPersonalMessage(); + const [signedPM, setSignedPM] = useLocalStorage<{ + signature: string; + message: string; + }>(MEMEZ_FUN_TOKEN_AUTH, { signature: '', message: '' }); + + const handleConnectWallet = () => { + handleOpenConnectModal(); + }; + + useEffect(() => { + if (signedPM.signature || signedPM.message || !currentAccount) return; + + const newMessage = v4(); + + signPersonalMessage( + { + message: new TextEncoder().encode(newMessage), + }, + { + onSuccess: (result) => { + setSigning(not); + setSignedPM({ + signature: result.signature, + message: newMessage, + }); + }, + onError: () => disconnectWallet(), + } + ); + }, [currentAccount]); + + useEffect(() => { + if (!signedPM.signature || !signedPM.message || !currentAccount || !signing) + return; + const signIn = async () => { + await fetch(`${process.env.NEXT_PUBLIC_BASE_URL!}/auth/sign-in`, { + method: 'POST', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + message: signedPM.message, + signature: signedPM.signature, + address: currentAccount.address, + }), + }) + .then(async (res) => { + if (!res.ok) { + disconnectWallet(); + throw new Error('signin error'); + } + + console.log(res.headers.getSetCookie(), '>>>res'); + }) + .catch(() => { + disconnectWallet(); + setSignedPM({ + signature: '', + message: '', + }); + }); + setSigning(not); + }; + + dialog.promise(signIn(), { + success: () => ({ + timeout: 10000, + title: 'Sign in!', + button: { label: 'Continue browsing', onClick: handleClose }, + message: 'Signin successfully', + Icon: ( +
+ +
+ ), + }), + loading: () => ({ + Icon: , + title: 'Signing...', + message: 'Hang tight! Signing. Please wait', + }), + error: (e) => ({ + title: 'Oops! You could not Connect!', + button: { label: 'Try again', onClick: () => signIn() }, + message: + e.message || + 'Sigin-in failed. Try to refresh the page, double-check your inputs, or reconnect your wallet.', + ghostButton: { + label: 'Do not want to connect my wallet', + onClick: handleClose, + }, + Icon: ( + Error + ), + }), + }); + }, [signing]); if (currentAccount) return ; @@ -36,7 +157,7 @@ const WalletButton: FC = () => { color: '#0a090d', backgroundColor: '#F6C853', }} - onClick={() => push(Routes[RoutesEnum.SignIn])} + onClick={handleConnectWallet} >
diff --git a/constants/index.ts b/constants/index.ts index dadc0b8..4b589b5 100644 --- a/constants/index.ts +++ b/constants/index.ts @@ -3,3 +3,5 @@ export * from './math'; export * from './network'; export * from './routes'; export const DROPDOWN_DATA = ['Days', 'Weeks', 'Months']; + +export const MEMEZ_FUN_TOKEN_AUTH = 'MEMEZ_FUN_TOKEN_AUTH'; diff --git a/constants/routes.ts b/constants/routes.ts index 8f88f23..75a9221 100644 --- a/constants/routes.ts +++ b/constants/routes.ts @@ -1,7 +1,6 @@ export enum RoutesEnum { Home = 'home', CreateCoin = 'create-coin', - SignIn = 'sign-in', CreateProfile = 'create-profile', Profile = 'profile', } @@ -10,6 +9,5 @@ export const Routes: Record = { [RoutesEnum.CreateProfile]: '/create-profile', [RoutesEnum.Profile]: '/profile', [RoutesEnum.CreateCoin]: '/create-coin', - [RoutesEnum.SignIn]: '/sign-in', [RoutesEnum.Home]: '/', }; diff --git a/hooks/use-cookie/index.ts b/hooks/use-cookie/index.ts new file mode 100644 index 0000000..1554617 --- /dev/null +++ b/hooks/use-cookie/index.ts @@ -0,0 +1,36 @@ +import { useState } from 'react'; +const setCookie = (name: string, value: string, days: number) => { + const expires = new Date(); + expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000); + document.cookie = `${name}=${value}; expires=${expires.toUTCString()}; path=/`; +}; + +const getCookie = (name: string): string | null => { + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) return parts.pop()?.split(';').shift() || null; + return null; +}; + +const deleteCookie = (name: string) => { + document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`; +}; + +export const useCookie = (name: string) => { + const [cookie, setCookieState] = useState(() => + getCookie(name) + ); + + const set = (value: string, days: number = 365) => { + setCookie(name, value, days); + setCookieState(value); + }; + + const remove = () => { + deleteCookie(name); + setCookieState(null); + console.log('removed'); + }; + + return { cookie, set, remove } as const; +}; diff --git a/interface/index.ts b/interface/index.ts index ed6ad76..1f1cd64 100644 --- a/interface/index.ts +++ b/interface/index.ts @@ -11,3 +11,13 @@ export interface TimedSuiTransactionBlockResponse extends SuiTransactionBlockResponse { time: number; } + +export interface CreateProfileFormProps { + email: string; + imageUrl: string; + username: string; + firstName: string; + lastName: string; + password: string; + description: string; +} diff --git a/package.json b/package.json index d3f5a9f..de4d1ac 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@stylin.js/react": "^1.1.1", "@tanstack/react-query": "^5.67.3", "@types/ramda": "^0.30.2", + "axios": "^1.8.4", "bignumber.js": "^9.1.2", "colorthief": "^2.6.0", "decimal.js-light": "^2.5.1", @@ -71,5 +72,6 @@ "engines": { "node": ">=18.17" }, + "proxy": "https://apimemezfun-staging.up.railway.app", "packageManager": "pnpm@9.1.0+sha512.67f5879916a9293e5cf059c23853d571beaf4f753c707f40cb22bed5fb1578c6aad3b6c4107ccb3ba0b35be003eb621a16471ac836c87beb53f9d54bb4612724" } diff --git a/pages/_document.tsx b/pages/_document.tsx index 9a68613..1bbfe76 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -2,7 +2,12 @@ import { Head, Html, Main, NextScript } from 'next/document'; const Document = () => ( - + + +
diff --git a/pages/create-profile.tsx b/pages/create-profile.tsx deleted file mode 100644 index 4dc3762..0000000 --- a/pages/create-profile.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { yupResolver } from '@hookform/resolvers/yup'; -import { NextPage } from 'next'; -import { FormProvider, useForm } from 'react-hook-form'; - -import { SEO } from '@/components'; -import CreateProfile from '@/views/create-profile'; -import { CreateProfileFormProps } from '@/views/create-profile/create-profile.types'; -import { CreateProfileValidationSchema } from '@/views/create-profile/create-profile-validation'; - -const CreateProfilePage: NextPage = () => { - const form = useForm({ - mode: 'onBlur', - reValidateMode: 'onBlur', - resolver: yupResolver(CreateProfileValidationSchema), - defaultValues: { - email: '', - firstName: '', - lastName: '', - username: '', - password: '', - imageUrl: '', - description: '', - }, - }); - - return ( - - - - - ); -}; - -export default CreateProfilePage; diff --git a/pages/profile/create.tsx b/pages/profile/create.tsx deleted file mode 100644 index 72eff02..0000000 --- a/pages/profile/create.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { yupResolver } from '@hookform/resolvers/yup'; -import { NextPage } from 'next'; -import { FormProvider, useForm } from 'react-hook-form'; - -import { SEO } from '@/components'; -import CreateProfile from '@/views/create-profile'; -import { CreateProfileFormProps } from '@/views/create-profile/create-profile.types'; -import { CreateProfileValidationSchema } from '@/views/create-profile/create-profile-validation'; - -const CreateProfilePage: NextPage = () => { - const form = useForm({ - mode: 'onBlur', - reValidateMode: 'onBlur', - resolver: yupResolver(CreateProfileValidationSchema), - defaultValues: {}, - }); - - return ( - - - - - ); -}; - -export default CreateProfilePage; diff --git a/pages/sign-in.tsx b/pages/sign-in.tsx deleted file mode 100644 index 92cfe50..0000000 --- a/pages/sign-in.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { yupResolver } from '@hookform/resolvers/yup'; -import { NextPage } from 'next'; -import { FormProvider, useForm } from 'react-hook-form'; - -import { SEO } from '@/components'; -import SignIn from '@/views/sign-in'; -import { SignInFormProps } from '@/views/sign-in/sign-in.types'; -import { SignInValidationSchema } from '@/views/sign-in/sign-in-validations'; - -const SignInPage: NextPage = () => { - const form = useForm({ - mode: 'onBlur', - reValidateMode: 'onBlur', - resolver: yupResolver(SignInValidationSchema), - defaultValues: { - username: '', - password: '', - }, - }); - - return ( - - - - - ); -}; - -export default SignInPage; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1603145..ea2f463 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: version: 11.14.0(@types/react@18.3.18)(react@18.3.1) '@hookform/resolvers': specifier: ^4.1.3 - version: 4.1.3(react-hook-form@7.54.2) + version: 4.1.3(react-hook-form@7.54.2(react@18.3.1)) '@mysten/dapp-kit': specifier: ^0.14.53 - version: 0.14.53(@tanstack/react-query@5.68.0)(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)(typescript@5.8.2) + version: 0.14.53(@tanstack/react-query@5.68.0(react@18.3.1))(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) '@mysten/sui': specifier: ^1.24.0 version: 1.24.0(typescript@5.8.2) @@ -35,6 +35,9 @@ importers: '@types/ramda': specifier: ^0.30.2 version: 0.30.2 + axios: + specifier: ^1.8.4 + version: 1.8.4 bignumber.js: specifier: ^9.1.2 version: 9.1.2 @@ -46,13 +49,13 @@ importers: version: 2.5.1 framer-motion: specifier: ^12.5.0 - version: 12.5.0(react-dom@18.3.1)(react@18.3.1) + version: 12.5.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) motion: specifier: ^12.5.0 - version: 12.5.0(react-dom@18.3.1)(react@18.3.1) + version: 12.5.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: 14.0.3 - version: 14.0.3(react-dom@18.3.1)(react@18.3.1) + version: 14.0.3(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) prettier: specifier: ^3.1.0 version: 3.5.3 @@ -64,7 +67,7 @@ importers: version: 18.3.1 react-countdown: specifier: ^2.3.6 - version: 2.3.6(react-dom@18.3.1)(react@18.3.1) + version: 2.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) @@ -73,13 +76,13 @@ importers: version: 7.54.2(react@18.3.1) react-hot-toast: specifier: ^2.5.2 - version: 2.5.2(react-dom@18.3.1)(react@18.3.1) + version: 2.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-image-file-resizer: specifier: ^0.4.8 version: 0.4.8 react-range: specifier: ^1.10.0 - version: 1.10.0(react-dom@18.3.1)(react@18.3.1) + version: 1.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-responsive-carousel: specifier: ^3.2.23 version: 3.2.23 @@ -103,7 +106,7 @@ importers: version: 1.4.0 zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@18.3.18)(react@18.3.1) + version: 5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) devDependencies: '@emotion/eslint-plugin': specifier: ^11.11.0 @@ -119,7 +122,7 @@ importers: version: 18.3.5(@types/react@18.3.18) '@typescript-eslint/eslint-plugin': specifier: ^6.12.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.8.2) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) '@typescript-eslint/parser': specifier: ^6.12.0 version: 6.21.0(eslint@8.57.1)(typescript@5.8.2) @@ -140,16 +143,16 @@ importers: version: 9.1.0(eslint@8.57.1) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.31.0) + version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)) eslint-plugin-import: specifier: ^2.29.0 - version: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) + version: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) eslint-plugin-jsx-a11y: specifier: ^6.8.0 version: 6.10.2(eslint@8.57.1) eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.2.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.5.3) + version: 5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.3) eslint-plugin-react: specifier: ^7.33.2 version: 7.37.4(eslint@8.57.1) @@ -161,7 +164,7 @@ importers: version: 10.0.0(eslint@8.57.1) eslint-plugin-unused-imports: specifier: ^3.0.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1) + version: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1) husky: specifier: ^8.0.0 version: 8.0.3 @@ -1262,6 +1265,9 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1270,6 +1276,9 @@ packages: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} + axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -1381,6 +1390,10 @@ packages: colorthief@2.6.0: resolution: {integrity: sha512-yL3B7laeOr4kH9XasFF5rl+9Taz+Pmt/CRbaTI6XepZFyQvk4K/abaGKIAsngVpxKkgFeoJ2IwdRpS228icrig==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -1531,6 +1544,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -1862,10 +1879,23 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + framer-motion@12.5.0: resolution: {integrity: sha512-buPlioFbH9/W7rDzYh1C09AuZHAk2D1xTA1BlounJ2Rb9aRg84OXexP0GLd+R83v0khURdMX7b5MKnGTaSg5iA==} peerDependencies: @@ -2414,6 +2444,14 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -2684,6 +2722,9 @@ packages: property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3381,7 +3422,7 @@ packages: snapshots: '@0no-co/graphql.web@1.1.2(graphql@16.10.0)': - dependencies: + optionalDependencies: graphql: 16.10.0 '@0no-co/graphqlsp@1.12.16(graphql@16.10.0)(typescript@5.8.2)': @@ -3503,7 +3544,7 @@ snapshots: '@commitlint/types': 18.6.1 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.8.2) - cosmiconfig-typescript-loader: 5.1.0(@types/node@20.17.24)(cosmiconfig@8.3.6)(typescript@5.8.2) + cosmiconfig-typescript-loader: 5.1.0(@types/node@20.17.24)(cosmiconfig@8.3.6(typescript@5.8.2))(typescript@5.8.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -3612,9 +3653,10 @@ snapshots: '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 - '@types/react': 18.3.18 hoist-non-react-statics: 3.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 transitivePeerDependencies: - supports-color @@ -3628,7 +3670,7 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0)(@types/react@18.3.18)(react@18.3.1)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.10 '@emotion/babel-plugin': 11.13.5 @@ -3637,8 +3679,9 @@ snapshots: '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) '@emotion/utils': 1.4.2 - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 transitivePeerDependencies: - supports-color @@ -3684,7 +3727,7 @@ snapshots: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.13 react: 18.3.1 @@ -3703,7 +3746,7 @@ snapshots: dependencies: '@gitmoji/gitmoji-regex': 1.0.0 - '@gql.tada/cli-utils@1.6.3(@0no-co/graphqlsp@1.12.16)(graphql@16.10.0)(typescript@5.8.2)': + '@gql.tada/cli-utils@1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.10.0)(typescript@5.8.2))(graphql@16.10.0)(typescript@5.8.2)': dependencies: '@0no-co/graphqlsp': 1.12.16(graphql@16.10.0)(typescript@5.8.2) '@gql.tada/internal': 1.0.8(graphql@16.10.0)(typescript@5.8.2) @@ -3720,7 +3763,7 @@ snapshots: dependencies: graphql: 16.10.0 - '@hookform/resolvers@4.1.3(react-hook-form@7.54.2)': + '@hookform/resolvers@4.1.3(react-hook-form@7.54.2(react@18.3.1))': dependencies: '@standard-schema/utils': 0.3.0 react-hook-form: 7.54.2(react@18.3.1) @@ -3835,18 +3878,18 @@ snapshots: dependencies: '@scure/base': 1.2.4 - '@mysten/dapp-kit@0.14.53(@tanstack/react-query@5.68.0)(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)(typescript@5.8.2)': + '@mysten/dapp-kit@0.14.53(@tanstack/react-query@5.68.0(react@18.3.1))(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2)': dependencies: '@mysten/sui': 1.24.0(typescript@5.8.2) '@mysten/wallet-standard': 0.13.29(typescript@5.8.2) '@mysten/zksend': 0.12.19(typescript@5.8.2) - '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-dropdown-menu': 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dropdown-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@tanstack/react-query': 5.68.0(react@18.3.1) - '@vanilla-extract/css': 1.17.1 + '@vanilla-extract/css': 1.17.1(babel-plugin-macros@3.1.0) '@vanilla-extract/dynamic': 2.1.2 - '@vanilla-extract/recipes': 0.5.5(@vanilla-extract/css@1.17.1) + '@vanilla-extract/recipes': 0.5.5(@vanilla-extract/css@1.17.1(babel-plugin-macros@3.1.0)) clsx: 2.1.1 react: 18.3.1 zustand: 4.5.6(@types/react@18.3.18)(react@18.3.1) @@ -3956,231 +3999,255 @@ snapshots: '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(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.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-context@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-direction@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(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.18)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(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.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(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.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-id@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 - '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(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.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(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.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) - '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(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.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) '@radix-ui/react-slot@1.1.2(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/react-use-size@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@types/react': 18.3.18 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 '@radix-ui/rect@1.1.0': {} @@ -4203,7 +4270,7 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@stylin.js/core@1.0.2(@emotion/react@11.14.0)': + '@stylin.js/core@1.0.2(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))': dependencies: '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) @@ -4218,8 +4285,8 @@ snapshots: '@stylin.js/react@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0)(@types/react@18.3.18)(react@18.3.1) - '@stylin.js/core': 1.0.2(@emotion/react@11.14.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) + '@stylin.js/core': 1.0.2(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)) transitivePeerDependencies: - '@types/react' - react @@ -4271,7 +4338,7 @@ snapshots: '@types/semver@7.5.8': {} - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) @@ -4286,6 +4353,7 @@ snapshots: natural-compare: 1.4.0 semver: 7.7.1 ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -4298,6 +4366,7 @@ snapshots: '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.0 eslint: 8.57.1 + optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -4319,6 +4388,7 @@ snapshots: debug: 4.4.0 eslint: 8.57.1 ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -4336,6 +4406,7 @@ snapshots: is-glob: 4.0.3 semver: 7.7.1 tsutils: 3.21.0(typescript@5.8.2) + optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -4350,6 +4421,7 @@ snapshots: minimatch: 9.0.3 semver: 7.7.1 ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -4395,14 +4467,14 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vanilla-extract/css@1.17.1': + '@vanilla-extract/css@1.17.1(babel-plugin-macros@3.1.0)': dependencies: '@emotion/hash': 0.9.2 '@vanilla-extract/private': 1.0.6 css-what: 6.1.0 cssesc: 3.0.0 csstype: 3.1.3 - dedent: 1.5.3 + dedent: 1.5.3(babel-plugin-macros@3.1.0) deep-object-diff: 1.1.9 deepmerge: 4.3.1 lru-cache: 10.4.3 @@ -4418,9 +4490,9 @@ snapshots: '@vanilla-extract/private@1.0.6': {} - '@vanilla-extract/recipes@0.5.5(@vanilla-extract/css@1.17.1)': + '@vanilla-extract/recipes@0.5.5(@vanilla-extract/css@1.17.1(babel-plugin-macros@3.1.0))': dependencies: - '@vanilla-extract/css': 1.17.1 + '@vanilla-extract/css': 1.17.1(babel-plugin-macros@3.1.0) '@wallet-standard/app@1.1.0': dependencies: @@ -4574,12 +4646,22 @@ snapshots: async-function@1.0.0: {} + asynckit@0.4.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 axe-core@4.10.3: {} + axios@1.8.4: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axobject-query@4.1.0: {} babel-plugin-macros@3.1.0: @@ -4698,6 +4780,10 @@ snapshots: ndarray-pixels: 4.1.0 sharp: 0.33.5 + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commander@12.1.0: {} commander@13.1.0: {} @@ -4743,7 +4829,7 @@ snapshots: convert-source-map@1.9.0: {} - cosmiconfig-typescript-loader@5.1.0(@types/node@20.17.24)(cosmiconfig@8.3.6)(typescript@5.8.2): + cosmiconfig-typescript-loader@5.1.0(@types/node@20.17.24)(cosmiconfig@8.3.6(typescript@5.8.2))(typescript@5.8.2): dependencies: '@types/node': 20.17.24 cosmiconfig: 8.3.6(typescript@5.8.2) @@ -4764,6 +4850,7 @@ snapshots: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + optionalDependencies: typescript: 5.8.2 cross-spawn@7.0.6: @@ -4821,7 +4908,9 @@ snapshots: decimal.js-light@2.5.1: {} - dedent@1.5.3: {} + dedent@1.5.3(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 deep-is@0.1.4: {} @@ -4841,6 +4930,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delayed-stream@1.0.0: {} + dequal@2.0.3: {} detect-libc@2.0.3: {} @@ -4996,10 +5087,11 @@ snapshots: eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0)(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.4(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -5010,9 +5102,9 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -5028,28 +5120,29 @@ snapshots: debug: 4.4.0 enhanced-resolve: 5.18.1 eslint: 8.57.1 - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) get-tsconfig: 4.10.0 is-bun-module: 1.3.0 stable-hash: 0.0.4 tinyglobby: 0.2.12 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.8.7(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.3 @@ -5058,7 +5151,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.7(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -5069,6 +5162,8 @@ snapshots: semver: 6.3.1 string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -5093,13 +5188,14 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.5.3): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.3): dependencies: eslint: 8.57.1 - eslint-config-prettier: 9.1.0(eslint@8.57.1) prettier: 3.5.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.1) eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: @@ -5131,11 +5227,12 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1): + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1): dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.8.2) eslint: 8.57.1 eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) eslint-rule-composer@0.3.0: {} @@ -5267,7 +5364,7 @@ snapshots: reusify: 1.1.0 fdir@6.4.3(picomatch@4.0.2): - dependencies: + optionalDependencies: picomatch: 4.0.2 file-entry-cache@6.0.1: @@ -5304,17 +5401,28 @@ snapshots: flatted@3.3.3: {} + follow-redirects@1.15.9: {} + for-each@0.3.5: dependencies: is-callable: 1.2.7 - framer-motion@12.5.0(react-dom@18.3.1)(react@18.3.1): + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + framer-motion@12.5.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 12.5.0 motion-utils: 12.5.0 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.8.1 fs.realpath@1.0.0: {} @@ -5441,7 +5549,7 @@ snapshots: dependencies: '@0no-co/graphql.web': 1.1.2(graphql@16.10.0) '@0no-co/graphqlsp': 1.12.16(graphql@16.10.0)(typescript@5.8.2) - '@gql.tada/cli-utils': 1.6.3(@0no-co/graphqlsp@1.12.16)(graphql@16.10.0)(typescript@5.8.2) + '@gql.tada/cli-utils': 1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.10.0)(typescript@5.8.2))(graphql@16.10.0)(typescript@5.8.2) '@gql.tada/internal': 1.0.8(graphql@16.10.0)(typescript@5.8.2) typescript: 5.8.2 transitivePeerDependencies: @@ -5838,6 +5946,12 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mimic-fn@2.1.0: {} mimic-fn@4.0.0: {} @@ -5872,12 +5986,14 @@ snapshots: motion-utils@12.5.0: {} - motion@12.5.0(react-dom@18.3.1)(react@18.3.1): + motion@12.5.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - framer-motion: 12.5.0(react-dom@18.3.1)(react@18.3.1) + framer-motion: 12.5.0(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.3.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.8.1 ms@2.1.3: {} @@ -5903,7 +6019,7 @@ snapshots: iota-array: 1.0.0 is-buffer: 1.1.6 - next@14.0.3(react-dom@18.3.1)(react@18.3.1): + next@14.0.3(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.0.3 '@swc/helpers': 0.5.2 @@ -5912,7 +6028,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(react@18.3.1) + styled-jsx: 5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.3 @@ -6101,6 +6217,8 @@ snapshots: property-expr@2.0.6: {} + proxy-from-env@1.1.0: {} + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -6109,7 +6227,7 @@ snapshots: ramda@0.30.1: {} - react-countdown@2.3.6(react-dom@18.3.1)(react@18.3.1): + react-countdown@2.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: prop-types: 15.8.1 react: 18.3.1 @@ -6129,7 +6247,7 @@ snapshots: dependencies: react: 18.3.1 - react-hot-toast@2.5.2(react-dom@18.3.1)(react@18.3.1): + react-hot-toast@2.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: csstype: 3.1.3 goober: 2.1.16(csstype@3.1.3) @@ -6140,27 +6258,29 @@ snapshots: react-is@16.13.1: {} - react-range@1.10.0(react-dom@18.3.1)(react@18.3.1): + react-range@1.10.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) react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 react-remove-scroll@2.6.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) tslib: 2.8.1 use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 react-responsive-carousel@3.2.23: dependencies: @@ -6170,10 +6290,11 @@ snapshots: react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 react@18.3.1: dependencies: @@ -6538,10 +6659,12 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 - styled-jsx@5.1.1(react@18.3.1): + styled-jsx@5.1.1(babel-plugin-macros@3.1.0)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 + optionalDependencies: + babel-plugin-macros: 3.1.0 stylis@4.2.0: {} @@ -6690,16 +6813,18 @@ snapshots: use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 react: 18.3.1 tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): dependencies: - '@types/react': 18.3.18 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.18 use-sync-external-store@1.4.0(react@18.3.1): dependencies: @@ -6820,11 +6945,13 @@ snapshots: zustand@4.5.6(@types/react@18.3.18)(react@18.3.1): dependencies: + use-sync-external-store: 1.4.0(react@18.3.1) + optionalDependencies: '@types/react': 18.3.18 react: 18.3.1 - use-sync-external-store: 1.4.0(react@18.3.1) - zustand@5.0.3(@types/react@18.3.18)(react@18.3.1): - dependencies: + zustand@5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + optionalDependencies: '@types/react': 18.3.18 react: 18.3.1 + use-sync-external-store: 1.4.0(react@18.3.1) diff --git a/views/create-profile/create-profile-button.tsx b/views/create-profile/create-profile-button.tsx deleted file mode 100644 index 742e08f..0000000 --- a/views/create-profile/create-profile-button.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { Button, Div, Span } from '@stylin.js/elements'; -import { useRouter } from 'next/router'; -import { FC } from 'react'; -import { useFormContext } from 'react-hook-form'; - -import DialogCountdown from '@/components/dialog/dialog-countdown'; -import { LoaderSVG } from '@/components/svg'; -import { Routes, RoutesEnum } from '@/constants'; -import { useDialog } from '@/hooks/use-dialog'; - -import { CreateProfileFormProps } from './create-profile.types'; - -const CreateProfileButton: FC = () => { - const { trigger } = useFormContext(); - - const { dialog, handleClose } = useDialog(); - const { push } = useRouter(); - const handleCreateProfile = async () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - const isSuccess = Math.random() > 0.5; - if (isSuccess) { - handleClose(); - resolve('success'); - return; - } - reject('Error'); - }, 1000); - }); - }; - - const handleAuth = async () => { - const isValid = await trigger(); - - if (!isValid) return; - - await dialog.promise(handleCreateProfile(), { - success: () => ({ - title: 'Account created', - message: 'Account successfully created', - button: ( - - ), - ghostButton: ( - - ), - }), - loading: () => ({ - Icon: , - title: 'Creating...', - message: 'Creating an account...', - }), - error: (e) => ({ - title: 'Oops! You can not create an account!', - button: { label: 'Try again', onClick: handleClose }, - message: ( - e.message || 'Make sure you fill every field correctly and try again.' - ).replace('Invariant failed: ', ''), - ghostButton: { - label: 'Do not want to try again!', - onClick: handleClose, - }, - }), - }); - }; - - return ( -
- -
- ); -}; - -export default CreateProfileButton; diff --git a/views/create-profile/create-profile-validation.ts b/views/create-profile/create-profile-validation.ts deleted file mode 100644 index 0654f75..0000000 --- a/views/create-profile/create-profile-validation.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as yup from 'yup'; - -export const CreateProfileValidationSchema = yup.object({ - firstName: yup.string().required('First name is required'), - lastName: yup.string().required('Last name is required'), - username: yup.string().required('Username is required'), - email: yup - .string() - .email('Invalid email format') - .required('Email is required'), - imageUrl: yup.string().required('Avatar is required'), - password: yup.string().required('Password is required'), - description: yup - .string() - .min(80, 'Must be at least 80 characters') - .required('Description is required'), -}); diff --git a/views/create-profile/create-profile.types.ts b/views/create-profile/create-profile.types.ts deleted file mode 100644 index dad9624..0000000 --- a/views/create-profile/create-profile.types.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface CreateProfileFormProps { - email: string; - imageUrl: string; - username: string; - firstName: string; - lastName: string; - password: string; - description: string; -} diff --git a/views/create-profile/index.tsx b/views/create-profile/index.tsx deleted file mode 100644 index 9837c0d..0000000 --- a/views/create-profile/index.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import { Div, H1, P } from '@stylin.js/elements'; -import { FC } from 'react'; -import { useFormContext } from 'react-hook-form'; - -import InputField from '@/components/input-field'; -import Layout from '@/components/layout'; -import UploadImage from '@/components/upload-image'; - -import { CreateProfileFormProps } from './create-profile.types'; -import CreateProfileButton from './create-profile-button'; - -const CreateProfile: FC = () => { - const { - register, - formState: { errors }, - } = useFormContext(); - - return ( - -
-
-

- Create profile -

-
-
-
-
-

- Basic Details -

- - - - - - - -
-
- -
-
-
- ); -}; - -export default CreateProfile; diff --git a/views/home/index.tsx b/views/home/index.tsx index 4c2683d..43e91bc 100644 --- a/views/home/index.tsx +++ b/views/home/index.tsx @@ -16,7 +16,7 @@ import { CARDS } from './card.data'; const Home: FC = () => { const { push } = useRouter(); - const handleCreateCoinButtonClick = () => push(Routes[RoutesEnum.CreateCoin]); + const handleCreateCoinButtonClick = () => push(Routes[RoutesEnum.Home]); return ( diff --git a/views/profile/edit-profile-modal/edit-profile-modal-button.tsx b/views/profile/edit-profile-modal/edit-profile-modal-button.tsx index 845c95a..fa0ecbb 100644 --- a/views/profile/edit-profile-modal/edit-profile-modal-button.tsx +++ b/views/profile/edit-profile-modal/edit-profile-modal-button.tsx @@ -7,7 +7,7 @@ import DialogCountdown from '@/components/dialog/dialog-countdown'; import { LoaderSVG } from '@/components/svg'; import { Routes, RoutesEnum } from '@/constants'; import { useDialog } from '@/hooks/use-dialog'; -import { CreateProfileFormProps } from '@/views/create-profile/create-profile.types'; +import { CreateProfileFormProps } from '@/interface'; const EditProfileModalButton: FC = () => { const { trigger } = useFormContext(); diff --git a/views/profile/edit-profile-modal/edit-profile-modal.types.ts b/views/profile/edit-profile-modal/edit-profile-modal.types.ts index d7b1d1c..c5f9739 100644 --- a/views/profile/edit-profile-modal/edit-profile-modal.types.ts +++ b/views/profile/edit-profile-modal/edit-profile-modal.types.ts @@ -1,4 +1,5 @@ export interface IEditProfileForm { + name: string; imageUrl: string; username: string; description: string; diff --git a/views/profile/edit-profile-modal/edit-profile.validations.ts b/views/profile/edit-profile-modal/edit-profile.validations.ts index a3f3f51..fbd4efd 100644 --- a/views/profile/edit-profile-modal/edit-profile.validations.ts +++ b/views/profile/edit-profile-modal/edit-profile.validations.ts @@ -1,6 +1,7 @@ import * as yup from 'yup'; export const editProfileValidationSchema = yup.object().shape({ + name: yup.string().required('Name is required'), username: yup.string().required('Username is required'), imageUrl: yup.string().required('Image is required'), description: yup.string().required('Description is required'), diff --git a/views/profile/edit-profile-modal/index.tsx b/views/profile/edit-profile-modal/index.tsx index 478c2fb..4e4d716 100644 --- a/views/profile/edit-profile-modal/index.tsx +++ b/views/profile/edit-profile-modal/index.tsx @@ -47,6 +47,13 @@ const EditProfileModal = () => { status={errors.imageUrl && 'error'} description={errors.imageUrl?.message} /> + { + const currentAccount = useCurrentAccount(); const clipBoardSuccessMessage = 'Address copied to the clipboard'; + const emailVerified = true; return (
{
- - Name + + name -
+
- Username + username -
- -
+ {emailVerified && ( +
+ +
+ )}
@@ -62,16 +75,21 @@ const UserInfo: FC = () => { px="0.5rem" py="0.25rem" display="flex" + width="8rem" color="#E4E7EB" gap="0.625rem" + cursor="pointer" fontSize="0.75rem" alignItems="center" - borderRadius="0.75rem" textAlign="center" + borderRadius="0.75rem" + justifyContent="center" transition="all 300ms ease-in-out" nHover={{ transform: 'scale(1.05)', color: '#F5B722' }} > - 0x2::sui::SUI + + {formatAddress(currentAccount?.address || '')} +
{ - const currentAccount = useCurrentAccount(); - const { push } = useRouter(); - - if (currentAccount) push('/'); - - return ( - -
-
-

- Sign in -

-

- Welcome back. Select method to log in -

-
-
- - -
-

- Don‘t have an account?{' '} - { - push(Routes[RoutesEnum.CreateProfile]); - }} - > - Create a Profile - -

-
-
-
-
- ); -}; - -export default SignIn; diff --git a/views/sign-in/sign-in-button.tsx b/views/sign-in/sign-in-button.tsx deleted file mode 100644 index 1a0219c..0000000 --- a/views/sign-in/sign-in-button.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import { Button, Div } from '@stylin.js/elements'; -import { FC } from 'react'; -import { useFormContext } from 'react-hook-form'; - -import DialogCountdown from '@/components/dialog/dialog-countdown'; -import { LoaderSVG } from '@/components/svg'; -import { useConnectModal } from '@/components/wallet-button/wallet-button.hook'; -import { useDialog } from '@/hooks/use-dialog'; - -import { SignInFormProps } from './sign-in.types'; - -const SignInButton: FC = () => { - const { setValue, trigger } = useFormContext(); - const { dialog, handleClose } = useDialog(); - const handleOpenConnectModal = useConnectModal(); - - const handleCreateProfile = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - const isSuccess = Math.random() > 0.5; - if (isSuccess) { - setValue('success', true); - resolve('success'); - return; - } - reject('Error'); - }, 1000); - }); - }; - - const handleSignIn = async () => { - let fieldsToValidate: (keyof SignInFormProps)[] = []; - - fieldsToValidate = ['username', 'password']; - const isValid = await trigger(fieldsToValidate); - - if (isValid) { - await dialog.promise(handleCreateProfile(), { - success: () => ({ - title: 'Sign-in successful', - button: ( - - ), - ghostButton: ( - - ), - message: 'Now connect your wallet do see all the function', - }), - loading: () => ({ - Icon: , - title: 'Signing...', - message: 'Please wait...', - }), - error: (e) => ({ - title: 'Oops! You can not sign in!', - button: { label: 'Try again', onClick: handleClose }, - message: ( - e.message || - 'Make sure you fill every field correctly and try again.' - ).replace('Invariant failed: ', ''), - ghostButton: { - label: 'Do not want to try again!', - onClick: handleClose, - }, - }), - }); - } - if (!isValid) return; - }; - - return ( -
- -
- ); -}; - -export default SignInButton; diff --git a/views/sign-in/sign-in-form.tsx b/views/sign-in/sign-in-form.tsx deleted file mode 100644 index 46933f0..0000000 --- a/views/sign-in/sign-in-form.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { Button, Div, Hr, P, Span } from '@stylin.js/elements'; -import { FC } from 'react'; -import { useFormContext } from 'react-hook-form'; - -import InputField from '@/components/input-field'; -import { XSVG } from '@/components/svg'; - -import { SignInFormProps } from './sign-in.types'; - -const SignInForm: FC = () => { - const { - register, - formState: { errors }, - } = useFormContext(); - return ( -
-
- -
-
-

Or

-
-
-
- - -
-
-
- ); -}; - -export default SignInForm; diff --git a/views/sign-in/sign-in-validations.ts b/views/sign-in/sign-in-validations.ts deleted file mode 100644 index 1084c28..0000000 --- a/views/sign-in/sign-in-validations.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as yup from 'yup'; - -export const SignInValidationSchema = yup.object({ - username: yup.string().required('Username is required'), - password: yup - .string() - .required('Password is required') - .min(8, 'Must be at least 8 characters') - .matches(/[A-Z]/, 'Must contain an uppercase letter') - .matches(/[0-9]/, 'Must contain a number'), -}); diff --git a/views/sign-in/sign-in.types.ts b/views/sign-in/sign-in.types.ts deleted file mode 100644 index 644a574..0000000 --- a/views/sign-in/sign-in.types.ts +++ /dev/null @@ -1,27 +0,0 @@ -export interface CreateProfileProps { - avatar: string; - userName: string; - description: string; -} - -export interface SignInProps { - username: string; - password: string; -} - -export enum SignInStepEnum { - CreateProfileProps, - SignInProps, -} - -export interface SignInHeaderProps { - title: string; - description?: string; - step: SignInStepEnum; -} - -export interface SignInFormProps { - username: string; - password: string; - success?: boolean; -}